@mikezimm/npmfunctions
Version:
Functions used in my SPFx webparts
85 lines • 3.72 kB
JavaScript
;
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