@one-paragon/angular-utilities 0.3.6 → 0.3.7-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/http-request-state/directives/http-success-state-directive.mjs +1 -1
- package/esm2022/rxjs/rxjs-operators.mjs +7 -6
- package/esm2022/table-builder/classes/TableState.mjs +2 -3
- package/esm2022/table-builder/classes/filter-info.mjs +1 -1
- package/esm2022/table-builder/classes/table-builder.mjs +7 -3
- package/esm2022/table-builder/classes/table-store.mjs +40 -21
- package/esm2022/table-builder/components/array-column.component.mjs +18 -9
- package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +3 -3
- package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +53 -51
- package/esm2022/table-builder/components/generic-table/paginator.component.mjs +1 -1
- package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +1 -1
- package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +3 -3
- package/esm2022/table-builder/components/table-container/table-container-imports.mjs +2 -2
- package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +2 -0
- package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +62 -0
- package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +54 -0
- package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +36 -0
- package/esm2022/table-builder/components/table-container/table-container.mjs +79 -114
- package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +2 -2
- package/esm2022/table-builder/directives/multi-sort.directive.mjs +12 -17
- package/esm2022/table-builder/directives/table-wrapper.directive.mjs +4 -11
- package/esm2022/table-builder/directives/tb-filter.directive.mjs +2 -2
- package/esm2022/table-builder/functions/sort-data-function.mjs +14 -2
- package/esm2022/table-builder/interfaces/report-def.mjs +1 -1
- package/esm2022/table-builder/pipes/column-total.pipe.mjs +2 -2
- package/esm2022/table-builder/services/transform-creator.mjs +7 -4
- package/esm2022/utilities/array-helpers.mjs +14 -0
- package/fesm2022/one-paragon-angular-utilities.mjs +531 -401
- package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
- package/http-request-state/directives/http-success-state-directive.d.ts +4 -4
- package/package.json +5 -5
- package/rxjs/rxjs-operators.d.ts +3 -2
- package/table-builder/classes/TableState.d.ts +5 -2
- package/table-builder/classes/filter-info.d.ts +1 -1
- package/table-builder/classes/table-store.d.ts +16 -6
- package/table-builder/components/array-column.component.d.ts +4 -4
- package/table-builder/components/generic-table/generic-table.component.d.ts +12 -14
- package/table-builder/components/generic-table/paginator.component.d.ts +2 -2
- package/table-builder/components/table-container/table-container-imports.d.ts +2 -2
- package/table-builder/components/table-container/table-container.d.ts +10 -11
- package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +5 -0
- package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +15 -0
- package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +15 -0
- package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +9 -0
- package/table-builder/directives/multi-sort.directive.d.ts +1 -1
- package/table-builder/directives/table-wrapper.directive.d.ts +1 -4
- package/table-builder/functions/sort-data-function.d.ts +3 -0
- package/table-builder/interfaces/report-def.d.ts +0 -5
- package/table-builder/services/transform-creator.d.ts +1 -1
- package/utilities/array-helpers.d.ts +1 -0
- package/esm2022/table-builder/classes/GenericTableDataSource.mjs +0 -11
- package/esm2022/table-builder/classes/data-filter.mjs +0 -26
- package/table-builder/classes/GenericTableDataSource.d.ts +0 -5
- package/table-builder/classes/data-filter.d.ts +0 -9
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { combineLatest, map, timestamp } from "rxjs";
|
|
2
|
+
import { createFilterFunc } from "../../../classes/filter-info";
|
|
3
|
+
import { difference, intersection } from "lodash";
|
|
4
|
+
export const updateFilterState = (previousState, [filterInfoDict, predicateArr], index) => {
|
|
5
|
+
const currentFilterState = {
|
|
6
|
+
predicateArr: predicateArr.value,
|
|
7
|
+
filterInfoDict: filterInfoDict.value,
|
|
8
|
+
allFilters: [...predicateArr.value, ...Object.values(filterInfoDict.value).map(createFilterFunc)],
|
|
9
|
+
onlyAddedFilters: undefined
|
|
10
|
+
};
|
|
11
|
+
if (index === 0) {
|
|
12
|
+
return currentFilterState;
|
|
13
|
+
}
|
|
14
|
+
if (filterInfoDict.timestamp > predicateArr.timestamp) {
|
|
15
|
+
currentFilterState.onlyAddedFilters = filterInfoOnlyAdded(previousState.filterInfoDict, filterInfoDict.value);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
currentFilterState.onlyAddedFilters = predicatesOnlyAdded(previousState.predicateArr, predicateArr.value);
|
|
19
|
+
}
|
|
20
|
+
return currentFilterState;
|
|
21
|
+
};
|
|
22
|
+
export const predicateAndFilterInfos = (filterInfos, predicates) => {
|
|
23
|
+
return combineLatest([filterInfos.pipe(map(filterNonActiveFilters), timestamp()),
|
|
24
|
+
predicates.pipe(timestamp())]);
|
|
25
|
+
};
|
|
26
|
+
const filterNonActiveFilters = (filtersDict) => Object.entries(filtersDict).reduce((obj, [key, value]) => {
|
|
27
|
+
if (value.active !== false) {
|
|
28
|
+
obj[key] = value;
|
|
29
|
+
}
|
|
30
|
+
;
|
|
31
|
+
return obj;
|
|
32
|
+
}, {});
|
|
33
|
+
//The idea of this is that if filters were only added, and none were removed or changed, then we only need to tag more rows to not be shown. We don't need to remove any 'dont show' tags.
|
|
34
|
+
// So if filters were only added this method will return the added filters, if filters were removed or changed this method will return undefined.
|
|
35
|
+
function filterInfoOnlyAdded(previousFilterInfos, currentFilterInfos) {
|
|
36
|
+
const previousKeys = Object.keys(previousFilterInfos);
|
|
37
|
+
const currentKeys = Object.keys(currentFilterInfos);
|
|
38
|
+
const keysInBoth = intersection(previousKeys, currentKeys);
|
|
39
|
+
const someRemoved = previousKeys.length > keysInBoth.length;
|
|
40
|
+
if (someRemoved) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
if (filtersUpdated(previousFilterInfos, currentFilterInfos)) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const addedFilters = difference(currentKeys, keysInBoth).map(key => createFilterFunc(currentFilterInfos[key]));
|
|
47
|
+
return addedFilters;
|
|
48
|
+
}
|
|
49
|
+
function predicatesOnlyAdded(previousPredicates, currentPredicates) {
|
|
50
|
+
const predicateFiltersRemoved = difference(previousPredicates, currentPredicates).length;
|
|
51
|
+
if (predicateFiltersRemoved) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return difference(currentPredicates, previousPredicates);
|
|
55
|
+
}
|
|
56
|
+
function filtersUpdated(previousFilterInfos, currentFilterInfos) {
|
|
57
|
+
return !Object.entries(previousFilterInfos).every(([key, val]) => {
|
|
58
|
+
return currentFilterInfos[key].filterType === val.filterType && currentFilterInfos[key].filterValue === val.filterValue;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export const initialFilterState = { allFilters: [], onlyAddedFilters: undefined, predicateArr: [], filterInfoDict: {} };
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXN0YXRlLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL3RhYmxlLWNvbnRhaW5lci90YWJsZS1jb250YWluZXIuaGVscGVycy9maWx0ZXItc3RhdGUuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXlCLGFBQWEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVFLE9BQU8sRUFBNEIsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcxRixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFJLGFBQThCLEVBQUUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUEwRCxFQUFFLEtBQWEsRUFBRSxFQUFFO0lBQzdLLE1BQU0sa0JBQWtCLEdBQW9CO1FBQzFDLFlBQVksRUFBRSxZQUFZLENBQUMsS0FBSztRQUNoQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEtBQUs7UUFDcEMsVUFBVSxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakcsZ0JBQWdCLEVBQUUsU0FBUztLQUM1QixDQUFDO0lBRUYsSUFBRyxLQUFLLEtBQUssQ0FBQyxFQUFDO1FBQ2IsT0FBTyxrQkFBa0IsQ0FBQztLQUMzQjtJQUNELElBQUcsY0FBYyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFDO1FBQ25ELGtCQUFrQixDQUFDLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxjQUFj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QUFTRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FDN0IsRUFBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFRpbWVzdGFtcCwgY29tYmluZUxhdGVzdCwgbWFwLCB0aW1lc3RhbXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GaWx0ZXIsIEZpbHRlckluZm8sIGNyZWF0ZUZpbHRlckZ1bmMgfSBmcm9tIFwiLi4vLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mb1wiO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeVwiO1xyXG5pbXBvcnQgeyBQcmVkaWNhdGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gfSBmcm9tIFwibG9kYXNoXCI7XHJcblxyXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyU3RhdGUgPSA8VD4ocHJldmlvdXNTdGF0ZTogRmlsdGVyc1N0YXRlPFQ+LCBbZmlsdGVySW5mb0RpY3QsIHByZWRpY2F0ZUFycl0gOiBbVGltZXN0YW1wPEZpbHRlckluZm9EaWN0PiwgVGltZXN0YW1wPFByZWRpY2F0ZTxUPltdPl0sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICBjb25zdCBjdXJyZW50RmlsdGVyU3RhdGU6IEZpbHRlcnNTdGF0ZTxUPiA9IHtcclxuICAgIHByZWRpY2F0ZUFycjogcHJlZGljYXRlQXJyLnZhbHVlLFxyXG4gICAgZmlsdGVySW5mb0RpY3Q6IGZpbHRlckluZm9EaWN0LnZhbHVlLFxyXG4gICAgYWxsRmlsdGVyczogWy4uLnByZWRpY2F0ZUFyci52YWx1ZSwgLi4uT2JqZWN0LnZhbHVlcyhmaWx0ZXJJbmZvRGljdC52YWx1ZSkubWFwKGNyZWF0ZUZpbHRlckZ1bmMpXSxcclxuICAgIG9ubHlBZGRlZEZpbHRlcnM6IHVuZGVmaW5lZFxyXG4gIH07XHJcblxyXG4gIGlmKGluZGV4ID09PSAwKXtcclxuICAgIHJldHVybiBjdXJyZW50RmlsdGVyU3RhdGU7XHJcbiAgfVxyXG4gIGlmKGZpbHRlckluZm9EaWN0LnRpbWVzdGFtcCA+IHByZWRpY2F0ZUFyci50aW1lc3RhbXApe1xyXG4gICAgY3VycmVudEZpbHRlclN0YXRlLm9ubHlBZGRlZEZpbHRlcnMgPSBmaWx0ZXJJbmZvT25seUFkZGVkKHByZXZpb3VzU3RhdGUuZmlsdGVySW5mb0RpY3QsIGZpbHRlckluZm9EaWN0LnZhbHVlKTtcclxuICB9XHJcbiAgZWxzZXtcclxuICAgIGN1cnJlbnRGaWx0ZXJTdGF0ZS5vbmx5QWRkZWRGaWx0ZXJzID0gcHJlZGljYXRlc09ubHlBZGRlZChwcmV2aW91c1N0YXRlLnByZWRpY2F0ZUFyciwgcHJlZGljYXRlQXJyLnZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIGN1cnJlbnRGaWx0ZXJTdGF0ZTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwcmVkaWNhdGVBbmRGaWx0ZXJJbmZvcyA9IDxUPihmaWx0ZXJJbmZvcyA6IE9ic2VydmFibGU8RmlsdGVySW5mb0RpY3Q+LCBwcmVkaWNhdGVzOiBPYnNlcnZhYmxlPCBQcmVkaWNhdGU8VD5bXT4pID0+IHtcclxuICByZXR1cm4gY29tYmluZUxhdGVzdChbZmlsdGVySW5mb3MucGlwZShcclxuICAgIG1hcChmaWx0ZXJOb25BY3RpdmVGaWx0ZXJzKSxcclxuICAgIHRpbWVzdGFtcCgpXHJcbiAgKSxcclxuICBwcmVkaWNhdGVzLnBpcGUodGltZXN0YW1wKCkpXSlcclxufVxyXG5cclxuY29uc3QgZmlsdGVyTm9uQWN0aXZlRmlsdGVycyA9IDxUPihmaWx0ZXJzRGljdCA6IEZpbHRlckluZm9EaWN0KSA9PiBPYmplY3QuZW50cmllcyhmaWx0ZXJzRGljdCkucmVkdWNlKChvYmogLFtrZXksIHZhbHVlXSkgPT4geyBcclxuICBpZih2YWx1ZS5hY3RpdmUgIT09IGZhbHNlKXtcclxuICAgIG9ialtrZXldID0gdmFsdWVcclxuICB9O1xyXG4gIHJldHVybiBvYmo7XHJcbn0sIHt9IGFzIERpY3Rpb25hcnk8RmlsdGVySW5mbyB8IEN1c3RvbUZpbHRlcj4pO1xyXG5cclxuLy9UaGUgaWRlYSBvZiB0aGlzIGlzIHRoYXQgaWYgZmlsdGVycyB3ZXJlIG9ubHkgYWRkZWQsIGFuZCBub25lIHdlcmUgcmVtb3ZlZCBvciBjaGFuZ2VkLCB0aGVuIHdlIG9ubHkgbmVlZCB0byB0YWcgbW9yZSByb3dzIHRvIG5vdCBiZSBzaG93bi4gV2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgYW55ICdkb250IHNob3cnIHRhZ3MuXHJcbi8vIFNvIGlmIGZpbHRlcnMgd2VyZSBvbmx5IGFkZGVkIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBhZGRlZCBmaWx0ZXJzLCBpZiBmaWx0ZXJzIHdlcmUgcmVtb3ZlZCBvciBjaGFuZ2VkIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cclxuZnVuY3Rpb24gZmlsdGVySW5mb09ubHlBZGRlZChwcmV2aW91c0ZpbHRlckluZm9zOiBGaWx0ZXJJbmZvRGljdCwgY3VycmVudEZpbHRlckluZm9zOiBGaWx0ZXJJbmZvRGljdCk6IFByZWRpY2F0ZTxhbnk+W10gfCB1bmRlZmluZWR7XHJcbiAgY29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNGaWx0ZXJJbmZvcyk7XHJcbiAgY29uc3QgY3VycmVudEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50RmlsdGVySW5mb3MpO1xyXG4gIGNvbnN0IGtleXNJbkJvdGggPSBpbnRlcnNlY3Rpb24ocHJldmlvdXNLZXlzLCBjdXJyZW50S2V5cyk7XHJcbiAgY29uc3Qgc29tZVJlbW92ZWQgPSBwcmV2aW91c0tleXMubGVuZ3RoID4ga2V5c0luQm90aC5sZW5ndGg7XHJcbiAgaWYoc29tZVJlbW92ZWQpe1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgaWYoZmlsdGVyc1VwZGF0ZWQocHJldmlvdXNGaWx0ZXJJbmZvcywgY3VycmVudEZpbHRlckluZm9zKSl7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBjb25zdCBhZGRlZEZpbHRlcnMgPSBkaWZmZXJlbmNlKGN1cnJlbnRLZXlzLCBrZXlzSW5Cb3RoKS5tYXAoa2V5ID0+IGNyZWF0ZUZpbHRlckZ1bmMoY3VycmVudEZpbHRlckluZm9zW2tleV0pKTtcclxuICByZXR1cm4gYWRkZWRGaWx0ZXJzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVkaWNhdGVzT25seUFkZGVkKHByZXZpb3VzUHJlZGljYXRlczogUHJlZGljYXRlPGFueT5bXSwgY3VycmVudFByZWRpY2F0ZXM6IFByZWRpY2F0ZTxhbnk+W10pe1xyXG4gIGNvbnN0IHByZWRpY2F0ZUZpbHRlcnNSZW1vdmVkID0gZGlmZmVyZW5jZShwcmV2aW91c1ByZWRpY2F0ZXMsIGN1cnJlbnRQcmVkaWNhdGVzKS5sZW5ndGg7XHJcbiAgaWYocHJlZGljYXRlRmlsdGVyc1JlbW92ZWQpe1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgcmV0dXJuIGRpZmZlcmVuY2UoY3VycmVudFByZWRpY2F0ZXMsIHByZXZpb3VzUHJlZGljYXRlcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbHRlcnNVcGRhdGVkKHByZXZpb3VzRmlsdGVySW5mb3M6IEZpbHRlckluZm9EaWN0LCBjdXJyZW50RmlsdGVySW5mb3M6IEZpbHRlckluZm9EaWN0KXtcclxuICByZXR1cm4gIU9iamVjdC5lbnRyaWVzKHByZXZpb3VzRmlsdGVySW5mb3MpLmV2ZXJ5KChba2V5LCB2YWxdKSA9PiB7XHJcbiAgICByZXR1cm4gY3VycmVudEZpbHRlckluZm9zW2tleV0uZmlsdGVyVHlwZSA9PT0gdmFsLmZpbHRlclR5cGUgJiYgY3VycmVudEZpbHRlckluZm9zW2tleV0uZmlsdGVyVmFsdWUgPT09IHZhbC5maWx0ZXJWYWx1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmludGVyZmFjZSBGaWx0ZXJzU3RhdGU8VD4ge1xyXG4gIGFsbEZpbHRlcnM6IFByZWRpY2F0ZTxUPltdLCBcclxuICBwcmVkaWNhdGVBcnI6IFByZWRpY2F0ZTxUPltdLFxyXG4gIGZpbHRlckluZm9EaWN0OiBEaWN0aW9uYXJ5PEZpbHRlckluZm8gfCBDdXN0b21GaWx0ZXI+XHJcbiAgb25seUFkZGVkRmlsdGVycz86IFByZWRpY2F0ZTxUPltdIHwgdW5kZWZpbmVkLFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdGlhbEZpbHRlclN0YXRlOiBGaWx0ZXJzU3RhdGU8YW55PiA9XHJcbiAge2FsbEZpbHRlcnM6IFtdLCBvbmx5QWRkZWRGaWx0ZXJzOiB1bmRlZmluZWQsIHByZWRpY2F0ZUFycjogW10sIGZpbHRlckluZm9EaWN0OiB7fX07XHJcblxyXG50eXBlIEZpbHRlckluZm9EaWN0ID0gRGljdGlvbmFyeTxGaWx0ZXJJbmZvPGFueT4gfCBDdXN0b21GaWx0ZXI8YW55Pj47Il19
|
package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { groupBy } from "lodash";
|
|
2
|
+
function getGroupedData(data, groupByKeys) {
|
|
3
|
+
return tbGroupBy(data, groupByKeys);
|
|
4
|
+
}
|
|
5
|
+
const tbGroupBy = (data, groupByKeys, parentGroupName) => {
|
|
6
|
+
const currentKey = groupByKeys[0];
|
|
7
|
+
const res = groupBy(data, currentKey);
|
|
8
|
+
const remainingGroupByKeys = groupByKeys.slice(1);
|
|
9
|
+
const finalGroups = !remainingGroupByKeys.length;
|
|
10
|
+
if (remainingGroupByKeys.length) {
|
|
11
|
+
Object.keys(res).forEach(key => res[key] = tbGroupBy(res[key], remainingGroupByKeys, key));
|
|
12
|
+
}
|
|
13
|
+
return Object.keys(res).map((groupName, i) => {
|
|
14
|
+
const uniqName = parentGroupName ? `${parentGroupName}-${groupName}` : `${groupName}`;
|
|
15
|
+
const groupHeaders = res[groupName]?.filter(row => row.isGroupHeader) ?? [];
|
|
16
|
+
return ({
|
|
17
|
+
isGroupHeader: true,
|
|
18
|
+
groupHeaderDisplay: groupName,
|
|
19
|
+
hasTheData: finalGroups,
|
|
20
|
+
children: finalGroups ? res[groupName] : res[groupName].map(d => { d.padding += 20; return d; }),
|
|
21
|
+
groupName: `tb_group_${uniqName}`,
|
|
22
|
+
padding: 1,
|
|
23
|
+
key: currentKey,
|
|
24
|
+
length: groupHeaders.reduce((acc, curr) => curr.length + acc, 0) + ((res[groupName] ?? []).length - groupHeaders.length),
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
export function updateGroupByState({ groupedData }, [data, groups, expandedGroups], index) {
|
|
29
|
+
if (index === 0
|
|
30
|
+
|| dataUpdated(data, groups, expandedGroups)
|
|
31
|
+
|| groupsUpdated(groups, expandedGroups)) {
|
|
32
|
+
groupedData = groups.value.length ? getGroupedData(data.value, groups.value) : data.value;
|
|
33
|
+
}
|
|
34
|
+
const newDisplayData = expandedGroups.value.length === 0
|
|
35
|
+
? groupedData
|
|
36
|
+
: groupedData.map(group => mapGroupHeader(group, expandedGroups.value)).flat();
|
|
37
|
+
return ({ displayData: newDisplayData, groupedData });
|
|
38
|
+
}
|
|
39
|
+
function mapGroupHeader(obj, data) {
|
|
40
|
+
const showChildren = data.find(a => a.expandedHeaders.includes(obj.groupName));
|
|
41
|
+
const children = !showChildren ? [] :
|
|
42
|
+
obj.hasTheData ? obj.children
|
|
43
|
+
: obj.children.map(a => mapGroupHeader(a, data));
|
|
44
|
+
return [obj, ...children].flat();
|
|
45
|
+
}
|
|
46
|
+
function dataUpdated(data, groups, expandedGroups) {
|
|
47
|
+
return data.timestamp > groups.timestamp && data.timestamp > expandedGroups.timestamp;
|
|
48
|
+
}
|
|
49
|
+
function groupsUpdated(groups, expandedGroups) {
|
|
50
|
+
return groups.timestamp > expandedGroups.timestamp;
|
|
51
|
+
}
|
|
52
|
+
;
|
|
53
|
+
export const initialGroupByState = { displayData: [], groupedData: [] };
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBCeS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZ3JvdXBCeS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFJakMsU0FBUyxjQUFjLENBQUMsSUFBVyxFQUFFLFdBQXFCO0lBQ3hELE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsTUFBUSxTQUFTLEdBQUcsQ0FBQyxJQUFXLEVBQUUsV0FBcUIsRUFBRSxlQUFxQixFQUFTLEVBQUU7SUFDdkYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdEMsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO0lBQ2pELElBQUksb0JBQW9CLENBQUMsTUFBTSxFQUFFO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtLQUMzRjtJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFT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LENBQUMsQ0FBQyxDQUFBO0lBRXhFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsSUFBc0IsRUFBRSxNQUEyQixFQUFFLGNBQXdDO0lBQ2hILE9BQU8sSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztBQUN4RixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBMkIsRUFBRSxjQUF3QztJQUMxRixPQUFPLE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztBQUNyRCxDQUFDO0FBRStELENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdyb3VwQnkgfSBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IFRpbWVzdGFtcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdyb3VwZWREYXRhIH0gZnJvbSBcIi4uLy4uLy4uL2NsYXNzZXMvVGFibGVTdGF0ZVwiO1xyXG5cclxuZnVuY3Rpb24gZ2V0R3JvdXBlZERhdGEoZGF0YTogYW55W10sIGdyb3VwQnlLZXlzOiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICByZXR1cm4gdGJHcm91cEJ5KGRhdGEsIGdyb3VwQnlLZXlzKTtcclxufVxyXG5cclxuY29uc3QgICB0Ykdyb3VwQnkgPSAoZGF0YTogYW55W10sIGdyb3VwQnlLZXlzOiBzdHJpbmdbXSwgcGFyZW50R3JvdXBOYW1lPzogYW55KTogYW55W10gPT4ge1xyXG4gIGNvbnN0IGN1cnJlbnRLZXkgPSBncm91cEJ5S2V5c1swXTtcclxuICBjb25zdCByZXMgPSBncm91cEJ5KGRhdGEsIGN1cnJlbnRLZXkpO1xyXG4gIGNvbnN0IHJlbWFpbmluZ0dyb3VwQnlLZXlzID0gZ3JvdXBCeUtleXMuc2xpY2UoMSk7XHJcbiAgY29uc3QgZmluYWxHcm91cHMgPSAhcmVtYWluaW5nR3JvdXBCeUtleXMubGVuZ3RoO1xyXG4gIGlmIChyZW1haW5pbmdHcm91cEJ5S2V5cy5sZW5ndGgpIHtcclxuICAgIE9iamVjdC5rZXlzKHJlcykuZm9yRWFjaChrZXkgPT4gcmVzW2tleV0gPSB0Ykdyb3VwQnkocmVzW2tleV0sIHJlbWFpbmluZ0dyb3VwQnlLZXlzLCBrZXkpKVxyXG4gIH1cclxuICByZXR1cm4gT2JqZWN0LmtleXMocmVzKS5tYXAoKGdyb3VwTmFtZSwgaSkgPT4ge1xyXG4gICAgY29uc3QgdW5pcU5hbWUgPSBwYXJlbnRHcm91cE5hbWUgPyBgJHtwYXJlbnRHcm91cE5hbWV9LSR7Z3JvdXBOYW1lfWAgOiBgJHtncm91cE5hbWV9YDtcclxuICAgIGNvbnN0IGdyb3VwSGVhZGVycyA9IHJlc1tncm91cE5hbWVdPy5maWx0ZXIocm93ID0+IHJvdy5pc0dyb3VwSGVhZGVyKSA/PyBbXTtcclxuICAgIHJldHVybiAoe1xyXG4gICAgICAgIGlzR3JvdXBIZWFkZXI6IHRydWUsXHJcbiAgICAgICAgZ3JvdXBIZWFkZXJEaXNwbGF5OiBncm91cE5hbWUsXHJcbiAgICAgICAgaGFzVGhlRGF0YTogZmluYWxHcm91cHMsXHJcbiAgICAgICAgY2hpbGRyZW46IGZpbmFsR3JvdXBzID8gcmVzW2dyb3VwTmFtZV0gOiByZXNbZ3JvdXBOYW1lXS5tYXAoZCA9PiB7ZC5wYWRkaW5nICs9IDIwOyByZXR1cm4gZH0pLFxyXG4gICAgICAgIGdyb3VwTmFtZTogYHRiX2dyb3VwXyR7dW5pcU5hbWV9YCxcclxuICAgICAgICBwYWRkaW5nOiAxLFxyXG4gICAgICAgIGtleTogY3VycmVudEtleSxcclxuICAgICAgICBsZW5ndGggOiBncm91cEhlYWRlcnMucmVkdWNlKChhY2MsIGN1cnIpID0+IGN1cnIubGVuZ3RoICsgYWNjLDApICsgKChyZXNbZ3JvdXBOYW1lXSA/PyBbXSkubGVuZ3RoIC0gZ3JvdXBIZWFkZXJzLmxlbmd0aCksXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUdyb3VwQnlTdGF0ZSh7IGdyb3VwZWREYXRhIH06R3JvdXBCeVN0YXRlLCBbZGF0YSwgZ3JvdXBzLCBleHBhbmRlZEdyb3Vwc10gOiBbVGltZXN0YW1wPGFueVtdPiwgVGltZXN0YW1wPHN0cmluZ1tdPiwgVGltZXN0YW1wPEdyb3VwZWREYXRhW10+XSwgaW5kZXg6IG51bWJlcil7XHJcbiAgaWYoXHJcbiAgICBpbmRleCA9PT0gMFxyXG4gICAgfHwgZGF0YVVwZGF0ZWQoZGF0YSwgZ3JvdXBzLCBleHBhbmRlZEdyb3VwcylcclxuICAgIHx8IGdyb3Vwc1VwZGF0ZWQoZ3JvdXBzLCBleHBhbmRlZEdyb3VwcylcclxuICApe1xyXG4gICAgZ3JvdXBlZERhdGEgPSBncm91cHMudmFsdWUubGVuZ3RoID8gZ2V0R3JvdXBlZERhdGEoZGF0YS52YWx1ZSwgZ3JvdXBzLnZhbHVlKSA6IGRhdGEudmFsdWU7XHJcbiAgfVxyXG4gIGNvbnN0IG5ld0Rpc3BsYXlEYXRhID0gZXhwYW5kZWRHcm91cHMudmFsdWUubGVuZ3RoID09PSAwXHJcbiAgICA/IGdyb3VwZWREYXRhXHJcbiAgICA6IGdyb3VwZWREYXRhLm1hcChncm91cCA9PiBtYXBHcm91cEhlYWRlcihncm91cCwgZXhwYW5kZWRHcm91cHMudmFsdWUpKS5mbGF0KCk7XHJcbiAgcmV0dXJuICh7ZGlzcGxheURhdGE6IG5ld0Rpc3BsYXlEYXRhLCBncm91cGVkRGF0YX0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBHcm91cEhlYWRlcihvYmo6IGFueSwgZGF0YTogR3JvdXBlZERhdGFbXSl7XHJcbiAgY29uc3Qgc2hvd0NoaWxkcmVuID0gZGF0YS5maW5kKGEgPT4gYS5leHBhbmRlZEhlYWRlcnMuaW5jbHVkZXMob2JqLmdyb3VwTmFtZSkpO1xyXG4gIGNvbnN0IGNoaWxkcmVuID0gIXNob3dDaGlsZHJlbiA/IFtdIDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5oYXNUaGVEYXRhID8gIG9iai5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogb2JqLmNoaWxkcmVuLm1hcChhID0+IG1hcEdyb3VwSGVhZGVyKGEsIGRhdGEpKVxyXG5cclxuICByZXR1cm4gW29iaiwgLi4uY2hpbGRyZW5dLmZsYXQoKVxyXG59XHJcblxyXG5mdW5jdGlvbiBkYXRhVXBkYXRlZChkYXRhOiBUaW1lc3RhbXA8YW55W10+LCBncm91cHM6IFRpbWVzdGFtcDxzdHJpbmdbXT4sIGV4cGFuZGVkR3JvdXBzOiBUaW1lc3RhbXA8R3JvdXBlZERhdGFbXT4pe1xyXG4gIHJldHVybiBkYXRhLnRpbWVzdGFtcCA+IGdyb3Vwcy50aW1lc3RhbXAgJiYgZGF0YS50aW1lc3RhbXAgPiBleHBhbmRlZEdyb3Vwcy50aW1lc3RhbXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdyb3Vwc1VwZGF0ZWQoZ3JvdXBzOiBUaW1lc3RhbXA8c3RyaW5nW10+LCBleHBhbmRlZEdyb3VwczogVGltZXN0YW1wPEdyb3VwZWREYXRhW10+KXtcclxuICByZXR1cm4gZ3JvdXBzLnRpbWVzdGFtcCA+IGV4cGFuZGVkR3JvdXBzLnRpbWVzdGFtcDtcclxufVxyXG5cclxuaW50ZXJmYWNlIEdyb3VwQnlTdGF0ZSB7IGRpc3BsYXlEYXRhOiBhbnlbXSwgZ3JvdXBlZERhdGE6IGFueVtdfTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0aWFsR3JvdXBCeVN0YXRlID0geyBkaXNwbGF5RGF0YTogW10sIGdyb3VwZWREYXRhOiBbXX0iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { difference } from "lodash";
|
|
2
|
+
// If we are only sorting due to a change in the Sorts[] we can 'optimize'. If the sort array was first by column a asc then by column b desc then by column c asc,
|
|
3
|
+
// and now it is first by column d asc then by column a desc then by column b desc then by column c asc, we dont need to rerun the tail, i.e. for culumn b and c.
|
|
4
|
+
// So we need to calculate the matching tail of the sort array. Then sortsToRun will be the non-matching head.
|
|
5
|
+
// But if any sorts were removed the only way to 'unsort' is to start by the original data and run all the existing sorts again, so 'sorts to run' will be all
|
|
6
|
+
// the sorts.
|
|
7
|
+
// We always pass allSorts to the container because if the table data changes all the sorts will need to be run.
|
|
8
|
+
export function updateSortState(previousSorts, currentSorts) {
|
|
9
|
+
currentSorts = addInitSort(currentSorts);
|
|
10
|
+
if (sortsRemoved(previousSorts.allSorts, currentSorts)) {
|
|
11
|
+
return ({ sortsToRun: currentSorts, allSorts: currentSorts });
|
|
12
|
+
}
|
|
13
|
+
const sameTailLength = getSameTailLength(previousSorts.allSorts, currentSorts);
|
|
14
|
+
const sortsToRun = currentSorts.slice(0, currentSorts.length - sameTailLength);
|
|
15
|
+
return ({ sortsToRun, allSorts: currentSorts });
|
|
16
|
+
}
|
|
17
|
+
function addInitSort(sorts) {
|
|
18
|
+
return [...sorts, { active: initIndexSymbol, direction: 'asc' }];
|
|
19
|
+
}
|
|
20
|
+
function sortsRemoved(previousSorts, currentSorts) {
|
|
21
|
+
const previousSortedColumns = previousSorts.map(s => s.active);
|
|
22
|
+
const currentSortedColumns = currentSorts.map(s => s.active);
|
|
23
|
+
const sortsRemoved = !!difference(previousSortedColumns, currentSortedColumns).length;
|
|
24
|
+
return sortsRemoved;
|
|
25
|
+
}
|
|
26
|
+
function getSameTailLength(previousSorts, currentSorts) {
|
|
27
|
+
previousSorts = [...previousSorts].reverse();
|
|
28
|
+
currentSorts = [...currentSorts].reverse();
|
|
29
|
+
let indexOfChange = currentSorts.findIndex((s, i) => s.active !== previousSorts[i]?.active || s.direction !== previousSorts[i]?.direction);
|
|
30
|
+
if (indexOfChange === -1)
|
|
31
|
+
return indexOfChange = currentSorts.length;
|
|
32
|
+
return indexOfChange;
|
|
33
|
+
}
|
|
34
|
+
export const initIndexSymbol = Symbol('tb_init_index');
|
|
35
|
+
export const initialSortState = { sortsToRun: [], allSorts: [] };
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1zdGF0ZS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEMsbUtBQW1LO0FBQ25LLGlLQUFpSztBQUNqSyw4R0FBOEc7QUFDOUcsOEpBQThKO0FBQzlKLGFBQWE7QUFDYixnSEFBZ0g7QUFDaEgsTUFBTSxVQUFVLGVBQWUsQ0FBQyxhQUF3QixFQUFFLFlBQW9CO0lBQzVFLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsSUFBRyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBQztRQUNwRCxPQUFPLENBQUMsRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMvRSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9FLE9BQU8sQ0FBQyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBSUQsU0FBUyxXQUFXLENBQUMsS0FBYTtJQUNoQyxPQUFPLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsZUFBb0MsRUFBRSxTQUFTLEVBQUUsS0FBc0IsRUFBQyxDQUFDLENBQUM7QUFDdkcsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLGFBQXFCLEVBQUUsWUFBb0I7SUFDL0QsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3RGLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFHRCxTQUFTLGlCQUFpQixDQUFDLGFBQXFCLEVBQUUsWUFBb0I7SUFDcEUsYUFBYSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QyxZQUFZLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNDLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0ksSUFBRyxhQUFhLEtBQUssQ0FBQyxDQUFDO1FBQUUsT0FBTyxhQUFhLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNwRSxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBYyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ydCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zb3J0XCI7XHJcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmXCI7XHJcbmltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tIFwibG9kYXNoXCI7XHJcblxyXG4vLyBJZiB3ZSBhcmUgb25seSBzb3J0aW5nIGR1ZSB0byBhIGNoYW5nZSBpbiB0aGUgU29ydHNbXSB3ZSBjYW4gJ29wdGltaXplJy4gSWYgdGhlIHNvcnQgYXJyYXkgd2FzIGZpcnN0IGJ5IGNvbHVtbiBhIGFzYyB0aGVuIGJ5IGNvbHVtbiBiIGRlc2MgdGhlbiBieSBjb2x1bW4gYyBhc2MsXHJcbi8vIGFuZCBub3cgaXQgaXMgZmlyc3QgYnkgY29sdW1uIGQgYXNjIHRoZW4gYnkgY29sdW1uIGEgZGVzYyB0aGVuIGJ5IGNvbHVtbiBiIGRlc2MgdGhlbiBieSBjb2x1bW4gYyBhc2MsIHdlIGRvbnQgbmVlZCB0byByZXJ1biB0aGUgdGFpbCwgaS5lLiBmb3IgY3VsdW1uIGIgYW5kIGMuXHJcbi8vIFNvIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBtYXRjaGluZyB0YWlsIG9mIHRoZSBzb3J0IGFycmF5LiBUaGVuIHNvcnRzVG9SdW4gd2lsbCBiZSB0aGUgbm9uLW1hdGNoaW5nIGhlYWQuXHJcbi8vIEJ1dCBpZiBhbnkgc29ydHMgd2VyZSByZW1vdmVkIHRoZSBvbmx5IHdheSB0byAndW5zb3J0JyBpcyB0byBzdGFydCBieSB0aGUgb3JpZ2luYWwgZGF0YSBhbmQgcnVuIGFsbCB0aGUgZXhpc3Rpbmcgc29ydHMgYWdhaW4sIHNvICdzb3J0cyB0byBydW4nIHdpbGwgYmUgYWxsXHJcbi8vIHRoZSBzb3J0cy5cclxuLy8gV2UgYWx3YXlzIHBhc3MgYWxsU29ydHMgdG8gdGhlIGNvbnRhaW5lciBiZWNhdXNlIGlmIHRoZSB0YWJsZSBkYXRhIGNoYW5nZXMgYWxsIHRoZSBzb3J0cyB3aWxsIG5lZWQgdG8gYmUgcnVuLlxyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU29ydFN0YXRlKHByZXZpb3VzU29ydHM6IFNvcnRTdGF0ZSwgY3VycmVudFNvcnRzOiBTb3J0W10pOiBTb3J0U3RhdGV7XHJcbiAgY3VycmVudFNvcnRzID0gYWRkSW5pdFNvcnQoY3VycmVudFNvcnRzKTtcclxuICBpZihzb3J0c1JlbW92ZWQocHJldmlvdXNTb3J0cy5hbGxTb3J0cywgY3VycmVudFNvcnRzKSl7XHJcbiAgICByZXR1cm4gKHtzb3J0c1RvUnVuOiBjdXJyZW50U29ydHMsIGFsbFNvcnRzOiBjdXJyZW50U29ydHN9KTtcclxuICB9XHJcbiAgY29uc3Qgc2FtZVRhaWxMZW5ndGggPSBnZXRTYW1lVGFpbExlbmd0aChwcmV2aW91c1NvcnRzLmFsbFNvcnRzLCBjdXJyZW50U29ydHMpO1xyXG4gIGNvbnN0IHNvcnRzVG9SdW4gPSBjdXJyZW50U29ydHMuc2xpY2UoMCwgY3VycmVudFNvcnRzLmxlbmd0aCAtIHNhbWVUYWlsTGVuZ3RoKTtcclxuICByZXR1cm4gKHtzb3J0c1RvUnVuLCBhbGxTb3J0czogY3VycmVudFNvcnRzfSk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBTb3J0U3RhdGUgeyBzb3J0c1RvUnVuOiBTb3J0W10sIGFsbFNvcnRzOiBTb3J0W119XHJcblxyXG5mdW5jdGlvbiBhZGRJbml0U29ydChzb3J0czogU29ydFtdKXtcclxuICByZXR1cm4gWy4uLnNvcnRzLCB7YWN0aXZlOiBpbml0SW5kZXhTeW1ib2wgYXMgdW5rbm93biBhcyBzdHJpbmcsIGRpcmVjdGlvbjogJ2FzYycgYXMgU29ydERpcmVjdGlvbn1dO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzb3J0c1JlbW92ZWQocHJldmlvdXNTb3J0czogU29ydFtdLCBjdXJyZW50U29ydHM6IFNvcnRbXSk6IGJvb2xlYW57XHJcbiAgY29uc3QgcHJldmlvdXNTb3J0ZWRDb2x1bW5zID0gcHJldmlvdXNTb3J0cy5tYXAocyA9PiBzLmFjdGl2ZSk7XHJcbiAgY29uc3QgY3VycmVudFNvcnRlZENvbHVtbnMgPSBjdXJyZW50U29ydHMubWFwKHMgPT4gcy5hY3RpdmUpO1xyXG4gIGNvbnN0IHNvcnRzUmVtb3ZlZCA9ICEhZGlmZmVyZW5jZShwcmV2aW91c1NvcnRlZENvbHVtbnMsIGN1cnJlbnRTb3J0ZWRDb2x1bW5zKS5sZW5ndGg7XHJcbiAgcmV0dXJuIHNvcnRzUmVtb3ZlZDtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGdldFNhbWVUYWlsTGVuZ3RoKHByZXZpb3VzU29ydHM6IFNvcnRbXSwgY3VycmVudFNvcnRzOiBTb3J0W10pe1xyXG4gIHByZXZpb3VzU29ydHMgPSBbLi4ucHJldmlvdXNTb3J0c10ucmV2ZXJzZSgpO1xyXG4gIGN1cnJlbnRTb3J0cyA9IFsuLi5jdXJyZW50U29ydHNdLnJldmVyc2UoKTtcclxuICBsZXQgaW5kZXhPZkNoYW5nZSA9IGN1cnJlbnRTb3J0cy5maW5kSW5kZXgoKHMsIGkpID0+IHMuYWN0aXZlICE9PSBwcmV2aW91c1NvcnRzW2ldPy5hY3RpdmUgfHwgcy5kaXJlY3Rpb24gIT09IHByZXZpb3VzU29ydHNbaV0/LmRpcmVjdGlvbik7XHJcbiAgaWYoaW5kZXhPZkNoYW5nZSA9PT0gLTEpIHJldHVybiBpbmRleE9mQ2hhbmdlID0gY3VycmVudFNvcnRzLmxlbmd0aDtcclxuICByZXR1cm4gaW5kZXhPZkNoYW5nZTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGluaXRJbmRleFN5bWJvbCA9IFN5bWJvbCgndGJfaW5pdF9pbmRleCcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluaXRpYWxTb3J0U3RhdGU6IFNvcnRTdGF0ZSA9IHsgc29ydHNUb1J1bjogW10sIGFsbFNvcnRzOiBbXX07Il19
|