The ValueConverter extension above allows you to use a grouping filter with properties of nested objects (for example, groupBy: 'team.id')
export class GroupByValueConverter { toView(array, groupBy) { var groups = {}; var props = groupBy.split("."); array.forEach(function (o) { var group = o; props.forEach(function (p) { group = group[p] }); groups[group] = groups[group] || []; groups[group].push(o); }); return Object.keys(groups).map(function (group) { return { group: group, values: groups[group], }; }) } }
Another extension that allows you to specify as an object group. A second parameter is required to specify the key of the object to be used as the indexer.
eg. - | GroupBy: 'team': 'ID' - | group: 'projectMember.team': 'identifier'
export class GroupByValueConverter { toView(array, groupBy, groupByKey) { var groups = {}; var groupMembers = {}; var props = groupBy.split("."); array.forEach(function (o) { var group = o; props.forEach(function (p) { group = group[p] }); var index = groupByKey && group ? group[groupByKey] : group; groups[index] = group; groupMembers[index] = groupMembers[index] || []; groupMembers[index].push(o); }); return Object.keys(groups).map(function (index) { return { group: groups[index], values: groupMembers[index], }; }) } }
source share