@rivet-health/design-system 40.44.4 → 41.0.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/fesm2022/rivet-health-design-system.mjs +23103 -18810
- package/fesm2022/rivet-health-design-system.mjs.map +1 -1
- package/package.json +8 -9
- package/types/rivet-health-design-system.d.ts +6566 -0
- package/esm2022/lib/accessibility/sr-only/sr-only.component.mjs +0 -18
- package/esm2022/lib/download/download.service.mjs +0 -47
- package/esm2022/lib/format/pipes/common.mjs +0 -24
- package/esm2022/lib/format/pipes/date.pipe.mjs +0 -20
- package/esm2022/lib/format/pipes/days.pipe.mjs +0 -20
- package/esm2022/lib/format/pipes/dollars.pipe.mjs +0 -19
- package/esm2022/lib/format/pipes/number.pipe.mjs +0 -19
- package/esm2022/lib/format/pipes/percentage.pipe.mjs +0 -19
- package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +0 -61
- package/esm2022/lib/format/pipes/small-currency.pipe.mjs +0 -24
- package/esm2022/lib/format/pipes/small-number.pipe.mjs +0 -29
- package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +0 -62
- package/esm2022/lib/format/truncate/truncate.component.mjs +0 -51
- package/esm2022/lib/icon/dom-cache.mjs +0 -32
- package/esm2022/lib/icon/icon.component.mjs +0 -86
- package/esm2022/lib/icon/icons.mjs +0 -271
- package/esm2022/lib/input/alphabetic-field/alphabetic-field.component.mjs +0 -42
- package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +0 -48
- package/esm2022/lib/input/button/button.component.mjs +0 -139
- package/esm2022/lib/input/button-group/button-group.component.mjs +0 -39
- package/esm2022/lib/input/calendar/calendar.component.mjs +0 -318
- package/esm2022/lib/input/card-checkbox/card-checkbox.component.mjs +0 -13
- package/esm2022/lib/input/checkbox/checkbox.component.mjs +0 -84
- package/esm2022/lib/input/currency-field/currency-field.component.mjs +0 -26
- package/esm2022/lib/input/date/date.component.mjs +0 -279
- package/esm2022/lib/input/date-range/date-range.component.mjs +0 -478
- package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +0 -47
- package/esm2022/lib/input/filter-dropdown/filter-dropdown.component.mjs +0 -89
- package/esm2022/lib/input/input-label/input-label.component.mjs +0 -38
- package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +0 -745
- package/esm2022/lib/input/number-field/number-field.component.mjs +0 -125
- package/esm2022/lib/input/percentage-field/percentage-field.component.mjs +0 -20
- package/esm2022/lib/input/phone-field/phone-field.component.mjs +0 -74
- package/esm2022/lib/input/radio/radio.component.mjs +0 -58
- package/esm2022/lib/input/search/search.component.mjs +0 -26
- package/esm2022/lib/input/search-select/search-select.component.mjs +0 -189
- package/esm2022/lib/input/select/select/select.component.mjs +0 -179
- package/esm2022/lib/input/select/select-node/select-node.component.mjs +0 -60
- package/esm2022/lib/input/select/state.mjs +0 -882
- package/esm2022/lib/input/simple-select/option-group.pipe.mjs +0 -19
- package/esm2022/lib/input/simple-select/simple-select.component.mjs +0 -178
- package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +0 -33
- package/esm2022/lib/input/text-field/text-field.component.mjs +0 -115
- package/esm2022/lib/input/textarea-field/textarea-field.component.mjs +0 -21
- package/esm2022/lib/input/validation-message/validation-message.component.mjs +0 -17
- package/esm2022/lib/layout/card/card-actions.component.mjs +0 -72
- package/esm2022/lib/layout/card/card-content.component.mjs +0 -64
- package/esm2022/lib/layout/card/card-header.component.mjs +0 -201
- package/esm2022/lib/layout/card/card-link.component.mjs +0 -115
- package/esm2022/lib/layout/card/card-media.component.mjs +0 -70
- package/esm2022/lib/layout/card/card.component.mjs +0 -306
- package/esm2022/lib/layout/setting-row/setting-row.component.mjs +0 -111
- package/esm2022/lib/load/loading/loading.component.mjs +0 -43
- package/esm2022/lib/load/loading-cover/loading-cover.component.mjs +0 -25
- package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +0 -243
- package/esm2022/lib/navigation/link/link.component.mjs +0 -48
- package/esm2022/lib/navigation/page-header/page-header.component.mjs +0 -68
- package/esm2022/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +0 -43
- package/esm2022/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +0 -11
- package/esm2022/lib/navigation/tabs/tab/tab.component.mjs +0 -16
- package/esm2022/lib/navigation/tabs/tabs/tabs.component.mjs +0 -11
- package/esm2022/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +0 -43
- package/esm2022/lib/navigation/views/edit-view/edit-view.component.mjs +0 -118
- package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +0 -151
- package/esm2022/lib/navigation/views/state.mjs +0 -456
- package/esm2022/lib/navigation/views/view-menu/view-menu.component.mjs +0 -30
- package/esm2022/lib/navigation/views/views/views.component.mjs +0 -90
- package/esm2022/lib/notification/badge/badge.component.mjs +0 -45
- package/esm2022/lib/notification/banner/banner-action.component.mjs +0 -48
- package/esm2022/lib/notification/banner/banner.component.mjs +0 -61
- package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +0 -50
- package/esm2022/lib/notification/map-indicator/map-indicators.mjs +0 -15
- package/esm2022/lib/notification/notification-badge/notification-badge.component.mjs +0 -26
- package/esm2022/lib/overlay/callout/callout.component.mjs +0 -130
- package/esm2022/lib/overlay/callout/callout.helpers.mjs +0 -113
- package/esm2022/lib/overlay/callout/help/help.component.mjs +0 -23
- package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +0 -69
- package/esm2022/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +0 -71
- package/esm2022/lib/overlay/callout/menu/menu.component.mjs +0 -39
- package/esm2022/lib/overlay/callout/select-callout-defaults.mjs +0 -13
- package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +0 -30
- package/esm2022/lib/overlay/callout/tooltip/tooltip.component.mjs +0 -57
- package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +0 -138
- package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +0 -47
- package/esm2022/lib/overlay/modal/dialog-stack.service.mjs +0 -41
- package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +0 -146
- package/esm2022/lib/overlay/modal/modal.component.mjs +0 -31
- package/esm2022/lib/overlay/modal/side-sheet/side-sheet.component.mjs +0 -30
- package/esm2022/lib/overlay/overlay-outlet.component.mjs +0 -98
- package/esm2022/lib/overlay/overlay.directive.mjs +0 -25
- package/esm2022/lib/overlay/overlay.service.mjs +0 -35
- package/esm2022/lib/overlay/toast/toast-action.component.mjs +0 -11
- package/esm2022/lib/overlay/toast/toast.component.mjs +0 -41
- package/esm2022/lib/riv.module.mjs +0 -580
- package/esm2022/lib/size/size.directive.mjs +0 -33
- package/esm2022/lib/table/simple-table/coordinate-helper.mjs +0 -61
- package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +0 -36
- package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +0 -37
- package/esm2022/lib/table/simple-table/simple-table-row.component.mjs +0 -19
- package/esm2022/lib/table/simple-table/simple-table.component.mjs +0 -104
- package/esm2022/lib/table/table/clipboard.mjs +0 -182
- package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +0 -116
- package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +0 -383
- package/esm2022/lib/table/table/state-helpers/display-helpers.mjs +0 -50
- package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +0 -123
- package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +0 -164
- package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +0 -139
- package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +0 -70
- package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +0 -72
- package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +0 -180
- package/esm2022/lib/table/table/state.mjs +0 -1035
- package/esm2022/lib/table/table/table/table.component.mjs +0 -367
- package/esm2022/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +0 -25
- package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +0 -227
- package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +0 -134
- package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +0 -35
- package/esm2022/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +0 -28
- package/esm2022/lib/table/table/table-search/table-search.component.mjs +0 -71
- package/esm2022/lib/table/table/table-search-columns/table-search-columns.component.mjs +0 -57
- package/esm2022/lib/util/local-storage.mjs +0 -17
- package/esm2022/lib/visibility/visibility.directive.mjs +0 -34
- package/esm2022/lib/visualization/chart/chart-scaling.mjs +0 -380
- package/esm2022/lib/visualization/chart/chart.component.mjs +0 -626
- package/esm2022/lib/visualization/chart/chart.mjs +0 -3768
- package/esm2022/lib/visualization/data-table/data-table-cell.component.mjs +0 -22
- package/esm2022/lib/visualization/data-table/data-table-header-cell.component.mjs +0 -11
- package/esm2022/lib/visualization/data-table/data-table-row.component.mjs +0 -19
- package/esm2022/lib/visualization/data-table/data-table.component.mjs +0 -17
- package/esm2022/lib/visualization/donut/donut.component.mjs +0 -54
- package/esm2022/lib/visualization/funnel-chart/funnel-chart.component.mjs +0 -73
- package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +0 -33
- package/esm2022/lib/visualization/highlight/highlight.component.mjs +0 -24
- package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +0 -20
- package/esm2022/lib/visualization/intervals.mjs +0 -63
- package/esm2022/lib/visualization/issue/issue.component.mjs +0 -30
- package/esm2022/lib/visualization/legend-item/legend-item.component.mjs +0 -49
- package/esm2022/lib/visualization/metric/metric.component.mjs +0 -52
- package/esm2022/lib/visualization/mini-pie/mini-pie.component.mjs +0 -51
- package/esm2022/lib/visualization/progress/progress.component.mjs +0 -24
- package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +0 -377
- package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +0 -18
- package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +0 -270
- package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +0 -74
- package/esm2022/lib/visualization/time-series/time-series.component.mjs +0 -374
- package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +0 -15
- package/esm2022/lib/visualization/trend/trend.component.mjs +0 -51
- package/esm2022/lib/visualization/zero-state/zero-state.component.mjs +0 -22
- package/esm2022/public-api.mjs +0 -118
- package/esm2022/rivet-health-design-system.mjs +0 -5
- package/index.d.ts +0 -5
- package/lib/accessibility/sr-only/sr-only.component.d.ts +0 -12
- package/lib/download/download.service.d.ts +0 -9
- package/lib/format/pipes/common.d.ts +0 -6
- package/lib/format/pipes/date.pipe.d.ts +0 -8
- package/lib/format/pipes/days.pipe.d.ts +0 -8
- package/lib/format/pipes/dollars.pipe.d.ts +0 -9
- package/lib/format/pipes/number.pipe.d.ts +0 -8
- package/lib/format/pipes/percentage.pipe.d.ts +0 -8
- package/lib/format/pipes/sentence-case.pipe.d.ts +0 -8
- package/lib/format/pipes/small-currency.pipe.d.ts +0 -8
- package/lib/format/pipes/small-number.pipe.d.ts +0 -8
- package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +0 -14
- package/lib/format/truncate/truncate.component.d.ts +0 -17
- package/lib/icon/dom-cache.d.ts +0 -13
- package/lib/icon/icon.component.d.ts +0 -27
- package/lib/icon/icons.d.ts +0 -137
- package/lib/input/alphabetic-field/alphabetic-field.component.d.ts +0 -14
- package/lib/input/auto-focus/auto-focus.directive.d.ts +0 -21
- package/lib/input/button/button.component.d.ts +0 -37
- package/lib/input/button-group/button-group.component.d.ts +0 -11
- package/lib/input/calendar/calendar.component.d.ts +0 -67
- package/lib/input/card-checkbox/card-checkbox.component.d.ts +0 -6
- package/lib/input/checkbox/checkbox.component.d.ts +0 -32
- package/lib/input/currency-field/currency-field.component.d.ts +0 -9
- package/lib/input/date/date.component.d.ts +0 -62
- package/lib/input/date-range/date-range.component.d.ts +0 -97
- package/lib/input/filter-chip/filter-chip.component.d.ts +0 -13
- package/lib/input/filter-dropdown/filter-dropdown.component.d.ts +0 -30
- package/lib/input/input-label/input-label.component.d.ts +0 -17
- package/lib/input/mentions-input/mentions-input.component.d.ts +0 -93
- package/lib/input/number-field/number-field.component.d.ts +0 -36
- package/lib/input/percentage-field/percentage-field.component.d.ts +0 -7
- package/lib/input/phone-field/phone-field.component.d.ts +0 -17
- package/lib/input/radio/radio.component.d.ts +0 -28
- package/lib/input/search/search.component.d.ts +0 -10
- package/lib/input/search-select/search-select.component.d.ts +0 -62
- package/lib/input/select/select/select.component.d.ts +0 -63
- package/lib/input/select/select-node/select-node.component.d.ts +0 -30
- package/lib/input/select/state.d.ts +0 -250
- package/lib/input/simple-select/option-group.pipe.d.ts +0 -8
- package/lib/input/simple-select/simple-select.component.d.ts +0 -63
- package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +0 -18
- package/lib/input/text-field/text-field.component.d.ts +0 -38
- package/lib/input/textarea-field/textarea-field.component.d.ts +0 -8
- package/lib/input/validation-message/validation-message.component.d.ts +0 -6
- package/lib/layout/card/card-actions.component.d.ts +0 -38
- package/lib/layout/card/card-content.component.d.ts +0 -33
- package/lib/layout/card/card-header.component.d.ts +0 -132
- package/lib/layout/card/card-link.component.d.ts +0 -64
- package/lib/layout/card/card-media.component.d.ts +0 -43
- package/lib/layout/card/card.component.d.ts +0 -225
- package/lib/layout/setting-row/setting-row.component.d.ts +0 -72
- package/lib/load/loading/loading.component.d.ts +0 -17
- package/lib/load/loading-cover/loading-cover.component.d.ts +0 -10
- package/lib/navigation/editable-heading/editable-heading.component.d.ts +0 -118
- package/lib/navigation/link/link.component.d.ts +0 -19
- package/lib/navigation/page-header/page-header.component.d.ts +0 -50
- package/lib/navigation/simple-tabs/simple-tab/simple-tab.component.d.ts +0 -11
- package/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.d.ts +0 -5
- package/lib/navigation/tabs/tab/tab.component.d.ts +0 -6
- package/lib/navigation/tabs/tabs/tabs.component.d.ts +0 -5
- package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +0 -14
- package/lib/navigation/views/edit-view/edit-view.component.d.ts +0 -31
- package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +0 -37
- package/lib/navigation/views/state.d.ts +0 -175
- package/lib/navigation/views/view-menu/view-menu.component.d.ts +0 -13
- package/lib/navigation/views/views/views.component.d.ts +0 -25
- package/lib/notification/badge/badge.component.d.ts +0 -14
- package/lib/notification/banner/banner-action.component.d.ts +0 -15
- package/lib/notification/banner/banner.component.d.ts +0 -25
- package/lib/notification/map-indicator/map-indicator.component.d.ts +0 -24
- package/lib/notification/map-indicator/map-indicators.d.ts +0 -9
- package/lib/notification/notification-badge/notification-badge.component.d.ts +0 -11
- package/lib/overlay/callout/callout.component.d.ts +0 -36
- package/lib/overlay/callout/callout.helpers.d.ts +0 -16
- package/lib/overlay/callout/help/help.component.d.ts +0 -11
- package/lib/overlay/callout/lock-scroll.directive.d.ts +0 -22
- package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +0 -27
- package/lib/overlay/callout/menu/menu.component.d.ts +0 -17
- package/lib/overlay/callout/select-callout-defaults.d.ts +0 -5
- package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +0 -14
- package/lib/overlay/callout/tooltip/tooltip.component.d.ts +0 -26
- package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +0 -48
- package/lib/overlay/modal/dialog/dialog.component.d.ts +0 -19
- package/lib/overlay/modal/dialog-stack.service.d.ts +0 -23
- package/lib/overlay/modal/form-dialog/form-dialog.component.d.ts +0 -63
- package/lib/overlay/modal/modal.component.d.ts +0 -11
- package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +0 -13
- package/lib/overlay/overlay-outlet.component.d.ts +0 -19
- package/lib/overlay/overlay.directive.d.ts +0 -13
- package/lib/overlay/overlay.service.d.ts +0 -14
- package/lib/overlay/toast/toast-action.component.d.ts +0 -5
- package/lib/overlay/toast/toast.component.d.ts +0 -17
- package/lib/riv.module.d.ts +0 -122
- package/lib/size/size.directive.d.ts +0 -12
- package/lib/table/simple-table/coordinate-helper.d.ts +0 -13
- package/lib/table/simple-table/simple-table-cell.component.d.ts +0 -19
- package/lib/table/simple-table/simple-table-header-cell.component.d.ts +0 -20
- package/lib/table/simple-table/simple-table-row.component.d.ts +0 -6
- package/lib/table/simple-table/simple-table.component.d.ts +0 -11
- package/lib/table/table/clipboard.d.ts +0 -38
- package/lib/table/table/state-helpers/collapse-helpers.d.ts +0 -9
- package/lib/table/table/state-helpers/column-helpers.d.ts +0 -29
- package/lib/table/table/state-helpers/display-helpers.d.ts +0 -5
- package/lib/table/table/state-helpers/nesting-helpers.d.ts +0 -13
- package/lib/table/table/state-helpers/order-helpers.d.ts +0 -13
- package/lib/table/table/state-helpers/pagination-helpers.d.ts +0 -12
- package/lib/table/table/state-helpers/result-helpers.d.ts +0 -10
- package/lib/table/table/state-helpers/search-helpers.d.ts +0 -17
- package/lib/table/table/state-helpers/selection-helpers.d.ts +0 -13
- package/lib/table/table/state.d.ts +0 -512
- package/lib/table/table/table/table.component.d.ts +0 -88
- package/lib/table/table/table-collapse-all/table-collapse-all.component.d.ts +0 -10
- package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +0 -52
- package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +0 -37
- package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +0 -14
- package/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.d.ts +0 -11
- package/lib/table/table/table-search/table-search.component.d.ts +0 -21
- package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +0 -23
- package/lib/util/local-storage.d.ts +0 -14
- package/lib/visibility/visibility.directive.d.ts +0 -12
- package/lib/visualization/chart/chart-scaling.d.ts +0 -100
- package/lib/visualization/chart/chart.component.d.ts +0 -116
- package/lib/visualization/chart/chart.d.ts +0 -354
- package/lib/visualization/data-table/data-table-cell.component.d.ts +0 -11
- package/lib/visualization/data-table/data-table-header-cell.component.d.ts +0 -5
- package/lib/visualization/data-table/data-table-row.component.d.ts +0 -6
- package/lib/visualization/data-table/data-table.component.d.ts +0 -6
- package/lib/visualization/donut/donut.component.d.ts +0 -22
- package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +0 -30
- package/lib/visualization/funnel-chart/funnel-chart.helpers.d.ts +0 -4
- package/lib/visualization/highlight/highlight.component.d.ts +0 -15
- package/lib/visualization/highlight/highlight.helpers.d.ts +0 -2
- package/lib/visualization/intervals.d.ts +0 -8
- package/lib/visualization/issue/issue.component.d.ts +0 -10
- package/lib/visualization/legend-item/legend-item.component.d.ts +0 -22
- package/lib/visualization/metric/metric.component.d.ts +0 -20
- package/lib/visualization/mini-pie/mini-pie.component.d.ts +0 -17
- package/lib/visualization/progress/progress.component.d.ts +0 -8
- package/lib/visualization/stacked-column/stacked-column.component.d.ts +0 -129
- package/lib/visualization/stacked-column/stacked-column.helpers.d.ts +0 -3
- package/lib/visualization/stacked-row/stacked-row.component.d.ts +0 -109
- package/lib/visualization/stacked-row/stacked-row.helpers.d.ts +0 -53
- package/lib/visualization/time-series/time-series.component.d.ts +0 -126
- package/lib/visualization/time-series/time-series.helpers.d.ts +0 -34
- package/lib/visualization/trend/trend.component.d.ts +0 -13
- package/lib/visualization/zero-state/zero-state.component.d.ts +0 -9
- package/public-api.d.ts +0 -118
|
@@ -1,50 +0,0 @@
|
|
|
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 or nested tables.
|
|
32
|
-
if (TableResultHelpers.isGroupResult(result) ||
|
|
33
|
-
TableResultHelpers.isNestedResult(result)) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
// Memoize the user's configuration for the current page.
|
|
37
|
-
return new Map(fullColumns.map(column => [
|
|
38
|
-
column.key,
|
|
39
|
-
result.currentPageData.map((_, i) => {
|
|
40
|
-
const raw = getRowSpanForCell(i, column.key);
|
|
41
|
-
if (raw === 0)
|
|
42
|
-
return 0;
|
|
43
|
-
else
|
|
44
|
-
return Math.max(1, toInteger(raw));
|
|
45
|
-
}),
|
|
46
|
-
]));
|
|
47
|
-
}
|
|
48
|
-
TableDisplayHelpers.memoizedCellRowSpan = memoizedCellRowSpan;
|
|
49
|
-
})(TableDisplayHelpers || (TableDisplayHelpers = {}));
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvc3RhdGUtaGVscGVycy9kaXNwbGF5LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RCxNQUFNLEtBQVcsbUJBQW1CLENBZ0VuQztBQWhFRCxXQUFpQixtQkFBbUI7SUFDbEMsU0FBZ0IsbUJBQW1CLENBS2pDLEtBQXFDLEVBQUUsTUFBYztRQUNyRCxJQUNFLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDN0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDOUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7WUFFekMsT0FBTyxJQUFJLENBQUM7UUFDZCxNQUFNLHdCQUF3QixHQUM1QixrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSx3QkFBd0I7WUFDaEQsT0FBTyxNQUFNLE1BQU0scUNBQXFDLENBQUM7UUFDM0QsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QjtZQUNqRCxPQUFPLE1BQU0sTUFBTSxvRUFBb0UsQ0FBQztRQUMxRixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztZQUFFLE9BQU8sTUFBTSxNQUFNLDhCQUE4QixDQUFDO1FBQzNFLE9BQU8sTUFBTSxNQUFNLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBckJlLHVDQUFtQixzQkFxQmxDLENBQUE7SUFFRCxTQUFnQixtQkFBbUIsQ0FNakMsQ0FBaUMsRUFDakMsV0FBcUMsRUFDckMsT0FBNkM7UUFFN0MsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV4Qix3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDOUQsT0FBTyxJQUFJLENBQUM7UUFFZCxpRkFBaUY7UUFDakYsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXBDLG9FQUFvRTtRQUNwRSxJQUNFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDeEMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUN6QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQseURBQXlEO1FBQ3pELE9BQU8sSUFBSSxHQUFHLENBQ1osV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxHQUFHO1lBQ1YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdDLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQUUsT0FBTyxDQUFDLENBQUM7O29CQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQztTQUNILENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQXZDZSx1Q0FBbUIsc0JBdUNsQyxDQUFBO0FBQ0gsQ0FBQyxFQWhFZ0IsbUJBQW1CLEtBQW5CLG1CQUFtQixRQWdFbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0ludGVnZXIgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQgeyBUYWJsZVJlc3VsdEhlbHBlcnMgfSBmcm9tICcuL3Jlc3VsdC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VhcmNoSGVscGVycyB9IGZyb20gJy4vc2VhcmNoLWhlbHBlcnMnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRhYmxlRGlzcGxheUhlbHBlcnMge1xuICBleHBvcnQgZnVuY3Rpb24gZ2V0WmVyb1N0YXRlTWVzc2FnZTxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sIGVudGl0eTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KHN0YXRlLnJlc3VsdCkgJiZcbiAgICAgICAgc3RhdGUucmVzdWx0LnRvdGFsR3JvdXBDb3VudCA+IDApIHx8XG4gICAgICAoIVRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KHN0YXRlLnJlc3VsdCkgJiZcbiAgICAgICAgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IDApXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYWxsU2VhcmNoQ29sdW1uc1NlbGVjdGVkID1cbiAgICAgIFRhYmxlU2VhcmNoSGVscGVycy5nZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShzdGF0ZSwgJ2FsbCcpO1xuICAgIGlmIChzdGF0ZS5xdWVyeS5zZWFyY2ggJiYgYWxsU2VhcmNoQ29sdW1uc1NlbGVjdGVkKVxuICAgICAgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IHNlYXJjaCBrZXl3b3JkLmA7XG4gICAgaWYgKHN0YXRlLnF1ZXJ5LnNlYXJjaCAmJiAhYWxsU2VhcmNoQ29sdW1uc1NlbGVjdGVkKVxuICAgICAgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IHNlYXJjaCBrZXl3b3JkIGluIHRoZSBzZWxlY3RlZCBzZWFyY2ggY29sdW1ucy5gO1xuICAgIGlmIChzdGF0ZS5xdWVyeS5maWx0ZXJzKSByZXR1cm4gYE5vICR7ZW50aXR5fSBtYXRjaCB5b3VyIGN1cnJlbnQgZmlsdGVycy5gO1xuICAgIHJldHVybiBgTm8gJHtlbnRpdHl9LmA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbWVtb2l6ZWRDZWxsUm93U3BhbjxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHM6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBmdWxsQ29sdW1uczogUml2VGFibGUuRnVsbENvbHVtbjxDPltdLFxuICAgIG9wdGlvbnM/OiBSaXZUYWJsZS5NYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPixcbiAgKTogTWFwPEMsIG51bWJlcltdPiB8IG51bGwge1xuICAgIGNvbnN0IGdldFJvd1NwYW5Gb3JDZWxsID0gb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGw7XG4gICAgY29uc3QgcmVzdWx0ID0gcy5yZXN1bHQ7XG5cbiAgICAvLyBJZiB0aGUgZGF0YXNldCBleGNlZWRzIHRoZSBjdXJyZW50IHBhZ2Ugc2l6ZSwgc2tpcCBzcGFuIGNhbGN1bGF0aW9ucy5cbiAgICBpZiAocy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID4gcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBoYXNuJ3QgcHJvdmlkZWQgdGhlIHJvdyBzcGFuIGNvbmZpZ3VyYXRpb24sIGRlZmF1bHQgdG8gbm8gc3Bhbm5pbmdcbiAgICBpZiAoIWdldFJvd1NwYW5Gb3JDZWxsKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFJvdyBzcGFubmluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIGdyb3VwZWQgdGFibGVzIG9yIG5lc3RlZCB0YWJsZXMuXG4gICAgaWYgKFxuICAgICAgVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQocmVzdWx0KSB8fFxuICAgICAgVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KHJlc3VsdClcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE1lbW9pemUgdGhlIHVzZXIncyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VycmVudCBwYWdlLlxuICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgZnVsbENvbHVtbnMubWFwKGNvbHVtbiA9PiBbXG4gICAgICAgIGNvbHVtbi5rZXksXG4gICAgICAgIHJlc3VsdC5jdXJyZW50UGFnZURhdGEubWFwKChfLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3ID0gZ2V0Um93U3BhbkZvckNlbGwoaSwgY29sdW1uLmtleSk7XG4gICAgICAgICAgaWYgKHJhdyA9PT0gMCkgcmV0dXJuIDA7XG4gICAgICAgICAgZWxzZSByZXR1cm4gTWF0aC5tYXgoMSwgdG9JbnRlZ2VyKHJhdykpO1xuICAgICAgICB9KSxcbiAgICAgIF0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { sumBy } from 'lodash';
|
|
2
|
-
import { TableCollapseHelpers } from './collapse-helpers';
|
|
3
|
-
export var TableNestingHelpers;
|
|
4
|
-
(function (TableNestingHelpers) {
|
|
5
|
-
function convertToFullNestedRow(currentRow, coreState, rowLinkFunction) {
|
|
6
|
-
const currentSubRows = currentRow.subRows
|
|
7
|
-
? currentRow.subRows.map(subrow => convertToFullNestedRow(subrow, coreState, rowLinkFunction))
|
|
8
|
-
: [];
|
|
9
|
-
const currentRowLink = rowLinkFunction
|
|
10
|
-
? rowLinkFunction(currentRow.data)
|
|
11
|
-
: null;
|
|
12
|
-
// We don't currently support selecting nested rows
|
|
13
|
-
const currentRowIsSelected = false;
|
|
14
|
-
const currentRowIsCollapsed = TableCollapseHelpers.isRowCollapsed(coreState, currentRow.data.id);
|
|
15
|
-
return {
|
|
16
|
-
id: currentRow.data.id,
|
|
17
|
-
data: currentRow.data,
|
|
18
|
-
rowLink: currentRowLink,
|
|
19
|
-
selected: currentRowIsSelected,
|
|
20
|
-
subRows: currentSubRows,
|
|
21
|
-
isCollapsed: currentRowIsCollapsed,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
TableNestingHelpers.convertToFullNestedRow = convertToFullNestedRow;
|
|
25
|
-
function convertToFullNestedHeaderRow(currentRow, coreState, rowLinkFunction) {
|
|
26
|
-
const currentSubRows = currentRow.subRows
|
|
27
|
-
? currentRow.subRows.map(subrow => convertToFullNestedRow(subrow, coreState, rowLinkFunction))
|
|
28
|
-
: [];
|
|
29
|
-
const currentHeaderIsCollapsed = TableCollapseHelpers.isHeaderCollapsed(coreState, currentRow.headerText);
|
|
30
|
-
return {
|
|
31
|
-
id: currentRow.headerText ?? '',
|
|
32
|
-
subRows: currentSubRows,
|
|
33
|
-
headerText: currentRow.headerText,
|
|
34
|
-
isCollapsed: currentHeaderIsCollapsed,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
TableNestingHelpers.convertToFullNestedHeaderRow = convertToFullNestedHeaderRow;
|
|
38
|
-
function findNestedRowsWithHeadersToKeep(allRows, filteredRows) {
|
|
39
|
-
const filteredIds = new Set(filteredRows.map(row => row.id));
|
|
40
|
-
function recursiveFindRowsToKeep(currentNestedRow) {
|
|
41
|
-
// Keep all subrows if a parent row matches the filter
|
|
42
|
-
if (filteredIds.has(currentNestedRow.data.id)) {
|
|
43
|
-
return currentNestedRow;
|
|
44
|
-
}
|
|
45
|
-
if (!currentNestedRow.subRows) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
const subRowsToKeep = [];
|
|
49
|
-
for (const subRow of currentNestedRow.subRows) {
|
|
50
|
-
const rowToKeep = recursiveFindRowsToKeep(subRow);
|
|
51
|
-
if (rowToKeep) {
|
|
52
|
-
subRowsToKeep.push(rowToKeep);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (subRowsToKeep.length == 0) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
return {
|
|
59
|
-
...currentNestedRow,
|
|
60
|
-
subRows: subRowsToKeep,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
const keptNestedRows = [];
|
|
64
|
-
for (const outerLevelHeader of allRows) {
|
|
65
|
-
if (!outerLevelHeader.subRows) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
const keptSubRows = [];
|
|
69
|
-
for (const nestedRow of outerLevelHeader.subRows) {
|
|
70
|
-
const rowToKeep = recursiveFindRowsToKeep(nestedRow);
|
|
71
|
-
if (rowToKeep) {
|
|
72
|
-
keptSubRows.push(rowToKeep);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (keptSubRows.length == 0) {
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
keptNestedRows.push({
|
|
79
|
-
...outerLevelHeader,
|
|
80
|
-
subRows: keptSubRows,
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
return keptNestedRows;
|
|
84
|
-
}
|
|
85
|
-
TableNestingHelpers.findNestedRowsWithHeadersToKeep = findNestedRowsWithHeadersToKeep;
|
|
86
|
-
// Count how many rows we have at the bottom level of nesting.
|
|
87
|
-
function countBottomLevelNestedRows(allNestedRows) {
|
|
88
|
-
let bottomLevelRowCount = 0;
|
|
89
|
-
function recursiveCountRows(currentNestedRow) {
|
|
90
|
-
if (!currentNestedRow.subRows || currentNestedRow.subRows.length == 0) {
|
|
91
|
-
bottomLevelRowCount++;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
for (const subRow of currentNestedRow.subRows) {
|
|
95
|
-
recursiveCountRows(subRow);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
for (const nestedRow of allNestedRows) {
|
|
100
|
-
recursiveCountRows(nestedRow);
|
|
101
|
-
}
|
|
102
|
-
return bottomLevelRowCount;
|
|
103
|
-
}
|
|
104
|
-
TableNestingHelpers.countBottomLevelNestedRows = countBottomLevelNestedRows;
|
|
105
|
-
// Count the rows pagination pages through.
|
|
106
|
-
function countNestedRows(allHeaders, paginateBy) {
|
|
107
|
-
return paginateBy === 'topRows'
|
|
108
|
-
? sumBy(allHeaders, header => header.subRows.length)
|
|
109
|
-
: countBottomLevelNestedHeaderRows(allHeaders);
|
|
110
|
-
}
|
|
111
|
-
TableNestingHelpers.countNestedRows = countNestedRows;
|
|
112
|
-
// Count how many rows we have at the bottom level of nesting.
|
|
113
|
-
function countBottomLevelNestedHeaderRows(allHeaders) {
|
|
114
|
-
let bottomLevelRowCount = 0;
|
|
115
|
-
for (const headerRow of allHeaders) {
|
|
116
|
-
const currentHeaderBottomRowCount = countBottomLevelNestedRows(headerRow.subRows);
|
|
117
|
-
bottomLevelRowCount += currentHeaderBottomRowCount;
|
|
118
|
-
}
|
|
119
|
-
return bottomLevelRowCount;
|
|
120
|
-
}
|
|
121
|
-
TableNestingHelpers.countBottomLevelNestedHeaderRows = countBottomLevelNestedHeaderRows;
|
|
122
|
-
})(TableNestingHelpers || (TableNestingHelpers = {}));
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGluZy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvc3RhdGUtaGVscGVycy9uZXN0aW5nLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRCxNQUFNLEtBQVcsbUJBQW1CLENBc0xuQztBQXRMRCxXQUFpQixtQkFBbUI7SUFDbEMsU0FBZ0Isc0JBQXNCLENBTXBDLFVBQWlDLEVBQ2pDLFNBQXlDLEVBQ3pDLGVBQXlEO1FBRXpELE1BQU0sY0FBYyxHQUFnQyxVQUFVLENBQUMsT0FBTztZQUNwRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDOUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FDM0Q7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsTUFBTSxjQUFjLEdBQTRCLGVBQWU7WUFDN0QsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFVCxtREFBbUQ7UUFDbkQsTUFBTSxvQkFBb0IsR0FBWSxLQUFLLENBQUM7UUFFNUMsTUFBTSxxQkFBcUIsR0FBWSxvQkFBb0IsQ0FBQyxjQUFjLENBQ3hFLFNBQVMsRUFDVCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbkIsQ0FBQztRQUVGLE9BQU87WUFDTCxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixPQUFPLEVBQUUsY0FBYztZQUN2QixRQUFRLEVBQUUs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QUFJLG1CQUFtQixHQUFXLENBQUMsQ0FBQztRQUVwQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sMkJBQTJCLEdBQVcsMEJBQTBCLENBQ3BFLFNBQVMsQ0FBQyxPQUFPLENBQ2xCLENBQUM7WUFDRixtQkFBbUIsSUFBSSwyQkFBMkIsQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBYmUsb0RBQWdDLG1DQWEvQyxDQUFBO0FBQ0gsQ0FBQyxFQXRMZ0IsbUJBQW1CLEtBQW5CLG1CQUFtQixRQXNMbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdW1CeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB7IFRhYmxlQ29sbGFwc2VIZWxwZXJzIH0gZnJvbSAnLi9jb2xsYXBzZS1oZWxwZXJzJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZU5lc3RpbmdIZWxwZXJzIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Z1bGxOZXN0ZWRSb3c8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIGN1cnJlbnRSb3c6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPixcbiAgICBjb3JlU3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICByb3dMaW5rRnVuY3Rpb24/OiAocm93OiBSLCBncm91cD86IEcpID0+IFJpdlRhYmxlLlJvd0xpbmssXG4gICk6IFJpdlRhYmxlLkZ1bGxOZXN0ZWRSb3c8Uj4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdWJSb3dzOiBSaXZUYWJsZS5GdWxsTmVzdGVkUm93PFI+W10gPSBjdXJyZW50Um93LnN1YlJvd3NcbiAgICAgID8gY3VycmVudFJvdy5zdWJSb3dzLm1hcChzdWJyb3cgPT5cbiAgICAgICAgICBjb252ZXJ0VG9GdWxsTmVzdGVkUm93KHN1YnJvdywgY29yZVN0YXRlLCByb3dMaW5rRnVuY3Rpb24pLFxuICAgICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgY3VycmVudFJvd0xpbms6IFJpdlRhYmxlLlJvd0xpbmsgfCBudWxsID0gcm93TGlua0Z1bmN0aW9uXG4gICAgICA/IHJvd0xpbmtGdW5jdGlvbihjdXJyZW50Um93LmRhdGEpXG4gICAgICA6IG51bGw7XG5cbiAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzZWxlY3RpbmcgbmVzdGVkIHJvd3NcbiAgICBjb25zdCBjdXJyZW50Um93SXNTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3QgY3VycmVudFJvd0lzQ29sbGFwc2VkOiBib29sZWFuID0gVGFibGVDb2xsYXBzZUhlbHBlcnMuaXNSb3dDb2xsYXBzZWQoXG4gICAgICBjb3JlU3RhdGUsXG4gICAgICBjdXJyZW50Um93LmRhdGEuaWQsXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogY3VycmVudFJvdy5kYXRhLmlkLFxuICAgICAgZGF0YTogY3VycmVudFJvdy5kYXRhLFxuICAgICAgcm93TGluazogY3VycmVudFJvd0xpbmssXG4gICAgICBzZWxlY3RlZDogY3VycmVudFJvd0lzU2VsZWN0ZWQsXG4gICAgICBzdWJSb3dzOiBjdXJyZW50U3ViUm93cyxcbiAgICAgIGlzQ29sbGFwc2VkOiBjdXJyZW50Um93SXNDb2xsYXBzZWQsXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9GdWxsTmVzdGVkSGVhZGVyUm93PFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBjdXJyZW50Um93OiBSaXZUYWJsZS5OZXN0ZWRIZWFkZXJSb3c8Uj4sXG4gICAgY29yZVN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgcm93TGlua0Z1bmN0aW9uPzogKHJvdzogUiwgZ3JvdXA/OiBHKSA9PiBSaXZUYWJsZS5Sb3dMaW5rLFxuICApOiBSaXZUYWJsZS5GdWxsTmVzdGVkSGVhZGVyUm93PFI+IHtcbiAgICBjb25zdCBjdXJyZW50U3ViUm93czogUml2VGFibGUuRnVsbE5lc3RlZFJvdzxSPltdID0gY3VycmVudFJvdy5zdWJSb3dzXG4gICAgICA/IGN1cnJlbnRSb3cuc3ViUm93cy5tYXAoc3Vicm93ID0+XG4gICAgICAgICAgY29udmVydFRvRnVsbE5lc3RlZFJvdyhzdWJyb3csIGNvcmVTdGF0ZSwgcm93TGlua0Z1bmN0aW9uKSxcbiAgICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnRIZWFkZXJJc0NvbGxhcHNlZDogYm9vbGVhbiA9XG4gICAgICBUYWJsZUNvbGxhcHNlSGVscGVycy5pc0hlYWRlckNvbGxhcHNlZChjb3JlU3RhdGUsIGN1cnJlbnRSb3cuaGVhZGVyVGV4dCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGN1cnJlbnRSb3cuaGVhZGVyVGV4dCA/PyAnJyxcbiAgICAgIHN1YlJvd3M6IGN1cnJlbnRTdWJSb3dzLFxuICAgICAgaGVhZGVyVGV4dDogY3VycmVudFJvdy5oZWFkZXJUZXh0LFxuICAgICAgaXNDb2xsYXBzZWQ6IGN1cnJlbnRIZWFkZXJJc0NvbGxhcHNlZCxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXN0ZWRSb3dzV2l0aEhlYWRlcnNUb0tlZXA8UiBleHRlbmRzIFJpdlRhYmxlLlJvdz4oXG4gICAgYWxsUm93czogUml2VGFibGUuTmVzdGVkSGVhZGVyUm93PFI+W10sXG4gICAgZmlsdGVyZWRSb3dzOiBSW10sXG4gICk6IFJpdlRhYmxlLk5lc3RlZEhlYWRlclJvdzxSPltdIHtcbiAgICBjb25zdCBmaWx0ZXJlZElkczogU2V0PHN0cmluZyB8IG51bWJlcj4gPSBuZXcgU2V0KFxuICAgICAgZmlsdGVyZWRSb3dzLm1hcChyb3cgPT4gcm93LmlkKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlRmluZFJvd3NUb0tlZXAoXG4gICAgICBjdXJyZW50TmVzdGVkUm93OiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj4sXG4gICAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+IHwgbnVsbCB7XG4gICAgICAvLyBLZWVwIGFsbCBzdWJyb3dzIGlmIGEgcGFyZW50IHJvdyBtYXRjaGVzIHRoZSBmaWx0ZXJcbiAgICAgIGlmIChmaWx0ZXJlZElkcy5oYXMoY3VycmVudE5lc3RlZFJvdy5kYXRhLmlkKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5lc3RlZFJvdztcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd3NUb0tlZXA6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHN1YlJvdyBvZiBjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MpIHtcbiAgICAgICAgY29uc3Qgcm93VG9LZWVwOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj4gfCBudWxsID1cbiAgICAgICAgICByZWN1cnNpdmVGaW5kUm93c1RvS2VlcChzdWJSb3cpO1xuICAgICAgICBpZiAocm93VG9LZWVwKSB7XG4gICAgICAgICAgc3ViUm93c1RvS2VlcC5wdXNoKHJvd1RvS2VlcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1YlJvd3NUb0tlZXAubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmN1cnJlbnROZXN0ZWRSb3csXG4gICAgICAgIHN1YlJvd3M6IHN1YlJvd3NUb0tlZXAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGtlcHROZXN0ZWRSb3dzOiBSaXZUYWJsZS5OZXN0ZWRIZWFkZXJSb3c8Uj5bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBvdXRlckxldmVsSGVhZGVyIG9mIGFsbFJvd3MpIHtcbiAgICAgIGlmICghb3V0ZXJMZXZlbEhlYWRlci5zdWJSb3dzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXB0U3ViUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbmVzdGVkUm93IG9mIG91dGVyTGV2ZWxIZWFkZXIuc3ViUm93cykge1xuICAgICAgICBjb25zdCByb3dUb0tlZXA6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPiB8IG51bGwgPVxuICAgICAgICAgIHJlY3Vyc2l2ZUZpbmRSb3dzVG9LZWVwKG5lc3RlZFJvdyk7XG4gICAgICAgIGlmIChyb3dUb0tlZXApIHtcbiAgICAgICAgICBrZXB0U3ViUm93cy5wdXNoKHJvd1RvS2VlcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGtlcHRTdWJSb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBrZXB0TmVzdGVkUm93cy5wdXNoKHtcbiAgICAgICAgLi4ub3V0ZXJMZXZlbEhlYWRlcixcbiAgICAgICAgc3ViUm93czoga2VwdFN1YlJvd3MsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2VwdE5lc3RlZFJvd3M7XG4gIH1cblxuICAvLyBDb3VudCBob3cgbWFueSByb3dzIHdlIGhhdmUgYXQgdGhlIGJvdHRvbSBsZXZlbCBvZiBuZXN0aW5nLlxuICBleHBvcnQgZnVuY3Rpb24gY291bnRCb3R0b21MZXZlbE5lc3RlZFJvd3M8UiBleHRlbmRzIFJpdlRhYmxlLlJvdz4oXG4gICAgYWxsTmVzdGVkUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10sXG4gICk6IG51bWJlciB7XG4gICAgbGV0IGJvdHRvbUxldmVsUm93Q291bnQ6IG51bWJlciA9IDA7XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVDb3VudFJvd3MoY3VycmVudE5lc3RlZFJvdzogUml2VGFibGUuTmVzdGVkUm93PFI+KSB7XG4gICAgICBpZiAoIWN1cnJlbnROZXN0ZWRSb3cuc3ViUm93cyB8fCBjdXJyZW50TmVzdGVkUm93LnN1YlJvd3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgYm90dG9tTGV2ZWxSb3dDb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBzdWJSb3cgb2YgY3VycmVudE5lc3RlZFJvdy5zdWJSb3dzKSB7XG4gICAgICAgICAgcmVjdXJzaXZlQ291bnRSb3dzKHN1YlJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5lc3RlZFJvdyBvZiBhbGxOZXN0ZWRSb3dzKSB7XG4gICAgICByZWN1cnNpdmVDb3VudFJvd3MobmVzdGVkUm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm90dG9tTGV2ZWxSb3dDb3VudDtcbiAgfVxuXG4gIC8vIENvdW50IHRoZSByb3dzIHBhZ2luYXRpb24gcGFnZXMgdGhyb3VnaC5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNvdW50TmVzdGVkUm93czxSIGV4dGVuZHMgUml2VGFibGUuUm93PihcbiAgICBhbGxIZWFkZXJzOiBSaXZUYWJsZS5OZXN0ZWRIZWFkZXJSb3c8Uj5bXSxcbiAgICBwYWdpbmF0ZUJ5OiBSaXZUYWJsZS5OZXN0ZWRQYWdpbmF0ZUJ5LFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdpbmF0ZUJ5ID09PSAndG9wUm93cydcbiAgICAgID8gc3VtQnkoYWxsSGVhZGVycywgaGVhZGVyID0+IGhlYWRlci5zdWJSb3dzLmxlbmd0aClcbiAgICAgIDogY291bnRCb3R0b21MZXZlbE5lc3RlZEhlYWRlclJvd3MoYWxsSGVhZGVycyk7XG4gIH1cblxuICAvLyBDb3VudCBob3cgbWFueSByb3dzIHdlIGhhdmUgYXQgdGhlIGJvdHRvbSBsZXZlbCBvZiBuZXN0aW5nLlxuICBleHBvcnQgZnVuY3Rpb24gY291bnRCb3R0b21MZXZlbE5lc3RlZEhlYWRlclJvd3M8UiBleHRlbmRzIFJpdlRhYmxlLlJvdz4oXG4gICAgYWxsSGVhZGVyczogUml2VGFibGUuTmVzdGVkSGVhZGVyUm93PFI+W10sXG4gICk6IG51bWJlciB7XG4gICAgbGV0IGJvdHRvbUxldmVsUm93Q291bnQ6IG51bWJlciA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlclJvdyBvZiBhbGxIZWFkZXJzKSB7XG4gICAgICBjb25zdCBjdXJyZW50SGVhZGVyQm90dG9tUm93Q291bnQ6IG51bWJlciA9IGNvdW50Qm90dG9tTGV2ZWxOZXN0ZWRSb3dzKFxuICAgICAgICBoZWFkZXJSb3cuc3ViUm93cyxcbiAgICAgICk7XG4gICAgICBib3R0b21MZXZlbFJvd0NvdW50ICs9IGN1cnJlbnRIZWFkZXJCb3R0b21Sb3dDb3VudDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm90dG9tTGV2ZWxSb3dDb3VudDtcbiAgfVxufVxuIl19
|
|
@@ -1,164 +0,0 @@
|
|
|
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
|
-
/*
|
|
143
|
-
When a defaultSort is specified, seed the initial query.order so the
|
|
144
|
-
table header shows the sort indicator from the start.
|
|
145
|
-
*/
|
|
146
|
-
function seedDefaultSortOption(options) {
|
|
147
|
-
if (options?.defaultSort && !options?.initialState?.query?.order) {
|
|
148
|
-
const order = options.defaultSort;
|
|
149
|
-
return {
|
|
150
|
-
...options,
|
|
151
|
-
initialState: {
|
|
152
|
-
...options.initialState,
|
|
153
|
-
query: {
|
|
154
|
-
...options.initialState?.query,
|
|
155
|
-
order,
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
return options;
|
|
161
|
-
}
|
|
162
|
-
TableOrderHelpers.seedDefaultSortOption = seedDefaultSortOption;
|
|
163
|
-
})(TableOrderHelpers || (TableOrderHelpers = {}));
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3N0YXRlLWhlbHBlcnMvb3JkZXItaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSWpDLE1BQU0sS0FBVyxpQkFBaUIsQ0E0T2pDO0FBNU9ELFdBQWlCLGlCQUFpQjtJQUNoQyxTQUFnQixjQUFjLENBQzVCLElBQVMsRUFDVCxHQUFZLEVBQ1osU0FBa0M7UUFFbEMsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQU5lLGdDQUFjLGlCQU03QixDQUFBO0lBRUQsU0FBZ0Isd0JBQXdCLENBQ3RDLElBQTZCLEVBQzdCLEdBQVksRUFDWixTQUFrQztRQUVsQyxPQUFPLE9BQU8sQ0FDWixJQUFJLEVBQ0osQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNwRCxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FDbkIsQ0FBQztJQUNKLENBQUM7SUFWZSwwQ0FBd0IsMkJBVXZDLENBQUE7SUFFRCxTQUFnQiw0QkFBNEIsQ0FDMUMsSUFBNkIsRUFDN0Isa0JBQWdEO1FBRWhELE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcs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SyxHQUFrQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ2pFLE9BQU87Z0JBQ0wsR0FBRyxPQUFPO2dCQUNWLFlBQVksRUFBRTtvQkFDWixHQUFHLE9BQU8sQ0FBQyxZQUFZO29CQUN2QixLQUFLLEVBQUU7d0JBQ0wsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUs7d0JBQzlCLEtBQUs7cUJBQytCO2lCQUN2QzthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQXRCZSx1Q0FBcUIsd0JBc0JwQyxDQUFBO0FBQ0gsQ0FBQyxFQTVPZ0IsaUJBQWlCLEtBQWpCLGlCQUFpQixRQTRPakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndXRpbGl0eS10eXBlcyc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZU9yZGVySGVscGVycyB7XG4gIGV4cG9ydCBmdW5jdGlvbiBvcmRlckVtcHR5TGFzdDxSPihcbiAgICByb3dzOiBSW10sXG4gICAga2V5OiBrZXlvZiBSLFxuICAgIGRpcmVjdGlvbjogUml2VGFibGUuT3JkZXJEaXJlY3Rpb24sXG4gICk6IFJbXSB7XG4gICAgcmV0dXJuIG9yZGVyQnkocm93cywgW3JvdyA9PiByb3dba2V5XSA9PSBudWxsLCBrZXldLCBbJ2FzYycsIGRpcmVjdGlvbl0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG9yZGVyTmVzdGVkUm93c0VtcHR5TGFzdDxSIGV4dGVuZHMgUml2VGFibGUuUm93PihcbiAgICByb3dzOiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj5bXSxcbiAgICBrZXk6IGtleW9mIFIsXG4gICAgZGlyZWN0aW9uOiBSaXZUYWJsZS5PcmRlckRpcmVjdGlvbixcbiAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+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+W10gPVxuICAgICAgICBzb3J0TmVzdGVkUm93c0Jhc2VkT25TZWFyY2hNYXRjaGVzKFxuICAgICAgICAgIGhlYWRlclJvdy5zdWJSb3dzLFxuICAgICAgICAgIGlkVG9TZWFyY2hJbmRleE1hcCxcbiAgICAgICAgKTtcbiAgICAgIHNvcnRlZEhlYWRlclJvd3MucHVzaCh7XG4gICAgICAgIC4uLmhlYWRlclJvdyxcbiAgICAgICAgc3ViUm93czogc29ydGVkU3ViUm93cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0ZWRIZWFkZXJSb3dzO1xuICB9XG5cbiAgLypcbiAgICBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgIHRhYmxlIGhlYWRlciBzaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgZnJvbSB0aGUgc3RhcnQuXG4gICovXG4gIGV4cG9ydCBmdW5jdGlvbiBzZWVkRGVmYXVsdFNvcnRPcHRpb248XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICA+KFxuICAgIG9wdGlvbnM/OiBSaXZUYWJsZS5Jbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBSaXZUYWJsZS5Jbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAob3B0aW9ucz8uZGVmYXVsdFNvcnQgJiYgIW9wdGlvbnM/LmluaXRpYWxTdGF0ZT8ucXVlcnk/Lm9yZGVyKSB7XG4gICAgICBjb25zdCBvcmRlcjogUml2VGFibGUuUXVlcnk8QywgRj5bJ29yZGVyJ10gPSBvcHRpb25zLmRlZmF1bHRTb3J0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgLi4ub3B0aW9ucy5pbml0aWFsU3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuaW5pdGlhbFN0YXRlPy5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgIH0gYXMgRGVlcFBhcnRpYWw8Uml2VGFibGUuUXVlcnk8QywgRj4+LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxufVxuIl19
|
|
@@ -1,139 +0,0 @@
|
|
|
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
|
-
/*
|
|
74
|
-
Paginate based on bottom level rows, splitting as necessary to fit within the page,
|
|
75
|
-
or based on top level rows, keeping each with all of its subrows.
|
|
76
|
-
*/
|
|
77
|
-
function paginateNestedHeaderRows(allHeaders, pageNumber, pageSize, paginateBy = 'bottomRows') {
|
|
78
|
-
const startIdx = pageSize * pageNumber;
|
|
79
|
-
const endIdx = startIdx + pageSize;
|
|
80
|
-
let countedRowCount = 0;
|
|
81
|
-
function countRow(currentNestedRow) {
|
|
82
|
-
countedRowCount++;
|
|
83
|
-
// Since we add 1 first, the bounds should be (startIdx, endIdx]
|
|
84
|
-
return countedRowCount > startIdx && countedRowCount <= endIdx
|
|
85
|
-
? currentNestedRow
|
|
86
|
-
: null;
|
|
87
|
-
}
|
|
88
|
-
function recursivePaginateRows(currentNestedRow) {
|
|
89
|
-
if (countedRowCount > endIdx) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
// If there are no subrows, stop recursing
|
|
93
|
-
if (!currentNestedRow.subRows?.length) {
|
|
94
|
-
return countRow(currentNestedRow);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
const subRowsToKeep = [];
|
|
98
|
-
for (const subRow of currentNestedRow.subRows) {
|
|
99
|
-
const countedRow = recursivePaginateRows(subRow);
|
|
100
|
-
if (countedRow != null) {
|
|
101
|
-
subRowsToKeep.push(countedRow);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
if (subRowsToKeep.length == 0) {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
// Keep any top level row that has at least one subrow
|
|
109
|
-
return {
|
|
110
|
-
...currentNestedRow,
|
|
111
|
-
subRows: subRowsToKeep,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const paginatedHeaders = [];
|
|
117
|
-
for (const headerRow of allHeaders) {
|
|
118
|
-
const paginatedSubRows = [];
|
|
119
|
-
for (const subRow of headerRow.subRows) {
|
|
120
|
-
const recursedSubRow = paginateBy === 'topRows'
|
|
121
|
-
? countRow(subRow)
|
|
122
|
-
: recursivePaginateRows(subRow);
|
|
123
|
-
if (recursedSubRow != null) {
|
|
124
|
-
paginatedSubRows.push(recursedSubRow);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
if (paginatedSubRows.length > 0) {
|
|
128
|
-
// Keep any header that has at least one subrow in the current page
|
|
129
|
-
paginatedHeaders.push({
|
|
130
|
-
...headerRow,
|
|
131
|
-
subRows: paginatedSubRows,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return paginatedHeaders;
|
|
136
|
-
}
|
|
137
|
-
TablePaginationHelpers.paginateNestedHeaderRows = paginateNestedHeaderRows;
|
|
138
|
-
})(TablePaginationHelpers || (TablePaginationHelpers = {}));
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvc3RhdGUtaGVscGVycy9wYWdpbmF0aW9uLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE1BQU0sS0FBVyxzQkFBc0IsQ0FzTnRDO0FBdE5ELFdBQWlCLHNCQUFzQjtJQUNyQyxTQUFnQixZQUFZLENBSzFCLEtBQXFDO1FBQ3JDLElBQUksa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDYixJQUFJLENBQUMsSUFBSSxDQUNQLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDbEUsRUFDRCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQ2IsSUFBSSxDQUFDLElBQUksQ0FDUCxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FDckUsRUFDRCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFwQmUsbUNBQVksZUFvQjNCLENBQUE7SUFFRCxTQUFnQixlQUFlLENBSzdCLEtBQXFDO1FBQ3JDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7WUFDdEMsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENB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LE1BQU0sTUFBTSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxjQUFjLEdBQ2xCLFVBQVUsS0FBSyxTQUFTO29CQUN0QixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVwQyxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxtRUFBbUU7Z0JBQ25FLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDcEIsR0FBRyxTQUFTO29CQUNaLE9BQU8sRUFBRSxnQkFBZ0I7aUJBQzFCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBL0VlLCtDQUF3QiwyQkErRXZDLENBQUE7QUFDSCxDQUFDLEVBdE5nQixzQkFBc0IsS0FBdEIsc0JBQXNCLFFBc050QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgVGFibGVSZXN1bHRIZWxwZXJzIH0gZnJvbSAnLi9yZXN1bHQtaGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVQYWdpbmF0aW9uSGVscGVycyB7XG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlQ291bnQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgc3RhdGUucmVzdWx0LnRvdGFsR3JvdXBDb3VudCAvIHN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICksXG4gICAgICAgIDEsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICBNYXRoLmNlaWwoXG4gICAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgLyBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2U8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9PT0gMFxuICAgICAgPyBudWxsXG4gICAgICA6IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIDE7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UGFnZXM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHBhZGRpbmcgPSA0O1xuICAgIGNvbnN0IG1pbiA9IDA7XG4gICAgY29uc3QgbWF4ID0gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDE7XG4gICAgY29uc3QgZGVzaXJlZFN0YXJ0ID0gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlIC0gcGFkZGluZztcbiAgICBjb25zdCBjbGFtcGVkU3RhcnQgPSBNYXRoLm1heChtaW4sIGRlc2lyZWRTdGFydCk7XG4gICAgY29uc3QgZGVzaXJlZEVuZCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIHBhZGRpbmc7XG4gICAgY29uc3QgY2xhbXBlZEVuZCA9IE1hdGgubWluKG1heCwgZGVzaXJlZEVuZCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heChtaW4sIGNsYW1wZWRTdGFydCAtIChkZXNpcmVkRW5kIC0gY2xhbXBlZEVuZCkpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKG1heCwgY2xhbXBlZEVuZCArIChjbGFtcGVkU3RhcnQgLSBkZXNpcmVkU3RhcnQpKTtcbiAgICByZXR1cm4gcmFuZ2Uoc3RhcnQsIGVuZCArIDEpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRQYWdlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IG1heCA9IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxO1xuICAgIGNvbnN0IG5leHQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyAxO1xuICAgIHJldHVybiBuZXh0IDw9IG1heCA/IG5leHQgOiBudWxsO1xuICB9XG5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaG93IHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzIHdoZW4gdGhleSBhcmUgdW5uZWNlc3NhcnkuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IGJvb2xlYW4ge1xuICAgIGlmIChzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KHN0YXRlLnJlc3VsdCkpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50ID4gc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiBNYXRoLm1pbiguLi5bLi4uUml2VGFibGUucGFnZVNpemVzXSlcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VSb3dTdGFydDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIge1xuICAgIHJldHVybiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplICsgMTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlUm93RW5kPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgKHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIDEpICogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BhZ2VPdXRPZkJvdW5kczxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgcmVzdWx0OlxuICAgICAgfCBSaXZUYWJsZS5SZXN1bHQ8Uj5cbiAgICAgIHwgUml2VGFibGUuR3JvdXBSZXN1bHQ8UiwgRz5cbiAgICAgIHwgUml2VGFibGUuTmVzdGVkUmVzdWx0PFI+LFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQocmVzdWx0KSkge1xuICAgICAgY29uc3QgbWluR3JvdXBWYWxUb1Nob3dPbkN1cnJlbnRQYWdlID1cbiAgICAgICAgc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlICogc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZSArIDE7XG4gICAgICBpZiAocmVzdWx0LnRvdGFsR3JvdXBDb3VudCA8IG1pbkdyb3VwVmFsVG9TaG93T25DdXJyZW50UGFnZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWluUm93VG9TaG93T25DdXJyZW50UGFnZSA9XG4gICAgICAgIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAqIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUgKyAxO1xuICAgICAgaWYgKHJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPCBtaW5Sb3dUb1Nob3dPbkN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKlxuICAgIFBhZ2luYXRlIGJhc2VkIG9uIGJvdHRvbSBsZXZlbCByb3dzLCBzcGxpdHRpbmcgYXMgbmVjZXNzYXJ5IHRvIGZpdCB3aXRoaW4gdGhlIHBhZ2UsXG4gICAgb3IgYmFzZWQgb24gdG9wIGxldmVsIHJvd3MsIGtlZXBpbmcgZWFjaCB3aXRoIGFsbCBvZiBpdHMgc3Vicm93cy5cbiAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHBhZ2luYXRlTmVzdGVkSGVhZGVyUm93czxSIGV4dGVuZHMgUml2VGFibGUuUm93PihcbiAgICBhbGxIZWFkZXJzOiBSaXZUYWJsZS5OZXN0ZWRIZWFkZXJSb3c8Uj5bXSxcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBwYWdpbmF0ZUJ5OiBSaXZUYWJsZS5OZXN0ZWRQYWdpbmF0ZUJ5ID0gJ2JvdHRvbVJvd3MnLFxuICApOiBSaXZUYWJsZS5OZXN0ZWRIZWFkZXJSb3c8Uj5bXSB7XG4gICAgY29uc3Qgc3RhcnRJZHg6IG51bWJlciA9IHBhZ2VTaXplICogcGFnZU51bWJlcjtcbiAgICBjb25zdCBlbmRJZHg6IG51bWJlciA9IHN0YXJ0SWR4ICsgcGFnZVNpemU7XG5cbiAgICBsZXQgY291bnRlZFJvd0NvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgZnVuY3Rpb24gY291bnRSb3coXG4gICAgICBjdXJyZW50TmVzdGVkUm93OiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj4sXG4gICAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+IHwgbnVsbCB7XG4gICAgICBjb3VudGVkUm93Q291bnQrKztcblxuICAgICAgLy8gU2luY2Ugd2UgYWRkIDEgZmlyc3QsIHRoZSBib3VuZHMgc2hvdWxkIGJlIChzdGFydElkeCwgZW5kSWR4XVxuICAgICAgcmV0dXJuIGNvdW50ZWRSb3dDb3VudCA+IHN0YXJ0SWR4ICYmIGNvdW50ZWRSb3dDb3VudCA8PSBlbmRJZHhcbiAgICAgICAgPyBjdXJyZW50TmVzdGVkUm93XG4gICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVQYWdpbmF0ZVJvd3MoXG4gICAgICBjdXJyZW50TmVzdGVkUm93OiBSaXZUYWJsZS5OZXN0ZWRSb3c8Uj4sXG4gICAgKTogUml2VGFibGUuTmVzdGVkUm93PFI+IHwgbnVsbCB7XG4gICAgICBpZiAoY291bnRlZFJvd0NvdW50ID4gZW5kSWR4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gc3Vicm93cywgc3RvcCByZWN1cnNpbmdcbiAgICAgIGlmICghY3VycmVudE5lc3RlZFJvdy5zdWJSb3dzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGNvdW50Um93KGN1cnJlbnROZXN0ZWRSb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3ViUm93c1RvS2VlcDogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzdWJSb3cgb2YgY3VycmVudE5lc3RlZFJvdy5zdWJSb3dzKSB7XG4gICAgICAgICAgY29uc3QgY291bnRlZFJvdzogUml2VGFibGUuTmVzdGVkUm93PFI+IHwgbnVsbCA9XG4gICAgICAgICAgICByZWN1cnNpdmVQYWdpbmF0ZVJvd3Moc3ViUm93KTtcbiAgICAgICAgICBpZiAoY291bnRlZFJvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBzdWJSb3dzVG9LZWVwLnB1c2goY291bnRlZFJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlJvd3NUb0tlZXAubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBLZWVwIGFueSB0b3AgbGV2ZWwgcm93IHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBzdWJyb3dcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY3VycmVudE5lc3RlZFJvdyxcbiAgICAgICAgICAgIHN1YlJvd3M6IHN1YlJvd3NUb0tlZXAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2luYXRlZEhlYWRlcnM6IFJpdlRhYmxlLk5lc3RlZEhlYWRlclJvdzxSPltdID0gW107XG4gICAgZm9yIChjb25zdCBoZWFkZXJSb3cgb2YgYWxsSGVhZGVycykge1xuICAgICAgY29uc3QgcGFnaW5hdGVkU3ViUm93czogUml2VGFibGUuTmVzdGVkUm93PFI+W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBzdWJSb3cgb2YgaGVhZGVyUm93LnN1YlJvd3MpIHtcbiAgICAgICAgY29uc3QgcmVjdXJzZWRTdWJSb3c6IFJpdlRhYmxlLk5lc3RlZFJvdzxSPiB8IG51bGwgPVxuICAgICAgICAgIHBhZ2luYXRlQnkgPT09ICd0b3BSb3dzJ1xuICAgICAgICAgICAgPyBjb3VudFJvdyhzdWJSb3cpXG4gICAgICAgICAgICA6IHJlY3Vyc2l2ZVBhZ2luYXRlUm93cyhzdWJSb3cpO1xuXG4gICAgICAgIGlmIChyZWN1cnNlZFN1YlJvdyAhPSBudWxsKSB7XG4gICAgICAgICAgcGFnaW5hdGVkU3ViUm93cy5wdXNoKHJlY3Vyc2VkU3ViUm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFnaW5hdGVkU3ViUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEtlZXAgYW55IGhlYWRlciB0aGF0IGhhcyBhdCBsZWFzdCBvbmUgc3Vicm93IGluIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgcGFnaW5hdGVkSGVhZGVycy5wdXNoKHtcbiAgICAgICAgICAuLi5oZWFkZXJSb3csXG4gICAgICAgICAgc3ViUm93czogcGFnaW5hdGVkU3ViUm93cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2luYXRlZEhlYWRlcnM7XG4gIH1cbn1cbiJdfQ==
|