@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.
Files changed (54) hide show
  1. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +1 -1
  2. package/esm2022/rxjs/rxjs-operators.mjs +7 -6
  3. package/esm2022/table-builder/classes/TableState.mjs +2 -3
  4. package/esm2022/table-builder/classes/filter-info.mjs +1 -1
  5. package/esm2022/table-builder/classes/table-builder.mjs +7 -3
  6. package/esm2022/table-builder/classes/table-store.mjs +40 -21
  7. package/esm2022/table-builder/components/array-column.component.mjs +18 -9
  8. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +3 -3
  9. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +53 -51
  10. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +1 -1
  11. package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +1 -1
  12. package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +3 -3
  13. package/esm2022/table-builder/components/table-container/table-container-imports.mjs +2 -2
  14. package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +2 -0
  15. package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +62 -0
  16. package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +54 -0
  17. package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +36 -0
  18. package/esm2022/table-builder/components/table-container/table-container.mjs +79 -114
  19. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +2 -2
  20. package/esm2022/table-builder/directives/multi-sort.directive.mjs +12 -17
  21. package/esm2022/table-builder/directives/table-wrapper.directive.mjs +4 -11
  22. package/esm2022/table-builder/directives/tb-filter.directive.mjs +2 -2
  23. package/esm2022/table-builder/functions/sort-data-function.mjs +14 -2
  24. package/esm2022/table-builder/interfaces/report-def.mjs +1 -1
  25. package/esm2022/table-builder/pipes/column-total.pipe.mjs +2 -2
  26. package/esm2022/table-builder/services/transform-creator.mjs +7 -4
  27. package/esm2022/utilities/array-helpers.mjs +14 -0
  28. package/fesm2022/one-paragon-angular-utilities.mjs +531 -401
  29. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
  30. package/http-request-state/directives/http-success-state-directive.d.ts +4 -4
  31. package/package.json +5 -5
  32. package/rxjs/rxjs-operators.d.ts +3 -2
  33. package/table-builder/classes/TableState.d.ts +5 -2
  34. package/table-builder/classes/filter-info.d.ts +1 -1
  35. package/table-builder/classes/table-store.d.ts +16 -6
  36. package/table-builder/components/array-column.component.d.ts +4 -4
  37. package/table-builder/components/generic-table/generic-table.component.d.ts +12 -14
  38. package/table-builder/components/generic-table/paginator.component.d.ts +2 -2
  39. package/table-builder/components/table-container/table-container-imports.d.ts +2 -2
  40. package/table-builder/components/table-container/table-container.d.ts +10 -11
  41. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +5 -0
  42. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +15 -0
  43. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +15 -0
  44. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +9 -0
  45. package/table-builder/directives/multi-sort.directive.d.ts +1 -1
  46. package/table-builder/directives/table-wrapper.directive.d.ts +1 -4
  47. package/table-builder/functions/sort-data-function.d.ts +3 -0
  48. package/table-builder/interfaces/report-def.d.ts +0 -5
  49. package/table-builder/services/transform-creator.d.ts +1 -1
  50. package/utilities/array-helpers.d.ts +1 -0
  51. package/esm2022/table-builder/classes/GenericTableDataSource.mjs +0 -11
  52. package/esm2022/table-builder/classes/data-filter.mjs +0 -26
  53. package/table-builder/classes/GenericTableDataSource.d.ts +0 -5
  54. 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
@@ -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