JSFiddle - React, Tailwind, and code Playground

by arackaf

HTML

<script src="http://adamrackis.com/linq.js"></script>

JavaScript

var groups = [ {id: 1, name: 'Report Group 1'}, {id: 2, name: 'Report Group 2'}, {id: 3, name: 'Report Group 3'} ];
var reports = [ { id: 1, groupId: 1, name: 'Report 1'}, { id: 2, groupId: 1, name: 'Report 2'}, { id: 3, groupId: 1, name: 'Report 3'},
                { id: 4, groupId: 1, name: 'Report 4'}, { id: 5, groupId: 1, name: 'Report 5'},
                { id: 6, groupId: 2, name: 'Report 6'}, { id: 7, groupId: 2, name: 'Report 6'},
                { id: 8, groupId: 3, name: 'Report 6'} ];
var permissions = [
    { id: 1, reportId: 1, label: 'adam'}, { id: 2, reportId: 1, label: 'bob'},
    { id: 3, reportId: 1, label: 'jim'}, { id: 4, reportId: 2, label: 'mark'},
    { id: 5, reportId: 2, label: 'jason'}];


var mappedGroups = getMappedReportsAndGroups(reports, groups, permissions);
console.log(mappedGroups);

function getMappedReportsAndGroups(reports, groups, permissions){
    groups = Enumerable.From(groups);
    reports = Enumerable.From(reports);
    permissions = Enumerable.From(permissions);

    groups.ForEach(function(g) { g.reports = reports.Where(function(r) { return r.groupId == g.id; }).ToArray(); });
    reports.ForEach(function(r) { r.permissions = permissions.Where(function(p) { return p.reportId == r.id; }).ToArray(); });
    
    return groups.ToArray();
}