@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
|
@@ -3,6 +3,7 @@ import { RivTable } from '../table/state';
|
|
|
3
3
|
import { createCellCoordinateCalculator } from './coordinate-helper';
|
|
4
4
|
import { SimpleTableCellComponent } from './simple-table-cell.component';
|
|
5
5
|
import { SimpleTableHeaderCellComponent } from './simple-table-header-cell.component';
|
|
6
|
+
import { TableColumnHelpers } from '../table/state-helpers/column-helpers';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/common";
|
|
8
9
|
export class SimpleTableComponent {
|
|
@@ -20,7 +21,7 @@ export class SimpleTableComponent {
|
|
|
20
21
|
const allowedTypes = RivTable.ColumnDataTypes.join(', ');
|
|
21
22
|
throw new Error(`Each header cell must define an appropriate dataType, one of ${allowedTypes}`);
|
|
22
23
|
}
|
|
23
|
-
const newAlignment =
|
|
24
|
+
const newAlignment = TableColumnHelpers.getColumnAlignment(dataType, i === 0);
|
|
24
25
|
const newLeftPinOffset = runningWidthTotal;
|
|
25
26
|
runningWidthTotal += headerCell.width;
|
|
26
27
|
const changed = headerCell.alignment != newAlignment ||
|
|
@@ -100,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
100
101
|
type: ContentChildren,
|
|
101
102
|
args: [SimpleTableCellComponent, { descendants: true }]
|
|
102
103
|
}] } });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3NpbXBsZS10YWJsZS9zaW1wbGUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvc2ltcGxlLXRhYmxlL3NpbXBsZS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxHQUdoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7OztBQVF0RixNQUFNLE9BQU8sb0JBQW9CO0lBVS9CLHFCQUFxQjtRQUNuQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUV2QyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMxQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixNQUFNLFlBQVksR0FBRyxRQUFRLENB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ZCxXQUFXO3NCQURsQixlQUFlO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJOUQsU0FBUztzQkFEaEIsZUFBZTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3RhYmxlL3N0YXRlJztcbmltcG9ydCB7IGNyZWF0ZUNlbGxDb29yZGluYXRlQ2FsY3VsYXRvciB9IGZyb20gJy4vY29vcmRpbmF0ZS1oZWxwZXInO1xuaW1wb3J0IHsgU2ltcGxlVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9zaW1wbGUtdGFibGUtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2ltcGxlVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9zaW1wbGUtdGFibGUtaGVhZGVyLWNlbGwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXNpbXBsZS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW1wbGUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaW1wbGUtdGFibGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2ltcGxlVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJylcbiAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICBAQ29udGVudENoaWxkcmVuKFNpbXBsZVRhYmxlSGVhZGVyQ2VsbENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwcml2YXRlIGhlYWRlckNlbGxzPzogUXVlcnlMaXN0PFNpbXBsZVRhYmxlSGVhZGVyQ2VsbENvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTaW1wbGVUYWJsZUNlbGxDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHJpdmF0ZSBkYXRhQ2VsbHM/OiBRdWVyeUxpc3Q8U2ltcGxlVGFibGVDZWxsQ29tcG9uZW50PjtcblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgdGhpcy5zZXRDZWxsUHJvcGVydGllcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDZWxsUHJvcGVydGllcygpIHtcbiAgICBjb25zdCB7IGhlYWRlckNlbGxzLCBkYXRhQ2VsbHMgfSA9IHRoaXM7XG4gICAgaWYgKCFoZWFkZXJDZWxscyB8fCAhZGF0YUNlbGxzKSByZXR1cm47XG5cbiAgICBsZXQgcnVubmluZ1dpZHRoVG90YWwgPSAwO1xuICAgIGhlYWRlckNlbGxzLmZvckVhY2goKGhlYWRlckNlbGwsIGkpID0+IHtcbiAgICAgIGNvbnN0IHsgZGF0YVR5cGUgfSA9IGhlYWRlckNlbGw7XG4gICAgICBpZiAoIWRhdGFUeXBlKSB7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IFJpdlRhYmxlLkNvbHVtbkRhdGFUeXBlcy5qb2luKCcsICcpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVhY2ggaGVhZGVyIGNlbGwgbXVzdCBkZWZpbmUgYW4gYXBwcm9wcmlhdGUgZGF0YVR5cGUsIG9uZSBvZiAke2FsbG93ZWRUeXBlc31gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdBbGlnbm1lbnQgPSBSaXZUYWJsZS5nZXRDb2x1bW5BbGlnbm1lbnQoZGF0YVR5cGUsIGkgPT09IDApO1xuICAgICAgY29uc3QgbmV3TGVmdFBpbk9mZnNldCA9IHJ1bm5pbmdXaWR0aFRvdGFsO1xuICAgICAgcnVubmluZ1dpZHRoVG90YWwgKz0gaGVhZGVyQ2VsbC53aWR0aDtcblxuICAgICAgY29uc3QgY2hhbmdlZCA9XG4gICAgICAgIGhlYWRlckNlbGwuYWxpZ25tZW50ICE9IG5ld0FsaWdubWVudCB8fFxuICAgICAgICBoZWFkZXJDZWxsLmxlZnRQaW5PZmZzZXQgIT0gbmV3TGVmdFBpbk9mZnNldDtcbiAgICAgIGhlYWRlckNlbGwuYWxpZ25tZW50ID0gbmV3QWxpZ25tZW50O1xuICAgICAgaGVhZGVyQ2VsbC5sZWZ0UGluT2Zmc2V0ID0gbmV3TGVmdFBpbk9mZnNldDtcblxuICAgICAgLy8gT25seSBtYXJrIGZvciBjaGVjayB3aGVuIGNoYW5nZWQgdG8gcHJldmVudCBpbmZpbml0ZSBjeWNsZXNcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICBoZWFkZXJDZWxsLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjZWxsU3BhbkRhdGEgPSBkYXRhQ2VsbHMubWFwKGRhdGFDZWxsID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhQ2VsbC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3dzcGFuOiBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm93c3BhbicpIHx8ICcxJywgMTApLFxuICAgICAgICBjb2xzcGFuOiBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnY29sc3BhbicpIHx8ICcxJywgMTApLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIFdoZW4gdGhlcmUgYXJlIG5vIGhlYWRlciBjZWxscywgY2FsY3VsYXRlIHRvdGFsQ29sdW1ucyBmcm9tIHRoZSBmaXJzdCA8dHI+XG4gICAgbGV0IHRvdGFsQ29sdW1ucyA9IGhlYWRlckNlbGxzLmxlbmd0aDtcbiAgICBpZiAodG90YWxDb2x1bW5zID09PSAwICYmIGRhdGFDZWxscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdyA9IGRhdGFDZWxscy5maXJzdD8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICBpZiAoZmlyc3RSb3cpIHtcbiAgICAgICAgLy8gQ291bnQgdGQgZWxlbWVudHMgaW4gdGhlIGZpcnN0IHJvdyBhbmQgc3VtIHRoZWlyIGNvbHNwYW5zXG4gICAgICAgIGNvbnN0IGNlbGxzSW5GaXJzdFJvdyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgZmlyc3RSb3cucXVlcnlTZWxlY3RvckFsbCgndGRbcml2LXNpbXBsZS10YWJsZS1jZWxsXScpLFxuICAgICAgICApO1xuICAgICAgICB0b3RhbENvbHVtbnMgPSBjZWxsc0luRmlyc3RSb3cucmVkdWNlKChzdW0sIGNlbGwpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xzcGFuID0gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKSB8fCAnMScsIDEwKTtcbiAgICAgICAgICByZXR1cm4gc3VtICsgY29sc3BhbjtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjayB0byAxIGlmIHdlIGNvdWxkbid0IGRldGVybWluZVxuICAgICAgaWYgKHRvdGFsQ29sdW1ucyA9PT0gMCkge1xuICAgICAgICB0b3RhbENvbHVtbnMgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdldENlbGxDb29yZGluYXRlcyA9IGNyZWF0ZUNlbGxDb29yZGluYXRlQ2FsY3VsYXRvcihcbiAgICAgIGNlbGxTcGFuRGF0YSxcbiAgICAgIHRvdGFsQ29sdW1ucyxcbiAgICApO1xuXG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoXG4gICAgICAuLi5kYXRhQ2VsbHMubWFwKChfLCBpKSA9PiBnZXRDZWxsQ29vcmRpbmF0ZXMoaSkuZW5kLnJvdyksXG4gICAgKTtcblxuICAgIGRhdGFDZWxscy5mb3JFYWNoKChkYXRhQ2VsbCwgY2VsbEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRDZWxsQ29vcmRpbmF0ZXMoY2VsbEluZGV4KTtcblxuICAgICAgY29uc3QgaGVhZGVyQ2VsbCA9IGhlYWRlckNlbGxzLmdldChib3VuZHMuc3RhcnQuY29sKTtcbiAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICBpZiAoaGVhZGVyQ2VsbCkge1xuICAgICAgICBjaGFuZ2VkID1cbiAgICAgICAgICBkYXRhQ2VsbC5hbGlnbm1lbnQgIT0gaGVhZGVyQ2VsbC5hbGlnbm1lbnQgfHxcbiAgICAgICAgICBkYXRhQ2VsbC5waW5uZWQgIT0gaGVhZGVyQ2VsbC5waW5uZWQgfHxcbiAgICAgICAgICBkYXRhQ2VsbC5sZWZ0UGluT2Zmc2V0ICE9IGhlYWRlckNlbGwubGVmdFBpbk9mZnNldDtcblxuICAgICAgICBkYXRhQ2VsbC5hbGlnbm1lbnQgPSBoZWFkZXJDZWxsLmFsaWdubWVudDtcbiAgICAgICAgZGF0YUNlbGwucGlubmVkID0gaGVhZGVyQ2VsbC5waW5uZWQ7XG4gICAgICAgIGRhdGFDZWxsLmxlZnRQaW5PZmZzZXQgPSBoZWFkZXJDZWxsLmxlZnRQaW5PZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lzTGFzdFJvdyA9IGJvdW5kcy5lbmQucm93ID09PSBtYXhSb3c7XG4gICAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBkYXRhQ2VsbC5pc0xhc3RSb3cgIT0gbmV3SXNMYXN0Um93O1xuICAgICAgZGF0YUNlbGwuaXNMYXN0Um93ID0gbmV3SXNMYXN0Um93O1xuXG4gICAgICAvLyBPbmx5IG1hcmsgZm9yIGNoZWNrIHdoZW4gY2hhbmdlZCB0byBwcmV2ZW50IGluZmluaXRlIGN5Y2xlc1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIGRhdGFDZWxsLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWFkZXJcIiAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDx0YWJsZT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvdGFibGU+XG48L2Rpdj5cbiJdfQ==
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3NpbXBsZS10YWJsZS9zaW1wbGUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvc2ltcGxlLXRhYmxlL3NpbXBsZS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxHQUdoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQVEzRSxNQUFNLE9BQU8sb0JBQW9CO0lBVS9CLHFCQUFxQjtRQUNuQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUV2QyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMxQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDaEMsSUFB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QUFDLE1BQU07OEJBSS9DLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxRQUFRO2dCQUlkLFdBQVc7c0JBRGxCLGVBQWU7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUk5RCxTQUFTO3NCQURoQixlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vdGFibGUvc3RhdGUnO1xuaW1wb3J0IHsgY3JlYXRlQ2VsbENvb3JkaW5hdGVDYWxjdWxhdG9yIH0gZnJvbSAnLi9jb29yZGluYXRlLWhlbHBlcic7XG5pbXBvcnQgeyBTaW1wbGVUYWJsZUNlbGxDb21wb25lbnQgfSBmcm9tICcuL3NpbXBsZS10YWJsZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaW1wbGVUYWJsZUhlYWRlckNlbGxDb21wb25lbnQgfSBmcm9tICcuL3NpbXBsZS10YWJsZS1oZWFkZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5IZWxwZXJzIH0gZnJvbSAnLi4vdGFibGUvc3RhdGUtaGVscGVycy9jb2x1bW4taGVscGVycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1zaW1wbGUtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2ltcGxlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2ltcGxlLXRhYmxlLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicpXG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTaW1wbGVUYWJsZUhlYWRlckNlbGxDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHJpdmF0ZSBoZWFkZXJDZWxscz86IFF1ZXJ5TGlzdDxTaW1wbGVUYWJsZUhlYWRlckNlbGxDb21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2ltcGxlVGFibGVDZWxsQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgZGF0YUNlbGxzPzogUXVlcnlMaXN0PFNpbXBsZVRhYmxlQ2VsbENvbXBvbmVudD47XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIHRoaXMuc2V0Q2VsbFByb3BlcnRpZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2VsbFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgeyBoZWFkZXJDZWxscywgZGF0YUNlbGxzIH0gPSB0aGlzO1xuICAgIGlmICghaGVhZGVyQ2VsbHMgfHwgIWRhdGFDZWxscykgcmV0dXJuO1xuXG4gICAgbGV0IHJ1bm5pbmdXaWR0aFRvdGFsID0gMDtcbiAgICBoZWFkZXJDZWxscy5mb3JFYWNoKChoZWFkZXJDZWxsLCBpKSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGFUeXBlIH0gPSBoZWFkZXJDZWxsO1xuICAgICAgaWYgKCFkYXRhVHlwZSkge1xuICAgICAgICBjb25zdCBhbGxvd2VkVHlwZXMgPSBSaXZUYWJsZS5Db2x1bW5EYXRhVHlwZXMuam9pbignLCAnKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFYWNoIGhlYWRlciBjZWxsIG11c3QgZGVmaW5lIGFuIGFwcHJvcHJpYXRlIGRhdGFUeXBlLCBvbmUgb2YgJHthbGxvd2VkVHlwZXN9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3QWxpZ25tZW50ID0gVGFibGVDb2x1bW5IZWxwZXJzLmdldENvbHVtbkFsaWdubWVudChcbiAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgIGkgPT09IDAsXG4gICAgICApO1xuICAgICAgY29uc3QgbmV3TGVmdFBpbk9mZnNldCA9IHJ1bm5pbmdXaWR0aFRvdGFsO1xuICAgICAgcnVubmluZ1dpZHRoVG90YWwgKz0gaGVhZGVyQ2VsbC53aWR0aDtcblxuICAgICAgY29uc3QgY2hhbmdlZCA9XG4gICAgICAgIGhlYWRlckNlbGwuYWxpZ25tZW50ICE9IG5ld0FsaWdubWVudCB8fFxuICAgICAgICBoZWFkZXJDZWxsLmxlZnRQaW5PZmZzZXQgIT0gbmV3TGVmdFBpbk9mZnNldDtcbiAgICAgIGhlYWRlckNlbGwuYWxpZ25tZW50ID0gbmV3QWxpZ25tZW50O1xuICAgICAgaGVhZGVyQ2VsbC5sZWZ0UGluT2Zmc2V0ID0gbmV3TGVmdFBpbk9mZnNldDtcblxuICAgICAgLy8gT25seSBtYXJrIGZvciBjaGVjayB3aGVuIGNoYW5nZWQgdG8gcHJldmVudCBpbmZpbml0ZSBjeWNsZXNcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICBoZWFkZXJDZWxsLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjZWxsU3BhbkRhdGEgPSBkYXRhQ2VsbHMubWFwKGRhdGFDZWxsID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhQ2VsbC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3dzcGFuOiBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm93c3BhbicpIHx8ICcxJywgMTApLFxuICAgICAgICBjb2xzcGFuOiBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnY29sc3BhbicpIHx8ICcxJywgMTApLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIFdoZW4gdGhlcmUgYXJlIG5vIGhlYWRlciBjZWxscywgY2FsY3VsYXRlIHRvdGFsQ29sdW1ucyBmcm9tIHRoZSBmaXJzdCA8dHI+XG4gICAgbGV0IHRvdGFsQ29sdW1ucyA9IGhlYWRlckNlbGxzLmxlbmd0aDtcbiAgICBpZiAodG90YWxDb2x1bW5zID09PSAwICYmIGRhdGFDZWxscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdyA9IGRhdGFDZWxscy5maXJzdD8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICBpZiAoZmlyc3RSb3cpIHtcbiAgICAgICAgLy8gQ291bnQgdGQgZWxlbWVudHMgaW4gdGhlIGZpcnN0IHJvdyBhbmQgc3VtIHRoZWlyIGNvbHNwYW5zXG4gICAgICAgIGNvbnN0IGNlbGxzSW5GaXJzdFJvdyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgZmlyc3RSb3cucXVlcnlTZWxlY3RvckFsbCgndGRbcml2LXNpbXBsZS10YWJsZS1jZWxsXScpLFxuICAgICAgICApO1xuICAgICAgICB0b3RhbENvbHVtbnMgPSBjZWxsc0luRmlyc3RSb3cucmVkdWNlKChzdW0sIGNlbGwpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xzcGFuID0gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKSB8fCAnMScsIDEwKTtcbiAgICAgICAgICByZXR1cm4gc3VtICsgY29sc3BhbjtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjayB0byAxIGlmIHdlIGNvdWxkbid0IGRldGVybWluZVxuICAgICAgaWYgKHRvdGFsQ29sdW1ucyA9PT0gMCkge1xuICAgICAgICB0b3RhbENvbHVtbnMgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdldENlbGxDb29yZGluYXRlcyA9IGNyZWF0ZUNlbGxDb29yZGluYXRlQ2FsY3VsYXRvcihcbiAgICAgIGNlbGxTcGFuRGF0YSxcbiAgICAgIHRvdGFsQ29sdW1ucyxcbiAgICApO1xuXG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoXG4gICAgICAuLi5kYXRhQ2VsbHMubWFwKChfLCBpKSA9PiBnZXRDZWxsQ29vcmRpbmF0ZXMoaSkuZW5kLnJvdyksXG4gICAgKTtcblxuICAgIGRhdGFDZWxscy5mb3JFYWNoKChkYXRhQ2VsbCwgY2VsbEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRDZWxsQ29vcmRpbmF0ZXMoY2VsbEluZGV4KTtcblxuICAgICAgY29uc3QgaGVhZGVyQ2VsbCA9IGhlYWRlckNlbGxzLmdldChib3VuZHMuc3RhcnQuY29sKTtcbiAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICBpZiAoaGVhZGVyQ2VsbCkge1xuICAgICAgICBjaGFuZ2VkID1cbiAgICAgICAgICBkYXRhQ2VsbC5hbGlnbm1lbnQgIT0gaGVhZGVyQ2VsbC5hbGlnbm1lbnQgfHxcbiAgICAgICAgICBkYXRhQ2VsbC5waW5uZWQgIT0gaGVhZGVyQ2VsbC5waW5uZWQgfHxcbiAgICAgICAgICBkYXRhQ2VsbC5sZWZ0UGluT2Zmc2V0ICE9IGhlYWRlckNlbGwubGVmdFBpbk9mZnNldDtcblxuICAgICAgICBkYXRhQ2VsbC5hbGlnbm1lbnQgPSBoZWFkZXJDZWxsLmFsaWdubWVudDtcbiAgICAgICAgZGF0YUNlbGwucGlubmVkID0gaGVhZGVyQ2VsbC5waW5uZWQ7XG4gICAgICAgIGRhdGFDZWxsLmxlZnRQaW5PZmZzZXQgPSBoZWFkZXJDZWxsLmxlZnRQaW5PZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lzTGFzdFJvdyA9IGJvdW5kcy5lbmQucm93ID09PSBtYXhSb3c7XG4gICAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBkYXRhQ2VsbC5pc0xhc3RSb3cgIT0gbmV3SXNMYXN0Um93O1xuICAgICAgZGF0YUNlbGwuaXNMYXN0Um93ID0gbmV3SXNMYXN0Um93O1xuXG4gICAgICAvLyBPbmx5IG1hcmsgZm9yIGNoZWNrIHdoZW4gY2hhbmdlZCB0byBwcmV2ZW50IGluZmluaXRlIGN5Y2xlc1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIGRhdGFDZWxsLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWFkZXJcIiAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDx0YWJsZT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvdGFibGU+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { difference } from 'lodash';
|
|
2
|
+
import { RivTable } from '../state';
|
|
3
|
+
export var TableColumnHelpers;
|
|
4
|
+
(function (TableColumnHelpers) {
|
|
5
|
+
function getColumnAlignment(dataType, isFirst) {
|
|
6
|
+
if (isFirst)
|
|
7
|
+
return 'left';
|
|
8
|
+
switch (dataType) {
|
|
9
|
+
case 'date':
|
|
10
|
+
case 'longText':
|
|
11
|
+
return 'left';
|
|
12
|
+
case 'advanced':
|
|
13
|
+
case 'icon':
|
|
14
|
+
case 'shortText':
|
|
15
|
+
return 'center';
|
|
16
|
+
case 'currency':
|
|
17
|
+
case 'number':
|
|
18
|
+
return 'right';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
TableColumnHelpers.getColumnAlignment = getColumnAlignment;
|
|
22
|
+
function getAllColumns(state, supportedColumns, columnNameMap) {
|
|
23
|
+
// If the table offers more columns than the user has configuration settings
|
|
24
|
+
// for (or if the user has no configuration settings yet), we'll append them
|
|
25
|
+
// to the end (unless they should be pinned by default, in which case we'll
|
|
26
|
+
// append them after the other pinned columns). This ensures that new columns
|
|
27
|
+
// we add to existing tables over time (1) get displayed even though they
|
|
28
|
+
// don't appear in the user's configuration settings yet, and (2) don't
|
|
29
|
+
// interrupt their existing setup.
|
|
30
|
+
const columnNamesWithoutUserSettings = difference([...supportedColumns.keys()], state.display.columnSettings.map(({ key }) => key));
|
|
31
|
+
// Throw out settings for columns no longer offered by the table.
|
|
32
|
+
const columnsWithUserSettings = state.display.columnSettings.filter(({ key }) => supportedColumns.has(key));
|
|
33
|
+
const columnsWithoutUserSettings = [
|
|
34
|
+
...columnNamesWithoutUserSettings,
|
|
35
|
+
].map((key) => ({
|
|
36
|
+
key,
|
|
37
|
+
enabled: true,
|
|
38
|
+
preferredWidth: 'auto',
|
|
39
|
+
pinned: !!supportedColumns.get(key)?.defaultPinned,
|
|
40
|
+
}));
|
|
41
|
+
return orderIntentionally([...columnsWithUserSettings, ...columnsWithoutUserSettings], columnNameMap);
|
|
42
|
+
}
|
|
43
|
+
TableColumnHelpers.getAllColumns = getAllColumns;
|
|
44
|
+
function orderIntentionally(columns, columnNameMap) {
|
|
45
|
+
return [
|
|
46
|
+
...columns.filter(v => v.pinned),
|
|
47
|
+
...columns.filter(v => v.enabled && !v.pinned),
|
|
48
|
+
...columns
|
|
49
|
+
.filter(v => !v.enabled && !v.pinned)
|
|
50
|
+
.sort((a, b) => {
|
|
51
|
+
const aName = columnNameMap.get(a.key) ?? a.key;
|
|
52
|
+
const bName = columnNameMap.get(b.key) ?? b.key;
|
|
53
|
+
return aName.localeCompare(bName);
|
|
54
|
+
}),
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
function getAlignment(metadata, index, allowSelection) {
|
|
58
|
+
return getColumnAlignment(metadata.dataType, index === 0 && !allowSelection);
|
|
59
|
+
}
|
|
60
|
+
function resolveColumns(state, supportedColumns, columnNameMap, allowSelection) {
|
|
61
|
+
const allColumns = getAllColumns(state, supportedColumns, columnNameMap);
|
|
62
|
+
return allColumns
|
|
63
|
+
.filter(({ enabled }) => enabled)
|
|
64
|
+
.reduce((fullColumns, settings, i) => {
|
|
65
|
+
const metadata = supportedColumns.get(settings.key);
|
|
66
|
+
const resolvedWidth = settings.preferredWidth === 'auto'
|
|
67
|
+
? metadata.minWidth
|
|
68
|
+
: Math.max(metadata.minWidth, settings.preferredWidth);
|
|
69
|
+
const previousColumn = fullColumns[i - 1];
|
|
70
|
+
return [
|
|
71
|
+
...fullColumns,
|
|
72
|
+
{
|
|
73
|
+
...settings,
|
|
74
|
+
...metadata,
|
|
75
|
+
width: resolvedWidth,
|
|
76
|
+
left: settings.pinned
|
|
77
|
+
? previousColumn
|
|
78
|
+
? (previousColumn.left || 0) + previousColumn.width
|
|
79
|
+
: !!allowSelection
|
|
80
|
+
? 40
|
|
81
|
+
: 0
|
|
82
|
+
: null,
|
|
83
|
+
alignment: getAlignment(metadata, i, !!allowSelection),
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
}, []);
|
|
87
|
+
}
|
|
88
|
+
TableColumnHelpers.resolveColumns = resolveColumns;
|
|
89
|
+
function changeColumnPin(state, columns, columnNameMap, column, pinned) {
|
|
90
|
+
const allColumns = getAllColumns(state, columns, columnNameMap);
|
|
91
|
+
if (pinned) {
|
|
92
|
+
const target = allColumns.find(c => c.key === column);
|
|
93
|
+
const wasEnabled = !!target?.enabled;
|
|
94
|
+
if (!wasEnabled) {
|
|
95
|
+
const enabledCount = allColumns.filter(col => col.enabled).length;
|
|
96
|
+
if (enabledCount >= RivTable.ColumnsMaxShown) {
|
|
97
|
+
return state; // refuse the pin since it would exceed the max
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
...state,
|
|
103
|
+
display: {
|
|
104
|
+
...state.display,
|
|
105
|
+
columnSettings: orderIntentionally(allColumns.map(c => ({
|
|
106
|
+
...c,
|
|
107
|
+
pinned: c.key === column ? pinned : c.pinned,
|
|
108
|
+
// Check/enable if being pinned
|
|
109
|
+
enabled: c.key === column && pinned ? true : c.enabled,
|
|
110
|
+
})), columnNameMap),
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
TableColumnHelpers.changeColumnPin = changeColumnPin;
|
|
115
|
+
function changeColumnsFreezeState(state, columns, columnNameMap, index, freeze) {
|
|
116
|
+
const allColumns = getAllColumns(state, columns, columnNameMap);
|
|
117
|
+
return {
|
|
118
|
+
...state,
|
|
119
|
+
display: {
|
|
120
|
+
...state.display,
|
|
121
|
+
columnSettings: allColumns.map((c, i) => {
|
|
122
|
+
return { ...c, pinned: freeze && i <= index };
|
|
123
|
+
}),
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
TableColumnHelpers.changeColumnsFreezeState = changeColumnsFreezeState;
|
|
128
|
+
function moveColumnTo(state, columns, columnNameMap, column, position) {
|
|
129
|
+
const allColumns = getAllColumns(state, columns, columnNameMap);
|
|
130
|
+
const previousIndex = allColumns.findIndex(c => c.key === column);
|
|
131
|
+
const lastIndex = position == 'end' ? allColumns.findIndex(c => !c.enabled) : 0;
|
|
132
|
+
const newIndex = position == 'start'
|
|
133
|
+
? 0
|
|
134
|
+
: lastIndex == -1
|
|
135
|
+
? allColumns.length - 1
|
|
136
|
+
: lastIndex;
|
|
137
|
+
if (!allColumns[previousIndex].enabled &&
|
|
138
|
+
allColumns.filter(col => col.enabled).length >= RivTable.ColumnsMaxShown)
|
|
139
|
+
return state;
|
|
140
|
+
const movedState = changeColumnOrder(state, columns, columnNameMap, previousIndex, newIndex);
|
|
141
|
+
//Make sure the column is enabled
|
|
142
|
+
return changeColumnEnabled(movedState, columns, columnNameMap, column, true);
|
|
143
|
+
}
|
|
144
|
+
TableColumnHelpers.moveColumnTo = moveColumnTo;
|
|
145
|
+
function changeColumnOrder(state, columns, columnNameMap, previousIndex, newIndex) {
|
|
146
|
+
const allColumns = getAllColumns(state, columns, columnNameMap);
|
|
147
|
+
// First, put the columns in the desired order.
|
|
148
|
+
const item = allColumns[previousIndex];
|
|
149
|
+
const withoutItem = allColumns.filter((_, i) => i !== previousIndex);
|
|
150
|
+
const reordered = [
|
|
151
|
+
...withoutItem.slice(0, newIndex),
|
|
152
|
+
item,
|
|
153
|
+
...withoutItem.slice(newIndex),
|
|
154
|
+
];
|
|
155
|
+
// Then, we may need to fix the pins (all pinned columns appear at the
|
|
156
|
+
// beginning of the columns array) since the user is allowed to drag
|
|
157
|
+
// and drop columns to and from the pinned area. If the user drags a
|
|
158
|
+
// column across that threshold, update its pinned status.
|
|
159
|
+
const updated = reordered.map((settings, i, arr) => {
|
|
160
|
+
if (newIndex === i) {
|
|
161
|
+
return {
|
|
162
|
+
...settings,
|
|
163
|
+
pinned: settings.pinned
|
|
164
|
+
? arr[i - 1]?.pinned ?? true
|
|
165
|
+
: arr[i + 1]?.pinned ?? false,
|
|
166
|
+
enabled: settings.enabled
|
|
167
|
+
? arr[i - 1]?.enabled ?? true
|
|
168
|
+
: arr[i + 1]?.enabled ?? false,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
else
|
|
172
|
+
return settings;
|
|
173
|
+
});
|
|
174
|
+
const wasDisabled = !item.enabled;
|
|
175
|
+
const becameEnabled = updated[newIndex].enabled;
|
|
176
|
+
if (wasDisabled && becameEnabled) {
|
|
177
|
+
const enabledCount = allColumns.filter(c => c.enabled).length;
|
|
178
|
+
if (enabledCount >= RivTable.ColumnsMaxShown) {
|
|
179
|
+
// Refuse the move; keep state as-is
|
|
180
|
+
return state;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
...state,
|
|
185
|
+
display: {
|
|
186
|
+
...state.display,
|
|
187
|
+
columnSettings: orderIntentionally(updated, columnNameMap),
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
TableColumnHelpers.changeColumnOrder = changeColumnOrder;
|
|
192
|
+
function changeColumnEnabled(state, columns, columnNameMap, column, enabled) {
|
|
193
|
+
const allColumns = getAllColumns(state, columns, columnNameMap);
|
|
194
|
+
if (enabled &&
|
|
195
|
+
allColumns.filter(col => col.enabled).length >= RivTable.ColumnsMaxShown) {
|
|
196
|
+
return state;
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
...state,
|
|
200
|
+
display: {
|
|
201
|
+
...state.display,
|
|
202
|
+
columnSettings: orderIntentionally(allColumns.map(c => ({
|
|
203
|
+
...c,
|
|
204
|
+
enabled: c.key === column ? enabled : c.enabled,
|
|
205
|
+
// Unpin if being unchecked
|
|
206
|
+
pinned: c.key === column && !enabled ? false : c.pinned,
|
|
207
|
+
})), columnNameMap),
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
TableColumnHelpers.changeColumnEnabled = changeColumnEnabled;
|
|
212
|
+
function enableAllColumns(state, columns, columnNameMap, enabled) {
|
|
213
|
+
const allColumns = getAllColumns(state, columns, columnNameMap);
|
|
214
|
+
if (enabled && allColumns.length > RivTable.ColumnsMaxShown)
|
|
215
|
+
return state;
|
|
216
|
+
return {
|
|
217
|
+
...state,
|
|
218
|
+
display: {
|
|
219
|
+
...state.display,
|
|
220
|
+
columnSettings: orderIntentionally(allColumns.map(c => ({
|
|
221
|
+
...c,
|
|
222
|
+
enabled: enabled,
|
|
223
|
+
// Unpin if being unchecked
|
|
224
|
+
pinned: !enabled ? false : c.pinned,
|
|
225
|
+
})), columnNameMap),
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
TableColumnHelpers.enableAllColumns = enableAllColumns;
|
|
230
|
+
function changeColumnWidth(state, columns, columnNameMap, column, preferredWidth) {
|
|
231
|
+
const allColumns = getAllColumns(state, columns, columnNameMap);
|
|
232
|
+
return {
|
|
233
|
+
...state,
|
|
234
|
+
display: {
|
|
235
|
+
...state.display,
|
|
236
|
+
columnSettings: allColumns.map(c => ({
|
|
237
|
+
...c,
|
|
238
|
+
preferredWidth: c.key === column ? preferredWidth : c.preferredWidth,
|
|
239
|
+
})),
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
TableColumnHelpers.changeColumnWidth = changeColumnWidth;
|
|
244
|
+
function resetToDefaultColumns(state, columns, columnNameMap, defaultColumnState) {
|
|
245
|
+
return {
|
|
246
|
+
...state,
|
|
247
|
+
display: {
|
|
248
|
+
...state.display,
|
|
249
|
+
columnSettings: orderIntentionally(defaultColumnState, columnNameMap),
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
TableColumnHelpers.resetToDefaultColumns = resetToDefaultColumns;
|
|
254
|
+
})(TableColumnHelpers || (TableColumnHelpers = {}));
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL2NvbHVtbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwQyxNQUFNLEtBQVcsa0JBQWtCLENBd2FsQztBQXhhRCxXQUFpQixrQkFBa0I7SUFDakMsU0FBZ0Isa0JBQWtCLENBQ2hDLFFBQWlDLEVBQ2pDLE9BQWdCO1FBRWhCLElBQUksT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzNCLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxVQUFVO2dCQUNiLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxXQUFXO2dCQUNkLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sQ0FBQztTQUNsQjtJQUNILENBQUM7SUFqQmUscUNBQWtCLHFCQWlCakMsQ0FBQTtJQUVELFNBQWdCLGFBQWEsQ0FNM0IsS0FBcUMsRUFDckMsZ0JBQWlELEVBQ2pELGFBQXdDO1FBRXhDLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsMkVBQTJFO1FBQzNFLDZFQUE2RTtRQUM3RSx5RUFBeUU7UUFDekUsdUVBQXVFO1FBQ3ZFLGtDQUFrQztRQUNsQyxNQUFNLDhCQUE4QixHQUFHLFVBQVUsQ0FDL0MsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcs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QUFDO0lBbEJlLHdDQUFxQix3QkFrQnBDLENBQUE7QUFDSCxDQUFDLEVBeGFnQixrQkFBa0IsS0FBbEIsa0JBQWtCLFFBd2FsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVDb2x1bW5IZWxwZXJzIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkFsaWdubWVudChcbiAgICBkYXRhVHlwZTogUml2VGFibGUuQ29sdW1uRGF0YVR5cGUsXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29sdW1uQWxpZ25tZW50IHtcbiAgICBpZiAoaXNGaXJzdCkgcmV0dXJuICdsZWZ0JztcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ2xvbmdUZXh0JzpcbiAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgIGNhc2UgJ2FkdmFuY2VkJzpcbiAgICAgIGNhc2UgJ2ljb24nOlxuICAgICAgY2FzZSAnc2hvcnRUZXh0JzpcbiAgICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEFsbENvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgKTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSB7XG4gICAgLy8gSWYgdGhlIHRhYmxlIG9mZmVycyBtb3JlIGNvbHVtbnMgdGhhbiB0aGUgdXNlciBoYXMgY29uZmlndXJhdGlvbiBzZXR0aW5nc1xuICAgIC8vIGZvciAob3IgaWYgdGhlIHVzZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0KSwgd2UnbGwgYXBwZW5kIHRoZW1cbiAgICAvLyB0byB0aGUgZW5kICh1bmxlc3MgdGhleSBzaG91bGQgYmUgcGlubmVkIGJ5IGRlZmF1bHQsIGluIHdoaWNoIGNhc2Ugd2UnbGxcbiAgICAvLyBhcHBlbmQgdGhlbSBhZnRlciB0aGUgb3RoZXIgcGlubmVkIGNvbHVtbnMpLiBUaGlzIGVuc3VyZXMgdGhhdCBuZXcgY29sdW1uc1xuICAgIC8vIHdlIGFkZCB0byBleGlzdGluZyB0YWJsZXMgb3ZlciB0aW1lICgxKSBnZXQgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIHRoZXlcbiAgICAvLyBkb24ndCBhcHBlYXIgaW4gdGhlIHVzZXIncyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHlldCwgYW5kICgyKSBkb24ndFxuICAgIC8vIGludGVycnVwdCB0aGVpciBleGlzdGluZyBzZXR1cC5cbiAgICBjb25zdCBjb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MgPSBkaWZmZXJlbmNlKFxuICAgICAgWy4uLnN1cHBvcnRlZENvbHVtbnMua2V5cygpXSxcbiAgICAgIHN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3MubWFwKCh7IGtleSB9KSA9PiBrZXkpLFxuICAgICk7XG5cbiAgICAvLyBUaHJvdyBvdXQgc2V0dGluZ3MgZm9yIGNvbHVtbnMgbm8gbG9uZ2VyIG9mZmVyZWQgYnkgdGhlIHRhYmxlLlxuICAgIGNvbnN0IGNvbHVtbnNXaXRoVXNlclNldHRpbmdzOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdID1cbiAgICAgIHN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3MuZmlsdGVyKCh7IGtleSB9KSA9PlxuICAgICAgICBzdXBwb3J0ZWRDb2x1bW5zLmhhcyhrZXkpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbnNXaXRob3V0VXNlclNldHRpbmdzOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdID0gW1xuICAgICAgLi4uY29sdW1uTmFtZXNXaXRob3V0VXNlclNldHRpbmdzLFxuICAgIF0ubWFwKChrZXk6IEMpID0+ICh7XG4gICAgICBrZXksXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgcHJlZmVycmVkV2lkdGg6ICdhdXRvJyxcbiAgICAgIHBpbm5lZDogISFzdXBwb3J0ZWRDb2x1bW5zLmdldChrZXkpPy5kZWZhdWx0UGlubmVkLFxuICAgIH0pKTtcblxuICAgIHJldHVybiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICBbLi4uY29sdW1uc1dpdGhVc2VyU2V0dGluZ3MsIC4uLmNvbHVtbnNXaXRob3V0VXNlclNldHRpbmdzXSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9yZGVySW50ZW50aW9uYWxseTxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPihcbiAgICBjb2x1bW5zOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICk6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5jb2x1bW5zLmZpbHRlcih2ID0+IHYucGlubmVkKSxcbiAgICAgIC4uLmNvbHVtbnMuZmlsdGVyKHYgPT4gdi5lbmFibGVkICYmICF2LnBpbm5lZCksXG4gICAgICAuLi5jb2x1bW5zXG4gICAgICAgIC5maWx0ZXIodiA9PiAhdi5lbmFibGVkICYmICF2LnBpbm5lZClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBhTmFtZSA9IGNvbHVtbk5hbWVNYXAuZ2V0KGEua2V5KSA/PyBhLmtleTtcbiAgICAgICAgICBjb25zdCBiTmFtZSA9IGNvbHVtbk5hbWVNYXAuZ2V0KGIua2V5KSA/PyBiLmtleTtcbiAgICAgICAgICByZXR1cm4gYU5hbWUubG9jYWxlQ29tcGFyZShiTmFtZSk7XG4gICAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBbGlnbm1lbnQoXG4gICAgbWV0YWRhdGE6IFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxsb3dTZWxlY3Rpb24/OiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db2x1bW5BbGlnbm1lbnQge1xuICAgIHJldHVybiBnZXRDb2x1bW5BbGlnbm1lbnQoXG4gICAgICBtZXRhZGF0YS5kYXRhVHlwZSxcbiAgICAgIGluZGV4ID09PSAwICYmICFhbGxvd1NlbGVjdGlvbixcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDb2x1bW5zPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBzdXBwb3J0ZWRDb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgYWxsb3dTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gICk6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIHN1cHBvcnRlZENvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICAgIHJldHVybiBhbGxDb2x1bW5zXG4gICAgICAuZmlsdGVyKCh7IGVuYWJsZWQgfSkgPT4gZW5hYmxlZClcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChcbiAgICAgICAgICBmdWxsQ29sdW1uczogUml2VGFibGUuRnVsbENvbHVtbjxDPltdLFxuICAgICAgICAgIHNldHRpbmdzOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPixcbiAgICAgICAgICBpOiBudW1iZXIsXG4gICAgICAgICk6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBzdXBwb3J0ZWRDb2x1bW5zLmdldChzZXR0aW5ncy5rZXkpITtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFdpZHRoID1cbiAgICAgICAgICAgIHNldHRpbmdzLnByZWZlcnJlZFdpZHRoID09PSAnYXV0bydcbiAgICAgICAgICAgICAgPyBtZXRhZGF0YS5taW5XaWR0aFxuICAgICAgICAgICAgICA6IE1hdGgubWF4KG1ldGFkYXRhLm1pbldpZHRoLCBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCk7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNDb2x1bW46IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz4gfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgZnVsbENvbHVtbnNbaSAtIDFdO1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5mdWxsQ29sdW1ucyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICAgICAgICB3aWR0aDogcmVzb2x2ZWRXaWR0aCxcbiAgICAgICAgICAgICAgbGVmdDogc2V0dGluZ3MucGlubmVkXG4gICAgICAgICAgICAgICAgPyBwcmV2aW91c0NvbHVtblxuICAgICAgICAgICAgICAgICAgPyAocHJldmlvdXNDb2x1bW4ubGVmdCB8fCAwKSArIHByZXZpb3VzQ29sdW1uLndpZHRoXG4gICAgICAgICAgICAgICAgICA6ICEhYWxsb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgID8gNDBcbiAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgYWxpZ25tZW50OiBnZXRBbGlnbm1lbnQobWV0YWRhdGEsIGksICEhYWxsb3dTZWxlY3Rpb24pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9LFxuICAgICAgICBbXSxcbiAgICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uUGluPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgY29sdW1uOiBDLFxuICAgIHBpbm5lZDogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG5cbiAgICBpZiAocGlubmVkKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBhbGxDb2x1bW5zLmZpbmQoYyA9PiBjLmtleSA9PT0gY29sdW1uKTtcbiAgICAgIGNvbnN0IHdhc0VuYWJsZWQgPSAhIXRhcmdldD8uZW5hYmxlZDtcbiAgICAgIGlmICghd2FzRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBlbmFibGVkQ291bnQgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmVuYWJsZWQpLmxlbmd0aDtcbiAgICAgICAgaWYgKGVuYWJsZWRDb3VudCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd24pIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGU7IC8vIHJlZnVzZSB0aGUgcGluIHNpbmNlIGl0IHdvdWxkIGV4Y2VlZCB0aGUgbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgICAgYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgICAgLi4uYyxcbiAgICAgICAgICAgIHBpbm5lZDogYy5rZXkgPT09IGNvbHVtbiA/IHBpbm5lZCA6IGMucGlubmVkLFxuICAgICAgICAgICAgLy8gQ2hlY2svZW5hYmxlIGlmIGJlaW5nIHBpbm5lZFxuICAgICAgICAgICAgZW5hYmxlZDogYy5rZXkgPT09IGNvbHVtbiAmJiBwaW5uZWQgPyB0cnVlIDogYy5lbmFibGVkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZnJlZXplOiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IGFsbENvbHVtbnMubWFwKChjLCBpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYywgcGlubmVkOiBmcmVlemUgJiYgaSA8PSBpbmRleCB9O1xuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBtb3ZlQ29sdW1uVG88XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBjb2x1bW46IEMsXG4gICAgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJyxcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGFsbENvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IGNvbHVtbik7XG4gICAgY29uc3QgbGFzdEluZGV4ID1cbiAgICAgIHBvc2l0aW9uID09ICdlbmQnID8gYWxsQ29sdW1ucy5maW5kSW5kZXgoYyA9PiAhYy5lbmFibGVkKSA6IDA7XG4gICAgY29uc3QgbmV3SW5kZXggPVxuICAgICAgcG9zaXRpb24gPT0gJ3N0YXJ0J1xuICAgICAgICA/IDBcbiAgICAgICAgOiBsYXN0SW5kZXggPT0gLTFcbiAgICAgICAgPyBhbGxDb2x1bW5zLmxlbmd0aCAtIDFcbiAgICAgICAgOiBsYXN0SW5kZXg7XG5cbiAgICBpZiAoXG4gICAgICAhYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XS5lbmFibGVkICYmXG4gICAgICBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmVuYWJsZWQpLmxlbmd0aCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd25cbiAgICApXG4gICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBjb25zdCBtb3ZlZFN0YXRlID0gY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICBzdGF0ZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIG5ld0luZGV4LFxuICAgICk7XG4gICAgLy9NYWtlIHN1cmUgdGhlIGNvbHVtbiBpcyBlbmFibGVkXG4gICAgcmV0dXJuIGNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICBtb3ZlZFN0YXRlLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICBjb2x1bW4sXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uT3JkZXI8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgbmV3SW5kZXg6IG51bWJlcixcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG5cbiAgICAvLyBGaXJzdCwgcHV0IHRoZSBjb2x1bW5zIGluIHRoZSBkZXNpcmVkIG9yZGVyLlxuICAgIGNvbnN0IGl0ZW0gPSBhbGxDb2x1bW5zW3ByZXZpb3VzSW5kZXhdO1xuICAgIGNvbnN0IHdpdGhvdXRJdGVtID0gYWxsQ29sdW1ucy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IHByZXZpb3VzSW5kZXgpO1xuICAgIGNvbnN0IHJlb3JkZXJlZCA9IFtcbiAgICAgIC4uLndpdGhvdXRJdGVtLnNsaWNlKDAsIG5ld0luZGV4KSxcbiAgICAgIGl0ZW0sXG4gICAgICAuLi53aXRob3V0SXRlbS5zbGljZShuZXdJbmRleCksXG4gICAgXTtcblxuICAgIC8vIFRoZW4sIHdlIG1heSBuZWVkIHRvIGZpeCB0aGUgcGlucyAoYWxsIHBpbm5lZCBjb2x1bW5zIGFwcGVhciBhdCB0aGVcbiAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIGNvbHVtbnMgYXJyYXkpIHNpbmNlIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZHJhZ1xuICAgIC8vIGFuZCBkcm9wIGNvbHVtbnMgdG8gYW5kIGZyb20gdGhlIHBpbm5lZCBhcmVhLiBJZiB0aGUgdXNlciBkcmFncyBhXG4gICAgLy8gY29sdW1uIGFjcm9zcyB0aGF0IHRocmVzaG9sZCwgdXBkYXRlIGl0cyBwaW5uZWQgc3RhdHVzLlxuICAgIGNvbnN0IHVwZGF0ZWQgPSByZW9yZGVyZWQubWFwKChzZXR0aW5ncywgaSwgYXJyKSA9PiB7XG4gICAgICBpZiAobmV3SW5kZXggPT09IGkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICBwaW5uZWQ6IHNldHRpbmdzLnBpbm5lZFxuICAgICAgICAgICAgPyBhcnJbaSAtIDFdPy5waW5uZWQgPz8gdHJ1ZVxuICAgICAgICAgICAgOiBhcnJbaSArIDFdPy5waW5uZWQgPz8gZmFsc2UsXG4gICAgICAgICAgZW5hYmxlZDogc2V0dGluZ3MuZW5hYmxlZFxuICAgICAgICAgICAgPyBhcnJbaSAtIDFdPy5lbmFibGVkID8/IHRydWVcbiAgICAgICAgICAgIDogYXJyW2kgKyAxXT8uZW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSByZXR1cm4gc2V0dGluZ3M7XG4gICAgfSk7XG5cbiAgICBjb25zdCB3YXNEaXNhYmxlZCA9ICFpdGVtLmVuYWJsZWQ7XG4gICAgY29uc3QgYmVjYW1lRW5hYmxlZCA9IHVwZGF0ZWRbbmV3SW5kZXhdLmVuYWJsZWQ7XG4gICAgaWYgKHdhc0Rpc2FibGVkICYmIGJlY2FtZUVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGVuYWJsZWRDb3VudCA9IGFsbENvbHVtbnMuZmlsdGVyKGMgPT4gYy5lbmFibGVkKS5sZW5ndGg7XG4gICAgICBpZiAoZW5hYmxlZENvdW50ID49IFJpdlRhYmxlLkNvbHVtbnNNYXhTaG93bikge1xuICAgICAgICAvLyBSZWZ1c2UgdGhlIG1vdmU7IGtlZXAgc3RhdGUgYXMtaXNcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IG9yZGVySW50ZW50aW9uYWxseSh1cGRhdGVkLCBjb2x1bW5OYW1lTWFwKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5FbmFibGVkPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgY29sdW1uOiBDLFxuICAgIGVuYWJsZWQ6IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICAgIGlmIChcbiAgICAgIGVuYWJsZWQgJiZcbiAgICAgIGFsbENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZW5hYmxlZCkubGVuZ3RoID49IFJpdlRhYmxlLkNvbHVtbnNNYXhTaG93blxuICAgICkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgICAgICBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgICAgICAuLi5jLFxuICAgICAgICAgICAgZW5hYmxlZDogYy5rZXkgPT09IGNvbHVtbiA/IGVuYWJsZWQgOiBjLmVuYWJsZWQsXG4gICAgICAgICAgICAvLyBVbnBpbiBpZiBiZWluZyB1bmNoZWNrZWRcbiAgICAgICAgICAgIHBpbm5lZDogYy5rZXkgPT09IGNvbHVtbiAmJiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5hYmxlQWxsQ29sdW1uczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIGVuYWJsZWQ6IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICAgIGlmIChlbmFibGVkICYmIGFsbENvbHVtbnMubGVuZ3RoID4gUml2VGFibGUuQ29sdW1uc01heFNob3duKSByZXR1cm4gc3RhdGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgICAgYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgICAgLi4uYyxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgICAgICAvLyBVbnBpbiBpZiBiZWluZyB1bmNoZWNrZWRcbiAgICAgICAgICAgIHBpbm5lZDogIWVuYWJsZWQgPyBmYWxzZSA6IGMucGlubmVkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbldpZHRoPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgY29sdW1uOiBDLFxuICAgIHByZWZlcnJlZFdpZHRoOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPlsncHJlZmVycmVkV2lkdGgnXSxcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgcHJlZmVycmVkV2lkdGg6IGMua2V5ID09PSBjb2x1bW4gPyBwcmVmZXJyZWRXaWR0aCA6IGMucHJlZmVycmVkV2lkdGgsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNldFRvRGVmYXVsdENvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBkZWZhdWx0Q29sdW1uU3RhdGU6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KGRlZmF1bHRDb2x1bW5TdGF0ZSwgY29sdW1uTmFtZU1hcCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { toInteger } from 'lodash';
|
|
2
|
+
import { TableResultHelpers } from './result-helpers';
|
|
3
|
+
import { TableSearchHelpers } from './search-helpers';
|
|
4
|
+
export var TableDisplayHelpers;
|
|
5
|
+
(function (TableDisplayHelpers) {
|
|
6
|
+
function getZeroStateMessage(state, entity) {
|
|
7
|
+
if ((TableResultHelpers.isGroupResult(state.result) &&
|
|
8
|
+
state.result.totalGroupCount > 0) ||
|
|
9
|
+
(!TableResultHelpers.isGroupResult(state.result) &&
|
|
10
|
+
state.result.totalMatchingRowCount > 0))
|
|
11
|
+
return null;
|
|
12
|
+
const allSearchColumnsSelected = TableSearchHelpers.getSearchColumnsSelectedState(state, 'all');
|
|
13
|
+
if (state.query.search && allSearchColumnsSelected)
|
|
14
|
+
return `No ${entity} match your current search keyword.`;
|
|
15
|
+
if (state.query.search && !allSearchColumnsSelected)
|
|
16
|
+
return `No ${entity} match your current search keyword in the selected search columns.`;
|
|
17
|
+
if (state.query.filters)
|
|
18
|
+
return `No ${entity} match your current filters.`;
|
|
19
|
+
return `No ${entity}.`;
|
|
20
|
+
}
|
|
21
|
+
TableDisplayHelpers.getZeroStateMessage = getZeroStateMessage;
|
|
22
|
+
function memoizedCellRowSpan(s, fullColumns, options) {
|
|
23
|
+
const getRowSpanForCell = options?.getRowSpanForCell;
|
|
24
|
+
const result = s.result;
|
|
25
|
+
// If the dataset exceeds the current page size, skip span calculations.
|
|
26
|
+
if (s.result.totalMatchingRowCount > s.query.pagination.pageSize)
|
|
27
|
+
return null;
|
|
28
|
+
// If the user hasn't provided the row span configuration, default to no spanning
|
|
29
|
+
if (!getRowSpanForCell)
|
|
30
|
+
return null;
|
|
31
|
+
// Row spanning is not supported on grouped tables.
|
|
32
|
+
if (TableResultHelpers.isGroupResult(result))
|
|
33
|
+
return null;
|
|
34
|
+
// Memoize the user's configuration for the current page.
|
|
35
|
+
return new Map(fullColumns.map(column => [
|
|
36
|
+
column.key,
|
|
37
|
+
result.currentPageData.map((_, i) => {
|
|
38
|
+
const raw = getRowSpanForCell(i, column.key);
|
|
39
|
+
if (raw === 0)
|
|
40
|
+
return 0;
|
|
41
|
+
else
|
|
42
|
+
return Math.max(1, toInteger(raw));
|
|
43
|
+
}),
|
|
44
|
+
]));
|
|
45
|
+
}
|
|
46
|
+
TableDisplayHelpers.memoizedCellRowSpan = memoizedCellRowSpan;
|
|
47
|
+
})(TableDisplayHelpers || (TableDisplayHelpers = {}));
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvc3RhdGUtaGVscGVycy9kaXNwbGF5LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RCxNQUFNLEtBQVcsbUJBQW1CLENBMkRuQztBQTNERCxXQUFpQixtQkFBbUI7SUFDbEMsU0FBZ0IsbUJBQW1CLENBS2pDLEtBQXFDLEVBQUUsTUFBYztRQUNyRCxJQUNFLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDN0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDOUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7WUFFekMsT0FBTyxJQUFJLENBQUM7UUFDZCxNQUFNLHdCQUF3QixHQUM1QixrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSx3QkFBd0I7WUFDaEQsT0FBTyxNQUFNLE1BQU0scUNBQXFDLENBQUM7UUFDM0QsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QjtZQUNqRCxPQUFPLE1BQU0sTUFBTSxvRUFBb0UsQ0FBQztRQUMxRixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztZQUFFLE9BQU8sTUFBTSxNQUFNLDhCQUE4QixDQUFDO1FBQzNFLE9BQU8sTUFBTSxNQUFNLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBckJlLHVDQUFtQixzQkFxQmxDLENBQUE7SUFFRCxTQUFnQixtQkFBbUIsQ0FNakMsQ0FBaUMsRUFDakMsV0FBcUMsRUFDckMsT0FBNkM7UUFFN0MsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV4Qix3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDOUQsT0FBTyxJQUFJLENBQUM7UUFFZCxpRkFBaUY7UUFDakYsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXBDLG1EQUFtRDtRQUNuRCxJQUFJLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxRCx5REFBeUQ7UUFDekQsT0FBTyxJQUFJLEdBQUcsQ0FDWixXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLEdBQUc7WUFDVixNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFBRSxPQUFPLENBQUMsQ0FBQzs7b0JBQ25CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDO1NBQ0gsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBbENlLHVDQUFtQixzQkFrQ2xDLENBQUE7QUFDSCxDQUFDLEVBM0RnQixtQkFBbUIsS0FBbkIsbUJBQW1CLFFBMkRuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvSW50ZWdlciB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB7IFRhYmxlUmVzdWx0SGVscGVycyB9IGZyb20gJy4vcmVzdWx0LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVTZWFyY2hIZWxwZXJzIH0gZnJvbSAnLi9zZWFyY2gtaGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVEaXNwbGF5SGVscGVycyB7XG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRaZXJvU3RhdGVNZXNzYWdlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiwgZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSAmJlxuICAgICAgICBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50ID4gMCkgfHxcbiAgICAgICghVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSAmJlxuICAgICAgICBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID4gMClcbiAgICApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhbGxTZWFyY2hDb2x1bW5zU2VsZWN0ZWQgPVxuICAgICAgVGFibGVTZWFyY2hIZWxwZXJzLmdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnYWxsJyk7XG4gICAgaWYgKHN0YXRlLnF1ZXJ5LnNlYXJjaCAmJiBhbGxTZWFyY2hDb2x1bW5zU2VsZWN0ZWQpXG4gICAgICByZXR1cm4gYE5vICR7ZW50aXR5fSBtYXRjaCB5b3VyIGN1cnJlbnQgc2VhcmNoIGtleXdvcmQuYDtcbiAgICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoICYmICFhbGxTZWFyY2hDb2x1bW5zU2VsZWN0ZWQpXG4gICAgICByZXR1cm4gYE5vICR7ZW50aXR5fSBtYXRjaCB5b3VyIGN1cnJlbnQgc2VhcmNoIGtleXdvcmQgaW4gdGhlIHNlbGVjdGVkIHNlYXJjaCBjb2x1bW5zLmA7XG4gICAgaWYgKHN0YXRlLnF1ZXJ5LmZpbHRlcnMpIHJldHVybiBgTm8gJHtlbnRpdHl9IG1hdGNoIHlvdXIgY3VycmVudCBmaWx0ZXJzLmA7XG4gICAgcmV0dXJuIGBObyAke2VudGl0eX0uYDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBtZW1vaXplZENlbGxSb3dTcGFuPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgczogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGZ1bGxDb2x1bW5zOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10sXG4gICAgb3B0aW9ucz86IFJpdlRhYmxlLk1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBNYXA8QywgbnVtYmVyW10+IHwgbnVsbCB7XG4gICAgY29uc3QgZ2V0Um93U3BhbkZvckNlbGwgPSBvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbDtcbiAgICBjb25zdCByZXN1bHQgPSBzLnJlc3VsdDtcblxuICAgIC8vIElmIHRoZSBkYXRhc2V0IGV4Y2VlZHMgdGhlIGN1cnJlbnQgcGFnZSBzaXplLCBza2lwIHNwYW4gY2FsY3VsYXRpb25zLlxuICAgIGlmIChzLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIC8vIElmIHRoZSB1c2VyIGhhc24ndCBwcm92aWRlZCB0aGUgcm93IHNwYW4gY29uZmlndXJhdGlvbiwgZGVmYXVsdCB0byBubyBzcGFubmluZ1xuICAgIGlmICghZ2V0Um93U3BhbkZvckNlbGwpIHJldHVybiBudWxsO1xuXG4gICAgLy8gUm93IHNwYW5uaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gZ3JvdXBlZCB0YWJsZXMuXG4gICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KHJlc3VsdCkpIHJldHVybiBudWxsO1xuXG4gICAgLy8gTWVtb2l6ZSB0aGUgdXNlcidzIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICBmdWxsQ29sdW1ucy5tYXAoY29sdW1uID0+IFtcbiAgICAgICAgY29sdW1uLmtleSxcbiAgICAgICAgcmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgICBjb25zdCByYXcgPSBnZXRSb3dTcGFuRm9yQ2VsbChpLCBjb2x1bW4ua2V5KTtcbiAgICAgICAgICBpZiAocmF3ID09PSAwKSByZXR1cm4gMDtcbiAgICAgICAgICBlbHNlIHJldHVybiBNYXRoLm1heCgxLCB0b0ludGVnZXIocmF3KSk7XG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { orderBy } from 'lodash';
|
|
2
|
+
export var TableOrderHelpers;
|
|
3
|
+
(function (TableOrderHelpers) {
|
|
4
|
+
function orderEmptyLast(rows, key, direction) {
|
|
5
|
+
return orderBy(rows, [row => row[key] == null, key], ['asc', direction]);
|
|
6
|
+
}
|
|
7
|
+
TableOrderHelpers.orderEmptyLast = orderEmptyLast;
|
|
8
|
+
function orderNestedRowsEmptyLast(rows, key, direction) {
|
|
9
|
+
return orderBy(rows, [row => row.data[key] == null, row => row.data[key]], ['asc', direction]);
|
|
10
|
+
}
|
|
11
|
+
TableOrderHelpers.orderNestedRowsEmptyLast = orderNestedRowsEmptyLast;
|
|
12
|
+
function orderNestedRowsBySearchMatch(rows, idToSearchIndexMap) {
|
|
13
|
+
return orderBy(rows, [row => idToSearchIndexMap.get(row.data.id)], ['asc']);
|
|
14
|
+
}
|
|
15
|
+
TableOrderHelpers.orderNestedRowsBySearchMatch = orderNestedRowsBySearchMatch;
|
|
16
|
+
function toggleColumnOrder(state, column) {
|
|
17
|
+
if (state.query.order?.column === column) {
|
|
18
|
+
return {
|
|
19
|
+
...state,
|
|
20
|
+
query: {
|
|
21
|
+
...state.query,
|
|
22
|
+
order: state.query.order.direction === 'asc'
|
|
23
|
+
? {
|
|
24
|
+
column,
|
|
25
|
+
direction: 'desc',
|
|
26
|
+
}
|
|
27
|
+
: null,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
...state,
|
|
33
|
+
query: {
|
|
34
|
+
...state.query,
|
|
35
|
+
order: {
|
|
36
|
+
column,
|
|
37
|
+
direction: 'asc',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
TableOrderHelpers.toggleColumnOrder = toggleColumnOrder;
|
|
43
|
+
/*
|
|
44
|
+
We only sort the lowest level rows if rows are nested.
|
|
45
|
+
|
|
46
|
+
In other words, we sort within each nested group, but do
|
|
47
|
+
NOT sort in relation to the other groups.
|
|
48
|
+
*/
|
|
49
|
+
function sortLowLevelNestedRows(allRows, sortKey, direction) {
|
|
50
|
+
function recursiveSortRows(nestedRows) {
|
|
51
|
+
const hasDeeperNesting = nestedRows.some(row => row.subRows && row.subRows.length > 0);
|
|
52
|
+
if (!hasDeeperNesting) {
|
|
53
|
+
const sortedRows = orderNestedRowsEmptyLast(nestedRows, sortKey, direction);
|
|
54
|
+
return sortedRows;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// If there is a deeper nesting, keep recursing
|
|
58
|
+
const sortedRows = [];
|
|
59
|
+
for (const currentNestedRow of nestedRows) {
|
|
60
|
+
if (currentNestedRow.subRows && currentNestedRow.subRows.length > 0) {
|
|
61
|
+
const sortedSubRows = recursiveSortRows(currentNestedRow.subRows);
|
|
62
|
+
sortedRows.push({
|
|
63
|
+
...currentNestedRow,
|
|
64
|
+
subRows: sortedSubRows,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
sortedRows.push(currentNestedRow);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return sortedRows;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return recursiveSortRows(allRows);
|
|
75
|
+
}
|
|
76
|
+
TableOrderHelpers.sortLowLevelNestedRows = sortLowLevelNestedRows;
|
|
77
|
+
// Sort the data inside the headers, not the headers themselves
|
|
78
|
+
function sortLowLevelNestedRowsWithHeaders(allHeaders, sortKey, direction) {
|
|
79
|
+
const sortedHeaderRows = [];
|
|
80
|
+
for (const headerRow of allHeaders) {
|
|
81
|
+
const sortedSubRows = sortLowLevelNestedRows(headerRow.subRows, sortKey, direction);
|
|
82
|
+
sortedHeaderRows.push({
|
|
83
|
+
...headerRow,
|
|
84
|
+
subRows: sortedSubRows,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return sortedHeaderRows;
|
|
88
|
+
}
|
|
89
|
+
TableOrderHelpers.sortLowLevelNestedRowsWithHeaders = sortLowLevelNestedRowsWithHeaders;
|
|
90
|
+
// Create map to help us sort on Fuse relevance order
|
|
91
|
+
function createIdToSearchIndexMap(rowsMatchingSearch) {
|
|
92
|
+
const idToSearchIndexMap = new Map();
|
|
93
|
+
for (let i = 0; i < rowsMatchingSearch.length; i++) {
|
|
94
|
+
const rowMatchingIndex = rowsMatchingSearch[i];
|
|
95
|
+
idToSearchIndexMap.set(rowMatchingIndex.id, i);
|
|
96
|
+
}
|
|
97
|
+
return idToSearchIndexMap;
|
|
98
|
+
}
|
|
99
|
+
TableOrderHelpers.createIdToSearchIndexMap = createIdToSearchIndexMap;
|
|
100
|
+
// Sort based on how well the rows match a search
|
|
101
|
+
function sortNestedRowsBasedOnSearchMatches(allRows, idToSearchIndexMap) {
|
|
102
|
+
function recursiveSortRowsBySearchMatch(nestedRows) {
|
|
103
|
+
const hasDeeperNesting = nestedRows.some(row => row.subRows && row.subRows.length > 0);
|
|
104
|
+
if (!hasDeeperNesting) {
|
|
105
|
+
const sortedRows = orderNestedRowsBySearchMatch(nestedRows, idToSearchIndexMap);
|
|
106
|
+
return sortedRows;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// If there is a deeper nesting, keep recursing
|
|
110
|
+
const sortedRows = [];
|
|
111
|
+
for (const currentNestedRow of nestedRows) {
|
|
112
|
+
if (currentNestedRow.subRows && currentNestedRow.subRows.length > 0) {
|
|
113
|
+
const sortedSubRows = recursiveSortRowsBySearchMatch(currentNestedRow.subRows);
|
|
114
|
+
sortedRows.push({
|
|
115
|
+
...currentNestedRow,
|
|
116
|
+
subRows: sortedSubRows,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
sortedRows.push(currentNestedRow);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return sortedRows;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return recursiveSortRowsBySearchMatch(allRows);
|
|
127
|
+
}
|
|
128
|
+
TableOrderHelpers.sortNestedRowsBasedOnSearchMatches = sortNestedRowsBasedOnSearchMatches;
|
|
129
|
+
// Sort based on how well the rows match a search
|
|
130
|
+
function sortNestedRowsWithHeadersBasedOnSearchMatches(allHeaders, idToSearchIndexMap) {
|
|
131
|
+
const sortedHeaderRows = [];
|
|
132
|
+
for (const headerRow of allHeaders) {
|
|
133
|
+
const sortedSubRows = sortNestedRowsBasedOnSearchMatches(headerRow.subRows, idToSearchIndexMap);
|
|
134
|
+
sortedHeaderRows.push({
|
|
135
|
+
...headerRow,
|
|
136
|
+
subRows: sortedSubRows,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return sortedHeaderRows;
|
|
140
|
+
}
|
|
141
|
+
TableOrderHelpers.sortNestedRowsWithHeadersBasedOnSearchMatches = sortNestedRowsWithHeadersBasedOnSearchMatches;
|
|
142
|
+
})(TableOrderHelpers || (TableOrderHelpers = {}));
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3N0YXRlLWhlbHBlcnMvb3JkZXItaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBR2pDLE1BQU0sS0FBVyxpQkFBaUIsQ0FnTmpDO0FBaE5ELFdBQWlCLGlCQUFpQjtJQUNoQyxTQUFnQixjQUFjLENBQzVCLElBQVMsRUFDVCxHQUFZLEVBQ1osU0FBa0M7UUFFbEMsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQU5lLGdDQUFjLGlCQU03QixDQUFBO0lBRUQsU0FBZ0Isd0JBQXdCLENBQ3RDLElBQTZCLEVBQzdCLEdBQVksRUFDWixTQUFrQztRQUVsQyxPQUFPLE9BQU8sQ0FDWixJQUFJLEVBQ0osQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNwRCxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FDbkIsQ0FBQztJQUNKLENBQUM7SUFWZSwwQ0FBd0IsMkJBVXZDLENBQUE7SUFFRCxTQUFnQiw0QkFBNEIsQ0FDMUMsSUFBNkIsRUFDN0Isa0JBQWdEO1FBRWhELE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcs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T0FBTyxDQUFDLENBQUM7d0JBQzNELFVBQVUsQ0FBQyxJQUFJLENBQUM7NEJBQ2QsR0FBRyxnQkFBZ0I7NEJBQ25CLE9BQU8sRUFBRSxhQUFhO3lCQUN2QixDQUFDLENBQUM7cUJBQ0o7eUJBQU07d0JBQ0wsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3FCQUNuQztpQkFDRjtnQkFFRCxPQUFPLFVBQVUsQ0FBQzthQUNuQjtRQUNILENBQUM7UUFFRCxPQUFPLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFuQ2Usb0RBQWtDLHFDQW1DakQsQ0FBQTtJQUVELGlEQUFpRDtJQUNqRCxTQUFnQiw2Q0FBNkMsQ0FHM0QsVUFBeUMsRUFDekMsa0JBQWdEO1FBRWhELE1BQU0sZ0JBQWdCLEdBQWtDLEVBQUUsQ0FBQztRQUMzRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtZQUNsQyxNQUFNLGFBQWEsR0FDakIsa0NBQWtDLENBQ2hDLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLGtCQUFrQixDQUNuQixDQUFDO1lBQ0osZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUNwQixHQUFHLFNBQVM7Z0JBQ1osT0FBTyxFQUFFLGFBQWE7YUFDdkIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFwQmUsK0RBQTZDLGdEQW9CNUQsQ0FBQTtBQUNILENBQUMsRUFoTmdCLGlCQUFpQixLQUFqQixpQkFBaUIsUUFnTmpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZU9yZGVySGVscGVycyB7XG4gIGV4cG9ydCBmdW5jdGlvbiBvcmRlckVtcHR5TGFzdDxSPihcbiAgICByb3dzOiBSW10sXG4gICAga2V5OiBrZXlvZiBSLFxuICAgIGRpcmVjdGlvbjogUml2VGFibGUuT3JkZXJEaXJlY3Rpb24sXG4gICk6IFJbXSB7XG4gICAgcmV0dXJuIG9yZGVyQnkocm93cywgW3JvdyA9PiByb3dba2V5XSA9PSBudWxsLCBrZXldLCBbJ2FzYycsIGRpcmVjdGlvbl0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG9yZGVyTmVzdGVkUm93c0VtcHR5TGFzdDxSIGV4dGVuZHMgUml2VGFibGUuUm93PihcbiAgICByb3dzOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSxcbiAgICBrZXk6IGtleW9mIFIsXG4gICAgZGlyZWN0aW9uOiBSaXZUYWJsZS5PcmRlckRpcmVjdGlvbixcbiAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+W10ge1xuICAgIHJldHVybiBvcmRlckJ5KFxuICAgICAgcm93cyxcbiAgICAgIFtyb3cgPT4gcm93LmRhdGFba2V5XSA9PSBudWxsLCByb3cgPT4gcm93LmRhdGFba2V5XV0sXG4gICAgICBbJ2FzYycsIGRpcmVjdGlvbl0sXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvcmRlck5lc3RlZFJvd3NCeVNlYXJjaE1hdGNoPFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3c+KFxuICAgIHJvd3M6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPltdLFxuICAgIGlkVG9TZWFyY2hJbmRleE1hcDogTWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPixcbiAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+W10ge1xuICAgIHJldHVybiBvcmRlckJ5KHJvd3MsIFtyb3cgPT4gaWRUb1NlYXJjaEluZGV4TWFwLmdldChyb3cuZGF0YS5pZCldLCBbJ2FzYyddKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b2dnbGVDb2x1bW5PcmRlcjxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uOiBDLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGlmIChzdGF0ZS5xdWVyeS5vcmRlcj8uY29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgIG9yZGVyOlxuICAgICAgICAgICAgc3RhdGUucXVlcnkub3JkZXIuZGlyZWN0aW9uID09PSAnYXNjJ1xuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2Rlc2MnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgcXVlcnk6IHtcbiAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgIG9yZGVyOiB7XG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIGRpcmVjdGlvbjogJ2FzYycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgIFdlIG9ubHkgc29ydCB0aGUgbG93ZXN0IGxldmVsIHJvd3MgaWYgcm93cyBhcmUgbmVzdGVkLlxuXG4gICAgSW4gb3RoZXIgd29yZHMsIHdlIHNvcnQgd2l0aGluIGVhY2ggbmVzdGVkIGdyb3VwLCBidXQgZG9cbiAgICAgIE5PVCBzb3J0IGluIHJlbGF0aW9uIHRvIHRoZSBvdGhlciBncm91cHMuXG4gICovXG4gIGV4cG9ydCBmdW5jdGlvbiBzb3J0TG93TGV2ZWxOZXN0ZWRSb3dzPFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3c+KFxuICAgIGFsbFJvd3M6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPltdLFxuICAgIHNvcnRLZXk6IGtleW9mIFIsXG4gICAgZGlyZWN0aW9uOiBSaXZUYWJsZS5PcmRlckRpcmVjdGlvbixcbiAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+W10ge1xuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZVNvcnRSb3dzKFxuICAgICAgbmVzdGVkUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10sXG4gICAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+W10ge1xuICAgICAgY29uc3QgaGFzRGVlcGVyTmVzdGluZzogYm9vbGVhbiA9IG5lc3RlZFJvd3Muc29tZShcbiAgICAgICAgcm93ID0+IHJvdy5zdWJSb3dzICYmIHJvdy5zdWJSb3dzLmxlbmd0aCA+IDAsXG4gICAgICApO1xuICAgICAgaWYgKCFoYXNEZWVwZXJOZXN0aW5nKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZFJvd3M6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPltdID0gb3JkZXJOZXN0ZWRSb3dzRW1wdHlMYXN0KFxuICAgICAgICAgIG5lc3RlZFJvd3MsXG4gICAgICAgICAgc29ydEtleSxcbiAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBzb3J0ZWRSb3dzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBkZWVwZXIgbmVzdGluZywga2VlcCByZWN1cnNpbmdcbiAgICAgICAgY29uc3Qgc29ydGVkUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50TmVzdGVkUm93IG9mIG5lc3RlZFJvd3MpIHtcbiAgICAgICAgICBpZiAoY3VycmVudE5lc3RlZFJvdy5zdWJSb3dzICYmIGN1cnJlbnROZXN0ZWRSb3cuc3ViUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRTdWJSb3dzOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSA9IHJlY3Vyc2l2ZVNvcnRSb3dzKFxuICAgICAgICAgICAgICBjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc29ydGVkUm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudE5lc3RlZFJvdyxcbiAgICAgICAgICAgICAgc3ViUm93czogc29ydGVkU3ViUm93cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3J0ZWRSb3dzLnB1c2goY3VycmVudE5lc3RlZFJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvcnRlZFJvd3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY3Vyc2l2ZVNvcnRSb3dzKGFsbFJvd3MpO1xuICB9XG5cbiAgLy8gU29ydCB0aGUgZGF0YSBpbnNpZGUgdGhlIGhlYWRlcnMsIG5vdCB0aGUgaGVhZGVycyB0aGVtc2VsdmVzXG4gIGV4cG9ydCBmdW5jdGlvbiBzb3J0TG93TGV2ZWxOZXN0ZWRSb3dzV2l0aEhlYWRlcnM8UiBleHRlbmRzIFJpdlRhYmxlLlJvdz4oXG4gICAgYWxsSGVhZGVyczogUml2VGFibGUuTmVzdGVkSGVhZGVyUm93PFI+W10sXG4gICAgc29ydEtleToga2V5b2YgUixcbiAgICBkaXJlY3Rpb246IFJpdlRhYmxlLk9yZGVyRGlyZWN0aW9uLFxuICApOiBSaXZUYWJsZS5OZXN0ZWRIZWFkZXJSb3c8Uj5bXSB7XG4gICAgY29uc3Qgc29ydGVkSGVhZGVyUm93czogUml2VGFibGUuTmVzdGVkSGVhZGVyUm93PFI+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlclJvdyBvZiBhbGxIZWFkZXJzKSB7XG4gICAgICBjb25zdCBzb3J0ZWRTdWJSb3dzOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSA9IHNvcnRMb3dMZXZlbE5lc3RlZFJvd3MoXG4gICAgICAgIGhlYWRlclJvdy5zdWJSb3dzLFxuICAgICAgICBzb3J0S2V5LFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICApO1xuICAgICAgc29ydGVkSGVhZGVyUm93cy5wdXNoKHtcbiAgICAgICAgLi4uaGVhZGVyUm93LFxuICAgICAgICBzdWJSb3dzOiBzb3J0ZWRTdWJSb3dzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRlZEhlYWRlclJvd3M7XG4gIH1cblxuICAvLyBDcmVhdGUgbWFwIHRvIGhlbHAgdXMgc29ydCBvbiBGdXNlIHJlbGV2YW5jZSBvcmRlclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSWRUb1NlYXJjaEluZGV4TWFwPFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3c+KFxuICAgIHJvd3NNYXRjaGluZ1NlYXJjaDogUltdLFxuICApOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+IHtcbiAgICBjb25zdCBpZFRvU2VhcmNoSW5kZXhNYXA6IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3NNYXRjaGluZ1NlYXJjaC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgcm93TWF0Y2hpbmdJbmRleDogUiA9IHJvd3NNYXRjaGluZ1NlYXJjaFtpXTtcbiAgICAgIGlkVG9TZWFyY2hJbmRleE1hcC5zZXQocm93TWF0Y2hpbmdJbmRleC5pZCwgaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkVG9TZWFyY2hJbmRleE1hcDtcbiAgfVxuXG4gIC8vIFNvcnQgYmFzZWQgb24gaG93IHdlbGwgdGhlIHJvd3MgbWF0Y2ggYSBzZWFyY2hcbiAgZXhwb3J0IGZ1bmN0aW9uIHNvcnROZXN0ZWRSb3dzQmFzZWRPblNlYXJjaE1hdGNoZXM8UiBleHRlbmRzIFJpdlRhYmxlLlJvdz4oXG4gICAgYWxsUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10sXG4gICAgaWRUb1NlYXJjaEluZGV4TWFwOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+LFxuICApOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSB7XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlU29ydFJvd3NCeVNlYXJjaE1hdGNoKFxuICAgICAgbmVzdGVkUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10sXG4gICAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+W10ge1xuICAgICAgY29uc3QgaGFzRGVlcGVyTmVzdGluZzogYm9vbGVhbiA9IG5lc3RlZFJvd3Muc29tZShcbiAgICAgICAgcm93ID0+IHJvdy5zdWJSb3dzICYmIHJvdy5zdWJSb3dzLmxlbmd0aCA+IDAsXG4gICAgICApO1xuICAgICAgaWYgKCFoYXNEZWVwZXJOZXN0aW5nKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZFJvd3M6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPltdID1cbiAgICAgICAgICBvcmRlck5lc3RlZFJvd3NCeVNlYXJjaE1hdGNoKG5lc3RlZFJvd3MsIGlkVG9TZWFyY2hJbmRleE1hcCk7XG4gICAgICAgIHJldHVybiBzb3J0ZWRSb3dzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBkZWVwZXIgbmVzdGluZywga2VlcCByZWN1cnNpbmdcbiAgICAgICAgY29uc3Qgc29ydGVkUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50TmVzdGVkUm93IG9mIG5lc3RlZFJvd3MpIHtcbiAgICAgICAgICBpZiAoY3VycmVudE5lc3RlZFJvdy5zdWJSb3dzICYmIGN1cnJlbnROZXN0ZWRSb3cuc3ViUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRTdWJSb3dzOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSA9XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZVNvcnRSb3dzQnlTZWFyY2hNYXRjaChjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MpO1xuICAgICAgICAgICAgc29ydGVkUm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudE5lc3RlZFJvdyxcbiAgICAgICAgICAgICAgc3ViUm93czogc29ydGVkU3ViUm93cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3J0ZWRSb3dzLnB1c2goY3VycmVudE5lc3RlZFJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvcnRlZFJvd3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY3Vyc2l2ZVNvcnRSb3dzQnlTZWFyY2hNYXRjaChhbGxSb3dzKTtcbiAgfVxuXG4gIC8vIFNvcnQgYmFzZWQgb24gaG93IHdlbGwgdGhlIHJvd3MgbWF0Y2ggYSBzZWFyY2hcbiAgZXhwb3J0IGZ1bmN0aW9uIHNvcnROZXN0ZWRSb3dzV2l0aEhlYWRlcnNCYXNlZE9uU2VhcmNoTWF0Y2hlczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICA+KFxuICAgIGFsbEhlYWRlcnM6IFJpdlRhYmxlLk5lc3RlZEhlYWRlclJvdzxSPltdLFxuICAgIGlkVG9TZWFyY2hJbmRleE1hcDogTWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPixcbiAgKTogUml2VGFibGUuTmVzdGVkSGVhZGVyUm93PFI+W10ge1xuICAgIGNvbnN0IHNvcnRlZEhlYWRlclJvd3M6IFJpdlRhYmxlLk5lc3RlZEhlYWRlclJvdzxSPltdID0gW107XG4gICAgZm9yIChjb25zdCBoZWFkZXJSb3cgb2YgYWxsSGVhZGVycykge1xuICAgICAgY29uc3Qgc29ydGVkU3ViUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPVxuICAgICAgICBzb3J0TmVzdGVkUm93c0Jhc2VkT25TZWFyY2hNYXRjaGVzKFxuICAgICAgICAgIGhlYWRlclJvdy5zdWJSb3dzLFxuICAgICAgICAgIGlkVG9TZWFyY2hJbmRleE1hcCxcbiAgICAgICAgKTtcbiAgICAgIHNvcnRlZEhlYWRlclJvd3MucHVzaCh7XG4gICAgICAgIC4uLmhlYWRlclJvdyxcbiAgICAgICAgc3ViUm93czogc29ydGVkU3ViUm93cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0ZWRIZWFkZXJSb3dzO1xuICB9XG59XG4iXX0=
|