UNPKG

@mikezimm/npmfunctions

Version:
85 lines 3.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.groupArrayItemsByField = void 0; var sorting_1 = require("./sorting"); /** * * @param items * @param keys * @param keyDelim * @param groupFilterKey * @param groupItemOrderKey * @param sort * @param convertNullToEmpty - Added for potential multi-lingual issues * @param localLanguage */ function groupArrayItemsByField(items, keys, keyDelim, groupFilterKey, groupItemOrderKey, sort, convertNullToEmpty, localLanguage) { if (convertNullToEmpty === void 0) { convertNullToEmpty = false; } if (localLanguage === void 0) { localLanguage = 'en'; } var summary = { keys: [], items: [], groups: [], filteredGroups: [], filteredKeys: [], }; items.map(function (itemX) { var item = itemX; //Added to remove typescript error var thisKey = keys.map(function (key) { return item[key]; }).join(keyDelim); var thisKey2 = item[keys[0]]; thisKey2 += keyDelim + item[keys[1]]; var keyIndex = summary.keys.indexOf(thisKey); if (keyIndex < 0) { summary.keys.push(thisKey); keyIndex = summary.keys.length - 1; var thisKeyBasic = thisKey.split('~'); var localTime = new Date(thisKeyBasic[0].replace(' ', '').trim()); localTime = localTime.toLocaleString(); summary.groups.push({ key: thisKey, items: [], groupFilter: null, localTime: localTime }); //Set the groupFilter which is intended to be an easy way to filter this group... //For instance, the All items are pre-filtered by the site the item pertains to. //The groupFilter could be the list in that site which the items in the group have in common var filterKeys = groupFilterKey.split('.'); if (filterKeys.length === 1) { summary.groups[keyIndex].groupFilter = item[groupFilterKey]; } else { summary.groups[keyIndex].groupFilter = item[filterKeys[0]][filterKeys[1]]; } } summary.groups[keyIndex].items.push(item); }); if (groupItemOrderKey !== null && groupItemOrderKey !== undefined && groupItemOrderKey !== '') { summary.groups.map(function (group) { var okToSort = true; group.items.map(function (itemX) { var item = itemX; //Added to remove typescript error if (item[groupItemOrderKey] === null) { okToSort = false; } else if (item[groupItemOrderKey] === undefined) { okToSort = false; } }); if (okToSort === true) { var newItems = []; if (localLanguage !== '') { newItems = (0, sorting_1.sortObjectArrayByStringKeyCollator)(group.items, sort, groupItemOrderKey, convertNullToEmpty, localLanguage); } else { newItems = (0, sorting_1.sortObjectArrayByStringKey)(group.items, sort, groupItemOrderKey); } group.items = newItems; } else { console.log('Unable to sort this group of items... one of the keyValues was not valid.', group); } }); } summary.filteredGroups = summary.groups; summary.filteredKeys = summary.keys; // console.log( 'History summary: ', summary ); return summary; } exports.groupArrayItemsByField = groupArrayItemsByField; //# sourceMappingURL=grouping.js.map