@one-paragon/angular-utilities 1.2.12 → 1.2.13
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/action-state/action-state-spinner/action-state-spinner.component.d.ts +12 -0
- package/action-state/action-state-ui/action-state-ui.module.d.ts +7 -0
- package/{src/action-state/index.ts → action-state/index.d.ts} +4 -8
- package/action-state/ngrx-ext/ngrx-ext.module.d.ts +8 -0
- package/action-state/ngrx.d.ts +31 -0
- package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +24 -0
- package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +20 -0
- package/esm2022/action-state/index.mjs +8 -0
- package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +23 -0
- package/esm2022/action-state/ngrx.mjs +47 -0
- package/esm2022/http-request-state/HttpRequestStateFactory.mjs +51 -0
- package/esm2022/http-request-state/HttpRequestStateStore.mjs +121 -0
- package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +30 -0
- package/esm2022/http-request-state/directives/http-error-state-directive.mjs +23 -0
- package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +23 -0
- package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +23 -0
- package/esm2022/http-request-state/directives/http-success-state-directive.mjs +29 -0
- package/esm2022/http-request-state/directives/index.mjs +6 -0
- package/esm2022/http-request-state/directives/request-state-directive.mjs +61 -0
- package/esm2022/http-request-state/helpers.mjs +22 -0
- package/esm2022/http-request-state/http-request-state.mjs +39 -0
- package/esm2022/http-request-state/http-state-module.mjs +40 -0
- package/esm2022/http-request-state/index.mjs +7 -0
- package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +4 -0
- package/esm2022/http-request-state/rxjs/getRequestorState.mjs +3 -0
- package/esm2022/http-request-state/rxjs/index.mjs +5 -0
- package/esm2022/http-request-state/rxjs/tapError.mjs +12 -0
- package/esm2022/http-request-state/rxjs/tapSuccess.mjs +12 -0
- package/esm2022/http-request-state/types.mjs +16 -0
- package/esm2022/ngrx/actionable-selector.mjs +71 -0
- package/esm2022/ngrx/index.mjs +2 -0
- package/esm2022/one-paragon-angular-utilities.mjs +5 -0
- package/esm2022/public-api.mjs +20 -0
- package/esm2022/rxjs/defaultShareReplay.mjs +7 -0
- package/esm2022/rxjs/index.mjs +6 -0
- package/esm2022/rxjs/mapError.mjs +8 -0
- package/esm2022/rxjs/rxjs-operators.mjs +92 -0
- package/esm2022/rxjs/subjectifier.mjs +15 -0
- package/esm2022/rxjs/subscriber.directive.mjs +50 -0
- package/esm2022/table-builder/classes/DefaultSettings.mjs +6 -0
- package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +23 -0
- package/esm2022/table-builder/classes/TableBuilderConfig.mjs +18 -0
- package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +45 -0
- package/esm2022/table-builder/classes/TableState.mjs +49 -0
- package/esm2022/table-builder/classes/data-store.mjs +15 -0
- package/esm2022/table-builder/classes/display-col.mjs +2 -0
- package/esm2022/table-builder/classes/filter-info.mjs +61 -0
- package/esm2022/table-builder/classes/table-builder-general-settings.mjs +112 -0
- package/esm2022/table-builder/classes/table-builder.mjs +77 -0
- package/esm2022/table-builder/classes/table-store.mjs +383 -0
- package/esm2022/table-builder/components/array-column.component.mjs +53 -0
- package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +134 -0
- package/esm2022/table-builder/components/column-builder/column-helpers.mjs +45 -0
- package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +29 -0
- package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +24 -0
- package/esm2022/table-builder/components/filter/filter.component.mjs +64 -0
- package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +102 -0
- package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +47 -0
- package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +301 -0
- package/esm2022/table-builder/components/generic-table/paginator.component.mjs +100 -0
- package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +21 -0
- package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +103 -0
- package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +65 -0
- package/esm2022/table-builder/components/index.mjs +10 -0
- package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +47 -0
- package/esm2022/table-builder/components/link-column.component.mjs +74 -0
- package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +29 -0
- package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +64 -0
- package/esm2022/table-builder/components/scroll-strategy.mjs +60 -0
- package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +46 -0
- package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +82 -0
- package/esm2022/table-builder/components/table-container/table-container-imports.mjs +26 -0
- package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +135 -0
- package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +83 -0
- package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +71 -0
- package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +36 -0
- package/esm2022/table-builder/components/table-container/table-container.mjs +327 -0
- package/esm2022/table-builder/components/table-container/tableProps.mjs +8 -0
- package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +151 -0
- package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +44 -0
- package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +36 -0
- package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +25 -0
- package/esm2022/table-builder/directives/custom-cell-directive.mjs +73 -0
- package/esm2022/table-builder/directives/index.mjs +6 -0
- package/esm2022/table-builder/directives/multi-sort.directive.mjs +50 -0
- package/esm2022/table-builder/directives/resize-column.directive.mjs +87 -0
- package/esm2022/table-builder/directives/table-wrapper.directive.mjs +18 -0
- package/esm2022/table-builder/directives/tb-filter.directive.mjs +396 -0
- package/esm2022/table-builder/enums/filterTypes.mjs +29 -0
- package/esm2022/table-builder/functions/boolean-filter-function.mjs +10 -0
- package/esm2022/table-builder/functions/date-filter-function.mjs +58 -0
- package/esm2022/table-builder/functions/download-data.mjs +12 -0
- package/esm2022/table-builder/functions/null-filter-function.mjs +8 -0
- package/esm2022/table-builder/functions/number-filter-function.mjs +32 -0
- package/esm2022/table-builder/functions/sort-data-function.mjs +17 -0
- package/esm2022/table-builder/functions/string-filter-function.mjs +41 -0
- package/esm2022/table-builder/interfaces/ColumnInfo.mjs +2 -0
- package/esm2022/table-builder/interfaces/dictionary.mjs +2 -0
- package/esm2022/table-builder/interfaces/report-def.mjs +50 -0
- package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +154 -0
- package/esm2022/table-builder/pipes/column-total.pipe.mjs +22 -0
- package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +18 -0
- package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +43 -0
- package/esm2022/table-builder/pipes/key-display.mjs +18 -0
- package/esm2022/table-builder/services/export-to-csv.service.mjs +75 -0
- package/esm2022/table-builder/services/link-creator.service.mjs +50 -0
- package/esm2022/table-builder/services/table-template-service.mjs +60 -0
- package/esm2022/table-builder/services/transform-creator.mjs +100 -0
- package/esm2022/table-builder/table-builder.module.mjs +124 -0
- package/esm2022/utilities/array-helpers.mjs +14 -0
- package/esm2022/utilities/directives/auto-focus.directive.mjs +25 -0
- package/esm2022/utilities/directives/clickEmitterDirective.mjs +22 -0
- package/esm2022/utilities/directives/clickSubject.mjs +29 -0
- package/esm2022/utilities/directives/conditional-classes.directive.mjs +36 -0
- package/esm2022/utilities/directives/dialog-service.mjs +21 -0
- package/esm2022/utilities/directives/dialog.mjs +145 -0
- package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +59 -0
- package/esm2022/utilities/directives/prevent-enter.directive.mjs +20 -0
- package/esm2022/utilities/directives/stop-propagation.directive.mjs +26 -0
- package/esm2022/utilities/directives/styler.mjs +41 -0
- package/esm2022/utilities/directives/trim-whitespace.directive.mjs +28 -0
- package/esm2022/utilities/index.mjs +16 -0
- package/esm2022/utilities/module.mjs +90 -0
- package/esm2022/utilities/pipes/function.pipe.mjs +22 -0
- package/esm2022/utilities/pipes/phone.pipe.mjs +20 -0
- package/esm2022/utilities/pipes/space-case.pipes.mjs +28 -0
- package/fesm2022/one-paragon-angular-utilities.mjs +5670 -0
- package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -0
- package/http-request-state/HttpRequestStateFactory.d.ts +17 -0
- package/http-request-state/HttpRequestStateStore.d.ts +54 -0
- package/http-request-state/directives/HttpStateDirectiveBase.d.ts +14 -0
- package/http-request-state/directives/http-error-state-directive.d.ts +9 -0
- package/http-request-state/directives/http-inProgress-state-directive.d.ts +9 -0
- package/http-request-state/directives/http-notStarted-state-directive.d.ts +9 -0
- package/http-request-state/directives/http-success-state-directive.d.ts +16 -0
- package/{src/http-request-state/directives/index.ts → http-request-state/directives/index.d.ts} +5 -5
- package/http-request-state/directives/request-state-directive.d.ts +34 -0
- package/http-request-state/helpers.d.ts +9 -0
- package/http-request-state/http-request-state.d.ts +12 -0
- package/http-request-state/http-state-module.d.ts +11 -0
- package/{src/http-request-state/index.ts → http-request-state/index.d.ts} +6 -6
- package/http-request-state/rxjs/getRequestorBody.d.ts +3 -0
- package/http-request-state/rxjs/getRequestorState.d.ts +3 -0
- package/{src/http-request-state/rxjs/index.ts → http-request-state/rxjs/index.d.ts} +4 -4
- package/http-request-state/rxjs/tapError.d.ts +3 -0
- package/http-request-state/rxjs/tapSuccess.d.ts +3 -0
- package/http-request-state/types.d.ts +41 -0
- package/index.d.ts +5 -0
- package/ngrx/actionable-selector.d.ts +17 -0
- package/ngrx/index.d.ts +1 -0
- package/package.json +30 -16
- package/{src/public-api.ts → public-api.d.ts} +16 -35
- package/rxjs/defaultShareReplay.d.ts +2 -0
- package/{src/rxjs/index.ts → rxjs/index.d.ts} +5 -5
- package/rxjs/mapError.d.ts +2 -0
- package/rxjs/rxjs-operators.d.ts +13 -0
- package/rxjs/subjectifier.d.ts +8 -0
- package/rxjs/subscriber.directive.d.ts +14 -0
- package/table-builder/classes/DefaultSettings.d.ts +9 -0
- package/table-builder/classes/MatTableObservableDataSource.d.ts +9 -0
- package/table-builder/classes/TableBuilderConfig.d.ts +21 -0
- package/table-builder/classes/TableBuilderDataSource.d.ts +12 -0
- package/table-builder/classes/TableState.d.ts +67 -0
- package/table-builder/classes/data-store.d.ts +8 -0
- package/{src/table-builder/classes/display-col.ts → table-builder/classes/display-col.d.ts} +5 -5
- package/table-builder/classes/filter-info.d.ts +35 -0
- package/table-builder/classes/table-builder-general-settings.d.ts +78 -0
- package/table-builder/classes/table-builder.d.ts +18 -0
- package/table-builder/classes/table-store.d.ts +138 -0
- package/table-builder/components/array-column.component.d.ts +15 -0
- package/table-builder/components/column-builder/column-builder.component.d.ts +47 -0
- package/table-builder/components/column-builder/column-helpers.d.ts +36 -0
- package/table-builder/components/date-filter/date-filter.component.d.ts +37 -0
- package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +37 -0
- package/table-builder/components/filter/filter.component.d.ts +46 -0
- package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +24 -0
- package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +17 -0
- package/table-builder/components/generic-table/generic-table.component.d.ts +83 -0
- package/table-builder/components/generic-table/paginator.component.d.ts +30 -0
- package/table-builder/components/group-by-list/group-by-list.component.d.ts +7 -0
- package/table-builder/components/header-menu/header-menu.component.d.ts +51 -0
- package/table-builder/components/in-filter/in-filter.component.d.ts +20 -0
- package/{src/table-builder/components/index.ts → table-builder/components/index.d.ts} +9 -9
- package/table-builder/components/initialization-component/initialization-component.d.ts +13 -0
- package/table-builder/components/link-column.component.d.ts +25 -0
- package/table-builder/components/number-filter/number-filter.component.d.ts +39 -0
- package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +32 -0
- package/table-builder/components/scroll-strategy.d.ts +22 -0
- package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +24 -0
- package/table-builder/components/sort-menu/sort-menu.component.d.ts +24 -0
- package/{src/table-builder/components/table-container/table-container-imports.ts → table-builder/components/table-container/table-container-imports.d.ts} +14 -32
- package/table-builder/components/table-container/table-container.d.ts +79 -0
- package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +6 -0
- package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +17 -0
- package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +17 -0
- package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +8 -0
- package/table-builder/components/table-container/tableProps.d.ts +12 -0
- package/table-builder/components/table-container/virtual-scroll-container.d.ts +35 -0
- package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +15 -0
- package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +12 -0
- package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +14 -0
- package/table-builder/directives/custom-cell-directive.d.ts +33 -0
- package/{src/table-builder/directives/index.ts → table-builder/directives/index.d.ts} +5 -6
- package/table-builder/directives/multi-sort.directive.d.ts +10 -0
- package/table-builder/directives/resize-column.directive.d.ts +43 -0
- package/table-builder/directives/table-wrapper.directive.d.ts +8 -0
- package/table-builder/directives/tb-filter.directive.d.ts +115 -0
- package/table-builder/enums/filterTypes.d.ts +36 -0
- package/table-builder/functions/boolean-filter-function.d.ts +3 -0
- package/table-builder/functions/date-filter-function.d.ts +4 -0
- package/table-builder/functions/download-data.d.ts +1 -0
- package/table-builder/functions/null-filter-function.d.ts +2 -0
- package/table-builder/functions/number-filter-function.d.ts +4 -0
- package/table-builder/functions/sort-data-function.d.ts +6 -0
- package/table-builder/functions/string-filter-function.d.ts +5 -0
- package/{src/table-builder/interfaces/ColumnInfo.ts → table-builder/interfaces/ColumnInfo.d.ts} +6 -7
- package/{src/table-builder/interfaces/dictionary.ts → table-builder/interfaces/dictionary.d.ts} +3 -3
- package/table-builder/interfaces/report-def.d.ts +147 -0
- package/table-builder/ngrx/tableBuilderStateStore.d.ts +70 -0
- package/table-builder/pipes/column-total.pipe.d.ts +8 -0
- package/table-builder/pipes/format-filter-type.pipe.d.ts +8 -0
- package/table-builder/pipes/format-filter-value.pipe.d.ts +12 -0
- package/table-builder/pipes/key-display.d.ts +10 -0
- package/table-builder/services/export-to-csv.service.d.ts +14 -0
- package/table-builder/services/link-creator.service.d.ts +16 -0
- package/table-builder/services/table-template-service.d.ts +14 -0
- package/table-builder/services/transform-creator.d.ts +16 -0
- package/table-builder/table-builder.module.d.ts +21 -0
- package/utilities/array-helpers.d.ts +1 -0
- package/utilities/directives/auto-focus.directive.d.ts +9 -0
- package/utilities/directives/clickEmitterDirective.d.ts +7 -0
- package/utilities/directives/clickSubject.d.ts +9 -0
- package/utilities/directives/conditional-classes.directive.d.ts +13 -0
- package/utilities/directives/dialog-service.d.ts +10 -0
- package/utilities/directives/dialog.d.ts +44 -0
- package/utilities/directives/mat-toggle-group-directive.d.ts +21 -0
- package/utilities/directives/prevent-enter.directive.d.ts +6 -0
- package/utilities/directives/stop-propagation.directive.d.ts +7 -0
- package/utilities/directives/styler.d.ts +15 -0
- package/utilities/directives/trim-whitespace.directive.d.ts +7 -0
- package/{src/utilities/index.ts → utilities/index.d.ts} +15 -22
- package/utilities/module.d.ts +19 -0
- package/utilities/pipes/function.pipe.d.ts +7 -0
- package/utilities/pipes/phone.pipe.d.ts +7 -0
- package/utilities/pipes/space-case.pipes.d.ts +17 -0
- package/karma.conf.js +0 -44
- package/ng-package.json +0 -7
- package/src/action-state/action-state-spinner/action-state-spinner.component.css +0 -16
- package/src/action-state/action-state-spinner/action-state-spinner.component.html +0 -6
- package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +0 -25
- package/src/action-state/action-state-spinner/action-state-spinner.component.ts +0 -26
- package/src/action-state/action-state-ui/action-state-ui.module.ts +0 -13
- package/src/action-state/ngrx-ext/ngrx-ext.module.ts +0 -15
- package/src/action-state/ngrx.ts +0 -69
- package/src/http-request-state/HttpRequestStateFactory.ts +0 -66
- package/src/http-request-state/HttpRequestStateStore.ts +0 -173
- package/src/http-request-state/directives/HttpStateDirectiveBase.ts +0 -29
- package/src/http-request-state/directives/http-error-state-directive.ts +0 -21
- package/src/http-request-state/directives/http-inProgress-state-directive.ts +0 -19
- package/src/http-request-state/directives/http-notStarted-state-directive.ts +0 -19
- package/src/http-request-state/directives/http-success-state-directive.ts +0 -29
- package/src/http-request-state/directives/request-state-directive.spec.ts +0 -72
- package/src/http-request-state/directives/request-state-directive.ts +0 -78
- package/src/http-request-state/helpers.ts +0 -30
- package/src/http-request-state/http-request-state.ts +0 -69
- package/src/http-request-state/http-state-module.ts +0 -23
- package/src/http-request-state/observable.spec.ts +0 -43
- package/src/http-request-state/rxjs/getRequestorBody.ts +0 -10
- package/src/http-request-state/rxjs/getRequestorState.ts +0 -8
- package/src/http-request-state/rxjs/tapError.ts +0 -16
- package/src/http-request-state/rxjs/tapSuccess.ts +0 -16
- package/src/http-request-state/strategies.spec.ts +0 -42
- package/src/http-request-state/types.ts +0 -55
- package/src/ngrx/actionable-selector.ts +0 -95
- package/src/ngrx/index.ts +0 -1
- package/src/rxjs/defaultShareReplay.ts +0 -8
- package/src/rxjs/mapError.ts +0 -8
- package/src/rxjs/rxjs-operators.ts +0 -132
- package/src/rxjs/subjectifier.ts +0 -17
- package/src/rxjs/subscriber.directive.ts +0 -57
- package/src/specs/clickSubject.spec.ts +0 -95
- package/src/specs/dialog.spec.ts +0 -101
- package/src/specs/toggleGroupDirective.spec.ts +0 -229
- package/src/table-builder/classes/DefaultSettings.ts +0 -11
- package/src/table-builder/classes/MatTableObservableDataSource.ts +0 -23
- package/src/table-builder/classes/TableBuilderConfig.ts +0 -35
- package/src/table-builder/classes/TableBuilderDataSource.ts +0 -80
- package/src/table-builder/classes/TableState.ts +0 -96
- package/src/table-builder/classes/data-store.ts +0 -10
- package/src/table-builder/classes/filter-info.ts +0 -108
- package/src/table-builder/classes/table-builder-general-settings.ts +0 -129
- package/src/table-builder/classes/table-builder.ts +0 -94
- package/src/table-builder/classes/table-store.ts +0 -471
- package/src/table-builder/components/array-column.component.ts +0 -36
- package/src/table-builder/components/column-builder/column-builder.component.html +0 -61
- package/src/table-builder/components/column-builder/column-builder.component.scss +0 -43
- package/src/table-builder/components/column-builder/column-builder.component.spec.ts +0 -49
- package/src/table-builder/components/column-builder/column-builder.component.ts +0 -135
- package/src/table-builder/components/column-builder/column-helpers.ts +0 -53
- package/src/table-builder/components/date-filter/date-filter.component.html +0 -23
- package/src/table-builder/components/date-filter/date-filter.component.ts +0 -24
- package/src/table-builder/components/date-time-filter/date-time-filter.component.html +0 -9
- package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +0 -22
- package/src/table-builder/components/filter/filter.component.html +0 -91
- package/src/table-builder/components/filter/filter.component.scss +0 -64
- package/src/table-builder/components/filter/filter.component.spec.ts +0 -87
- package/src/table-builder/components/filter/filter.component.ts +0 -60
- package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +0 -93
- package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +0 -55
- package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +0 -57
- package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +0 -59
- package/src/table-builder/components/generic-table/generic-table.component.html +0 -78
- package/src/table-builder/components/generic-table/generic-table.component.scss +0 -42
- package/src/table-builder/components/generic-table/generic-table.component.ts +0 -299
- package/src/table-builder/components/generic-table/paginator.component.ts +0 -99
- package/src/table-builder/components/group-by-list/group-by-list.component.css +0 -8
- package/src/table-builder/components/group-by-list/group-by-list.component.html +0 -12
- package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +0 -23
- package/src/table-builder/components/group-by-list/group-by-list.component.ts +0 -21
- package/src/table-builder/components/header-menu/header-menu.component.html +0 -104
- package/src/table-builder/components/header-menu/header-menu.component.scss +0 -96
- package/src/table-builder/components/header-menu/header-menu.component.ts +0 -99
- package/src/table-builder/components/in-filter/in-filter.component.css +0 -3
- package/src/table-builder/components/in-filter/in-filter.component.html +0 -20
- package/src/table-builder/components/in-filter/in-filter.component.ts +0 -66
- package/src/table-builder/components/initialization-component/initialization-component.html +0 -29
- package/src/table-builder/components/initialization-component/initialization-component.ts +0 -24
- package/src/table-builder/components/link-column.component.ts +0 -47
- package/src/table-builder/components/number-filter/number-filter.component.css +0 -10
- package/src/table-builder/components/number-filter/number-filter.component.html +0 -19
- package/src/table-builder/components/number-filter/number-filter.component.spec.ts +0 -30
- package/src/table-builder/components/number-filter/number-filter.component.ts +0 -25
- package/src/table-builder/components/profiles-menu/profiles-menu.component.html +0 -74
- package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +0 -98
- package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +0 -23
- package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +0 -65
- package/src/table-builder/components/scroll-strategy.ts +0 -76
- package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +0 -66
- package/src/table-builder/components/sort-menu/sort-menu.component.html +0 -111
- package/src/table-builder/components/sort-menu/sort-menu.component.scss +0 -119
- package/src/table-builder/components/sort-menu/sort-menu.component.ts +0 -98
- package/src/table-builder/components/table-container/table-container.css +0 -54
- package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +0 -141
- package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +0 -106
- package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +0 -86
- package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +0 -45
- package/src/table-builder/components/table-container/table-container.html +0 -95
- package/src/table-builder/components/table-container/table-container.spec.ts +0 -154
- package/src/table-builder/components/table-container/table-container.ts +0 -356
- package/src/table-builder/components/table-container/tableProps.ts +0 -20
- package/src/table-builder/components/table-container/virtual-scroll-container.ts +0 -145
- package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +0 -31
- package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +0 -46
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +0 -42
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +0 -10
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +0 -86
- package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +0 -34
- package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +0 -23
- package/src/table-builder/directives/custom-cell-directive.ts +0 -58
- package/src/table-builder/directives/multi-sort.directive.spec.ts +0 -124
- package/src/table-builder/directives/multi-sort.directive.ts +0 -51
- package/src/table-builder/directives/resize-column.directive.ts +0 -108
- package/src/table-builder/directives/table-wrapper.directive.ts +0 -14
- package/src/table-builder/directives/tb-filter.directive.ts +0 -396
- package/src/table-builder/enums/filterTypes.ts +0 -40
- package/src/table-builder/functions/boolean-filter-function.ts +0 -12
- package/src/table-builder/functions/date-filter-function.ts +0 -68
- package/src/table-builder/functions/download-data.ts +0 -11
- package/src/table-builder/functions/null-filter-function.ts +0 -9
- package/src/table-builder/functions/number-filter-function.ts +0 -41
- package/src/table-builder/functions/sort-data-function.ts +0 -23
- package/src/table-builder/functions/string-filter-function.ts +0 -51
- package/src/table-builder/interfaces/column-template.ts +0 -9
- package/src/table-builder/interfaces/report-def.ts +0 -155
- package/src/table-builder/ngrx/tableBuilderStateStore.ts +0 -199
- package/src/table-builder/pipes/column-total.pipe.ts +0 -17
- package/src/table-builder/pipes/format-filter-type.pipe.ts +0 -12
- package/src/table-builder/pipes/format-filter-value.pipe.ts +0 -42
- package/src/table-builder/pipes/key-display.ts +0 -16
- package/src/table-builder/services/export-to-csv.service.ts +0 -97
- package/src/table-builder/services/link-creator.service.ts +0 -67
- package/src/table-builder/services/table-template-service.ts +0 -59
- package/src/table-builder/services/transform-creator.ts +0 -95
- package/src/table-builder/specs/table-custom-filters.spec.ts +0 -262
- package/src/table-builder/styles/collapser.styles.scss +0 -16
- package/src/table-builder/table-builder.module.ts +0 -73
- package/src/test.ts +0 -17
- package/src/utilities/array-helpers.ts +0 -13
- package/src/utilities/directives/auto-focus.directive.ts +0 -21
- package/src/utilities/directives/clickEmitterDirective.ts +0 -16
- package/src/utilities/directives/clickSubject.ts +0 -20
- package/src/utilities/directives/conditional-classes.directive.ts +0 -36
- package/src/utilities/directives/dialog-service.ts +0 -19
- package/src/utilities/directives/dialog.ts +0 -144
- package/src/utilities/directives/mat-toggle-group-directive.ts +0 -61
- package/src/utilities/directives/prevent-enter.directive.ts +0 -13
- package/src/utilities/directives/stop-propagation.directive.ts +0 -20
- package/src/utilities/directives/styler.ts +0 -40
- package/src/utilities/directives/trim-whitespace.directive.ts +0 -21
- package/src/utilities/module.ts +0 -55
- package/src/utilities/pipes/function.pipe.ts +0 -16
- package/src/utilities/pipes/phone.pipe.ts +0 -15
- package/src/utilities/pipes/space-case.pipes.spec.ts +0 -47
- package/src/utilities/pipes/space-case.pipes.ts +0 -23
- package/tsconfig.lib.json +0 -19
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { combineLatest, map, scan, timestamp } from "rxjs";
|
|
2
|
+
import { filterData, sortData, tbNoShowSymbol } from "../../../functions/sort-data-function";
|
|
3
|
+
import { defaultShareReplay } from "../../../../rxjs/defaultShareReplay";
|
|
4
|
+
import { FieldType } from "../../../interfaces/report-def";
|
|
5
|
+
import { get, set } from "lodash";
|
|
6
|
+
export const sortAndFilterData = (data, sortState, filterState) => combineLatest([
|
|
7
|
+
data.pipe(timestamp()),
|
|
8
|
+
sortState.pipe(timestamp()),
|
|
9
|
+
filterState.pipe(timestamp())
|
|
10
|
+
]).pipe(scan(({ mappedData: resultData }, [data, sort, f], index) => {
|
|
11
|
+
if (index === 0 || (data.timestamp > sort.timestamp && data.timestamp > f.timestamp)) {
|
|
12
|
+
return ({ mappedData: filterData(sortData(data.value, sort.value.sortsToRun), f.value.allFilters) });
|
|
13
|
+
}
|
|
14
|
+
if (sort.timestamp > f.timestamp) {
|
|
15
|
+
return ({ mappedData: sortData(resultData, sort.value.sortsToRun) });
|
|
16
|
+
}
|
|
17
|
+
return ({ mappedData: filterData(resultData, f.value.onlyAddedFilters || f.value.allFilters, !f.value.onlyAddedFilters) });
|
|
18
|
+
}, { mappedData: [] })).pipe(map(({ mappedData: resultData }) => resultData.filter(item => !item[tbNoShowSymbol])), defaultShareReplay());
|
|
19
|
+
export const createDataCleaners = (metadatas, mutate = false) => {
|
|
20
|
+
const transforms = createCleaners(metadatas);
|
|
21
|
+
return (data) => {
|
|
22
|
+
if (!mutate) {
|
|
23
|
+
data = { ...data };
|
|
24
|
+
}
|
|
25
|
+
for (const transform of transforms) {
|
|
26
|
+
transform(data);
|
|
27
|
+
}
|
|
28
|
+
return data;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
const createCleaners = (metadatas) => {
|
|
32
|
+
return metadatas.reduce((transforms, metaData) => {
|
|
33
|
+
switch (metaData.fieldType) {
|
|
34
|
+
case FieldType.Currency:
|
|
35
|
+
case FieldType.Number: {
|
|
36
|
+
const nested = metaData.key.includes('.');
|
|
37
|
+
if (nested) {
|
|
38
|
+
transforms.push((t) => {
|
|
39
|
+
const val = get(t, metaData.key);
|
|
40
|
+
const num = Number(val);
|
|
41
|
+
set(t, metaData.key, isNaN(num) || val == null ? null : num);
|
|
42
|
+
t[metaData.key] = (isNaN(num) || val == null ? null : num);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
transforms.push((t) => {
|
|
47
|
+
const val = t[metaData.key];
|
|
48
|
+
const num = Number(val);
|
|
49
|
+
t[metaData.key] = (isNaN(num) || val == null ? null : num);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
case FieldType.Date: {
|
|
55
|
+
const nested = metaData.key.includes('.');
|
|
56
|
+
if (nested) {
|
|
57
|
+
transforms.push((t) => {
|
|
58
|
+
const val = get(t, metaData.key);
|
|
59
|
+
const date = Date.parse(val);
|
|
60
|
+
if (isNaN(date)) {
|
|
61
|
+
set(t, metaData.key, null);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const d = new Date(date);
|
|
65
|
+
d.setHours(0, 0, 0, 0);
|
|
66
|
+
set(t, metaData.key, d);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
transforms.push((t) => {
|
|
71
|
+
const val = t[metaData.key];
|
|
72
|
+
const date = Date.parse(val);
|
|
73
|
+
if (isNaN(date)) {
|
|
74
|
+
t[metaData.key] = null;
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const d = new Date(date);
|
|
78
|
+
d.setHours(0, 0, 0, 0);
|
|
79
|
+
t[metaData.key] = d;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case FieldType.DateTime: {
|
|
85
|
+
const nested = metaData.key.includes('.');
|
|
86
|
+
if (nested) {
|
|
87
|
+
transforms.push((t) => {
|
|
88
|
+
const val = get(t, metaData.key);
|
|
89
|
+
const dateTime = Date.parse(val);
|
|
90
|
+
if (isNaN(dateTime)) {
|
|
91
|
+
set(t, metaData.key, null);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const dt = new Date(dateTime);
|
|
95
|
+
if (metaData.additional?.dateTimeOptions?.includeMilliseconds) {
|
|
96
|
+
set(t, metaData.key, dt);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (metaData.additional?.dateTimeOptions?.includeSeconds) {
|
|
100
|
+
dt.setMilliseconds(0);
|
|
101
|
+
set(t, metaData.key, dt);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
dt.setSeconds(0, 0);
|
|
105
|
+
set(t, metaData.key, dt);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
transforms.push((t) => {
|
|
110
|
+
const val = t[metaData.key];
|
|
111
|
+
const dateTime = Date.parse(val);
|
|
112
|
+
if (isNaN(dateTime)) {
|
|
113
|
+
t[metaData.key] = null;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const dt = new Date(dateTime);
|
|
117
|
+
if (metaData.additional?.dateTimeOptions?.includeMilliseconds) {
|
|
118
|
+
t[metaData.key] = dt;
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (metaData.additional?.dateTimeOptions?.includeSeconds) {
|
|
122
|
+
dt.setMilliseconds(0);
|
|
123
|
+
t[metaData.key] = dt;
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
dt.setSeconds(0, 0);
|
|
127
|
+
t[metaData.key] = dt;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return transforms;
|
|
133
|
+
}, []);
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zdGF0ZS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxhQUFhLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBWSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUksSUFBcUIsRUFBRSxTQUFnQyxFQUFFLFdBQWdELEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUMvSixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUMsRUFBRTtJQUU3RCxJQUFHLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxH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QUFXLENBQUM7d0JBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2pDLElBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUM7NEJBQ2xCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUksSUFBVyxDQUFDOzRCQUMvQixPQUFPO3dCQUNULENBQUM7d0JBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzlCLElBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQzs0QkFDNUQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBSSxFQUFTLENBQUM7NEJBQzdCLE9BQU87d0JBQ1QsQ0FBQzt3QkFDRCxJQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBQyxDQUFDOzRCQUN2RCxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN0QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFJLEVBQVMsQ0FBQzs0QkFDN0IsT0FBTzt3QkFDVCxDQUFDO3dCQUNELEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFJLEVBQVMsQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxFQUFFLEVBQXVCLENBQUMsQ0FBQTtBQUM3QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBtYXAsIHNjYW4sIHRpbWVzdGFtcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNvcnRTdGF0ZSB9IGZyb20gXCIuL3NvcnQtc3RhdGUuaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBGaWx0ZXJQcmVkaWNhdGVTdGF0ZSB9IGZyb20gXCIuL2ZpbHRlci1zdGF0ZS5oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGZpbHRlckRhdGEsIHNvcnREYXRhLCB0Yk5vU2hvd1N5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvc29ydC1kYXRhLWZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTaGFyZVJlcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9yeGpzL2RlZmF1bHRTaGFyZVJlcGxheVwiO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZlwiO1xyXG5pbXBvcnQgeyBnZXQsIHNldCB9IGZyb20gXCJsb2Rhc2hcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBzb3J0QW5kRmlsdGVyRGF0YSA9IDxUPihkYXRhOiBPYnNlcnZhYmxlPFRbXT4sIHNvcnRTdGF0ZTogT2JzZXJ2YWJsZTxTb3J0U3RhdGU+LCBmaWx0ZXJTdGF0ZTogT2JzZXJ2YWJsZTxGaWx0ZXJQcmVkaWNhdGVTdGF0ZTxUPj4pID0+IGNvbWJpbmVMYXRlc3QoW1xyXG4gIGRhdGEucGlwZSh0aW1lc3RhbXAoKSksXHJcbiAgc29ydFN0YXRlLnBpcGUodGltZXN0YW1wKCkpLFxyXG4gIGZpbHRlclN0YXRlLnBpcGUodGltZXN0YW1wKCkpXHJcbl0pLnBpcGUoc2NhbigoeyBtYXBwZWREYXRhOiByZXN1bHREYXRhIH0sIFtkYXRhLCBzb3J0LCBmXSwgaW5kZXgpPT4ge1xyXG5cclxuICAgICAgaWYoaW5kZXggPT09IDAgfHwgKGRhdGEudGltZXN0YW1wID4gc29ydC50aW1lc3RhbXAgJiYgZGF0YS50aW1lc3RhbXAgPiBmLnRpbWVzdGFtcCkpe1xyXG4gICAgICAgIHJldHVybiAoeyBtYXBwZWREYXRhOiBmaWx0ZXJEYXRhKHNvcnREYXRhKGRhdGEudmFsdWUgLCBzb3J0LnZhbHVlLnNvcnRzVG9SdW4gKSwgZi52YWx1ZS5hbGxGaWx0ZXJzKX0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihzb3J0LnRpbWVzdGFtcCA+IGYudGltZXN0YW1wKXtcclxuICAgICAgICByZXR1cm4gKHsgbWFwcGVkRGF0YTogc29ydERhdGEocmVzdWx0RGF0YSwgc29ydC52YWx1ZS5zb3J0c1RvUnVuKX0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoeyBtYXBwZWREYXRhOiBmaWx0ZXJEYXRhKHJlc3VsdERhdGEsIGYudmFsdWUub25seUFkZGVkRmlsdGVycyB8fCBmLnZhbHVlLmFsbEZpbHRlcnMsICFmLnZhbHVlLm9ubHlBZGRlZEZpbHRlcnMpfSk7XHJcbiAgICB9LCB7IG1hcHBlZERhdGE6IFtdfSBhcyB7IG1hcHBlZERhdGE6IFRbXX0pXHJcbiAgKS5waXBlKFxyXG4gICAgbWFwKCh7IG1hcHBlZERhdGE6IHJlc3VsdERhdGEgfSkgPT4gcmVzdWx0RGF0YS5maWx0ZXIoaXRlbSA9PiAhaXRlbVt0Yk5vU2hvd1N5bWJvbF0pKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpXHJcbiAgKTtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVEYXRhQ2xlYW5lcnMgPSA8VD4obWV0YWRhdGFzOiBNZXRhRGF0YTxUPltdLCBtdXRhdGUgPSBmYWxzZSkgPT4ge1xyXG4gIGNvbnN0IHRyYW5zZm9ybXMgPSBjcmVhdGVDbGVhbmVycyhtZXRhZGF0YXMpO1xyXG4gIHJldHVybiAoZGF0YTogVCkgPT4ge1xyXG4gICAgaWYoIW11dGF0ZSl7XHJcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEgfVxyXG4gICAgfVxyXG4gICAgZm9yKGNvbnN0IHRyYW5zZm9ybSBvZiB0cmFuc2Zvcm1zKXtcclxuICAgICAgdHJhbnNmb3JtKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVDbGVhbmVycyA9IDxUPihtZXRhZGF0YXM6IE1ldGFEYXRhPFQ+IFtdKSA9PiB7XHJcbiAgcmV0dXJuIG1ldGFkYXRhcy5yZWR1Y2UoKHRyYW5zZm9ybXMsbWV0YURhdGEpID0+IHtcclxuICAgIHN3aXRjaCAoIG1ldGFEYXRhLmZpZWxkVHlwZSApIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuQ3VycmVuY3k6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLk51bWJlcjp7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkID0gbWV0YURhdGEua2V5LmluY2x1ZGVzKCcuJyk7XHJcbiAgICAgICAgaWYobmVzdGVkKXtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCggKHQ6VCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBnZXQodCwgbWV0YURhdGEua2V5KTtcclxuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKCB2YWwgKTtcclxuICAgICAgICAgICAgc2V0KHQgYXMge30sIG1ldGFEYXRhLmtleSwgaXNOYU4obnVtKSB8fCB2YWwgPT0gbnVsbCA/IG51bGwgOiBudW0pXHJcbiAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICAoaXNOYU4obnVtKSB8fCB2YWwgPT0gbnVsbCA/IG51bGwgOiBudW0pIGFzIGFueX0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2goICh0OlQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdFttZXRhRGF0YS5rZXldO1xyXG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIoIHZhbCApO1xyXG4gICAgICAgICAgICB0W21ldGFEYXRhLmtleV0gPSAgKGlzTmFOKG51bSkgfHwgdmFsID09IG51bGwgPyBudWxsIDogbnVtKSBhcyBhbnl9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZTp7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkID0gbWV0YURhdGEua2V5LmluY2x1ZGVzKCcuJyk7XHJcbiAgICAgICAgaWYobmVzdGVkKXtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCggKHQ6VCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBnZXQodCwgbWV0YURhdGEua2V5KSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBEYXRlLnBhcnNlKHZhbCk7XHJcbiAgICAgICAgICAgIGlmKGlzTmFOKGRhdGUpKXtcclxuICAgICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgbnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICAgICAgZC5zZXRIb3VycygwLDAsMCwwKTtcclxuICAgICAgICAgICAgc2V0KHQgYXMge30sIG1ldGFEYXRhLmtleSwgIGQgYXMgYW55KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCggKHQ6VCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSB0W21ldGFEYXRhLmtleV0gYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZSh2YWwpO1xyXG4gICAgICAgICAgICBpZihpc05hTihkYXRlKSl7XHJcbiAgICAgICAgICAgICAgdFttZXRhRGF0YS5rZXldID0gIG51bGwgYXMgYW55O1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICAgICAgZC5zZXRIb3VycygwLDAsMCwwKTtcclxuICAgICAgICAgICAgdFttZXRhRGF0YS5rZXldID0gIGQgYXMgYW55O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZVRpbWU6e1xyXG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IG1ldGFEYXRhLmtleS5pbmNsdWRlcygnLicpO1xyXG4gICAgICAgIGlmKG5lc3RlZCl7XHJcbiAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2goICh0OlQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gZ2V0KHQsIG1ldGFEYXRhLmtleSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lID0gRGF0ZS5wYXJzZSh2YWwgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgaWYoaXNOYU4oZGF0ZVRpbWUpKXtcclxuICAgICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgbnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoZGF0ZVRpbWUpO1xyXG4gICAgICAgICAgICBpZihtZXRhRGF0YS5hZGRpdGlvbmFsPy5kYXRlVGltZU9wdGlvbnM/LmluY2x1ZGVNaWxsaXNlY29uZHMpe1xyXG4gICAgICAgICAgICAgIHNldCh0IGFzIHt9LCBtZXRhRGF0YS5rZXksICBkdCBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKG1ldGFEYXRhLmFkZGl0aW9uYWw/LmRhdGVUaW1lT3B0aW9ucz8uaW5jbHVkZVNlY29uZHMpe1xyXG4gICAgICAgICAgICAgIGR0LnNldE1pbGxpc2Vjb25kcygwKTtcclxuICAgICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgZHQgYXMgYW55KTtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkdC5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgZHQgYXMgYW55KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCgodDpUKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRbbWV0YURhdGEua2V5XSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lID0gRGF0ZS5wYXJzZSh2YWwpO1xyXG4gICAgICAgICAgICBpZihpc05hTihkYXRlVGltZSkpe1xyXG4gICAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICBudWxsIGFzIGFueTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShkYXRlVGltZSk7XHJcbiAgICAgICAgICAgIGlmKG1ldGFEYXRhLmFkZGl0aW9uYWw/LmRhdGVUaW1lT3B0aW9ucz8uaW5jbHVkZU1pbGxpc2Vjb25kcyl7XHJcbiAgICAgICAgICAgICAgdFttZXRhRGF0YS5rZXldID0gIGR0IGFzIGFueTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobWV0YURhdGEuYWRkaXRpb25hbD8uZGF0ZVRpbWVPcHRpb25zPy5pbmNsdWRlU2Vjb25kcyl7XHJcbiAgICAgICAgICAgICAgZHQuc2V0TWlsbGlzZWNvbmRzKDApO1xyXG4gICAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICBkdCBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGR0LnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICBkdCBhcyBhbnk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyYW5zZm9ybXM7XHJcbiAgfSwgW10gYXMgKCh0OlQpID0+IHZvaWQpW10pXHJcbn0iXX0=
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createFilterFunc } from "../../../classes/filter-info";
|
|
2
|
+
import { difference, intersection } from "lodash";
|
|
3
|
+
//The idea of this is that if filters were only added, and none were removed or changed, then we only need to tag more rows to not be shown. We don't need to remove any 'dont show' tags.
|
|
4
|
+
// So if filters were only added this method will return the added filters, if filters were removed or changed this method will return undefined.
|
|
5
|
+
export const updateFilterInfoState = (previousState, filterInfos) => {
|
|
6
|
+
filterInfos = filterNonActiveFilters(filterInfos);
|
|
7
|
+
const currentState = {
|
|
8
|
+
allFilters: filterInfos,
|
|
9
|
+
onlyAddedFilters: filterInfoOnlyAdded(previousState.allFilters, filterInfos)
|
|
10
|
+
};
|
|
11
|
+
return currentState;
|
|
12
|
+
};
|
|
13
|
+
export const mapFilterInfoStateToPredicateState = (s) => {
|
|
14
|
+
const mappedAddOnly = s.onlyAddedFilters ? Object.entries(s.onlyAddedFilters).reduce((obj, [key, value]) => {
|
|
15
|
+
obj[key] = createFilterFunc(value);
|
|
16
|
+
return obj;
|
|
17
|
+
}, {}) : {};
|
|
18
|
+
const mappedAll = Object.entries(s.allFilters).map(([key, value]) => mappedAddOnly[key] || createFilterFunc(value));
|
|
19
|
+
return ({
|
|
20
|
+
allFilters: mappedAll,
|
|
21
|
+
onlyAddedFilters: s.onlyAddedFilters ? Object.values(mappedAddOnly) : undefined
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
export const updateFilterPredicateState = (previousState, filters) => {
|
|
25
|
+
const currentState = {
|
|
26
|
+
allFilters: filters,
|
|
27
|
+
onlyAddedFilters: predicatesOnlyAdded(previousState.allFilters, filters)
|
|
28
|
+
};
|
|
29
|
+
return currentState;
|
|
30
|
+
};
|
|
31
|
+
export const updateFilterState = (filterInfos, predicates) => {
|
|
32
|
+
const infos = mapFilterInfoStateToPredicateState(filterInfos.value);
|
|
33
|
+
const filtersState = {
|
|
34
|
+
allFilters: [...infos.allFilters, ...predicates.value.allFilters]
|
|
35
|
+
};
|
|
36
|
+
if (filterInfos.timestamp > predicates.timestamp && !!filterInfos.value.onlyAddedFilters) {
|
|
37
|
+
filtersState.onlyAddedFilters = infos.onlyAddedFilters;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
filtersState.onlyAddedFilters = predicates.value.onlyAddedFilters;
|
|
41
|
+
}
|
|
42
|
+
return filtersState;
|
|
43
|
+
};
|
|
44
|
+
const filterNonActiveFilters = (filtersDict) => Object.entries(filtersDict).reduce((obj, [key, value]) => {
|
|
45
|
+
if (value.active !== false) {
|
|
46
|
+
obj[key] = value;
|
|
47
|
+
}
|
|
48
|
+
;
|
|
49
|
+
return obj;
|
|
50
|
+
}, {});
|
|
51
|
+
function filterInfoOnlyAdded(previousFilterInfos, currentFilterInfos) {
|
|
52
|
+
const previousKeys = Object.keys(previousFilterInfos);
|
|
53
|
+
const currentKeys = Object.keys(currentFilterInfos);
|
|
54
|
+
const keysInBoth = intersection(previousKeys, currentKeys);
|
|
55
|
+
const someRemoved = previousKeys.length > keysInBoth.length;
|
|
56
|
+
if (someRemoved || !previousKeys.length) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
if (filtersInfosUpdated(previousFilterInfos, currentFilterInfos)) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const addedFilters = difference(currentKeys, keysInBoth).reduce((dict, key) => {
|
|
63
|
+
dict[key] = currentFilterInfos[key];
|
|
64
|
+
return dict;
|
|
65
|
+
}, {});
|
|
66
|
+
return addedFilters;
|
|
67
|
+
}
|
|
68
|
+
function predicatesOnlyAdded(previousPredicates, currentPredicates) {
|
|
69
|
+
if (!previousPredicates.length) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
const predicateFiltersRemoved = difference(previousPredicates, currentPredicates).length;
|
|
73
|
+
if (predicateFiltersRemoved) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
return difference(currentPredicates, previousPredicates);
|
|
77
|
+
}
|
|
78
|
+
function filtersInfosUpdated(previousFilterInfos, currentFilterInfos) {
|
|
79
|
+
return !Object.entries(previousFilterInfos).every(([key, val]) => {
|
|
80
|
+
return currentFilterInfos[key].filterType === val.filterType && currentFilterInfos[key].filterValue === val.filterValue;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXN0YXRlLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL3RhYmxlLWNvbnRhaW5lci90YWJsZS1jb250YWluZXIuaGVscGVycy9maWx0ZXItc3RhdGUuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHMUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbEQsMExBQTBMO0FBQzFMLGlKQUFpSjtBQUVqSixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFJLGFBQWlDLEVBQUUsV0FBMkIsRUFBRSxFQUFFO0lBQ3pHLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxNQUFNLFlBQVksR0FBdUI7UUFDdkMsVUFBVSxFQUFFLFdBQVc7UUFDdkIsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7S0FDN0UsQ0FBQTtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLENBQUksQ0FBcUIsRUFBMkIsRUFBRTtJQUN0RyxNQUFNLGFBQWEsR0FBcUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzNJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQXNDLENBQUM7SUFDcEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BILE9BQU8sQ0FBQztRQUNOLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUNoRixDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFJLGFBQXNDLEVBQUUsT0FBeUIsRUFBRSxFQUFFO0lBQ2pILE1BQU0sWUFBWSxHQUE0QjtRQUM1QyxVQUFVLEVBQUUsT0FBTztRQUNuQixnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQztLQUN6RSxDQUFBO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBSSxXQUEwQyxFQUFFLFVBQThDLEVBQTJCLEVBQUU7SUFDMUosTUFBTSxLQUFLLEdBQUcsa0NBQWtDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sWUFBWSxHQUE0QjtRQUM1QyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztLQUNsRSxDQUFBO0lBQ0QsSUFBRyxXQUFXLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUMsQ0FBQztRQUN2RixZQUFZLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBQ3pELENBQUM7U0FBTSxDQUFDO1FBQ04sWUFBWSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUE7SUFDbkUsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQUMsQ0FBQTtBQUdELE1BQU0sc0JBQXNCLEdBQUcsQ0FBSSxXQUE0QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO0lBQzNILElBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ2xCLENBQUM7SUFBQSxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQUUsRUFBMkMsQ0FBQyxDQUFDO0FBR2hELFNBQVMsbUJBQW1CLENBQUMsbUJBQW1DLEVBQUUsa0JBQWtDO0lBQ2xHLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDNUQsSUFBRyxXQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFDLENBQUM7UUFDdEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUcsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUMsRUFBQyxDQUFDO1FBQy9ELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUM1RSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBb0IsQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLGtCQUFvQyxFQUFFLGlCQUFtQztJQUNwRyxJQUFHLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFDLENBQUM7UUFDN0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sdUJBQXVCLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pGLElBQUcsdUJBQXVCLEVBQUMsQ0FBQztRQUMxQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxtQkFBd0MsRUFBRSxrQkFBdUM7SUFDNUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQy9ELE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxVQUFVLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUE7SUFDekgsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGltZXN0YW1wIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRmlsdGVyLCBGaWx0ZXJJbmZvLCBjcmVhdGVGaWx0ZXJGdW5jIH0gZnJvbSBcIi4uLy4uLy4uL2NsYXNzZXMvZmlsdGVyLWluZm9cIjtcclxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnlcIjtcclxuaW1wb3J0IHsgUHJlZGljYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZGlmZmVyZW5jZSwgaW50ZXJzZWN0aW9uIH0gZnJvbSBcImxvZGFzaFwiO1xyXG5cclxuLy9UaGUgaWRlYSBvZiB0aGlzIGlzIHRoYXQgaWYgZmlsdGVycyB3ZXJlIG9ubHkgYWRkZWQsIGFuZCBub25lIHdlcmUgcmVtb3ZlZCBvciBjaGFuZ2VkLCB0aGVuIHdlIG9ubHkgbmVlZCB0byB0YWcgbW9yZSByb3dzIHRvIG5vdCBiZSBzaG93bi4gV2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgYW55ICdkb250IHNob3cnIHRhZ3MuXHJcbi8vIFNvIGlmIGZpbHRlcnMgd2VyZSBvbmx5IGFkZGVkIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBhZGRlZCBmaWx0ZXJzLCBpZiBmaWx0ZXJzIHdlcmUgcmVtb3ZlZCBvciBjaGFuZ2VkIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cclxuXHJcbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJJbmZvU3RhdGUgPSA8VD4ocHJldmlvdXNTdGF0ZTogRmlsdGVySW5mb1N0YXRlPFQ+LCBmaWx0ZXJJbmZvczogRmlsdGVySW5mb0RpY3QpID0+IHtcclxuICBmaWx0ZXJJbmZvcyA9IGZpbHRlck5vbkFjdGl2ZUZpbHRlcnMoZmlsdGVySW5mb3MpO1xyXG4gIGNvbnN0IGN1cnJlbnRTdGF0ZTogRmlsdGVySW5mb1N0YXRlPFQ+ID0ge1xyXG4gICAgYWxsRmlsdGVyczogZmlsdGVySW5mb3MsXHJcbiAgICBvbmx5QWRkZWRGaWx0ZXJzOiBmaWx0ZXJJbmZvT25seUFkZGVkKHByZXZpb3VzU3RhdGUuYWxsRmlsdGVycywgZmlsdGVySW5mb3MpXHJcbiAgfVxyXG4gIHJldHVybiBjdXJyZW50U3RhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBtYXBGaWx0ZXJJbmZvU3RhdGVUb1ByZWRpY2F0ZVN0YXRlID0gPFQ+KHM6IEZpbHRlckluZm9TdGF0ZTxUPik6IEZpbHRlclByZWRpY2F0ZVN0YXRlPFQ+ID0+IHtcclxuICBjb25zdCBtYXBwZWRBZGRPbmx5OiB7W2tleSBpbiBrZXlvZiBUXTogUHJlZGljYXRlPFQ+fSA9IHMub25seUFkZGVkRmlsdGVycyA/IE9iamVjdC5lbnRyaWVzKHMub25seUFkZGVkRmlsdGVycykucmVkdWNlKChvYmosIFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgb2JqW2tleV0gPSBjcmVhdGVGaWx0ZXJGdW5jKHZhbHVlKTtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfSwge30gYXMge1trZXkgaW4ga2V5b2YgVF06IFByZWRpY2F0ZTxUPn0pIDoge30gYXMge1trZXkgaW4ga2V5b2YgVF06IFByZWRpY2F0ZTxUPn07XHJcbiAgY29uc3QgbWFwcGVkQWxsID0gT2JqZWN0LmVudHJpZXMocy5hbGxGaWx0ZXJzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gbWFwcGVkQWRkT25seVtrZXldIHx8IGNyZWF0ZUZpbHRlckZ1bmModmFsdWUpKTtcclxuICByZXR1cm4gKHtcclxuICAgIGFsbEZpbHRlcnM6IG1hcHBlZEFsbCxcclxuICAgIG9ubHlBZGRlZEZpbHRlcnM6IHMub25seUFkZGVkRmlsdGVycyA/IE9iamVjdC52YWx1ZXMobWFwcGVkQWRkT25seSkgOiB1bmRlZmluZWRcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyUHJlZGljYXRlU3RhdGUgPSA8VD4ocHJldmlvdXNTdGF0ZTogRmlsdGVyUHJlZGljYXRlU3RhdGU8VD4sIGZpbHRlcnM6IFByZWRpY2F0ZTxhbnk+W10pID0+IHtcclxuICBjb25zdCBjdXJyZW50U3RhdGU6IEZpbHRlclByZWRpY2F0ZVN0YXRlPFQ+ID0ge1xyXG4gICAgYWxsRmlsdGVyczogZmlsdGVycyxcclxuICAgIG9ubHlBZGRlZEZpbHRlcnM6IHByZWRpY2F0ZXNPbmx5QWRkZWQocHJldmlvdXNTdGF0ZS5hbGxGaWx0ZXJzLCBmaWx0ZXJzKVxyXG4gIH1cclxuICByZXR1cm4gY3VycmVudFN0YXRlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyU3RhdGUgPSA8VD4oZmlsdGVySW5mb3M6IFRpbWVzdGFtcDxGaWx0ZXJJbmZvU3RhdGU8VD4+LCBwcmVkaWNhdGVzOiBUaW1lc3RhbXA8RmlsdGVyUHJlZGljYXRlU3RhdGU8VD4+KTogRmlsdGVyUHJlZGljYXRlU3RhdGU8VD4gPT4ge1xyXG4gIGNvbnN0IGluZm9zID0gbWFwRmlsdGVySW5mb1N0YXRlVG9QcmVkaWNhdGVTdGF0ZShmaWx0ZXJJbmZvcy52YWx1ZSk7XHJcbiAgY29uc3QgZmlsdGVyc1N0YXRlOiBGaWx0ZXJQcmVkaWNhdGVTdGF0ZTxUPiA9IHtcclxuICAgIGFsbEZpbHRlcnM6IFsuLi5pbmZvcy5hbGxGaWx0ZXJzLCAuLi5wcmVkaWNhdGVzLnZhbHVlLmFsbEZpbHRlcnNdXHJcbiAgfVxyXG4gIGlmKGZpbHRlckluZm9zLnRpbWVzdGFtcCA+IHByZWRpY2F0ZXMudGltZXN0YW1wICYmICEhZmlsdGVySW5mb3MudmFsdWUub25seUFkZGVkRmlsdGVycyl7XHJcbiAgICBmaWx0ZXJzU3RhdGUub25seUFkZGVkRmlsdGVycyA9IGluZm9zLm9ubHlBZGRlZEZpbHRlcnM7XHJcbiAgfSBlbHNlIHtcclxuICAgIGZpbHRlcnNTdGF0ZS5vbmx5QWRkZWRGaWx0ZXJzID0gcHJlZGljYXRlcy52YWx1ZS5vbmx5QWRkZWRGaWx0ZXJzXHJcbiAgfVxyXG4gIHJldHVybiBmaWx0ZXJzU3RhdGVcclxufVxyXG5cclxuXHJcbmNvbnN0IGZpbHRlck5vbkFjdGl2ZUZpbHRlcnMgPSA8VD4oZmlsdGVyc0RpY3QgOiBGaWx0ZXJJbmZvRGljdCkgPT4gT2JqZWN0LmVudHJpZXMoZmlsdGVyc0RpY3QpLnJlZHVjZSgob2JqICxba2V5LCB2YWx1ZV0pID0+IHsgXHJcbiAgaWYodmFsdWUuYWN0aXZlICE9PSBmYWxzZSl7XHJcbiAgICBvYmpba2V5XSA9IHZhbHVlXHJcbiAgfTtcclxuICByZXR1cm4gb2JqO1xyXG59LCB7fSBhcyBEaWN0aW9uYXJ5PEZpbHRlckluZm8gfCBDdXN0b21GaWx0ZXI+KTtcclxuXHJcblxyXG5mdW5jdGlvbiBmaWx0ZXJJbmZvT25seUFkZGVkKHByZXZpb3VzRmlsdGVySW5mb3M6IEZpbHRlckluZm9EaWN0LCBjdXJyZW50RmlsdGVySW5mb3M6IEZpbHRlckluZm9EaWN0KTogRmlsdGVySW5mb0RpY3QgfCB1bmRlZmluZWR7XHJcbiAgY29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNGaWx0ZXJJbmZvcyk7XHJcbiAgY29uc3QgY3VycmVudEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50RmlsdGVySW5mb3MpO1xyXG4gIGNvbnN0IGtleXNJbkJvdGggPSBpbnRlcnNlY3Rpb24ocHJldmlvdXNLZXlzLCBjdXJyZW50S2V5cyk7XHJcbiAgY29uc3Qgc29tZVJlbW92ZWQgPSBwcmV2aW91c0tleXMubGVuZ3RoID4ga2V5c0luQm90aC5sZW5ndGg7XHJcbiAgaWYoc29tZVJlbW92ZWQgfHwgIXByZXZpb3VzS2V5cy5sZW5ndGgpe1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgaWYoZmlsdGVyc0luZm9zVXBkYXRlZChwcmV2aW91c0ZpbHRlckluZm9zLCBjdXJyZW50RmlsdGVySW5mb3MpKXtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGNvbnN0IGFkZGVkRmlsdGVycyA9IGRpZmZlcmVuY2UoY3VycmVudEtleXMsIGtleXNJbkJvdGgpLnJlZHVjZSgoZGljdCwga2V5KSA9PiB7XHJcbiAgICBkaWN0W2tleV0gPSBjdXJyZW50RmlsdGVySW5mb3Nba2V5XTtcclxuICAgIHJldHVybiBkaWN0O1xyXG4gIH0sIHt9IGFzIEZpbHRlckluZm9EaWN0KTtcclxuICByZXR1cm4gYWRkZWRGaWx0ZXJzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVkaWNhdGVzT25seUFkZGVkKHByZXZpb3VzUHJlZGljYXRlczogUHJlZGljYXRlPGFueT5bXSwgY3VycmVudFByZWRpY2F0ZXM6IFByZWRpY2F0ZTxhbnk+W10pe1xyXG4gIGlmKCFwcmV2aW91c1ByZWRpY2F0ZXMubGVuZ3RoKXtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGNvbnN0IHByZWRpY2F0ZUZpbHRlcnNSZW1vdmVkID0gZGlmZmVyZW5jZShwcmV2aW91c1ByZWRpY2F0ZXMsIGN1cnJlbnRQcmVkaWNhdGVzKS5sZW5ndGg7XHJcbiAgaWYocHJlZGljYXRlRmlsdGVyc1JlbW92ZWQpe1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgcmV0dXJuIGRpZmZlcmVuY2UoY3VycmVudFByZWRpY2F0ZXMsIHByZXZpb3VzUHJlZGljYXRlcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbHRlcnNJbmZvc1VwZGF0ZWQocHJldmlvdXNGaWx0ZXJJbmZvczogRmlsdGVySW5mb0RpY3Q8YW55PiwgY3VycmVudEZpbHRlckluZm9zOiBGaWx0ZXJJbmZvRGljdDxhbnk+KXtcclxuICByZXR1cm4gIU9iamVjdC5lbnRyaWVzKHByZXZpb3VzRmlsdGVySW5mb3MpLmV2ZXJ5KChba2V5LCB2YWxdKSA9PiB7XHJcbiAgICByZXR1cm4gY3VycmVudEZpbHRlckluZm9zW2tleV0uZmlsdGVyVHlwZSA9PT0gdmFsLmZpbHRlclR5cGUgJiYgY3VycmVudEZpbHRlckluZm9zW2tleV0uZmlsdGVyVmFsdWUgPT09IHZhbC5maWx0ZXJWYWx1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVySW5mb1N0YXRlPFQ+IHtcclxuICBhbGxGaWx0ZXJzOiBGaWx0ZXJJbmZvRGljdDxUPiwgXHJcbiAgb25seUFkZGVkRmlsdGVycz86IEZpbHRlckluZm9EaWN0PFQ+IHwgdW5kZWZpbmVkLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclByZWRpY2F0ZVN0YXRlPFQ+IHtcclxuICBhbGxGaWx0ZXJzOiBQcmVkaWNhdGU8VD5bXSwgXHJcbiAgb25seUFkZGVkRmlsdGVycz86IFByZWRpY2F0ZTxUPltdIHwgdW5kZWZpbmVkLFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJJbmZvRGljdDxUID0gYW55PiA9IERpY3Rpb25hcnk8RmlsdGVySW5mbzxhbnksIFQ+IHwgQ3VzdG9tRmlsdGVyPGFueT4+OyJdfQ==
|
package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { groupBy } from "lodash";
|
|
2
|
+
import { initIndexSymbol } from "./sort-state.helpers";
|
|
3
|
+
function getGroupedData(data, groupByKeys) {
|
|
4
|
+
return tbGroupBy(data, groupByKeys);
|
|
5
|
+
}
|
|
6
|
+
const tbGroupBy = (data, groupByKeys, parentGroupName) => {
|
|
7
|
+
const currentKey = groupByKeys[0];
|
|
8
|
+
const res = groupBy(data, currentKey);
|
|
9
|
+
const remainingGroupByKeys = groupByKeys.slice(1);
|
|
10
|
+
const finalGroups = !remainingGroupByKeys.length;
|
|
11
|
+
if (remainingGroupByKeys.length) {
|
|
12
|
+
Object.keys(res).forEach(key => res[key] = tbGroupBy(res[key], remainingGroupByKeys, key));
|
|
13
|
+
}
|
|
14
|
+
return Object.keys(res).map((groupName, i) => {
|
|
15
|
+
const uniqName = parentGroupName ? `${parentGroupName}-${groupName}` : `${groupName}`;
|
|
16
|
+
const groupHeaders = res[groupName]?.filter(row => row.isGroupHeader) ?? [];
|
|
17
|
+
return {
|
|
18
|
+
isGroupHeader: true,
|
|
19
|
+
groupHeaderDisplay: groupName,
|
|
20
|
+
hasTheData: finalGroups,
|
|
21
|
+
children: finalGroups ? res[groupName] : res[groupName].map(d => { d.padding += 20; return d; }),
|
|
22
|
+
groupName: `tb_group_${uniqName}`,
|
|
23
|
+
padding: 1,
|
|
24
|
+
key: currentKey,
|
|
25
|
+
length: groupHeaders.reduce((acc, curr) => curr.length + acc, 0) + ((res[groupName] ?? []).length - groupHeaders.length),
|
|
26
|
+
[initIndexSymbol]: uniqName,
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
export function updateGroupByState({ groupedData }, [data, groups, expandedGroups], index) {
|
|
31
|
+
if (index === 0
|
|
32
|
+
|| dataUpdated(data, groups, expandedGroups)
|
|
33
|
+
|| groupsUpdated(groups, expandedGroups)) {
|
|
34
|
+
groupedData = groups.value.length ? getGroupedData(data.value, groups.value) : data.value;
|
|
35
|
+
}
|
|
36
|
+
const newDisplayData = expandedGroups.value.length === 0
|
|
37
|
+
? groupedData
|
|
38
|
+
: groupedData.map(group => mapGroupHeader(group, expandedGroups.value)).flat();
|
|
39
|
+
return ({ displayData: newDisplayData, groupedData });
|
|
40
|
+
}
|
|
41
|
+
function mapGroupHeader(obj, data) {
|
|
42
|
+
const showChildren = data.find(a => a.expandedHeaders.includes(obj.groupName));
|
|
43
|
+
const children = !showChildren ? [] :
|
|
44
|
+
obj.hasTheData ? obj.children
|
|
45
|
+
: obj.children.map(a => mapGroupHeader(a, data));
|
|
46
|
+
return [obj, ...children].flat();
|
|
47
|
+
}
|
|
48
|
+
function dataUpdated(data, groups, expandedGroups) {
|
|
49
|
+
return data.timestamp > groups.timestamp && data.timestamp > expandedGroups.timestamp;
|
|
50
|
+
}
|
|
51
|
+
function groupsUpdated(groups, expandedGroups) {
|
|
52
|
+
return groups.timestamp > expandedGroups.timestamp;
|
|
53
|
+
}
|
|
54
|
+
;
|
|
55
|
+
export const initialGroupByState = { displayData: [], groupedData: [] };
|
|
56
|
+
export const getAllGroupHeaderNames = (data) => {
|
|
57
|
+
const groups = getGroupHeaders(data, (d) => d.isGroupHeader);
|
|
58
|
+
return groupBy(groups, 'key');
|
|
59
|
+
};
|
|
60
|
+
export const getAllGroupHeaderNamesByKeys = (data, keys) => {
|
|
61
|
+
const groups = getGroupHeaders(data, (d) => d.isGroupHeader && keys.includes(d.key));
|
|
62
|
+
return groupBy(groups, 'key');
|
|
63
|
+
};
|
|
64
|
+
const getGroupHeaders = (data, filterFunc, arr = []) => {
|
|
65
|
+
const headers = data.filter(filterFunc);
|
|
66
|
+
arr.push(...headers);
|
|
67
|
+
headers.forEach(h => { if (!!h.children.length)
|
|
68
|
+
getGroupHeaders(h.children, filterFunc, arr); });
|
|
69
|
+
return arr;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBCeS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZ3JvdXBCeS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELFNBQVMsY0FBYyxDQUFDLElBQVcsRUFBRSxXQUFxQjtJQUN4RCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBVyxFQUFFLFdBQXFCLEVBQUUsZUFBcUIsRUFBUyxFQUFFO0lBQ3JGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sb0JBQW9CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLFdBQVcsR0FBRyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM1RixDQUFDO0lBQ0QsT0FBTyxN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QUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUMvQixDQUFDLENBQUE7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQVcsRUFBRSxVQUE4QixFQUFFLE1BQVksRUFBRSxFQUFXLEVBQUU7SUFDL0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQzdGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3JvdXBCeSB9IGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgVGltZXN0YW1wIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgR3JvdXAsIEdyb3VwZWREYXRhIH0gZnJvbSBcIi4uLy4uLy4uL2NsYXNzZXMvVGFibGVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBpbml0SW5kZXhTeW1ib2wgfSBmcm9tIFwiLi9zb3J0LXN0YXRlLmhlbHBlcnNcIjtcclxuXHJcbmZ1bmN0aW9uIGdldEdyb3VwZWREYXRhKGRhdGE6IGFueVtdLCBncm91cEJ5S2V5czogc3RyaW5nW10pOiBhbnlbXSB7XHJcbiAgcmV0dXJuIHRiR3JvdXBCeShkYXRhLCBncm91cEJ5S2V5cyk7XHJcbn1cclxuXHJcbmNvbnN0IHRiR3JvdXBCeSA9IChkYXRhOiBhbnlbXSwgZ3JvdXBCeUtleXM6IHN0cmluZ1tdLCBwYXJlbnRHcm91cE5hbWU/OiBhbnkpOiBhbnlbXSA9PiB7XHJcbiAgY29uc3QgY3VycmVudEtleSA9IGdyb3VwQnlLZXlzWzBdO1xyXG4gIGNvbnN0IHJlcyA9IGdyb3VwQnkoZGF0YSwgY3VycmVudEtleSk7XHJcbiAgY29uc3QgcmVtYWluaW5nR3JvdXBCeUtleXMgPSBncm91cEJ5S2V5cy5zbGljZSgxKTtcclxuICBjb25zdCBmaW5hbEdyb3VwcyA9ICFyZW1haW5pbmdHcm91cEJ5S2V5cy5sZW5ndGg7XHJcbiAgaWYgKHJlbWFpbmluZ0dyb3VwQnlLZXlzLmxlbmd0aCkge1xyXG4gICAgT2JqZWN0LmtleXMocmVzKS5mb3JFYWNoKGtleSA9PiByZXNba2V5XSA9IHRiR3JvdXBCeShyZXNba2V5XSwgcmVtYWluaW5nR3JvdXBCeUtleXMsIGtleSkpXHJcbiAgfVxyXG4gIHJldHVybiBPYmplY3Qua2V5cyhyZXMpLm1hcCgoZ3JvdXBOYW1lLCBpKSA9PiB7XHJcbiAgICBjb25zdCB1bmlxTmFtZSA9IHBhcmVudEdyb3VwTmFtZSA/IGAke3BhcmVudEdyb3VwTmFtZX0tJHtncm91cE5hbWV9YCA6IGAke2dyb3VwTmFtZX1gO1xyXG4gICAgY29uc3QgZ3JvdXBIZWFkZXJzID0gcmVzW2dyb3VwTmFtZV0/LmZpbHRlcihyb3cgPT4gcm93LmlzR3JvdXBIZWFkZXIpID8/IFtdO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgaXNHcm91cEhlYWRlcjogdHJ1ZSxcclxuICAgICAgICBncm91cEhlYWRlckRpc3BsYXk6IGdyb3VwTmFtZSxcclxuICAgICAgICBoYXNUaGVEYXRhOiBmaW5hbEdyb3VwcyxcclxuICAgICAgICBjaGlsZHJlbjogZmluYWxHcm91cHMgPyByZXNbZ3JvdXBOYW1lXSA6IHJlc1tncm91cE5hbWVdLm1hcChkID0+IHtkLnBhZGRpbmcgKz0gMjA7IHJldHVybiBkfSksXHJcbiAgICAgICAgZ3JvdXBOYW1lOiBgdGJfZ3JvdXBfJHt1bmlxTmFtZX1gLFxyXG4gICAgICAgIHBhZGRpbmc6IDEsXHJcbiAgICAgICAga2V5OiBjdXJyZW50S2V5LFxyXG4gICAgICAgIGxlbmd0aCA6IGdyb3VwSGVhZGVycy5yZWR1Y2UoKGFjYywgY3VycikgPT4gY3Vyci5sZW5ndGggKyBhY2MsMCkgKyAoKHJlc1tncm91cE5hbWVdID8/IFtdKS5sZW5ndGggLSBncm91cEhlYWRlcnMubGVuZ3RoKSxcclxuICAgICAgICBbaW5pdEluZGV4U3ltYm9sXTogdW5pcU5hbWUsXHJcbiAgICAgIH0gYXMgR3JvdXBcclxuICAgICk7XHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUdyb3VwQnlTdGF0ZSh7IGdyb3VwZWREYXRhIH06R3JvdXBCeVN0YXRlLCBbZGF0YSwgZ3JvdXBzLCBleHBhbmRlZEdyb3Vwc10gOiBbVGltZXN0YW1wPGFueVtdPiwgVGltZXN0YW1wPHN0cmluZ1tdPiwgVGltZXN0YW1wPEdyb3VwZWREYXRhW10+XSwgaW5kZXg6IG51bWJlcil7XHJcbiAgaWYoXHJcbiAgICBpbmRleCA9PT0gMFxyXG4gICAgfHwgZGF0YVVwZGF0ZWQoZGF0YSwgZ3JvdXBzLCBleHBhbmRlZEdyb3VwcylcclxuICAgIHx8IGdyb3Vwc1VwZGF0ZWQoZ3JvdXBzLCBleHBhbmRlZEdyb3VwcylcclxuICApe1xyXG4gICAgZ3JvdXBlZERhdGEgPSBncm91cHMudmFsdWUubGVuZ3RoID8gZ2V0R3JvdXBlZERhdGEoZGF0YS52YWx1ZSwgZ3JvdXBzLnZhbHVlKSA6IGRhdGEudmFsdWU7XHJcbiAgfVxyXG4gIGNvbnN0IG5ld0Rpc3BsYXlEYXRhID0gZXhwYW5kZWRHcm91cHMudmFsdWUubGVuZ3RoID09PSAwXHJcbiAgICA/IGdyb3VwZWREYXRhXHJcbiAgICA6IGdyb3VwZWREYXRhLm1hcChncm91cCA9PiBtYXBHcm91cEhlYWRlcihncm91cCwgZXhwYW5kZWRHcm91cHMudmFsdWUpKS5mbGF0KCk7XHJcbiAgcmV0dXJuICh7ZGlzcGxheURhdGE6IG5ld0Rpc3BsYXlEYXRhLCBncm91cGVkRGF0YX0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBHcm91cEhlYWRlcihvYmo6IGFueSwgZGF0YTogR3JvdXBlZERhdGFbXSl7XHJcbiAgY29uc3Qgc2hvd0NoaWxkcmVuID0gZGF0YS5maW5kKGEgPT4gYS5leHBhbmRlZEhlYWRlcnMuaW5jbHVkZXMob2JqLmdyb3VwTmFtZSkpO1xyXG4gIGNvbnN0IGNoaWxkcmVuID0gIXNob3dDaGlsZHJlbiA/IFtdIDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5oYXNUaGVEYXRhID8gIG9iai5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogb2JqLmNoaWxkcmVuLm1hcChhID0+IG1hcEdyb3VwSGVhZGVyKGEsIGRhdGEpKVxyXG5cclxuICByZXR1cm4gW29iaiwgLi4uY2hpbGRyZW5dLmZsYXQoKVxyXG59XHJcblxyXG5mdW5jdGlvbiBkYXRhVXBkYXRlZChkYXRhOiBUaW1lc3RhbXA8YW55W10+LCBncm91cHM6IFRpbWVzdGFtcDxzdHJpbmdbXT4sIGV4cGFuZGVkR3JvdXBzOiBUaW1lc3RhbXA8R3JvdXBlZERhdGFbXT4pe1xyXG4gIHJldHVybiBkYXRhLnRpbWVzdGFtcCA+IGdyb3Vwcy50aW1lc3RhbXAgJiYgZGF0YS50aW1lc3RhbXAgPiBleHBhbmRlZEdyb3Vwcy50aW1lc3RhbXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdyb3Vwc1VwZGF0ZWQoZ3JvdXBzOiBUaW1lc3RhbXA8c3RyaW5nW10+LCBleHBhbmRlZEdyb3VwczogVGltZXN0YW1wPEdyb3VwZWREYXRhW10+KXtcclxuICByZXR1cm4gZ3JvdXBzLnRpbWVzdGFtcCA+IGV4cGFuZGVkR3JvdXBzLnRpbWVzdGFtcDtcclxufVxyXG5cclxuaW50ZXJmYWNlIEdyb3VwQnlTdGF0ZSB7IGRpc3BsYXlEYXRhOiBhbnlbXSwgZ3JvdXBlZERhdGE6IGFueVtdfTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0aWFsR3JvdXBCeVN0YXRlID0geyBkaXNwbGF5RGF0YTogW10sIGdyb3VwZWREYXRhOiBbXX1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRBbGxHcm91cEhlYWRlck5hbWVzID0gKGRhdGE6IGFueVtdKSA9PiB7XHJcbiAgY29uc3QgZ3JvdXBzID0gZ2V0R3JvdXBIZWFkZXJzKGRhdGEsIChkOmFueSkgPT4gZC5pc0dyb3VwSGVhZGVyKTtcclxuICByZXR1cm4gZ3JvdXBCeShncm91cHMsICdrZXknKVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0QWxsR3JvdXBIZWFkZXJOYW1lc0J5S2V5cyA9IChkYXRhOiBhbnlbXSwga2V5czogc3RyaW5nW10pID0+IHtcclxuICBjb25zdCBncm91cHMgPSBnZXRHcm91cEhlYWRlcnMoZGF0YSwgKGQ6YW55KSA9PiBkLmlzR3JvdXBIZWFkZXIgJiYga2V5cy5pbmNsdWRlcyhkLmtleSkpO1xyXG4gIHJldHVybiBncm91cEJ5KGdyb3VwcywgJ2tleScpXHJcbn1cclxuXHJcbmNvbnN0IGdldEdyb3VwSGVhZGVycyA9IChkYXRhOiBhbnlbXSwgZmlsdGVyRnVuYzogKGQ6YW55KSA9PiBib29sZWFuLCBhcnI6YW55W10gPSBbXSk6IEdyb3VwW10gPT4ge1xyXG4gIGNvbnN0IGhlYWRlcnMgPSBkYXRhLmZpbHRlcihmaWx0ZXJGdW5jKTtcclxuICBhcnIucHVzaCguLi5oZWFkZXJzKTtcclxuICBoZWFkZXJzLmZvckVhY2goaCA9PiB7aWYoISFoLmNoaWxkcmVuLmxlbmd0aCkgZ2V0R3JvdXBIZWFkZXJzKGguY2hpbGRyZW4sIGZpbHRlckZ1bmMsIGFycil9KTtcclxuICByZXR1cm4gYXJyO1xyXG59Il19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { difference } from "lodash";
|
|
2
|
+
// If we are only sorting due to a change in the Sorts[] we can 'optimize'. If the sort array was first by column a asc then by column b desc then by column c asc,
|
|
3
|
+
// and now it is first by column d asc then by column a desc then by column b desc then by column c asc, we dont need to rerun the tail, i.e. for culumn b and c.
|
|
4
|
+
// So we need to calculate the matching tail of the sort array. Then sortsToRun will be the non-matching head.
|
|
5
|
+
// But if any sorts were removed the only way to 'unsort' is to start by the original data and run all the existing sorts again, so 'sorts to run' will be all
|
|
6
|
+
// the sorts.
|
|
7
|
+
// We always pass allSorts to the container because if the table data changes all the sorts will need to be run.
|
|
8
|
+
export function updateSortState(previousSorts, currentSorts) {
|
|
9
|
+
currentSorts = addInitSort(currentSorts);
|
|
10
|
+
if (sortsRemoved(previousSorts.allSorts, currentSorts)) {
|
|
11
|
+
return ({ sortsToRun: currentSorts, allSorts: currentSorts });
|
|
12
|
+
}
|
|
13
|
+
const sameTailLength = getSameTailLength(previousSorts.allSorts, currentSorts);
|
|
14
|
+
const sortsToRun = currentSorts.slice(0, currentSorts.length - sameTailLength);
|
|
15
|
+
return ({ sortsToRun, allSorts: currentSorts });
|
|
16
|
+
}
|
|
17
|
+
function addInitSort(sorts) {
|
|
18
|
+
return [...sorts, { active: initIndexSymbol, direction: 'asc' }];
|
|
19
|
+
}
|
|
20
|
+
function sortsRemoved(previousSorts, currentSorts) {
|
|
21
|
+
const previousSortedColumns = previousSorts.map(s => s.active);
|
|
22
|
+
const currentSortedColumns = currentSorts.map(s => s.active);
|
|
23
|
+
const sortsRemoved = !!difference(previousSortedColumns, currentSortedColumns).length;
|
|
24
|
+
return sortsRemoved;
|
|
25
|
+
}
|
|
26
|
+
function getSameTailLength(previousSorts, currentSorts) {
|
|
27
|
+
previousSorts = [...previousSorts].reverse();
|
|
28
|
+
currentSorts = [...currentSorts].reverse();
|
|
29
|
+
let indexOfChange = currentSorts.findIndex((s, i) => s.active !== previousSorts[i]?.active || s.direction !== previousSorts[i]?.direction);
|
|
30
|
+
if (indexOfChange === -1)
|
|
31
|
+
return indexOfChange = currentSorts.length;
|
|
32
|
+
return indexOfChange;
|
|
33
|
+
}
|
|
34
|
+
export const initIndexSymbol = Symbol('tb_init_index');
|
|
35
|
+
export const initialSortState = { sortsToRun: [], allSorts: [] };
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1zdGF0ZS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEMsbUtBQW1LO0FBQ25LLGlLQUFpSztBQUNqSyw4R0FBOEc7QUFDOUcsOEpBQThKO0FBQzlKLGFBQWE7QUFDYixnSEFBZ0g7QUFDaEgsTUFBTSxVQUFVLGVBQWUsQ0FBQyxhQUF3QixFQUFFLFlBQW9CO0lBQzVFLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsSUFBRyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0UsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQztJQUMvRSxPQUFPLENBQUMsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUlELFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUMsTUFBTSxFQUFFLGVBQW9DLEVBQUUsU0FBUyxFQUFFLEtBQXNCLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxhQUFxQixFQUFFLFlBQW9CO0lBQy9ELE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RixPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBR0QsU0FBUyxpQkFBaUIsQ0FBQyxhQUFxQixFQUFFLFlBQW9CO0lBQ3BFLGFBQWEsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0MsWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQyxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNJLElBQUcsYUFBYSxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDcEUsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvcnQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xyXG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZlwiO1xyXG5pbXBvcnQgeyBkaWZmZXJlbmNlIH0gZnJvbSBcImxvZGFzaFwiO1xyXG5cclxuLy8gSWYgd2UgYXJlIG9ubHkgc29ydGluZyBkdWUgdG8gYSBjaGFuZ2UgaW4gdGhlIFNvcnRzW10gd2UgY2FuICdvcHRpbWl6ZScuIElmIHRoZSBzb3J0IGFycmF5IHdhcyBmaXJzdCBieSBjb2x1bW4gYSBhc2MgdGhlbiBieSBjb2x1bW4gYiBkZXNjIHRoZW4gYnkgY29sdW1uIGMgYXNjLFxyXG4vLyBhbmQgbm93IGl0IGlzIGZpcnN0IGJ5IGNvbHVtbiBkIGFzYyB0aGVuIGJ5IGNvbHVtbiBhIGRlc2MgdGhlbiBieSBjb2x1bW4gYiBkZXNjIHRoZW4gYnkgY29sdW1uIGMgYXNjLCB3ZSBkb250IG5lZWQgdG8gcmVydW4gdGhlIHRhaWwsIGkuZS4gZm9yIGN1bHVtbiBiIGFuZCBjLlxyXG4vLyBTbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgbWF0Y2hpbmcgdGFpbCBvZiB0aGUgc29ydCBhcnJheS4gVGhlbiBzb3J0c1RvUnVuIHdpbGwgYmUgdGhlIG5vbi1tYXRjaGluZyBoZWFkLlxyXG4vLyBCdXQgaWYgYW55IHNvcnRzIHdlcmUgcmVtb3ZlZCB0aGUgb25seSB3YXkgdG8gJ3Vuc29ydCcgaXMgdG8gc3RhcnQgYnkgdGhlIG9yaWdpbmFsIGRhdGEgYW5kIHJ1biBhbGwgdGhlIGV4aXN0aW5nIHNvcnRzIGFnYWluLCBzbyAnc29ydHMgdG8gcnVuJyB3aWxsIGJlIGFsbFxyXG4vLyB0aGUgc29ydHMuXHJcbi8vIFdlIGFsd2F5cyBwYXNzIGFsbFNvcnRzIHRvIHRoZSBjb250YWluZXIgYmVjYXVzZSBpZiB0aGUgdGFibGUgZGF0YSBjaGFuZ2VzIGFsbCB0aGUgc29ydHMgd2lsbCBuZWVkIHRvIGJlIHJ1bi5cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVNvcnRTdGF0ZShwcmV2aW91c1NvcnRzOiBTb3J0U3RhdGUsIGN1cnJlbnRTb3J0czogU29ydFtdKTogU29ydFN0YXRle1xyXG4gIGN1cnJlbnRTb3J0cyA9IGFkZEluaXRTb3J0KGN1cnJlbnRTb3J0cyk7XHJcbiAgaWYoc29ydHNSZW1vdmVkKHByZXZpb3VzU29ydHMuYWxsU29ydHMsIGN1cnJlbnRTb3J0cykpe1xyXG4gICAgcmV0dXJuICh7c29ydHNUb1J1bjogY3VycmVudFNvcnRzLCBhbGxTb3J0czogY3VycmVudFNvcnRzfSk7XHJcbiAgfVxyXG4gIGNvbnN0IHNhbWVUYWlsTGVuZ3RoID0gZ2V0U2FtZVRhaWxMZW5ndGgocHJldmlvdXNTb3J0cy5hbGxTb3J0cywgY3VycmVudFNvcnRzKTtcclxuICBjb25zdCBzb3J0c1RvUnVuID0gY3VycmVudFNvcnRzLnNsaWNlKDAsIGN1cnJlbnRTb3J0cy5sZW5ndGggLSBzYW1lVGFpbExlbmd0aCk7XHJcbiAgcmV0dXJuICh7c29ydHNUb1J1biwgYWxsU29ydHM6IGN1cnJlbnRTb3J0c30pO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRTdGF0ZSB7IHNvcnRzVG9SdW46IFNvcnRbXSwgYWxsU29ydHM6IFNvcnRbXX1cclxuXHJcbmZ1bmN0aW9uIGFkZEluaXRTb3J0KHNvcnRzOiBTb3J0W10pe1xyXG4gIHJldHVybiBbLi4uc29ydHMsIHthY3RpdmU6IGluaXRJbmRleFN5bWJvbCBhcyB1bmtub3duIGFzIHN0cmluZywgZGlyZWN0aW9uOiAnYXNjJyBhcyBTb3J0RGlyZWN0aW9ufV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNvcnRzUmVtb3ZlZChwcmV2aW91c1NvcnRzOiBTb3J0W10sIGN1cnJlbnRTb3J0czogU29ydFtdKTogYm9vbGVhbntcclxuICBjb25zdCBwcmV2aW91c1NvcnRlZENvbHVtbnMgPSBwcmV2aW91c1NvcnRzLm1hcChzID0+IHMuYWN0aXZlKTtcclxuICBjb25zdCBjdXJyZW50U29ydGVkQ29sdW1ucyA9IGN1cnJlbnRTb3J0cy5tYXAocyA9PiBzLmFjdGl2ZSk7XHJcbiAgY29uc3Qgc29ydHNSZW1vdmVkID0gISFkaWZmZXJlbmNlKHByZXZpb3VzU29ydGVkQ29sdW1ucywgY3VycmVudFNvcnRlZENvbHVtbnMpLmxlbmd0aDtcclxuICByZXR1cm4gc29ydHNSZW1vdmVkO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0U2FtZVRhaWxMZW5ndGgocHJldmlvdXNTb3J0czogU29ydFtdLCBjdXJyZW50U29ydHM6IFNvcnRbXSl7XHJcbiAgcHJldmlvdXNTb3J0cyA9IFsuLi5wcmV2aW91c1NvcnRzXS5yZXZlcnNlKCk7XHJcbiAgY3VycmVudFNvcnRzID0gWy4uLmN1cnJlbnRTb3J0c10ucmV2ZXJzZSgpO1xyXG4gIGxldCBpbmRleE9mQ2hhbmdlID0gY3VycmVudFNvcnRzLmZpbmRJbmRleCgocywgaSkgPT4gcy5hY3RpdmUgIT09IHByZXZpb3VzU29ydHNbaV0/LmFjdGl2ZSB8fCBzLmRpcmVjdGlvbiAhPT0gcHJldmlvdXNTb3J0c1tpXT8uZGlyZWN0aW9uKTtcclxuICBpZihpbmRleE9mQ2hhbmdlID09PSAtMSkgcmV0dXJuIGluZGV4T2ZDaGFuZ2UgPSBjdXJyZW50U29ydHMubGVuZ3RoO1xyXG4gIHJldHVybiBpbmRleE9mQ2hhbmdlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdEluZGV4U3ltYm9sID0gU3ltYm9sKCd0Yl9pbml0X2luZGV4Jyk7XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlID0geyBzb3J0c1RvUnVuOiBbXSwgYWxsU29ydHM6IFtdfTsiXX0=
|