@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.
- package/esm2020/lib/table/simple-table/simple-table.component.mjs +3 -2
- package/esm2020/lib/table/table/state-helpers/column-helpers.mjs +255 -0
- package/esm2020/lib/table/table/state-helpers/display-helpers.mjs +48 -0
- package/esm2020/lib/table/table/state-helpers/order-helpers.mjs +143 -0
- package/esm2020/lib/table/table/state-helpers/pagination-helpers.mjs +174 -0
- package/esm2020/lib/table/table/state-helpers/result-helpers.mjs +77 -0
- package/esm2020/lib/table/table/state-helpers/search-helpers.mjs +28 -0
- package/esm2020/lib/table/table/state-helpers/selection-helpers.mjs +180 -0
- package/esm2020/lib/table/table/state.mjs +73 -631
- package/esm2020/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +4 -4
- package/fesm2015/rivet-health-design-system.mjs +821 -513
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +962 -633
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/table/table/state-helpers/column-helpers.d.ts +14 -0
- package/lib/table/table/state-helpers/display-helpers.d.ts +5 -0
- package/lib/table/table/state-helpers/order-helpers.d.ts +12 -0
- package/lib/table/table/state-helpers/pagination-helpers.d.ts +13 -0
- package/lib/table/table/state-helpers/result-helpers.d.ts +11 -0
- package/lib/table/table/state-helpers/search-helpers.d.ts +5 -0
- package/lib/table/table/state-helpers/selection-helpers.d.ts +13 -0
- package/lib/table/table/state.d.ts +48 -1
- 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=
|