@rivet-health/design-system 40.27.2 → 40.28.0

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 (23) hide show
  1. package/esm2020/lib/table/simple-table/simple-table.component.mjs +3 -2
  2. package/esm2020/lib/table/table/state-helpers/column-helpers.mjs +255 -0
  3. package/esm2020/lib/table/table/state-helpers/display-helpers.mjs +48 -0
  4. package/esm2020/lib/table/table/state-helpers/order-helpers.mjs +143 -0
  5. package/esm2020/lib/table/table/state-helpers/pagination-helpers.mjs +174 -0
  6. package/esm2020/lib/table/table/state-helpers/result-helpers.mjs +77 -0
  7. package/esm2020/lib/table/table/state-helpers/search-helpers.mjs +28 -0
  8. package/esm2020/lib/table/table/state-helpers/selection-helpers.mjs +180 -0
  9. package/esm2020/lib/table/table/state.mjs +73 -631
  10. package/esm2020/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +4 -4
  11. package/fesm2015/rivet-health-design-system.mjs +821 -513
  12. package/fesm2015/rivet-health-design-system.mjs.map +1 -1
  13. package/fesm2020/rivet-health-design-system.mjs +962 -633
  14. package/fesm2020/rivet-health-design-system.mjs.map +1 -1
  15. package/lib/table/table/state-helpers/column-helpers.d.ts +14 -0
  16. package/lib/table/table/state-helpers/display-helpers.d.ts +5 -0
  17. package/lib/table/table/state-helpers/order-helpers.d.ts +12 -0
  18. package/lib/table/table/state-helpers/pagination-helpers.d.ts +13 -0
  19. package/lib/table/table/state-helpers/result-helpers.d.ts +11 -0
  20. package/lib/table/table/state-helpers/search-helpers.d.ts +5 -0
  21. package/lib/table/table/state-helpers/selection-helpers.d.ts +13 -0
  22. package/lib/table/table/state.d.ts +48 -1
  23. package/package.json +1 -1
@@ -0,0 +1,174 @@
1
+ import { range } from 'lodash';
2
+ import { RivTable } from '../state';
3
+ import { TableResultHelpers } from './result-helpers';
4
+ export var TablePaginationHelpers;
5
+ (function (TablePaginationHelpers) {
6
+ function getPageCount(state) {
7
+ if (TableResultHelpers.isGroupResult(state.result)) {
8
+ return Math.max(Math.ceil(state.result.totalGroupCount / state.query.grouping.groupsPerPage), 1);
9
+ }
10
+ return Math.max(Math.ceil(state.result.totalMatchingRowCount / state.query.pagination.pageSize), 1);
11
+ }
12
+ TablePaginationHelpers.getPageCount = getPageCount;
13
+ function getPreviousPage(state) {
14
+ return state.query.pagination.page === 0
15
+ ? null
16
+ : state.query.pagination.page - 1;
17
+ }
18
+ TablePaginationHelpers.getPreviousPage = getPreviousPage;
19
+ function getPages(state) {
20
+ const padding = 4;
21
+ const min = 0;
22
+ const max = getPageCount(state) - 1;
23
+ const desiredStart = state.query.pagination.page - padding;
24
+ const clampedStart = Math.max(min, desiredStart);
25
+ const desiredEnd = state.query.pagination.page + padding;
26
+ const clampedEnd = Math.min(max, desiredEnd);
27
+ const start = Math.max(min, clampedStart - (desiredEnd - clampedEnd));
28
+ const end = Math.min(max, clampedEnd + (clampedStart - desiredStart));
29
+ return range(start, end + 1);
30
+ }
31
+ TablePaginationHelpers.getPages = getPages;
32
+ function getNextPage(state) {
33
+ const max = getPageCount(state) - 1;
34
+ const next = state.query.pagination.page + 1;
35
+ return next <= max ? next : null;
36
+ }
37
+ TablePaginationHelpers.getNextPage = getNextPage;
38
+ // We don't want to show the pagination controls when they are unnecessary.
39
+ function getShowPaginationControls(state) {
40
+ if (state.query.pagination.page > 0) {
41
+ return true;
42
+ }
43
+ if (TableResultHelpers.isGroupResult(state.result)) {
44
+ return state.result.totalGroupCount > state.query.grouping.groupsPerPage;
45
+ }
46
+ return (state.result.totalMatchingRowCount > Math.min(...[...RivTable.pageSizes]));
47
+ }
48
+ TablePaginationHelpers.getShowPaginationControls = getShowPaginationControls;
49
+ function getPageRowStart(state) {
50
+ return state.query.pagination.page * state.query.pagination.pageSize + 1;
51
+ }
52
+ TablePaginationHelpers.getPageRowStart = getPageRowStart;
53
+ function getPageRowEnd(state) {
54
+ return Math.min((state.query.pagination.page + 1) * state.query.pagination.pageSize, state.result.totalMatchingRowCount);
55
+ }
56
+ TablePaginationHelpers.getPageRowEnd = getPageRowEnd;
57
+ function isPageOutOfBounds(state, result) {
58
+ if (TableResultHelpers.isGroupResult(result)) {
59
+ const minGroupValToShowOnCurrentPage = state.query.pagination.page * state.query.grouping.groupsPerPage + 1;
60
+ if (result.totalGroupCount < minGroupValToShowOnCurrentPage) {
61
+ return true;
62
+ }
63
+ }
64
+ else {
65
+ const minRowToShowOnCurrentPage = state.query.pagination.page * state.query.pagination.pageSize + 1;
66
+ if (result.totalMatchingRowCount < minRowToShowOnCurrentPage) {
67
+ return true;
68
+ }
69
+ }
70
+ return false;
71
+ }
72
+ TablePaginationHelpers.isPageOutOfBounds = isPageOutOfBounds;
73
+ // Paginate based on bottom level rows, splitting as necessary to fit within the page
74
+ function paginateNestedRows(allNestedRows, pageNumber, pageSize) {
75
+ const startIdx = pageSize * pageNumber;
76
+ const endIdx = startIdx + pageSize;
77
+ let bottomLevelRowCount = 0;
78
+ function recursivePaginateRows(currentNestedRow) {
79
+ // If there are no subrows, stop recursing
80
+ if (!currentNestedRow.subRows) {
81
+ bottomLevelRowCount++;
82
+ // Since we add 1 first, the bounds should be (startIdx, endIdx]
83
+ if (bottomLevelRowCount > startIdx && bottomLevelRowCount <= endIdx) {
84
+ return currentNestedRow;
85
+ }
86
+ return null;
87
+ }
88
+ else {
89
+ const subRowsToKeep = [];
90
+ for (const subRow of currentNestedRow.subRows) {
91
+ const countedRow = recursivePaginateRows(subRow);
92
+ if (countedRow != null) {
93
+ subRowsToKeep.push(countedRow);
94
+ }
95
+ }
96
+ if (subRowsToKeep.length == 0) {
97
+ return null;
98
+ }
99
+ else {
100
+ // Keep any top level row that has at least one subrow
101
+ return {
102
+ ...currentNestedRow,
103
+ subRows: subRowsToKeep,
104
+ };
105
+ }
106
+ }
107
+ }
108
+ const paginatedRows = [];
109
+ for (const nestedRow of allNestedRows) {
110
+ const recursedRow = recursivePaginateRows(nestedRow);
111
+ if (recursedRow != null) {
112
+ paginatedRows.push(recursedRow);
113
+ }
114
+ }
115
+ return paginatedRows;
116
+ }
117
+ TablePaginationHelpers.paginateNestedRows = paginateNestedRows;
118
+ // Paginate based on bottom level rows, splitting as necessary to fit within the page
119
+ function paginateNestedHeaderRows(allHeaders, pageNumber, pageSize) {
120
+ const startIdx = pageSize * pageNumber;
121
+ const endIdx = startIdx + pageSize;
122
+ let bottomLevelRowCount = 0;
123
+ function recursivePaginateRows(currentNestedRow) {
124
+ // If there are no subrows, stop recursing
125
+ if (!currentNestedRow.subRows) {
126
+ bottomLevelRowCount++;
127
+ // Since we add 1 first, the bounds should be (startIdx, endIdx]
128
+ if (bottomLevelRowCount > startIdx && bottomLevelRowCount <= endIdx) {
129
+ return currentNestedRow;
130
+ }
131
+ return null;
132
+ }
133
+ else {
134
+ const subRowsToKeep = [];
135
+ for (const subRow of currentNestedRow.subRows) {
136
+ const countedRow = recursivePaginateRows(subRow);
137
+ if (countedRow != null) {
138
+ subRowsToKeep.push(countedRow);
139
+ }
140
+ }
141
+ if (subRowsToKeep.length == 0) {
142
+ return null;
143
+ }
144
+ else {
145
+ // Keep any top level row that has at least one subrow
146
+ return {
147
+ ...currentNestedRow,
148
+ subRows: subRowsToKeep,
149
+ };
150
+ }
151
+ }
152
+ }
153
+ const paginatedHeaders = [];
154
+ for (const headerRow of allHeaders) {
155
+ const paginatedSubRows = [];
156
+ for (const subRow of headerRow.subRows) {
157
+ const recursedSubRow = recursivePaginateRows(subRow);
158
+ if (recursedSubRow != null) {
159
+ paginatedSubRows.push(recursedSubRow);
160
+ }
161
+ }
162
+ if (paginatedSubRows.length > 0) {
163
+ // Keep any header that has at least one subrow in the current page
164
+ paginatedHeaders.push({
165
+ ...headerRow,
166
+ subRows: paginatedSubRows,
167
+ });
168
+ }
169
+ }
170
+ return paginatedHeaders;
171
+ }
172
+ TablePaginationHelpers.paginateNestedHeaderRows = paginateNestedHeaderRows;
173
+ })(TablePaginationHelpers || (TablePaginationHelpers = {}));
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvc3RhdGUtaGVscGVycy9wYWdpbmF0aW9uLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE1BQU0sS0FBVyxzQkFBc0IsQ0E2UHRDO0FBN1BELFdBQWlCLHNCQUFzQjtJQUNyQyxTQUFnQixZQUFZLENBSzFCLEtBQXFDO1FBQ3JDLElBQUksa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQ2IsSUFBSSxDQUFDLElBQUksQ0FDUCxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQ2xFLEVBQ0QsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDYixJQUFJLENBQUMsSUFBSSxDQUNQLEtBQUssQ0FBQyxNQUFNLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUNyRSxFQUNELENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQXBCZSxtQ0FBWSxlQW9CM0IsQ0FBQTtJQUVELFNBQWdCLGVBQWUsQ0FLN0IsS0FBcUM7UUFDckMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUN0QyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxLQUFLLENB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QzFCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDdkM7YUFDRjtZQUVELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDL0IsbUVBQW1FO2dCQUNuRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7b0JBQ3BCLEdBQUcsU0FBUztvQkFDWixPQUFPLEVBQUUsZ0JBQWdCO2lCQUMxQixDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBbkVlLCtDQUF3QiwyQkFtRXZDLENBQUE7QUFDSCxDQUFDLEVBN1BnQixzQkFBc0IsS0FBdEIsc0JBQXNCLFFBNlB0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgVGFibGVSZXN1bHRIZWxwZXJzIH0gZnJvbSAnLi9yZXN1bHQtaGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVQYWdpbmF0aW9uSGVscGVycyB7XG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlQ291bnQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgc3RhdGUucmVzdWx0LnRvdGFsR3JvdXBDb3VudCAvIHN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICksXG4gICAgICAgIDEsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICBNYXRoLmNlaWwoXG4gICAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgLyBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2U8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9PT0gMFxuICAgICAgPyBudWxsXG4gICAgICA6IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIDE7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UGFnZXM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHBhZGRpbmcgPSA0O1xuICAgIGNvbnN0IG1pbiA9IDA7XG4gICAgY29uc3QgbWF4ID0gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDE7XG4gICAgY29uc3QgZGVzaXJlZFN0YXJ0ID0gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlIC0gcGFkZGluZztcbiAgICBjb25zdCBjbGFtcGVkU3RhcnQgPSBNYXRoLm1heChtaW4sIGRlc2lyZWRTdGFydCk7XG4gICAgY29uc3QgZGVzaXJlZEVuZCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIHBhZGRpbmc7XG4gICAgY29uc3QgY2xhbXBlZEVuZCA9IE1hdGgubWluKG1heCwgZGVzaXJlZEVuZCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heChtaW4sIGNsYW1wZWRTdGFydCAtIChkZXNpcmVkRW5kIC0gY2xhbXBlZEVuZCkpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKG1heCwgY2xhbXBlZEVuZCArIChjbGFtcGVkU3RhcnQgLSBkZXNpcmVkU3RhcnQpKTtcbiAgICByZXR1cm4gcmFuZ2Uoc3RhcnQsIGVuZCArIDEpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRQYWdlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IG1heCA9IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxO1xuICAgIGNvbnN0IG5leHQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyAxO1xuICAgIHJldHVybiBuZXh0IDw9IG1heCA/IG5leHQgOiBudWxsO1xuICB9XG5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaG93IHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzIHdoZW4gdGhleSBhcmUgdW5uZWNlc3NhcnkuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IGJvb2xlYW4ge1xuICAgIGlmIChzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KHN0YXRlLnJlc3VsdCkpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50ID4gc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiBNYXRoLm1pbiguLi5bLi4uUml2VGFibGUucGFnZVNpemVzXSlcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VSb3dTdGFydDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIge1xuICAgIHJldHVybiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplICsgMTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlUm93RW5kPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgKHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIDEpICogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BhZ2VPdXRPZkJvdW5kczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgcmVzdWx0OiBSaXZUYWJsZS5SZXN1bHQ8Uj4gfCBSaXZUYWJsZS5Hcm91cFJlc3VsdDxSLCBHPixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGNvbnN0IG1pbkdyb3VwVmFsVG9TaG93T25DdXJyZW50UGFnZSA9XG4gICAgICAgIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAqIHN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLmdyb3Vwc1BlclBhZ2UgKyAxO1xuICAgICAgaWYgKHJlc3VsdC50b3RhbEdyb3VwQ291bnQgPCBtaW5Hcm91cFZhbFRvU2hvd09uQ3VycmVudFBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1pblJvd1RvU2hvd09uQ3VycmVudFBhZ2UgPVxuICAgICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplICsgMTtcbiAgICAgIGlmIChyZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IDwgbWluUm93VG9TaG93T25DdXJyZW50UGFnZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gUGFnaW5hdGUgYmFzZWQgb24gYm90dG9tIGxldmVsIHJvd3MsIHNwbGl0dGluZyBhcyBuZWNlc3NhcnkgdG8gZml0IHdpdGhpbiB0aGUgcGFnZVxuICBleHBvcnQgZnVuY3Rpb24gcGFnaW5hdGVOZXN0ZWRSb3dzPFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3c+KFxuICAgIGFsbE5lc3RlZFJvd3M6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPltdLFxuICAgIHBhZ2VOdW1iZXI6IG51bWJlcixcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICApOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSB7XG4gICAgY29uc3Qgc3RhcnRJZHg6IG51bWJlciA9IHBhZ2VTaXplICogcGFnZU51bWJlcjtcbiAgICBjb25zdCBlbmRJZHg6IG51bWJlciA9IHN0YXJ0SWR4ICsgcGFnZVNpemU7XG5cbiAgICBsZXQgYm90dG9tTGV2ZWxSb3dDb3VudDogbnVtYmVyID0gMDtcblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhZ2luYXRlUm93cyhcbiAgICAgIGN1cnJlbnROZXN0ZWRSb3c6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPixcbiAgICApOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj4gfCBudWxsIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBzdWJyb3dzLCBzdG9wIHJlY3Vyc2luZ1xuICAgICAgaWYgKCFjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MpIHtcbiAgICAgICAgYm90dG9tTGV2ZWxSb3dDb3VudCsrO1xuXG4gICAgICAgIC8vIFNpbmNlIHdlIGFkZCAxIGZpcnN0LCB0aGUgYm91bmRzIHNob3VsZCBiZSAoc3RhcnRJZHgsIGVuZElkeF1cbiAgICAgICAgaWYgKGJvdHRvbUxldmVsUm93Q291bnQgPiBzdGFydElkeCAmJiBib3R0b21MZXZlbFJvd0NvdW50IDw9IGVuZElkeCkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50TmVzdGVkUm93O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3ViUm93c1RvS2VlcDogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzdWJSb3cgb2YgY3VycmVudE5lc3RlZFJvdy5zdWJSb3dzKSB7XG4gICAgICAgICAgY29uc3QgY291bnRlZFJvdzogUml2VGFibGUuTmVzdGVkUm93PFI+IHwgbnVsbCA9XG4gICAgICAgICAgICByZWN1cnNpdmVQYWdpbmF0ZVJvd3Moc3ViUm93KTtcbiAgICAgICAgICBpZiAoY291bnRlZFJvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBzdWJSb3dzVG9LZWVwLnB1c2goY291bnRlZFJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlJvd3NUb0tlZXAubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBLZWVwIGFueSB0b3AgbGV2ZWwgcm93IHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBzdWJyb3dcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY3VycmVudE5lc3RlZFJvdyxcbiAgICAgICAgICAgIHN1YlJvd3M6IHN1YlJvd3NUb0tlZXAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2luYXRlZFJvd3M6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPltdID0gW107XG4gICAgZm9yIChjb25zdCBuZXN0ZWRSb3cgb2YgYWxsTmVzdGVkUm93cykge1xuICAgICAgY29uc3QgcmVjdXJzZWRSb3c6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPiB8IG51bGwgPVxuICAgICAgICByZWN1cnNpdmVQYWdpbmF0ZVJvd3MobmVzdGVkUm93KTtcbiAgICAgIGlmIChyZWN1cnNlZFJvdyAhPSBudWxsKSB7XG4gICAgICAgIHBhZ2luYXRlZFJvd3MucHVzaChyZWN1cnNlZFJvdyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2luYXRlZFJvd3M7XG4gIH1cblxuICAvLyBQYWdpbmF0ZSBiYXNlZCBvbiBib3R0b20gbGV2ZWwgcm93cywgc3BsaXR0aW5nIGFzIG5lY2Vzc2FyeSB0byBmaXQgd2l0aGluIHRoZSBwYWdlXG4gIGV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0ZU5lc3RlZEhlYWRlclJvd3M8UiBleHRlbmRzIFJpdlRhYmxlLlJvdz4oXG4gICAgYWxsSGVhZGVyczogUml2VGFibGUuTmVzdGVkSGVhZGVyUm93PFI+W10sXG4gICAgcGFnZU51bWJlcjogbnVtYmVyLFxuICAgIHBhZ2VTaXplOiBudW1iZXIsXG4gICk6IFJpdlRhYmxlLk5lc3RlZEhlYWRlclJvdzxSPltdIHtcbiAgICBjb25zdCBzdGFydElkeDogbnVtYmVyID0gcGFnZVNpemUgKiBwYWdlTnVtYmVyO1xuICAgIGNvbnN0IGVuZElkeDogbnVtYmVyID0gc3RhcnRJZHggKyBwYWdlU2l6ZTtcblxuICAgIGxldCBib3R0b21MZXZlbFJvd0NvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlUGFnaW5hdGVSb3dzKFxuICAgICAgY3VycmVudE5lc3RlZFJvdzogUml2VGFibGUuTmVzdGVkUm93PFI+LFxuICAgICk6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPiB8IG51bGwge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHN1YnJvd3MsIHN0b3AgcmVjdXJzaW5nXG4gICAgICBpZiAoIWN1cnJlbnROZXN0ZWRSb3cuc3ViUm93cykge1xuICAgICAgICBib3R0b21MZXZlbFJvd0NvdW50Kys7XG5cbiAgICAgICAgLy8gU2luY2Ugd2UgYWRkIDEgZmlyc3QsIHRoZSBib3VuZHMgc2hvdWxkIGJlIChzdGFydElkeCwgZW5kSWR4XVxuICAgICAgICBpZiAoYm90dG9tTGV2ZWxSb3dDb3VudCA+IHN0YXJ0SWR4ICYmIGJvdHRvbUxldmVsUm93Q291bnQgPD0gZW5kSWR4KSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnROZXN0ZWRSb3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdWJSb3dzVG9LZWVwOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHN1YlJvdyBvZiBjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MpIHtcbiAgICAgICAgICBjb25zdCBjb3VudGVkUm93OiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj4gfCBudWxsID1cbiAgICAgICAgICAgIHJlY3Vyc2l2ZVBhZ2luYXRlUm93cyhzdWJSb3cpO1xuICAgICAgICAgIGlmIChjb3VudGVkUm93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHN1YlJvd3NUb0tlZXAucHVzaChjb3VudGVkUm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViUm93c1RvS2VlcC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEtlZXAgYW55IHRvcCBsZXZlbCByb3cgdGhhdCBoYXMgYXQgbGVhc3Qgb25lIHN1YnJvd1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jdXJyZW50TmVzdGVkUm93LFxuICAgICAgICAgICAgc3ViUm93czogc3ViUm93c1RvS2VlcCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFnaW5hdGVkSGVhZGVyczogUml2VGFibGUuTmVzdGVkSGVhZGVyUm93PFI+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlclJvdyBvZiBhbGxIZWFkZXJzKSB7XG4gICAgICBjb25zdCBwYWdpbmF0ZWRTdWJSb3dzOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHN1YlJvdyBvZiBoZWFkZXJSb3cuc3ViUm93cykge1xuICAgICAgICBjb25zdCByZWN1cnNlZFN1YlJvdzogUml2VGFibGUuTmVzdGVkUm93PFI+IHwgbnVsbCA9XG4gICAgICAgICAgcmVjdXJzaXZlUGFnaW5hdGVSb3dzKHN1YlJvdyk7XG5cbiAgICAgICAgaWYgKHJlY3Vyc2VkU3ViUm93ICE9IG51bGwpIHtcbiAgICAgICAgICBwYWdpbmF0ZWRTdWJSb3dzLnB1c2gocmVjdXJzZWRTdWJSb3cpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYWdpbmF0ZWRTdWJSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gS2VlcCBhbnkgaGVhZGVyIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBzdWJyb3cgaW4gdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICBwYWdpbmF0ZWRIZWFkZXJzLnB1c2goe1xuICAgICAgICAgIC4uLmhlYWRlclJvdyxcbiAgICAgICAgICBzdWJSb3dzOiBwYWdpbmF0ZWRTdWJSb3dzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFnaW5hdGVkSGVhZGVycztcbiAgfVxufVxuIl19
@@ -0,0 +1,77 @@
1
+ export var TableResultHelpers;
2
+ (function (TableResultHelpers) {
3
+ function isRegularResult(result) {
4
+ if ('currentPageData' in result) {
5
+ return true;
6
+ }
7
+ return false;
8
+ }
9
+ TableResultHelpers.isRegularResult = isRegularResult;
10
+ function isGroupResult(result) {
11
+ if ('totalGroupCount' in result) {
12
+ return true;
13
+ }
14
+ return false;
15
+ }
16
+ TableResultHelpers.isGroupResult = isGroupResult;
17
+ function isNestedResult(result) {
18
+ if ('currentPageNestedRows' in result) {
19
+ return true;
20
+ }
21
+ return false;
22
+ }
23
+ TableResultHelpers.isNestedResult = isNestedResult;
24
+ function isNestedWithHeaderResult(result) {
25
+ if ('currentPageNestedHeaders' in result) {
26
+ return true;
27
+ }
28
+ return false;
29
+ }
30
+ TableResultHelpers.isNestedWithHeaderResult = isNestedWithHeaderResult;
31
+ function getAllRowsFromResult(result) {
32
+ if (isGroupResult(result)) {
33
+ return result.groupResults.flatMap(groups => groups.currentPageData);
34
+ }
35
+ else if (isNestedResult(result)) {
36
+ return getAllRowsFromNestedRows(result.currentPageNestedRows);
37
+ }
38
+ else if (isNestedWithHeaderResult(result)) {
39
+ return getAllRowsFromNestedHeaders(result.currentPageNestedHeaders);
40
+ }
41
+ else {
42
+ return result.currentPageData;
43
+ }
44
+ }
45
+ TableResultHelpers.getAllRowsFromResult = getAllRowsFromResult;
46
+ function getAllRowsFromNestedRows(nestedRows) {
47
+ const allRows = [];
48
+ function recursiveGetNestedRows(currentNestedRow) {
49
+ allRows.push(currentNestedRow.data);
50
+ const subRows = currentNestedRow.subRows ?? [];
51
+ for (const subRow of subRows) {
52
+ recursiveGetNestedRows(subRow);
53
+ }
54
+ }
55
+ for (const nestedRow of nestedRows) {
56
+ recursiveGetNestedRows(nestedRow);
57
+ }
58
+ return allRows;
59
+ }
60
+ TableResultHelpers.getAllRowsFromNestedRows = getAllRowsFromNestedRows;
61
+ function getAllRowsFromNestedHeaders(nestedHeaders) {
62
+ const allRows = [];
63
+ for (const outerNestedHeaderRow of nestedHeaders) {
64
+ const rowsInHeader = getAllRowsFromNestedRows(outerNestedHeaderRow.subRows);
65
+ for (const rowInHeader of rowsInHeader) {
66
+ allRows.push(rowInHeader);
67
+ }
68
+ }
69
+ return allRows;
70
+ }
71
+ TableResultHelpers.getAllRowsFromNestedHeaders = getAllRowsFromNestedHeaders;
72
+ function getCsvFilename(pluralEntityName, options) {
73
+ return ((options?.csvFileBasename?.slice(0, 200) ?? pluralEntityName) + '.csv');
74
+ }
75
+ TableResultHelpers.getCsvFilename = getCsvFilename;
76
+ })(TableResultHelpers || (TableResultHelpers = {}));
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL3Jlc3VsdC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sS0FBVyxrQkFBa0IsQ0EwSWxDO0FBMUlELFdBQWlCLGtCQUFrQjtJQUNqQyxTQUFnQixlQUFlLENBSTdCLE1BSXNDO1FBRXRDLElBQUksaUJBQWlCLElBQUksTUFBTSxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFkZSxrQ0FBZSxrQkFjOUIsQ0FBQTtJQUVELFNBQWdCLGFBQWEsQ0FJM0IsTUFJc0M7UUFFdEMsSUFBSSxpQkFBaUIsSUFBSSxNQUFNLEVBQUU7WUFDL0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQWRlLGdDQUFhLGdCQWM1QixDQUFBO0lBRUQsU0FBZ0IsY0FBYyxDQUk1QixNQUlzQztRQUV0QyxJQUFJLHVCQUF1QixJQUFJLE1BQU0sRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBZGUsaUNBQWMsaUJBYzdCLENBQUE7SUFFRCxTQUFnQix3QkFBd0IsQ0FJdEMsTUFJc0M7UUFFdEMsSUFBSSwwQkFBMEIsSUFBSSxNQUFNLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQWRlLDJDQUF3QiwyQkFjdkMsQ0FBQTtJQUVELFNBQWdCLG9CQUFvQixDQUlsQyxNQUlzQztRQUV0QyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3RFO2FBQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakMsT0FBTyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMvRDthQUFNLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDM0MsT0FBTywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUNyRTthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQW5CZSx1Q0FBb0IsdUJBbUJuQyxDQUFBO0lBRUQsU0FBZ0Isd0JBQXdCLENBQ3RDLFVBQW1DO1FBRW5DLE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUV4QixTQUFTLHNCQUFzQixDQUFDLGdCQUF1QztZQUNyRSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBDLE1BQU0sT0FBTyxHQUE0QixnQkFBZ0IsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ3hFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO2dCQUM1QixzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtZQUNsQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNuQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFuQmUsMkNBQXdCLDJCQW1CdkMsQ0FBQTtJQUVELFNBQWdCLDJCQUEyQixDQUN6QyxhQUE0QztRQUU1QyxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFFeEIsS0FBSyxNQUFNLG9CQUFvQixJQUFJLGFBQWEsRUFBRTtZQUNoRCxNQUFNLFlBQVksR0FBUSx3QkFBd0IsQ0FDaEQsb0JBQW9CLENBQUMsT0FBTyxDQUM3QixDQUFDO1lBRUYsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUU7Z0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDM0I7U0FDRjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFoQmUsOENBQTJCLDhCQWdCMUMsQ0FBQTtJQUVELFNBQWdCLGNBQWMsQ0FNNUIsZ0JBQXdCLEVBQ3hCLE9BQTZDO1FBRTdDLE9BQU8sQ0FDTCxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFaZSxpQ0FBYyxpQkFZN0IsQ0FBQTtBQUNILENBQUMsRUExSWdCLGtCQUFrQixLQUFsQixrQkFBa0IsUUEwSWxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVSZXN1bHRIZWxwZXJzIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVndWxhclJlc3VsdDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICByZXN1bHQ6XG4gICAgICB8IFJpdlRhYmxlLlJlc3VsdDxSPlxuICAgICAgfCBSaXZUYWJsZS5Hcm91cFJlc3VsdDxSLCBHPlxuICAgICAgfCBSaXZUYWJsZS5OZXN0ZWRSZXN1bHQ8Uj5cbiAgICAgIHwgUml2VGFibGUuTmVzdGVkV2l0aEhlYWRlclJlc3VsdDxSPixcbiAgKTogcmVzdWx0IGlzIFJpdlRhYmxlLlJlc3VsdDxSPiB7XG4gICAgaWYgKCdjdXJyZW50UGFnZURhdGEnIGluIHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0dyb3VwUmVzdWx0PFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHJlc3VsdDpcbiAgICAgIHwgUml2VGFibGUuUmVzdWx0PFI+XG4gICAgICB8IFJpdlRhYmxlLkdyb3VwUmVzdWx0PFIsIEc+XG4gICAgICB8IFJpdlRhYmxlLk5lc3RlZFJlc3VsdDxSPlxuICAgICAgfCBSaXZUYWJsZS5OZXN0ZWRXaXRoSGVhZGVyUmVzdWx0PFI+LFxuICApOiByZXN1bHQgaXMgUml2VGFibGUuR3JvdXBSZXN1bHQ8UiwgRz4ge1xuICAgIGlmICgndG90YWxHcm91cENvdW50JyBpbiByZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgcmVzdWx0OlxuICAgICAgfCBSaXZUYWJsZS5SZXN1bHQ8Uj5cbiAgICAgIHwgUml2VGFibGUuR3JvdXBSZXN1bHQ8UiwgRz5cbiAgICAgIHwgUml2VGFibGUuTmVzdGVkUmVzdWx0PFI+XG4gICAgICB8IFJpdlRhYmxlLk5lc3RlZFdpdGhIZWFkZXJSZXN1bHQ8Uj4sXG4gICk6IHJlc3VsdCBpcyBSaXZUYWJsZS5OZXN0ZWRSZXN1bHQ8Uj4ge1xuICAgIGlmICgnY3VycmVudFBhZ2VOZXN0ZWRSb3dzJyBpbiByZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRXaXRoSGVhZGVyUmVzdWx0PFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHJlc3VsdDpcbiAgICAgIHwgUml2VGFibGUuUmVzdWx0PFI+XG4gICAgICB8IFJpdlRhYmxlLkdyb3VwUmVzdWx0PFIsIEc+XG4gICAgICB8IFJpdlRhYmxlLk5lc3RlZFJlc3VsdDxSPlxuICAgICAgfCBSaXZUYWJsZS5OZXN0ZWRXaXRoSGVhZGVyUmVzdWx0PFI+LFxuICApOiByZXN1bHQgaXMgUml2VGFibGUuTmVzdGVkV2l0aEhlYWRlclJlc3VsdDxSPiB7XG4gICAgaWYgKCdjdXJyZW50UGFnZU5lc3RlZEhlYWRlcnMnIGluIHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRBbGxSb3dzRnJvbVJlc3VsdDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICByZXN1bHQ6XG4gICAgICB8IFJpdlRhYmxlLlJlc3VsdDxSPlxuICAgICAgfCBSaXZUYWJsZS5Hcm91cFJlc3VsdDxSLCBHPlxuICAgICAgfCBSaXZUYWJsZS5OZXN0ZWRSZXN1bHQ8Uj5cbiAgICAgIHwgUml2VGFibGUuTmVzdGVkV2l0aEhlYWRlclJlc3VsdDxSPixcbiAgKTogUltdIHtcbiAgICBpZiAoaXNHcm91cFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PiBncm91cHMuY3VycmVudFBhZ2VEYXRhKTtcbiAgICB9IGVsc2UgaWYgKGlzTmVzdGVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiBnZXRBbGxSb3dzRnJvbU5lc3RlZFJvd3MocmVzdWx0LmN1cnJlbnRQYWdlTmVzdGVkUm93cyk7XG4gICAgfSBlbHNlIGlmIChpc05lc3RlZFdpdGhIZWFkZXJSZXN1bHQocmVzdWx0KSkge1xuICAgICAgcmV0dXJuIGdldEFsbFJvd3NGcm9tTmVzdGVkSGVhZGVycyhyZXN1bHQuY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdC5jdXJyZW50UGFnZURhdGE7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFJvd3NGcm9tTmVzdGVkUm93czxSIGV4dGVuZHMgUml2VGFibGUuUm93PihcbiAgICBuZXN0ZWRSb3dzOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSxcbiAgKTogUltdIHtcbiAgICBjb25zdCBhbGxSb3dzOiBSW10gPSBbXTtcblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZUdldE5lc3RlZFJvd3MoY3VycmVudE5lc3RlZFJvdzogUml2VGFibGUuTmVzdGVkUm93PFI+KSB7XG4gICAgICBhbGxSb3dzLnB1c2goY3VycmVudE5lc3RlZFJvdy5kYXRhKTtcblxuICAgICAgY29uc3Qgc3ViUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPSBjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MgPz8gW107XG4gICAgICBmb3IgKGNvbnN0IHN1YlJvdyBvZiBzdWJSb3dzKSB7XG4gICAgICAgIHJlY3Vyc2l2ZUdldE5lc3RlZFJvd3Moc3ViUm93KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5lc3RlZFJvdyBvZiBuZXN0ZWRSb3dzKSB7XG4gICAgICByZWN1cnNpdmVHZXROZXN0ZWRSb3dzKG5lc3RlZFJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFJvd3M7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzPFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3c+KFxuICAgIG5lc3RlZEhlYWRlcnM6IFJpdlRhYmxlLk5lc3RlZEhlYWRlclJvdzxSPltdLFxuICApOiBSW10ge1xuICAgIGNvbnN0IGFsbFJvd3M6IFJbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBvdXRlck5lc3RlZEhlYWRlclJvdyBvZiBuZXN0ZWRIZWFkZXJzKSB7XG4gICAgICBjb25zdCByb3dzSW5IZWFkZXI6IFJbXSA9IGdldEFsbFJvd3NGcm9tTmVzdGVkUm93cyhcbiAgICAgICAgb3V0ZXJOZXN0ZWRIZWFkZXJSb3cuc3ViUm93cyxcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3Qgcm93SW5IZWFkZXIgb2Ygcm93c0luSGVhZGVyKSB7XG4gICAgICAgIGFsbFJvd3MucHVzaChyb3dJbkhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFJvd3M7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q3N2RmlsZW5hbWU8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFJpdlRhYmxlLk1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICAob3B0aW9ucz8uY3N2RmlsZUJhc2VuYW1lPy5zbGljZSgwLCAyMDApID8/IHBsdXJhbEVudGl0eU5hbWUpICsgJy5jc3YnXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,28 @@
1
+ export var TableSearchHelpers;
2
+ (function (TableSearchHelpers) {
3
+ function getSearchColumnsSelectedState(state, expectedValue) {
4
+ switch (expectedValue) {
5
+ case 'all':
6
+ return Array.from(state.query.searchColumns.values()).every(value => value);
7
+ case 'none':
8
+ return Array.from(state.query.searchColumns.values()).every(value => !value);
9
+ }
10
+ }
11
+ TableSearchHelpers.getSearchColumnsSelectedState = getSearchColumnsSelectedState;
12
+ function toggleAllSearchColumns(state) {
13
+ const noneSelected = getSearchColumnsSelectedState(state, 'none');
14
+ const payload = new Map(Array.from(state.query.searchColumns.keys()).map(key => [
15
+ key,
16
+ noneSelected,
17
+ ]));
18
+ return {
19
+ ...state,
20
+ query: {
21
+ ...state.query,
22
+ searchColumns: payload,
23
+ },
24
+ };
25
+ }
26
+ TableSearchHelpers.toggleAllSearchColumns = toggleAllSearchColumns;
27
+ })(TableSearchHelpers || (TableSearchHelpers = {}));
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sS0FBVyxrQkFBa0IsQ0E0Q2xDO0FBNUNELFdBQWlCLGtCQUFrQjtJQUNqQyxTQUFnQiw2QkFBNkIsQ0FNM0MsS0FBcUMsRUFDckMsYUFBNkI7UUFFN0IsUUFBUSxhQUFhLEVBQUU7WUFDckIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDekQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQ2YsQ0FBQztZQUVKLEtBQUssTUFBTTtnQkFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQ3pELEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQ2hCLENBQUM7U0FDTDtJQUNILENBQUM7SUFwQmUsZ0RBQTZCLGdDQW9CNUMsQ0FBQTtJQUVELFNBQWdCLHNCQUFzQixDQUtwQyxLQUFxQztRQUNyQyxNQUFNLFlBQVksR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxHQUFHO1lBQ0gsWUFBWTtTQUNiLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRTtnQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO2dCQUNkLGFBQWEsRUFBRSxPQUFPO2FBQ3ZCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFwQmUseUNBQXNCLHlCQW9CckMsQ0FBQTtBQUNILENBQUMsRUE1Q2dCLGtCQUFrQixLQUFsQixrQkFBa0IsUUE0Q2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVTZWFyY2hIZWxwZXJzIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBleHBlY3RlZFZhbHVlOiAnYWxsJyB8ICdub25lJyxcbiAgKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChleHBlY3RlZFZhbHVlKSB7XG4gICAgICBjYXNlICdhbGwnOlxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShzdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLnZhbHVlcygpKS5ldmVyeShcbiAgICAgICAgICB2YWx1ZSA9PiB2YWx1ZSxcbiAgICAgICAgKTtcblxuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMudmFsdWVzKCkpLmV2ZXJ5KFxuICAgICAgICAgIHZhbHVlID0+ICF2YWx1ZSxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9nZ2xlQWxsU2VhcmNoQ29sdW1uczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IG5vbmVTZWxlY3RlZCA9IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnbm9uZScpO1xuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgTWFwKFxuICAgICAgQXJyYXkuZnJvbShzdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLmtleXMoKSkubWFwKGtleSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgbm9uZVNlbGVjdGVkLFxuICAgICAgXSksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBxdWVyeToge1xuICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgc2VhcmNoQ29sdW1uczogcGF5bG9hZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,180 @@
1
+ import { difference, union } from 'lodash';
2
+ import { TableResultHelpers } from './result-helpers';
3
+ export var TableSelectionHelpers;
4
+ (function (TableSelectionHelpers) {
5
+ function isRowSelected(state, id) {
6
+ switch (state.selection.mode) {
7
+ case 'include':
8
+ return state.selection.included.has(id);
9
+ case 'exclude':
10
+ return !state.selection.excluded.has(id);
11
+ }
12
+ }
13
+ TableSelectionHelpers.isRowSelected = isRowSelected;
14
+ function isGroupSelected(state, group) {
15
+ switch (state.selection.mode) {
16
+ case 'include': {
17
+ let allFound = true;
18
+ let anyFound = false;
19
+ for (const row of group.currentPageData) {
20
+ if (!state.selection.included.has(row.id)) {
21
+ allFound = false;
22
+ }
23
+ else {
24
+ anyFound = true;
25
+ }
26
+ }
27
+ return allFound ? true : anyFound ? 'indeterminate' : false;
28
+ }
29
+ case 'exclude': {
30
+ let allFound = true;
31
+ let anyFound = false;
32
+ for (const row of group.currentPageData) {
33
+ if (state.selection.excluded.has(row.id)) {
34
+ allFound = false;
35
+ }
36
+ else {
37
+ anyFound = true;
38
+ }
39
+ }
40
+ return allFound ? true : anyFound ? 'indeterminate' : false;
41
+ }
42
+ }
43
+ }
44
+ TableSelectionHelpers.isGroupSelected = isGroupSelected;
45
+ function isAllSelected(state) {
46
+ // If there are no rows, "all selected" should be false
47
+ if (state.result.totalMatchingRowCount === 0) {
48
+ return false;
49
+ }
50
+ if ((state.selection.mode === 'exclude' &&
51
+ state.selection.excluded.size === 0) ||
52
+ (state.selection.mode === 'include' &&
53
+ state.selection.included.size === state.result.totalMatchingRowCount))
54
+ return true;
55
+ if ((state.selection.mode === 'exclude' &&
56
+ state.selection.excluded.size === state.result.totalMatchingRowCount) ||
57
+ (state.selection.mode === 'include' &&
58
+ state.selection.included.size === 0))
59
+ return false;
60
+ return 'indeterminate';
61
+ }
62
+ TableSelectionHelpers.isAllSelected = isAllSelected;
63
+ function isCurrentPageSelected(state) {
64
+ const selectedStates = TableResultHelpers.getAllRowsFromResult(state.result).map(({ id }) => isRowSelected(state, id));
65
+ if (selectedStates.length > 0) {
66
+ if (selectedStates.every(v => v))
67
+ return true;
68
+ if (selectedStates.some(v => v))
69
+ return 'indeterminate';
70
+ }
71
+ return false;
72
+ }
73
+ TableSelectionHelpers.isCurrentPageSelected = isCurrentPageSelected;
74
+ function selectedCount(state) {
75
+ switch (state.selection.mode) {
76
+ case 'include':
77
+ return state.selection.included.size;
78
+ case 'exclude':
79
+ return (state.result.totalMatchingRowCount - state.selection.excluded.size);
80
+ }
81
+ }
82
+ TableSelectionHelpers.selectedCount = selectedCount;
83
+ function setRowSelected(state, id, selected, contiguous) {
84
+ if (selected) {
85
+ const newSelection = new Set([id]);
86
+ if (contiguous && state.selection.mostRecentlySelected) {
87
+ const startIdx = TableResultHelpers.getAllRowsFromResult(state.result).findIndex(row => row.id === state.selection.mostRecentlySelected);
88
+ const endIdx = TableResultHelpers.getAllRowsFromResult(state.result).findIndex(row => row.id === id);
89
+ if (typeof startIdx === 'number' && typeof endIdx === 'number') {
90
+ for (let i = Math.min(startIdx, endIdx); i <= Math.max(startIdx, endIdx); i++) {
91
+ newSelection.add(TableResultHelpers.getAllRowsFromResult(state.result)[i].id);
92
+ }
93
+ }
94
+ }
95
+ return {
96
+ ...state,
97
+ selection: {
98
+ mostRecentlySelected: id,
99
+ ...(state.selection.mode === 'include'
100
+ ? {
101
+ mode: 'include',
102
+ included: new Set(union([...state.selection.included], [...newSelection])),
103
+ }
104
+ : {
105
+ mode: 'exclude',
106
+ excluded: new Set(difference([...state.selection.excluded], [...newSelection])),
107
+ }),
108
+ },
109
+ };
110
+ }
111
+ else {
112
+ return {
113
+ ...state,
114
+ selection: {
115
+ mostRecentlySelected: null,
116
+ ...(state.selection.mode === 'include'
117
+ ? {
118
+ mode: 'include',
119
+ included: new Set(difference([...state.selection.included], [id])),
120
+ }
121
+ : {
122
+ mode: 'exclude',
123
+ excluded: new Set(union([...state.selection.excluded], [id])),
124
+ }),
125
+ },
126
+ };
127
+ }
128
+ }
129
+ TableSelectionHelpers.setRowSelected = setRowSelected;
130
+ function toggleGroupSelected(state, group) {
131
+ const isGroupFullySelected = isGroupSelected(state, { ...group, currentPageData: group.rows }) ===
132
+ true;
133
+ return group.rows.reduce((accumulatedState, row) => {
134
+ return setRowSelected(accumulatedState, row.id, !isGroupFullySelected, false);
135
+ }, state);
136
+ }
137
+ TableSelectionHelpers.toggleGroupSelected = toggleGroupSelected;
138
+ function togglePageSelected(state) {
139
+ const isPageFullySelected = TableResultHelpers.getAllRowsFromResult(state.result).every(({ id }) => isRowSelected(state, id));
140
+ return TableResultHelpers.getAllRowsFromResult(state.result).reduce((accumulatedState, row) => {
141
+ return setRowSelected(accumulatedState, row.id, !isPageFullySelected, false);
142
+ }, state);
143
+ }
144
+ TableSelectionHelpers.togglePageSelected = togglePageSelected;
145
+ function toggleAllSelected(state) {
146
+ if (isAllSelected(state) === true) {
147
+ return {
148
+ ...state,
149
+ selection: {
150
+ mostRecentlySelected: null,
151
+ mode: 'include',
152
+ included: new Set(),
153
+ },
154
+ };
155
+ }
156
+ else {
157
+ return {
158
+ ...state,
159
+ selection: {
160
+ mostRecentlySelected: null,
161
+ mode: 'exclude',
162
+ excluded: new Set(),
163
+ },
164
+ };
165
+ }
166
+ }
167
+ TableSelectionHelpers.toggleAllSelected = toggleAllSelected;
168
+ function clearSelection(state) {
169
+ return {
170
+ ...state,
171
+ selection: {
172
+ mostRecentlySelected: null,
173
+ mode: 'include',
174
+ included: new Set(),
175
+ },
176
+ };
177
+ }
178
+ TableSelectionHelpers.clearSelection = clearSelection;
179
+ })(TableSelectionHelpers || (TableSelectionHelpers = {}));
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL3NlbGVjdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE1BQU0sS0FBVyxxQkFBcUIsQ0E4UXJDO0FBOVFELFdBQWlCLHFCQUFxQjtJQUNwQyxTQUFnQixhQUFhLENBSzNCLEtBQXFDLEVBQUUsRUFBVztRQUNsRCxRQUFRLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQzVCLEtBQUssU0FBUztnQkFDWixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFaZSxtQ0FBYSxnQkFZNUIsQ0FBQTtJQUVELFNBQWdCLGVBQWUsQ0FNN0IsS0FBcUMsRUFDckMsS0FBb0M7UUFFcEMsUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQUM1QixLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUNkLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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QUUsRUFBRTtZQUN4QixPQUFPLGNBQWMsQ0FDbkIsZ0JBQWdCLEVBQ2hCLEdBQUcsQ0FBQyxFQUFFLEVBQ04sQ0FBQyxtQkFBbUIsRUFDcEIsS0FBSyxDQUNOLENBQUM7UUFDSixDQUFDLEVBQ0QsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBcEJlLHdDQUFrQixxQkFvQmpDLENBQUE7SUFFRCxTQUFnQixpQkFBaUIsQ0FLL0IsS0FBcUM7UUFDckMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2pDLE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLFNBQVMsRUFBRTtvQkFDVCxvQkFBb0IsRUFBRSxJQUFJO29CQUMxQixJQUFJLEVBQUUsU0FBUztvQkFDZixRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7aUJBQ3BCO2FBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixTQUFTLEVBQUU7b0JBQ1Qsb0JBQW9CLEVBQUUsSUFBSTtvQkFDMUIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO2lCQUNwQjthQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUF6QmUsdUNBQWlCLG9CQXlCaEMsQ0FBQTtJQUVELFNBQWdCLGNBQWMsQ0FLNUIsS0FBcUM7UUFDckMsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLFNBQVMsRUFBRTtnQkFDVCxvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixJQUFJLEVBQUUsU0FBUztnQkFDZixRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7YUFDcEI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQWRlLG9DQUFjLGlCQWM3QixDQUFBO0FBQ0gsQ0FBQyxFQTlRZ0IscUJBQXFCLEtBQXJCLHFCQUFxQixRQThRckMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB7IGRpZmZlcmVuY2UsIHVuaW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlUmVzdWx0SGVscGVycyB9IGZyb20gJy4vcmVzdWx0LWhlbHBlcnMnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRhYmxlU2VsZWN0aW9uSGVscGVycyB7XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1Jvd1NlbGVjdGVkPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiwgaWQ6IFJbJ2lkJ10pOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgICAgcmV0dXJuIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5oYXMoaWQpO1xuICAgICAgY2FzZSAnZXhjbHVkZSc6XG4gICAgICAgIHJldHVybiAhc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLmhhcyhpZCk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzR3JvdXBTZWxlY3RlZDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgZ3JvdXA6IFJpdlRhYmxlLlN1Ykdyb3VwUmVzdWx0PFIsIEc+LFxuICApOiBSaXZUYWJsZS5NdWx0aVNlbGVjdGlvblN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgICBjYXNlICdpbmNsdWRlJzoge1xuICAgICAgICBsZXQgYWxsRm91bmQgPSB0cnVlO1xuICAgICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZ3JvdXAuY3VycmVudFBhZ2VEYXRhKSB7XG4gICAgICAgICAgaWYgKCFzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuaGFzKHJvdy5pZCkpIHtcbiAgICAgICAgICAgIGFsbEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFueUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsbEZvdW5kID8gdHJ1ZSA6IGFueUZvdW5kID8gJ2luZGV0ZXJtaW5hdGUnIDogZmFsc2U7XG4gICAgICB9XG4gICAgICBjYXNlICdleGNsdWRlJzoge1xuICAgICAgICBsZXQgYWxsRm91bmQgPSB0cnVlO1xuICAgICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZ3JvdXAuY3VycmVudFBhZ2VEYXRhKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5oYXMocm93LmlkKSkge1xuICAgICAgICAgICAgYWxsRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW55Rm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRm91bmQgPyB0cnVlIDogYW55Rm91bmQgPyAnaW5kZXRlcm1pbmF0ZScgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNBbGxTZWxlY3RlZDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5NdWx0aVNlbGVjdGlvblN0YXRlIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcm93cywgXCJhbGwgc2VsZWN0ZWRcIiBzaG91bGQgYmUgZmFsc2VcbiAgICBpZiAoc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2V4Y2x1ZGUnICYmXG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplID09PSAwKSB8fFxuICAgICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZScgJiZcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLnNpemUgPT09IHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQpXG4gICAgKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKFxuICAgICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnZXhjbHVkZScgJiZcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemUgPT09IHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQpIHx8XG4gICAgICAoc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJyAmJlxuICAgICAgICBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZSA9PT0gMClcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICdpbmRldGVybWluYXRlJztcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGF0ZXMgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21SZXN1bHQoXG4gICAgICBzdGF0ZS5yZXN1bHQsXG4gICAgKS5tYXAoKHsgaWQgfSkgPT4gaXNSb3dTZWxlY3RlZChzdGF0ZSwgaWQpKTtcbiAgICBpZiAoc2VsZWN0ZWRTdGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHNlbGVjdGVkU3RhdGVzLmV2ZXJ5KHYgPT4gdikpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHNlbGVjdGVkU3RhdGVzLnNvbWUodiA9PiB2KSkgcmV0dXJuICdpbmRldGVybWluYXRlJztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdGVkQ291bnQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgICAgcmV0dXJuIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5zaXplO1xuICAgICAgY2FzZSAnZXhjbHVkZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCAtIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNldFJvd1NlbGVjdGVkPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBpZDogUlsnaWQnXSxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBjb250aWd1b3VzOiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IFNldDxSWydpZCddPihbaWRdKTtcbiAgICAgIGlmIChjb250aWd1b3VzICYmIHN0YXRlLnNlbGVjdGlvbi5tb3N0UmVjZW50bHlTZWxlY3RlZCkge1xuICAgICAgICBjb25zdCBzdGFydElkeCA9IFRhYmxlUmVzdWx0SGVscGVycy5nZXRBbGxSb3dzRnJvbVJlc3VsdChcbiAgICAgICAgICBzdGF0ZS5yZXN1bHQsXG4gICAgICAgICkuZmluZEluZGV4KHJvdyA9PiByb3cuaWQgPT09IHN0YXRlLnNlbGVjdGlvbi5tb3N0UmVjZW50bHlTZWxlY3RlZCk7XG4gICAgICAgIGNvbnN0IGVuZElkeCA9IFRhYmxlUmVzdWx0SGVscGVycy5nZXRBbGxSb3dzRnJvbVJlc3VsdChcbiAgICAgICAgICBzdGF0ZS5yZXN1bHQsXG4gICAgICAgICkuZmluZEluZGV4KHJvdyA9PiByb3cuaWQgPT09IGlkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydElkeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGVuZElkeCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGkgPSBNYXRoLm1pbihzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgICAgICAgIGkgPD0gTWF0aC5tYXgoc3RhcnRJZHgsIGVuZElkeCk7XG4gICAgICAgICAgICBpKytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5hZGQoXG4gICAgICAgICAgICAgIFRhYmxlUmVzdWx0SGVscGVycy5nZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpW2ldLmlkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogaWQsXG4gICAgICAgICAgLi4uKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZSdcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldChcbiAgICAgICAgICAgICAgICAgIHVuaW9uKFsuLi5zdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWRdLCBbLi4ubmV3U2VsZWN0aW9uXSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZShbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkXSwgWy4uLm5ld1NlbGVjdGlvbl0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgIC4uLihzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2luY2x1ZGUnXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoXG4gICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlKFsuLi5zdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWRdLCBbaWRdKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgICAgICAgICAgZXhjbHVkZWQ6IG5ldyBTZXQodW5pb24oWy4uLnN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZF0sIFtpZF0pKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b2dnbGVHcm91cFNlbGVjdGVkPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBncm91cDogUml2VGFibGUuUm93R3JvdXA8UiwgRz4sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgaXNHcm91cEZ1bGx5U2VsZWN0ZWQgPVxuICAgICAgaXNHcm91cFNlbGVjdGVkKHN0YXRlLCB7IC4uLmdyb3VwLCBjdXJyZW50UGFnZURhdGE6IGdyb3VwLnJvd3MgfSkgPT09XG4gICAgICB0cnVlO1xuICAgIHJldHVybiBncm91cC5yb3dzLnJlZHVjZSgoYWNjdW11bGF0ZWRTdGF0ZSwgcm93KSA9PiB7XG4gICAgICByZXR1cm4gc2V0Um93U2VsZWN0ZWQoXG4gICAgICAgIGFjY3VtdWxhdGVkU3RhdGUsXG4gICAgICAgIHJvdy5pZCxcbiAgICAgICAgIWlzR3JvdXBGdWxseVNlbGVjdGVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgfSwgc3RhdGUpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVBhZ2VTZWxlY3RlZDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGlzUGFnZUZ1bGx5U2VsZWN0ZWQgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21SZXN1bHQoXG4gICAgICBzdGF0ZS5yZXN1bHQsXG4gICAgKS5ldmVyeSgoeyBpZCB9KSA9PiBpc1Jvd1NlbGVjdGVkKHN0YXRlLCBpZCkpO1xuICAgIHJldHVybiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21SZXN1bHQoc3RhdGUucmVzdWx0KS5yZWR1Y2UoXG4gICAgICAoYWNjdW11bGF0ZWRTdGF0ZSwgcm93KSA9PiB7XG4gICAgICAgIHJldHVybiBzZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBhY2N1bXVsYXRlZFN0YXRlLFxuICAgICAgICAgIHJvdy5pZCxcbiAgICAgICAgICAhaXNQYWdlRnVsbHlTZWxlY3RlZCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzdGF0ZSxcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUFsbFNlbGVjdGVkPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgaWYgKGlzQWxsU2VsZWN0ZWQoc3RhdGUpID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbjxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=