@igo2/common 1.15.3 → 16.0.0-rc.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/common-theme.scss +19 -0
- package/{esm2020 → esm2022}/igo2-common.mjs +4 -4
- package/esm2022/lib/action/action.module.mjs +20 -0
- package/esm2022/lib/action/actionbar/actionbar-item.component.mjs +270 -0
- package/esm2022/lib/action/actionbar/actionbar.component.mjs +389 -0
- package/{esm2020 → esm2022}/lib/action/actionbar/actionbar.module.mjs +57 -57
- package/{esm2020 → esm2022}/lib/action/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/action/shared/action.enums.mjs +7 -7
- package/{esm2020 → esm2022}/lib/action/shared/action.interfaces.mjs +2 -2
- package/{esm2020 → esm2022}/lib/action/shared/index.mjs +4 -4
- package/{esm2020 → esm2022}/lib/action/shared/store.mjs +8 -8
- package/esm2022/lib/backdrop/backdrop.component.mjs +27 -0
- package/{esm2020 → esm2022}/lib/backdrop/backdrop.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/backdrop/index.mjs +2 -2
- package/esm2022/lib/badge-icon/badge-icon.directive.mjs +150 -0
- package/{esm2020 → esm2022}/lib/badge-icon/badge-icon.module.mjs +26 -26
- package/{esm2020 → esm2022}/lib/badge-icon/index.mjs +2 -2
- package/esm2022/lib/clickout/clickout.directive.mjs +33 -0
- package/{esm2020 → esm2022}/lib/clickout/clickout.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/clickout/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/clone/clone.module.mjs +24 -24
- package/esm2022/lib/clone/clone.pipe.mjs +24 -0
- package/{esm2020 → esm2022}/lib/clone/index.mjs +2 -2
- package/esm2022/lib/collapsible/collapse.directive.mjs +58 -0
- package/esm2022/lib/collapsible/collapsible.component.mjs +54 -0
- package/{esm2020 → esm2022}/lib/collapsible/collapsible.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/collapsible/index.mjs +3 -3
- package/esm2022/lib/color-picker-form-field/color-picker-form-field.component.mjs +121 -0
- package/esm2022/lib/color-picker-form-field/color-picker-form-field.module.mjs +32 -0
- package/esm2022/lib/color-picker-form-field/index.mjs +2 -0
- package/esm2022/lib/confirm-dialog/confirm-dialog.component.mjs +47 -0
- package/{esm2020 → esm2022}/lib/confirm-dialog/confirm-dialog.module.mjs +29 -29
- package/esm2022/lib/confirm-dialog/confirm-dialog.service.mjs +29 -0
- package/{esm2020 → esm2022}/lib/confirm-dialog/index.mjs +3 -3
- package/esm2022/lib/context-menu/context-menu.directive.mjs +110 -0
- package/{esm2020 → esm2022}/lib/context-menu/context-menu.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/context-menu/index.mjs +3 -3
- package/esm2022/lib/context-menu/long-press.directive.mjs +67 -0
- package/esm2022/lib/custom-html/custom-html.component.mjs +27 -0
- package/{esm2020 → esm2022}/lib/custom-html/custom-html.module.mjs +47 -47
- package/{esm2020 → esm2022}/lib/custom-html/custom-html.pipe.mjs +20 -18
- package/{esm2020 → esm2022}/lib/custom-html/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/dom/dom.interfaces.mjs +2 -2
- package/{esm2020 → esm2022}/lib/dom/dom.module.mjs +21 -23
- package/esm2022/lib/dom/dom.service.mjs +35 -0
- package/{esm2020 → esm2022}/lib/dom/index.mjs +3 -3
- package/esm2022/lib/drag-drop/drag-drop.directive.mjs +85 -0
- package/{esm2020 → esm2022}/lib/drag-drop/drag-drop.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/drag-drop/index.mjs +2 -2
- package/esm2022/lib/dynamic-component/dynamic-component.module.mjs +20 -0
- package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +138 -0
- package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +22 -0
- package/{esm2020 → esm2022}/lib/dynamic-component/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/dynamic-component/shared/dynamic-component.interfaces.mjs +2 -2
- package/esm2022/lib/dynamic-component/shared/dynamic-component.mjs +183 -0
- package/{esm2020 → esm2022}/lib/dynamic-component/shared/dynamic-component.service.mjs +30 -29
- package/{esm2020 → esm2022}/lib/dynamic-component/shared/index.mjs +4 -4
- package/esm2022/lib/entity/entity-selector/entity-selector.component.mjs +214 -0
- package/esm2022/lib/entity/entity-selector/entity-selector.module.mjs +24 -0
- package/esm2022/lib/entity/entity-table/entity-table-row.directive.mjs +139 -0
- package/esm2022/lib/entity/entity-table/entity-table.component.mjs +1455 -0
- package/esm2022/lib/entity/entity-table/entity-table.module.mjs +96 -0
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +167 -0
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +2 -0
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +22 -0
- package/{esm2020 → esm2022}/lib/entity/entity.module.mjs +29 -31
- package/{esm2020 → esm2022}/lib/entity/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/entity/shared/entity.enums.mjs +28 -28
- package/esm2022/lib/entity/shared/entity.interfaces.mjs +2 -0
- package/esm2022/lib/entity/shared/entity.utils.mjs +73 -0
- package/esm2022/lib/entity/shared/index.mjs +11 -0
- package/esm2022/lib/entity/shared/state.mjs +194 -0
- package/esm2022/lib/entity/shared/store-strategy.mjs +73 -0
- package/esm2022/lib/entity/shared/store.mjs +256 -0
- package/esm2022/lib/entity/shared/strategies/filter-custom-function.mjs +80 -0
- package/esm2022/lib/entity/shared/strategies/filter-selection.mjs +81 -0
- package/{esm2020 → esm2022}/lib/entity/shared/strategies/index.mjs +4 -4
- package/esm2022/lib/entity/shared/strategies/strategy.mjs +78 -0
- package/esm2022/lib/entity/shared/transaction.mjs +329 -0
- package/esm2022/lib/entity/shared/view.mjs +330 -0
- package/esm2022/lib/entity/shared/watcher.mjs +135 -0
- package/esm2022/lib/flexible/flexible.component.mjs +153 -0
- package/{esm2020 → esm2022}/lib/flexible/flexible.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/flexible/flexible.type.mjs +2 -2
- package/{esm2020 → esm2022}/lib/flexible/index.mjs +3 -3
- package/esm2022/lib/form/form/form.component.mjs +125 -0
- package/esm2022/lib/form/form/form.module.mjs +23 -0
- package/esm2022/lib/form/form-field/form-field-select.component.mjs +140 -0
- package/esm2022/lib/form/form-field/form-field-text.component.mjs +113 -0
- package/esm2022/lib/form/form-field/form-field-textarea.component.mjs +114 -0
- package/esm2022/lib/form/form-field/form-field.component.mjs +78 -0
- package/{esm2020 → esm2022}/lib/form/form-field/form-field.module.mjs +74 -74
- package/{esm2020 → esm2022}/lib/form/form-field/index.mjs +5 -5
- package/esm2022/lib/form/form-group/form-group.component.mjs +115 -0
- package/esm2022/lib/form/form-group/form-group.module.mjs +36 -0
- package/esm2022/lib/form/form.module.mjs +27 -0
- package/{esm2020 → esm2022}/lib/form/index.mjs +5 -5
- package/{esm2020 → esm2022}/lib/form/shared/form-field-component.mjs +7 -7
- package/esm2022/lib/form/shared/form-field.service.mjs +29 -0
- package/esm2022/lib/form/shared/form.interfaces.mjs +2 -0
- package/esm2022/lib/form/shared/form.service.mjs +82 -0
- package/esm2022/lib/form/shared/form.utils.mjs +40 -0
- package/{esm2020 → esm2022}/lib/form/shared/index.mjs +6 -6
- package/esm2022/lib/home-button/home-button.component.mjs +30 -0
- package/{esm2020 → esm2022}/lib/home-button/home-button.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/home-button/index.mjs +2 -2
- package/esm2022/lib/image/image-error.directive.mjs +36 -0
- package/{esm2020 → esm2022}/lib/image/image.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/image/index.mjs +3 -3
- package/esm2022/lib/image/secure-image.pipe.mjs +65 -0
- package/{esm2020 → esm2022}/lib/interactive-tour/index.mjs +5 -5
- package/esm2022/lib/interactive-tour/interactive-tour.component.mjs +161 -0
- package/esm2022/lib/interactive-tour/interactive-tour.interface.mjs +2 -0
- package/esm2022/lib/interactive-tour/interactive-tour.loader.mjs +49 -0
- package/{esm2020 → esm2022}/lib/interactive-tour/interactive-tour.module.mjs +40 -40
- package/esm2022/lib/interactive-tour/interactive-tour.service.mjs +297 -0
- package/{esm2020 → esm2022}/lib/json-dialog/index.mjs +3 -3
- package/esm2022/lib/json-dialog/json-dialog.component.mjs +114 -0
- package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.service.mjs +26 -24
- package/{esm2020 → esm2022}/lib/keyvalue/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.pipe.mjs +18 -18
- package/{esm2020 → esm2022}/lib/list/index.mjs +3 -3
- package/esm2022/lib/list/list-item.directive.mjs +167 -0
- package/esm2022/lib/list/list.component.mjs +268 -0
- package/{esm2020 → esm2022}/lib/list/list.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/panel/index.mjs +2 -2
- package/esm2022/lib/panel/panel.component.mjs +60 -0
- package/{esm2020 → esm2022}/lib/panel/panel.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/sidenav/index.mjs +2 -2
- package/esm2022/lib/sidenav/sidenav-shim.directive.mjs +59 -0
- package/{esm2020 → esm2022}/lib/sidenav/sidenav.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/spinner/index.mjs +3 -3
- package/esm2022/lib/spinner/spinner-activity.directive.mjs +55 -0
- package/esm2022/lib/spinner/spinner.component.mjs +38 -0
- package/{esm2020 → esm2022}/lib/spinner/spinner.module.mjs +21 -21
- package/{esm2020 → esm2022}/lib/stop-propagation/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/stop-propagation/stop-drop-propagation.directive.mjs +22 -22
- package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.directive.mjs +21 -21
- package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/table/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/table/table-action-color.enum.mjs +7 -7
- package/esm2022/lib/table/table-database.mjs +28 -0
- package/esm2022/lib/table/table-datasource.mjs +64 -0
- package/esm2022/lib/table/table-model.interface.mjs +2 -0
- package/esm2022/lib/table/table.component.mjs +302 -0
- package/{esm2020 → esm2022}/lib/table/table.module.mjs +67 -67
- package/{esm2020 → esm2022}/lib/tool/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/tool/shared/index.mjs +6 -6
- package/esm2022/lib/tool/shared/tool-component.mjs +9 -0
- package/esm2022/lib/tool/shared/tool.interface.mjs +2 -0
- package/esm2022/lib/tool/shared/tool.service.mjs +43 -0
- package/{esm2020 → esm2022}/lib/tool/shared/toolbox.enums.mjs +7 -7
- package/esm2022/lib/tool/shared/toolbox.mjs +184 -0
- package/esm2022/lib/tool/tool.module.mjs +26 -0
- package/{esm2020 → esm2022}/lib/tool/toolbox/toolbox.animation.mjs +10 -10
- package/esm2022/lib/tool/toolbox/toolbox.component.mjs +273 -0
- package/esm2022/lib/tool/toolbox/toolbox.module.mjs +24 -0
- package/{esm2020 → esm2022}/lib/widget/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/widget/shared/index.mjs +4 -4
- package/esm2022/lib/widget/shared/widget.interfaces.mjs +2 -0
- package/{esm2020 → esm2022}/lib/widget/shared/widget.mjs +4 -4
- package/esm2022/lib/widget/shared/widget.service.mjs +22 -0
- package/esm2022/lib/widget/widget-outlet/widget-outlet.component.mjs +124 -0
- package/esm2022/lib/widget/widget-outlet/widget-outlet.module.mjs +23 -0
- package/esm2022/lib/widget/widget.module.mjs +21 -0
- package/{esm2020 → esm2022}/lib/workspace/index.mjs +4 -4
- package/{esm2020 → esm2022}/lib/workspace/shared/index.mjs +4 -4
- package/esm2022/lib/workspace/shared/store.mjs +37 -0
- package/{esm2020 → esm2022}/lib/workspace/shared/workspace.interfaces.mjs +2 -2
- package/esm2022/lib/workspace/shared/workspace.mjs +143 -0
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.component.mjs +58 -0
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +23 -0
- package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +94 -0
- package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +23 -0
- package/esm2022/lib/workspace/workspace.module.mjs +20 -0
- package/esm2022/public_api.mjs +76 -0
- package/{fesm2020 → fesm2022}/igo2-common.mjs +9837 -9345
- package/fesm2022/igo2-common.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/action/action.module.d.ts +8 -8
- package/lib/action/action.theming.scss +5 -0
- package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
- package/lib/action/actionbar/actionbar-item.theming.scss +32 -0
- package/lib/action/actionbar/actionbar.component.d.ts +147 -146
- package/lib/action/actionbar/actionbar.module.d.ts +20 -20
- package/lib/action/actionbar/actionbar.theming.scss +22 -0
- package/lib/action/index.d.ts +2 -2
- package/lib/action/shared/action.enums.d.ts +5 -5
- package/lib/action/shared/action.interfaces.d.ts +17 -17
- package/lib/action/shared/index.d.ts +3 -3
- package/lib/action/shared/store.d.ts +8 -8
- package/lib/backdrop/backdrop.component.d.ts +9 -9
- package/lib/backdrop/backdrop.module.d.ts +10 -10
- package/lib/backdrop/index.d.ts +1 -1
- package/lib/badge-icon/badge-icon.directive.d.ts +36 -36
- package/lib/badge-icon/badge-icon.module.d.ts +11 -11
- package/lib/badge-icon/index.d.ts +1 -1
- package/lib/clickout/clickout.directive.d.ts +10 -10
- package/lib/clickout/clickout.module.d.ts +9 -9
- package/lib/clickout/index.d.ts +1 -1
- package/lib/clone/clone.module.d.ts +9 -9
- package/lib/clone/clone.pipe.d.ts +7 -7
- package/lib/clone/index.d.ts +1 -1
- package/lib/collapsible/collapse.directive.d.ts +19 -19
- package/lib/collapsible/collapsible.component.d.ts +13 -13
- package/lib/collapsible/collapsible.module.d.ts +12 -12
- package/lib/collapsible/collapsible.theming.scss +22 -0
- package/lib/collapsible/index.d.ts +2 -2
- package/lib/color-picker-form-field/color-picker-form-field.component.d.ts +26 -0
- package/lib/color-picker-form-field/color-picker-form-field.module.d.ts +10 -0
- package/lib/color-picker-form-field/index.d.ts +1 -0
- package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
- package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -12
- package/lib/confirm-dialog/confirm-dialog.service.d.ts +12 -12
- package/lib/confirm-dialog/index.d.ts +2 -2
- package/lib/context-menu/context-menu.directive.d.ts +21 -21
- package/lib/context-menu/context-menu.module.d.ts +10 -10
- package/lib/context-menu/index.d.ts +2 -2
- package/lib/context-menu/long-press.directive.d.ts +20 -20
- package/lib/custom-html/custom-html.component.d.ts +9 -9
- package/lib/custom-html/custom-html.module.d.ts +16 -16
- package/lib/custom-html/custom-html.pipe.d.ts +10 -10
- package/lib/custom-html/index.d.ts +2 -2
- package/lib/dom/dom.interfaces.d.ts +10 -10
- package/lib/dom/dom.module.d.ts +8 -8
- package/lib/dom/dom.service.d.ts +10 -10
- package/lib/dom/index.d.ts +2 -2
- package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
- package/lib/drag-drop/drag-drop.module.d.ts +9 -9
- package/lib/drag-drop/index.d.ts +1 -1
- package/lib/dynamic-component/dynamic-component.module.d.ts +8 -8
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -11
- package/lib/dynamic-component/index.d.ts +2 -2
- package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
- package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
- package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
- package/lib/dynamic-component/shared/index.d.ts +3 -3
- package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
- package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -13
- package/lib/entity/entity-selector/entity-selector.theming.scss +21 -0
- package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
- package/lib/entity/entity-table/entity-table.component.d.ts +327 -333
- package/lib/entity/entity-table/entity-table.module.d.ts +29 -29
- package/lib/entity/entity-table/entity-table.theming.scss +34 -0
- package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
- package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
- package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -11
- package/lib/entity/entity-table-paginator/entity-table-paginator.theming.scss +21 -0
- package/lib/entity/entity.module.d.ts +10 -10
- package/lib/entity/entity.theming.scss +10 -0
- package/lib/entity/index.d.ts +5 -5
- package/lib/entity/shared/entity.enums.d.ts +23 -23
- package/lib/entity/shared/entity.interfaces.d.ts +95 -114
- package/lib/entity/shared/entity.utils.d.ts +49 -49
- package/lib/entity/shared/index.d.ts +10 -9
- package/lib/entity/shared/state.d.ts +108 -103
- package/lib/entity/shared/store-strategy.d.ts +38 -0
- package/lib/entity/shared/store.d.ts +147 -176
- package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
- package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
- package/lib/entity/shared/strategies/index.d.ts +3 -3
- package/lib/entity/shared/strategies/strategy.d.ts +56 -56
- package/lib/entity/shared/transaction.d.ts +180 -168
- package/lib/entity/shared/view.d.ts +193 -193
- package/lib/entity/shared/watcher.d.ts +72 -72
- package/lib/flexible/flexible.component.d.ts +41 -41
- package/lib/flexible/flexible.module.d.ts +9 -9
- package/lib/flexible/flexible.type.d.ts +2 -2
- package/lib/flexible/index.d.ts +2 -2
- package/lib/form/form/form.component.d.ts +53 -53
- package/lib/form/form/form.module.d.ts +12 -12
- package/lib/form/form-field/form-field-select.component.d.ts +48 -48
- package/lib/form/form-field/form-field-text.component.d.ts +41 -41
- package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
- package/lib/form/form-field/form-field.component.d.ts +29 -34
- package/lib/form/form-field/form-field.module.d.ts +21 -21
- package/lib/form/form-field/index.d.ts +4 -4
- package/lib/form/form-group/form-group.component.d.ts +49 -49
- package/lib/form/form-group/form-group.module.d.ts +14 -14
- package/lib/form/form.module.d.ts +13 -13
- package/lib/form/index.d.ts +4 -4
- package/lib/form/shared/form-field-component.d.ts +1 -1
- package/lib/form/shared/form-field.service.d.ts +19 -19
- package/lib/form/shared/form.interfaces.d.ts +61 -57
- package/lib/form/shared/form.service.d.ts +15 -15
- package/lib/form/shared/form.utils.d.ts +11 -11
- package/lib/form/shared/index.d.ts +5 -5
- package/lib/home-button/home-button.component.d.ts +9 -9
- package/lib/home-button/home-button.module.d.ts +15 -15
- package/lib/home-button/home-button.theming.scss +18 -0
- package/lib/home-button/index.d.ts +1 -1
- package/lib/image/image-error.directive.d.ts +11 -11
- package/lib/image/image.module.d.ts +10 -10
- package/lib/image/index.d.ts +2 -2
- package/lib/image/secure-image.pipe.d.ts +13 -13
- package/lib/interactive-tour/index.d.ts +4 -4
- package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
- package/lib/interactive-tour/interactive-tour.interface.d.ts +32 -32
- package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
- package/lib/interactive-tour/interactive-tour.module.d.ts +12 -12
- package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
- package/lib/interactive-tour/interactive-tour.theming.scss +32 -0
- package/lib/json-dialog/index.d.ts +2 -2
- package/lib/json-dialog/json-dialog.component.d.ts +13 -13
- package/lib/json-dialog/json-dialog.module.d.ts +13 -13
- package/lib/json-dialog/json-dialog.service.d.ts +10 -10
- package/lib/keyvalue/index.d.ts +1 -1
- package/lib/keyvalue/keyvalue.module.d.ts +9 -9
- package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
- package/lib/list/index.d.ts +2 -2
- package/lib/list/list-item.directive.d.ts +43 -43
- package/lib/list/list.component.d.ts +51 -51
- package/lib/list/list.module.d.ts +14 -14
- package/lib/list/list.theming.scss +40 -0
- package/lib/panel/index.d.ts +1 -1
- package/lib/panel/panel.component.d.ts +10 -10
- package/lib/panel/panel.module.d.ts +8 -8
- package/lib/panel/panel.theming.scss +30 -0
- package/lib/sidenav/index.d.ts +1 -1
- package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
- package/lib/sidenav/sidenav.module.d.ts +9 -9
- package/lib/spinner/index.d.ts +2 -2
- package/lib/spinner/spinner-activity.directive.d.ts +32 -32
- package/lib/spinner/spinner.component.d.ts +12 -12
- package/lib/spinner/spinner.module.d.ts +10 -10
- package/lib/stop-propagation/index.d.ts +2 -2
- package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.module.d.ts +10 -10
- package/lib/table/index.d.ts +5 -5
- package/lib/table/table-action-color.enum.d.ts +5 -5
- package/lib/table/table-database.d.ts +10 -10
- package/lib/table/table-datasource.d.ts +18 -17
- package/lib/table/table-model.interface.d.ts +28 -28
- package/lib/table/table.component.d.ts +40 -40
- package/lib/table/table.module.d.ts +20 -20
- package/lib/tool/index.d.ts +2 -2
- package/lib/tool/shared/index.d.ts +5 -5
- package/lib/tool/shared/tool-component.d.ts +2 -2
- package/lib/tool/shared/tool.interface.d.ts +18 -18
- package/lib/tool/shared/tool.service.d.ts +30 -30
- package/lib/tool/shared/toolbox.d.ts +95 -95
- package/lib/tool/shared/toolbox.enums.d.ts +5 -5
- package/lib/tool/tool.module.d.ts +10 -10
- package/lib/tool/tool.theming.scss +5 -0
- package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
- package/lib/tool/toolbox/toolbox.component.d.ts +128 -127
- package/lib/tool/toolbox/toolbox.module.d.ts +13 -13
- package/lib/tool/toolbox/toolbox.theming.scss +105 -0
- package/lib/widget/index.d.ts +2 -2
- package/lib/widget/shared/index.d.ts +3 -3
- package/lib/widget/shared/widget.d.ts +4 -4
- package/lib/widget/shared/widget.interfaces.d.ts +12 -12
- package/lib/widget/shared/widget.service.d.ts +10 -10
- package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
- package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -12
- package/lib/widget/widget.module.d.ts +8 -8
- package/lib/workspace/index.d.ts +3 -3
- package/lib/workspace/shared/index.d.ts +3 -3
- package/lib/workspace/shared/store.d.ts +20 -20
- package/lib/workspace/shared/workspace.d.ts +108 -108
- package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
- package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +39 -39
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -12
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -12
- package/lib/workspace/workspace.module.d.ts +9 -9
- package/locale/en.common.json +43 -0
- package/locale/fr.common.json +43 -0
- package/package.json +30 -28
- package/public_api.d.ts +72 -70
- package/style/partial/common-utils.scss +9 -0
- package/style/partial/common.variables.scss +8 -8
- package/style/style.css +204 -0
- package/esm2020/lib/action/action.module.mjs +0 -27
- package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +0 -252
- package/esm2020/lib/action/actionbar/actionbar.component.mjs +0 -370
- package/esm2020/lib/backdrop/backdrop.component.mjs +0 -26
- package/esm2020/lib/badge-icon/badge-icon.directive.mjs +0 -141
- package/esm2020/lib/clickout/clickout.directive.mjs +0 -32
- package/esm2020/lib/clone/clone.pipe.mjs +0 -24
- package/esm2020/lib/collapsible/collapse.directive.mjs +0 -55
- package/esm2020/lib/collapsible/collapsible.component.mjs +0 -57
- package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +0 -44
- package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +0 -24
- package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -103
- package/esm2020/lib/context-menu/long-press.directive.mjs +0 -67
- package/esm2020/lib/custom-html/custom-html.component.mjs +0 -28
- package/esm2020/lib/dom/dom.service.mjs +0 -30
- package/esm2020/lib/drag-drop/drag-drop.directive.mjs +0 -88
- package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +0 -31
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +0 -122
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +0 -28
- package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +0 -174
- package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +0 -194
- package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +0 -32
- package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +0 -137
- package/esm2020/lib/entity/entity-table/entity-table.component.mjs +0 -1376
- package/esm2020/lib/entity/entity-table/entity-table.module.mjs +0 -102
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +0 -132
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +0 -2
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +0 -28
- package/esm2020/lib/entity/shared/entity.interfaces.mjs +0 -2
- package/esm2020/lib/entity/shared/entity.utils.mjs +0 -67
- package/esm2020/lib/entity/shared/index.mjs +0 -10
- package/esm2020/lib/entity/shared/state.mjs +0 -191
- package/esm2020/lib/entity/shared/store.mjs +0 -288
- package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +0 -79
- package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +0 -84
- package/esm2020/lib/entity/shared/strategies/strategy.mjs +0 -75
- package/esm2020/lib/entity/shared/transaction.mjs +0 -316
- package/esm2020/lib/entity/shared/view.mjs +0 -315
- package/esm2020/lib/entity/shared/watcher.mjs +0 -120
- package/esm2020/lib/flexible/flexible.component.mjs +0 -148
- package/esm2020/lib/form/form/form.component.mjs +0 -117
- package/esm2020/lib/form/form/form.module.mjs +0 -40
- package/esm2020/lib/form/form-field/form-field-select.component.mjs +0 -127
- package/esm2020/lib/form/form-field/form-field-text.component.mjs +0 -104
- package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +0 -105
- package/esm2020/lib/form/form-field/form-field.component.mjs +0 -72
- package/esm2020/lib/form/form-group/form-group.component.mjs +0 -105
- package/esm2020/lib/form/form-group/form-group.module.mjs +0 -40
- package/esm2020/lib/form/form.module.mjs +0 -49
- package/esm2020/lib/form/shared/form-field.service.mjs +0 -29
- package/esm2020/lib/form/shared/form.interfaces.mjs +0 -2
- package/esm2020/lib/form/shared/form.service.mjs +0 -81
- package/esm2020/lib/form/shared/form.utils.mjs +0 -40
- package/esm2020/lib/home-button/home-button.component.mjs +0 -31
- package/esm2020/lib/image/image-error.directive.mjs +0 -35
- package/esm2020/lib/image/secure-image.pipe.mjs +0 -59
- package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +0 -135
- package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +0 -2
- package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +0 -44
- package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +0 -285
- package/esm2020/lib/json-dialog/json-dialog.component.mjs +0 -109
- package/esm2020/lib/list/list-item.directive.mjs +0 -165
- package/esm2020/lib/list/list.component.mjs +0 -262
- package/esm2020/lib/panel/panel.component.mjs +0 -59
- package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +0 -55
- package/esm2020/lib/spinner/spinner-activity.directive.mjs +0 -47
- package/esm2020/lib/spinner/spinner.component.mjs +0 -35
- package/esm2020/lib/table/table-database.mjs +0 -28
- package/esm2020/lib/table/table-datasource.mjs +0 -61
- package/esm2020/lib/table/table-model.interface.mjs +0 -2
- package/esm2020/lib/table/table.component.mjs +0 -297
- package/esm2020/lib/tool/shared/tool-component.mjs +0 -9
- package/esm2020/lib/tool/shared/tool.interface.mjs +0 -2
- package/esm2020/lib/tool/shared/tool.service.mjs +0 -43
- package/esm2020/lib/tool/shared/toolbox.mjs +0 -179
- package/esm2020/lib/tool/tool.module.mjs +0 -32
- package/esm2020/lib/tool/toolbox/toolbox.component.mjs +0 -255
- package/esm2020/lib/tool/toolbox/toolbox.module.mjs +0 -36
- package/esm2020/lib/widget/shared/widget.interfaces.mjs +0 -2
- package/esm2020/lib/widget/shared/widget.service.mjs +0 -20
- package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +0 -116
- package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +0 -32
- package/esm2020/lib/widget/widget.module.mjs +0 -32
- package/esm2020/lib/workspace/shared/store.mjs +0 -40
- package/esm2020/lib/workspace/shared/workspace.mjs +0 -117
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +0 -51
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -32
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +0 -88
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +0 -32
- package/esm2020/lib/workspace/workspace.module.mjs +0 -27
- package/esm2020/public_api.mjs +0 -74
- package/fesm2015/igo2-common.mjs +0 -10329
- package/fesm2015/igo2-common.mjs.map +0 -1
- package/fesm2020/igo2-common.mjs.map +0 -1
- package/style/common.theming.scss +0 -12
- package/style/partial/action.scss +0 -18
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { EntityStoreStrategy } from './strategy';
|
|
2
|
+
/**
|
|
3
|
+
* When active, this strategy filters a store's stateView to return
|
|
4
|
+
* selected entities only.
|
|
5
|
+
*/
|
|
6
|
+
export class EntityStoreFilterCustomFuncStrategy extends EntityStoreStrategy {
|
|
7
|
+
options;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super(options);
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Store / filter ids map
|
|
14
|
+
*/
|
|
15
|
+
filters = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* Bind this strategy to a store and start filtering it
|
|
18
|
+
* @param store Entity store
|
|
19
|
+
*/
|
|
20
|
+
bindStore(store) {
|
|
21
|
+
super.bindStore(store);
|
|
22
|
+
if (this.active === true) {
|
|
23
|
+
this.filterStore(store);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Unbind this strategy from a store and stop filtering it
|
|
28
|
+
* @param store Entity store
|
|
29
|
+
*/
|
|
30
|
+
unbindStore(store) {
|
|
31
|
+
super.unbindStore(store);
|
|
32
|
+
if (this.active === true) {
|
|
33
|
+
this.unfilterStore(store);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Start filtering all stores
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
doActivate() {
|
|
41
|
+
this.filterAll();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Stop filtering all stores
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
doDeactivate() {
|
|
48
|
+
this.unfilterAll();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Filter all stores
|
|
52
|
+
*/
|
|
53
|
+
filterAll() {
|
|
54
|
+
this.stores.forEach((store) => this.filterStore(store));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Unfilter all stores
|
|
58
|
+
*/
|
|
59
|
+
unfilterAll() {
|
|
60
|
+
this.stores.forEach((store) => this.unfilterStore(store));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Filter a store and add it to the filters map
|
|
64
|
+
*/
|
|
65
|
+
filterStore(store) {
|
|
66
|
+
this.filters.set(store, store.stateView.addFilter(this.options.filterClauseFunc));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Unfilter a store and delete it from the filters map
|
|
70
|
+
*/
|
|
71
|
+
unfilterStore(store) {
|
|
72
|
+
const filterId = this.filters.get(store);
|
|
73
|
+
if (filterId === undefined) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
store.stateView.removeFilter(filterId);
|
|
77
|
+
this.filters.delete(store);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWN1c3RvbS1mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9zaGFyZWQvc3RyYXRlZ2llcy9maWx0ZXItY3VzdG9tLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sbUNBQW9DLFNBQVEsbUJBQW1CO0lBQ3BEO0lBQXRCLFlBQXNCLE9BQXVDO1FBQzNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURLLFlBQU8sR0FBUCxPQUFPLENBQWdDO0lBRTdELENBQUM7SUFFRDs7T0FFRztJQUNLLE9BQU8sR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV0RDs7O09BR0c7SUFDSCxTQUFTLENBQUMsS0FBa0I7UUFDMUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLEtBQWtCO1FBQzVCLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFVBQVU7UUFDbEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDTyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxTQUFTO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXLENBQUMsS0FBa0I7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsS0FBSyxFQUNMLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FDekQsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxLQUFrQjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5U3RvcmVTdHJhdGVneUZ1bmNPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL3N0b3JlJztcclxuaW1wb3J0IHsgRW50aXR5U3RvcmVTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ3knO1xyXG5cclxuLyoqXHJcbiAqIFdoZW4gYWN0aXZlLCB0aGlzIHN0cmF0ZWd5IGZpbHRlcnMgYSBzdG9yZSdzIHN0YXRlVmlldyB0byByZXR1cm5cclxuICogc2VsZWN0ZWQgZW50aXRpZXMgb25seS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlTdG9yZUZpbHRlckN1c3RvbUZ1bmNTdHJhdGVneSBleHRlbmRzIEVudGl0eVN0b3JlU3RyYXRlZ3kge1xyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvcHRpb25zOiBFbnRpdHlTdG9yZVN0cmF0ZWd5RnVuY09wdGlvbnMpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgLyBmaWx0ZXIgaWRzIG1hcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsdGVyczogTWFwPEVudGl0eVN0b3JlLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAvKipcclxuICAgKiBCaW5kIHRoaXMgc3RyYXRlZ3kgdG8gYSBzdG9yZSBhbmQgc3RhcnQgZmlsdGVyaW5nIGl0XHJcbiAgICogQHBhcmFtIHN0b3JlIEVudGl0eSBzdG9yZVxyXG4gICAqL1xyXG4gIGJpbmRTdG9yZShzdG9yZTogRW50aXR5U3RvcmUpIHtcclxuICAgIHN1cGVyLmJpbmRTdG9yZShzdG9yZSk7XHJcbiAgICBpZiAodGhpcy5hY3RpdmUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdG9yZShzdG9yZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbmJpbmQgdGhpcyBzdHJhdGVneSBmcm9tIGEgc3RvcmUgYW5kIHN0b3AgZmlsdGVyaW5nIGl0XHJcbiAgICogQHBhcmFtIHN0b3JlIEVudGl0eSBzdG9yZVxyXG4gICAqL1xyXG4gIHVuYmluZFN0b3JlKHN0b3JlOiBFbnRpdHlTdG9yZSkge1xyXG4gICAgc3VwZXIudW5iaW5kU3RvcmUoc3RvcmUpO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudW5maWx0ZXJTdG9yZShzdG9yZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBmaWx0ZXJpbmcgYWxsIHN0b3Jlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkb0FjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5maWx0ZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgZmlsdGVyaW5nIGFsbCBzdG9yZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG9EZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy51bmZpbHRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIGFsbCBzdG9yZXNcclxuICAgKi9cclxuICBwcml2YXRlIGZpbHRlckFsbCgpIHtcclxuICAgIHRoaXMuc3RvcmVzLmZvckVhY2goKHN0b3JlOiBFbnRpdHlTdG9yZSkgPT4gdGhpcy5maWx0ZXJTdG9yZShzdG9yZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5maWx0ZXIgYWxsIHN0b3Jlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdW5maWx0ZXJBbGwoKSB7XHJcbiAgICB0aGlzLnN0b3Jlcy5mb3JFYWNoKChzdG9yZTogRW50aXR5U3RvcmUpID0+IHRoaXMudW5maWx0ZXJTdG9yZShzdG9yZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIGEgc3RvcmUgYW5kIGFkZCBpdCB0byB0aGUgZmlsdGVycyBtYXBcclxuICAgKi9cclxuICBwcml2YXRlIGZpbHRlclN0b3JlKHN0b3JlOiBFbnRpdHlTdG9yZSkge1xyXG4gICAgdGhpcy5maWx0ZXJzLnNldChcclxuICAgICAgc3RvcmUsXHJcbiAgICAgIHN0b3JlLnN0YXRlVmlldy5hZGRGaWx0ZXIodGhpcy5vcHRpb25zLmZpbHRlckNsYXVzZUZ1bmMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5maWx0ZXIgYSBzdG9yZSBhbmQgZGVsZXRlIGl0IGZyb20gdGhlIGZpbHRlcnMgbWFwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1bmZpbHRlclN0b3JlKHN0b3JlOiBFbnRpdHlTdG9yZSkge1xyXG4gICAgY29uc3QgZmlsdGVySWQgPSB0aGlzLmZpbHRlcnMuZ2V0KHN0b3JlKTtcclxuICAgIGlmIChmaWx0ZXJJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZS5zdGF0ZVZpZXcucmVtb3ZlRmlsdGVyKGZpbHRlcklkKTtcclxuICAgIHRoaXMuZmlsdGVycy5kZWxldGUoc3RvcmUpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { EntityStoreStrategy } from './strategy';
|
|
2
|
+
/**
|
|
3
|
+
* When active, this strategy filters a store's stateView to return
|
|
4
|
+
* selected entities only.
|
|
5
|
+
*/
|
|
6
|
+
export class EntityStoreFilterSelectionStrategy extends EntityStoreStrategy {
|
|
7
|
+
/**
|
|
8
|
+
* Store / filter ids map
|
|
9
|
+
*/
|
|
10
|
+
filters = new Map();
|
|
11
|
+
/**
|
|
12
|
+
* Bind this strategy to a store and start filtering it
|
|
13
|
+
* @param store Entity store
|
|
14
|
+
*/
|
|
15
|
+
bindStore(store) {
|
|
16
|
+
super.bindStore(store);
|
|
17
|
+
if (this.active === true) {
|
|
18
|
+
this.filterStore(store);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Unbind this strategy from a store and stop filtering it
|
|
23
|
+
* @param store Entity store
|
|
24
|
+
*/
|
|
25
|
+
unbindStore(store) {
|
|
26
|
+
super.unbindStore(store);
|
|
27
|
+
if (this.active === true) {
|
|
28
|
+
this.unfilterStore(store);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Start filtering all stores
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
doActivate() {
|
|
36
|
+
this.filterAll();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Stop filtering all stores
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
doDeactivate() {
|
|
43
|
+
this.unfilterAll();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Filter all stores
|
|
47
|
+
*/
|
|
48
|
+
filterAll() {
|
|
49
|
+
this.stores.forEach((store) => this.filterStore(store));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Unfilter all stores
|
|
53
|
+
*/
|
|
54
|
+
unfilterAll() {
|
|
55
|
+
this.stores.forEach((store) => this.unfilterStore(store));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Filter a store and add it to the filters map
|
|
59
|
+
*/
|
|
60
|
+
filterStore(store) {
|
|
61
|
+
if (this.filters.has(store)) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const filter = (record) => {
|
|
65
|
+
return record.state.selected === true;
|
|
66
|
+
};
|
|
67
|
+
this.filters.set(store, store.stateView.addFilter(filter));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Unfilter a store and delete it from the filters map
|
|
71
|
+
*/
|
|
72
|
+
unfilterStore(store) {
|
|
73
|
+
const filterId = this.filters.get(store);
|
|
74
|
+
if (filterId === undefined) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
store.stateView.removeFilter(filterId);
|
|
78
|
+
this.filters.delete(store);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXNlbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9zaGFyZWQvc3RyYXRlZ2llcy9maWx0ZXItc2VsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0NBQW1DLFNBQVEsbUJBQW1CO0lBQ3pFOztPQUVHO0lBQ0ssT0FBTyxHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXREOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxLQUFrQjtRQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsS0FBa0I7UUFDNUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sVUFBVTtRQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFlBQVk7UUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBNEIsRUFBRSxFQUFFO1lBQzlDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO1FBQ3hDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxLQUFrQjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5UmVjb3JkIH0gZnJvbSAnLi4vZW50aXR5LmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL3N0b3JlJztcclxuaW1wb3J0IHsgRW50aXR5U3RvcmVTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ3knO1xyXG5cclxuLyoqXHJcbiAqIFdoZW4gYWN0aXZlLCB0aGlzIHN0cmF0ZWd5IGZpbHRlcnMgYSBzdG9yZSdzIHN0YXRlVmlldyB0byByZXR1cm5cclxuICogc2VsZWN0ZWQgZW50aXRpZXMgb25seS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlTdG9yZUZpbHRlclNlbGVjdGlvblN0cmF0ZWd5IGV4dGVuZHMgRW50aXR5U3RvcmVTdHJhdGVneSB7XHJcbiAgLyoqXHJcbiAgICogU3RvcmUgLyBmaWx0ZXIgaWRzIG1hcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsdGVyczogTWFwPEVudGl0eVN0b3JlLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAvKipcclxuICAgKiBCaW5kIHRoaXMgc3RyYXRlZ3kgdG8gYSBzdG9yZSBhbmQgc3RhcnQgZmlsdGVyaW5nIGl0XHJcbiAgICogQHBhcmFtIHN0b3JlIEVudGl0eSBzdG9yZVxyXG4gICAqL1xyXG4gIGJpbmRTdG9yZShzdG9yZTogRW50aXR5U3RvcmUpIHtcclxuICAgIHN1cGVyLmJpbmRTdG9yZShzdG9yZSk7XHJcbiAgICBpZiAodGhpcy5hY3RpdmUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdG9yZShzdG9yZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbmJpbmQgdGhpcyBzdHJhdGVneSBmcm9tIGEgc3RvcmUgYW5kIHN0b3AgZmlsdGVyaW5nIGl0XHJcbiAgICogQHBhcmFtIHN0b3JlIEVudGl0eSBzdG9yZVxyXG4gICAqL1xyXG4gIHVuYmluZFN0b3JlKHN0b3JlOiBFbnRpdHlTdG9yZSkge1xyXG4gICAgc3VwZXIudW5iaW5kU3RvcmUoc3RvcmUpO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudW5maWx0ZXJTdG9yZShzdG9yZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBmaWx0ZXJpbmcgYWxsIHN0b3Jlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkb0FjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5maWx0ZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgZmlsdGVyaW5nIGFsbCBzdG9yZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG9EZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy51bmZpbHRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIGFsbCBzdG9yZXNcclxuICAgKi9cclxuICBwcml2YXRlIGZpbHRlckFsbCgpIHtcclxuICAgIHRoaXMuc3RvcmVzLmZvckVhY2goKHN0b3JlOiBFbnRpdHlTdG9yZSkgPT4gdGhpcy5maWx0ZXJTdG9yZShzdG9yZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5maWx0ZXIgYWxsIHN0b3Jlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdW5maWx0ZXJBbGwoKSB7XHJcbiAgICB0aGlzLnN0b3Jlcy5mb3JFYWNoKChzdG9yZTogRW50aXR5U3RvcmUpID0+IHRoaXMudW5maWx0ZXJTdG9yZShzdG9yZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIGEgc3RvcmUgYW5kIGFkZCBpdCB0byB0aGUgZmlsdGVycyBtYXBcclxuICAgKi9cclxuICBwcml2YXRlIGZpbHRlclN0b3JlKHN0b3JlOiBFbnRpdHlTdG9yZSkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVycy5oYXMoc3RvcmUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXIgPSAocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4ge1xyXG4gICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZmlsdGVycy5zZXQoc3RvcmUsIHN0b3JlLnN0YXRlVmlldy5hZGRGaWx0ZXIoZmlsdGVyKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbmZpbHRlciBhIHN0b3JlIGFuZCBkZWxldGUgaXQgZnJvbSB0aGUgZmlsdGVycyBtYXBcclxuICAgKi9cclxuICBwcml2YXRlIHVuZmlsdGVyU3RvcmUoc3RvcmU6IEVudGl0eVN0b3JlKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJJZCA9IHRoaXMuZmlsdGVycy5nZXQoc3RvcmUpO1xyXG4gICAgaWYgKGZpbHRlcklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlLnN0YXRlVmlldy5yZW1vdmVGaWx0ZXIoZmlsdGVySWQpO1xyXG4gICAgdGhpcy5maWx0ZXJzLmRlbGV0ZShzdG9yZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './strategy';
|
|
2
|
-
export * from './filter-custom-function';
|
|
3
|
-
export * from './filter-selection';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './strategy';
|
|
2
|
+
export * from './filter-custom-function';
|
|
3
|
+
export * from './filter-selection';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9lbnRpdHkvc2hhcmVkL3N0cmF0ZWdpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zdHJhdGVneSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbHRlci1jdXN0b20tZnVuY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXItc2VsZWN0aW9uJztcbiJdfQ==
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Entity store strategies. They can do pretty much anything during a store's
|
|
4
|
+
* lifetime. For example, they may act as triggers when something happens.
|
|
5
|
+
* Sharing a strategy is a good idea when multiple strategies would have
|
|
6
|
+
* on cancelling effect on each other.
|
|
7
|
+
*
|
|
8
|
+
* At creation, strategy is inactive and needs to be manually activated.
|
|
9
|
+
*/
|
|
10
|
+
export class EntityStoreStrategy {
|
|
11
|
+
options;
|
|
12
|
+
/**
|
|
13
|
+
* Feature store
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
stores = [];
|
|
17
|
+
/**
|
|
18
|
+
* Whether this strategy is active
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
get active() {
|
|
22
|
+
return this.active$.value;
|
|
23
|
+
}
|
|
24
|
+
active$ = new BehaviorSubject(false);
|
|
25
|
+
constructor(options = {}) {
|
|
26
|
+
this.options = options;
|
|
27
|
+
this.options = options;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Activate the strategy. If it's already active, it'll be deactivated
|
|
31
|
+
* and activated again.
|
|
32
|
+
*/
|
|
33
|
+
activate() {
|
|
34
|
+
if (this.active === true) {
|
|
35
|
+
this.doDeactivate();
|
|
36
|
+
}
|
|
37
|
+
this.active$.next(true);
|
|
38
|
+
this.doActivate();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Activate the strategy. If it's already active, it'll be deactivated
|
|
42
|
+
* and activated again.
|
|
43
|
+
*/
|
|
44
|
+
deactivate() {
|
|
45
|
+
this.active$.next(false);
|
|
46
|
+
this.doDeactivate();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Bind this strategy to a store
|
|
50
|
+
* @param store Feature store
|
|
51
|
+
*/
|
|
52
|
+
bindStore(store) {
|
|
53
|
+
if (this.stores.indexOf(store) < 0) {
|
|
54
|
+
this.stores.push(store);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Unbind this strategy from store
|
|
59
|
+
* @param store Feature store
|
|
60
|
+
*/
|
|
61
|
+
unbindStore(store) {
|
|
62
|
+
const index = this.stores.indexOf(store);
|
|
63
|
+
if (index >= 0) {
|
|
64
|
+
this.stores.splice(index, 1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Do the stataegy activation
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
doActivate() { }
|
|
72
|
+
/**
|
|
73
|
+
* Do the strategy deactivation
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
doDeactivate() { }
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9lbnRpdHkvc2hhcmVkL3N0cmF0ZWdpZXMvc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUt2Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQWdCUjtJQWZ0Qjs7O09BR0c7SUFDTyxNQUFNLEdBQWtCLEVBQUUsQ0FBQztJQUVyQzs7O09BR0c7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDUSxPQUFPLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhFLFlBQXNCLFVBQXNDLEVBQUU7UUFBeEMsWUFBTyxHQUFQLE9BQU8sQ0FBaUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLEtBQWtCO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxLQUFrQjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sVUFBVSxLQUFJLENBQUM7SUFFekI7OztPQUdHO0lBQ08sWUFBWSxLQUFJLENBQUM7Q0FDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEVudGl0eVN0b3JlU3RyYXRlZ3lPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL3N0b3JlJztcclxuXHJcbi8qKlxyXG4gKiBFbnRpdHkgc3RvcmUgc3RyYXRlZ2llcy4gVGhleSBjYW4gZG8gcHJldHR5IG11Y2ggYW55dGhpbmcgZHVyaW5nIGEgc3RvcmUnc1xyXG4gKiBsaWZldGltZS4gRm9yIGV4YW1wbGUsIHRoZXkgbWF5IGFjdCBhcyB0cmlnZ2VycyB3aGVuIHNvbWV0aGluZyBoYXBwZW5zLlxyXG4gKiBTaGFyaW5nIGEgc3RyYXRlZ3kgaXMgYSBnb29kIGlkZWEgd2hlbiBtdWx0aXBsZSBzdHJhdGVnaWVzIHdvdWxkIGhhdmVcclxuICogb24gY2FuY2VsbGluZyBlZmZlY3Qgb24gZWFjaCBvdGhlci5cclxuICpcclxuICogQXQgY3JlYXRpb24sIHN0cmF0ZWd5IGlzIGluYWN0aXZlIGFuZCBuZWVkcyB0byBiZSBtYW51YWxseSBhY3RpdmF0ZWQuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRW50aXR5U3RvcmVTdHJhdGVneSB7XHJcbiAgLyoqXHJcbiAgICogRmVhdHVyZSBzdG9yZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzdG9yZXM6IEVudGl0eVN0b3JlW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGlzIHN0cmF0ZWd5IGlzIGFjdGl2ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmUkLnZhbHVlO1xyXG4gIH1cclxuICByZWFkb25seSBhY3RpdmUkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG9wdGlvbnM6IEVudGl0eVN0b3JlU3RyYXRlZ3lPcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSB0aGUgc3RyYXRlZ3kuIElmIGl0J3MgYWxyZWFkeSBhY3RpdmUsIGl0J2xsIGJlIGRlYWN0aXZhdGVkXHJcbiAgICogYW5kIGFjdGl2YXRlZCBhZ2Fpbi5cclxuICAgKi9cclxuICBhY3RpdmF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmRvRGVhY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmUkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRvQWN0aXZhdGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2YXRlIHRoZSBzdHJhdGVneS4gSWYgaXQncyBhbHJlYWR5IGFjdGl2ZSwgaXQnbGwgYmUgZGVhY3RpdmF0ZWRcclxuICAgKiBhbmQgYWN0aXZhdGVkIGFnYWluLlxyXG4gICAqL1xyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZSQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLmRvRGVhY3RpdmF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmluZCB0aGlzIHN0cmF0ZWd5IHRvIGEgc3RvcmVcclxuICAgKiBAcGFyYW0gc3RvcmUgRmVhdHVyZSBzdG9yZVxyXG4gICAqL1xyXG4gIGJpbmRTdG9yZShzdG9yZTogRW50aXR5U3RvcmUpIHtcclxuICAgIGlmICh0aGlzLnN0b3Jlcy5pbmRleE9mKHN0b3JlKSA8IDApIHtcclxuICAgICAgdGhpcy5zdG9yZXMucHVzaChzdG9yZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbmJpbmQgdGhpcyBzdHJhdGVneSBmcm9tIHN0b3JlXHJcbiAgICogQHBhcmFtIHN0b3JlIEZlYXR1cmUgc3RvcmVcclxuICAgKi9cclxuICB1bmJpbmRTdG9yZShzdG9yZTogRW50aXR5U3RvcmUpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdG9yZXMuaW5kZXhPZihzdG9yZSk7XHJcbiAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICB0aGlzLnN0b3Jlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG8gdGhlIHN0YXRhZWd5IGFjdGl2YXRpb25cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG9BY3RpdmF0ZSgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvIHRoZSBzdHJhdGVneSBkZWFjdGl2YXRpb25cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG9EZWFjdGl2YXRlKCkge31cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, tap } from 'rxjs/operators';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { EntityStore } from './store';
|
|
5
|
+
import { EntityOperationType } from './entity.enums';
|
|
6
|
+
import { getEntityId } from './entity.utils';
|
|
7
|
+
/**
|
|
8
|
+
* This class holds a reference to the insert, update and delete
|
|
9
|
+
* operations performed on a store. This is useful to commit
|
|
10
|
+
* these operations in a single pass or to cancel them.
|
|
11
|
+
*/
|
|
12
|
+
export class EntityTransaction {
|
|
13
|
+
/**
|
|
14
|
+
* Store holding the operations on another store
|
|
15
|
+
*/
|
|
16
|
+
operations;
|
|
17
|
+
/**
|
|
18
|
+
* Method to get an entity's id
|
|
19
|
+
*/
|
|
20
|
+
getKey;
|
|
21
|
+
/**
|
|
22
|
+
* Whether there are pending operations
|
|
23
|
+
*/
|
|
24
|
+
get empty$() {
|
|
25
|
+
return this.operations.empty$;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Whether there are pending operations
|
|
29
|
+
*/
|
|
30
|
+
get empty() {
|
|
31
|
+
return this.empty$.value;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether thise store is in commit phase
|
|
35
|
+
*/
|
|
36
|
+
get inCommitPhase() {
|
|
37
|
+
return this.inCommitPhase$.value;
|
|
38
|
+
}
|
|
39
|
+
inCommitPhase$ = new BehaviorSubject(false);
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
this.getKey = options.getKey ? options.getKey : getEntityId;
|
|
42
|
+
this.operations = new EntityStore([], {
|
|
43
|
+
getKey: (operation) => operation.key
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
destroy() {
|
|
47
|
+
this.operations.destroy();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Insert an entity into a store. If no store is specified, an insert
|
|
51
|
+
* operation is still created but the transaction won't add the new
|
|
52
|
+
* entity to the store.
|
|
53
|
+
* @param current The entity to insert
|
|
54
|
+
* @param store Optional: The store to insert the entity into
|
|
55
|
+
* @param meta Optional: Any metadata on the operation
|
|
56
|
+
*/
|
|
57
|
+
insert(current, store, meta) {
|
|
58
|
+
const existingOperation = this.getOperationByEntity(current);
|
|
59
|
+
if (existingOperation !== undefined) {
|
|
60
|
+
this.removeOperation(existingOperation);
|
|
61
|
+
}
|
|
62
|
+
this.doInsert(current, store, meta);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Update an entity in a store. If no store is specified, an update
|
|
66
|
+
* operation is still created but the transaction won't update the
|
|
67
|
+
* entity into the store.
|
|
68
|
+
* @param previous The entity before update
|
|
69
|
+
* @param current The entity after update
|
|
70
|
+
* @param store Optional: The store to update the entity into
|
|
71
|
+
* @param meta Optional: Any metadata on the operation
|
|
72
|
+
*/
|
|
73
|
+
update(previous, current, store, meta) {
|
|
74
|
+
const existingOperation = this.getOperationByEntity(current);
|
|
75
|
+
if (existingOperation !== undefined) {
|
|
76
|
+
this.removeOperation(existingOperation);
|
|
77
|
+
if (existingOperation.type === EntityOperationType.Insert) {
|
|
78
|
+
this.doInsert(current, store, meta);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
else if (existingOperation.type === EntityOperationType.Update) {
|
|
82
|
+
previous = existingOperation.previous;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.doUpdate(previous, current, store, meta);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Delete an entity from a store. If no store is specified, a delete
|
|
89
|
+
* operation is still created but the transaction won't remove the
|
|
90
|
+
* entity from the store.
|
|
91
|
+
* @param previous The entity before delete
|
|
92
|
+
* @param store Optional: The store to delete the entity from
|
|
93
|
+
* @param meta Optional: Any metadata on the operation
|
|
94
|
+
*/
|
|
95
|
+
delete(previous, store, meta) {
|
|
96
|
+
const existingOperation = this.getOperationByEntity(previous);
|
|
97
|
+
if (existingOperation !== undefined) {
|
|
98
|
+
this.removeOperation(existingOperation);
|
|
99
|
+
if (existingOperation.type === EntityOperationType.Insert) {
|
|
100
|
+
if (store !== undefined) {
|
|
101
|
+
store.delete(previous);
|
|
102
|
+
}
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
this.doDelete(previous, store, meta);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Commit operations the transaction. This method doesn't do much
|
|
110
|
+
* in itself. The handler it receives does the hard work and it's
|
|
111
|
+
* implementation is left to the caller. This method simply wraps
|
|
112
|
+
* the handler into an error catching mechanism to update
|
|
113
|
+
* the transaction afterward. The caller needs to subscribe to this
|
|
114
|
+
* method's output (observable) for the commit to be performed.
|
|
115
|
+
* @param operations Operations to commit
|
|
116
|
+
* @param handler Function that handles the commit operation
|
|
117
|
+
* @returns The handler output (observable)
|
|
118
|
+
*/
|
|
119
|
+
commit(operations, handler) {
|
|
120
|
+
this.inCommitPhase$.next(true);
|
|
121
|
+
return handler(this, operations).pipe(catchError(() => of(new Error())), tap((result) => {
|
|
122
|
+
if (result instanceof Error) {
|
|
123
|
+
this.onCommitError(operations);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.onCommitSuccess(operations);
|
|
127
|
+
}
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Commit all the operations of the transaction.
|
|
132
|
+
* @param handler Function that handles the commit operation
|
|
133
|
+
* @returns The handler output (observable)
|
|
134
|
+
*/
|
|
135
|
+
commitAll(handler) {
|
|
136
|
+
const operations = this.getOperationsInCommit();
|
|
137
|
+
return this.commit(operations, handler);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Rollback this transaction
|
|
141
|
+
*/
|
|
142
|
+
rollback() {
|
|
143
|
+
this.rollbackOperations(this.operations.all());
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Rollback specific operations
|
|
147
|
+
*/
|
|
148
|
+
rollbackOperations(operations) {
|
|
149
|
+
this.checkInCommitPhase();
|
|
150
|
+
const operationsFactory = () => new Map([
|
|
151
|
+
[EntityOperationType.Delete, []],
|
|
152
|
+
[EntityOperationType.Update, []],
|
|
153
|
+
[EntityOperationType.Insert, []]
|
|
154
|
+
]);
|
|
155
|
+
const storesOperations = new Map();
|
|
156
|
+
// Group operations by store and by operation type.
|
|
157
|
+
// Grouping operations allows us to revert them in bacth, thus, triggering
|
|
158
|
+
// observables only one per operation type.
|
|
159
|
+
for (const operation of operations) {
|
|
160
|
+
const store = operation.store;
|
|
161
|
+
if (operation.store === undefined) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
let storeOperations = storesOperations.get(store);
|
|
165
|
+
if (storeOperations === undefined) {
|
|
166
|
+
storeOperations = operationsFactory();
|
|
167
|
+
storesOperations.set(store, storeOperations);
|
|
168
|
+
}
|
|
169
|
+
storeOperations.get(operation.type).push(operation);
|
|
170
|
+
}
|
|
171
|
+
Array.from(storesOperations.keys()).forEach((store) => {
|
|
172
|
+
const storeOperations = storesOperations.get(store);
|
|
173
|
+
const deletes = storeOperations.get(EntityOperationType.Delete);
|
|
174
|
+
store.insertMany(deletes.map((_delete) => _delete.previous));
|
|
175
|
+
const updates = storeOperations.get(EntityOperationType.Update);
|
|
176
|
+
store.updateMany(updates.map((_update) => _update.previous));
|
|
177
|
+
const inserts = storeOperations.get(EntityOperationType.Insert);
|
|
178
|
+
store.deleteMany(inserts.map((_insert) => _insert.current));
|
|
179
|
+
});
|
|
180
|
+
this.operations.deleteMany(operations);
|
|
181
|
+
this.inCommitPhase$.next(false);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Clear this transaction
|
|
185
|
+
* @todo Raise event and synchronize stores?
|
|
186
|
+
*/
|
|
187
|
+
clear() {
|
|
188
|
+
this.operations.clear();
|
|
189
|
+
this.inCommitPhase$.next(false);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get any existing operation on an entity
|
|
193
|
+
* @param entity Entity
|
|
194
|
+
* @returns Either an insert, update or delete operation
|
|
195
|
+
*/
|
|
196
|
+
getOperationByEntity(entity) {
|
|
197
|
+
return this.operations.get(this.getKey(entity));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Merge another transaction in this one
|
|
201
|
+
* @param transaction Another transaction
|
|
202
|
+
*/
|
|
203
|
+
mergeTransaction(transaction) {
|
|
204
|
+
this.checkInCommitPhase();
|
|
205
|
+
const operations = transaction.operations.all();
|
|
206
|
+
operations.forEach((operation) => {
|
|
207
|
+
this.addOperation(operation);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Create an insert operation and add an entity to the store
|
|
212
|
+
* @param current The entity to insert
|
|
213
|
+
* @param store Optional: The store to insert the entity into
|
|
214
|
+
* @param meta Optional: Any metadata on the operation
|
|
215
|
+
*/
|
|
216
|
+
doInsert(current, store, meta) {
|
|
217
|
+
this.addOperation({
|
|
218
|
+
key: this.getKey(current),
|
|
219
|
+
type: EntityOperationType.Insert,
|
|
220
|
+
previous: undefined,
|
|
221
|
+
current,
|
|
222
|
+
store,
|
|
223
|
+
meta
|
|
224
|
+
});
|
|
225
|
+
if (store !== undefined) {
|
|
226
|
+
store.insert(current);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Create an update operation and update an entity into the store
|
|
231
|
+
* @param previous The entity before update
|
|
232
|
+
* @param current The entity after update
|
|
233
|
+
* @param store Optional: The store to update the entity into
|
|
234
|
+
* @param meta Optional: Any metadata on the operation
|
|
235
|
+
*/
|
|
236
|
+
doUpdate(previous, current, store, meta) {
|
|
237
|
+
this.addOperation({
|
|
238
|
+
key: this.getKey(current),
|
|
239
|
+
type: EntityOperationType.Update,
|
|
240
|
+
previous,
|
|
241
|
+
current,
|
|
242
|
+
store,
|
|
243
|
+
meta
|
|
244
|
+
});
|
|
245
|
+
if (store !== undefined) {
|
|
246
|
+
store.update(current);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Create a delete operation and delete an entity from the store
|
|
251
|
+
* @param previous The entity before delete
|
|
252
|
+
* @param store Optional: The store to delete the entity from
|
|
253
|
+
* @param meta Optional: Any metadata on the operation
|
|
254
|
+
*/
|
|
255
|
+
doDelete(previous, store, meta) {
|
|
256
|
+
this.addOperation({
|
|
257
|
+
key: this.getKey(previous),
|
|
258
|
+
type: EntityOperationType.Delete,
|
|
259
|
+
previous,
|
|
260
|
+
current: undefined,
|
|
261
|
+
store,
|
|
262
|
+
meta
|
|
263
|
+
});
|
|
264
|
+
if (store !== undefined) {
|
|
265
|
+
store.delete(previous);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Remove committed operations from store
|
|
270
|
+
* @param operations Commited operations
|
|
271
|
+
* @todo Raise event and synchronize stores?
|
|
272
|
+
*/
|
|
273
|
+
resolveOperations(operations) {
|
|
274
|
+
this.operations.deleteMany(operations);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* On commit success, resolve commited operations and exit commit phase
|
|
278
|
+
* @param operations Commited operations
|
|
279
|
+
*/
|
|
280
|
+
onCommitSuccess(operations) {
|
|
281
|
+
this.resolveOperations(operations);
|
|
282
|
+
this.inCommitPhase$.next(false);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* On commit error, abort transaction
|
|
286
|
+
* @param operations Commited operations
|
|
287
|
+
*/
|
|
288
|
+
onCommitError(operations) {
|
|
289
|
+
this.inCommitPhase$.next(false);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Add an operation to the operations store
|
|
293
|
+
* @param operation Operation to add
|
|
294
|
+
*/
|
|
295
|
+
addOperation(operation) {
|
|
296
|
+
this.checkInCommitPhase();
|
|
297
|
+
this.operations.insert(operation);
|
|
298
|
+
this.operations.state.update(operation, { added: true });
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Remove an operation from the operations store
|
|
302
|
+
* @param operation Operation to remove
|
|
303
|
+
*/
|
|
304
|
+
removeOperation(operation) {
|
|
305
|
+
this.checkInCommitPhase();
|
|
306
|
+
this.operations.delete(operation);
|
|
307
|
+
this.operations.state.update(operation, { added: false });
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Get all the operations to commit
|
|
311
|
+
* @returns Operations to commit
|
|
312
|
+
*/
|
|
313
|
+
getOperationsInCommit() {
|
|
314
|
+
return this.operations.stateView
|
|
315
|
+
.manyBy((value) => {
|
|
316
|
+
return value.state.added === true;
|
|
317
|
+
})
|
|
318
|
+
.map((value) => value.entity);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Check if the transaction is in the commit phase and throw an error if it is
|
|
322
|
+
*/
|
|
323
|
+
checkInCommitPhase() {
|
|
324
|
+
if (this.inCommitPhase === true) {
|
|
325
|
+
throw new Error('This transaction is in the commit phase. Cannot complete this operation.');
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9lbnRpdHkvc2hhcmVkL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBZ0I3Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7T0FFRztJQUNNLFVBQVUsQ0FBcUQ7SUFFeEU7O09BRUc7SUFDTSxNQUFNLENBQW1CO0lBRWxDOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUNRLGNBQWMsR0FBNkIsSUFBSSxlQUFlLENBQ3JFLEtBQUssQ0FDTixDQUFDO0lBRUYsWUFBWSxVQUFvQyxFQUFFO1FBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENB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QUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxZQUFZLENBQUMsU0FBMEI7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlLENBQUMsU0FBMEI7UUFDaEQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVM7YUFDN0IsTUFBTSxDQUNMLENBQUMsS0FBK0QsRUFBRSxFQUFFO1lBQ2xFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO1FBQ3BDLENBQUMsQ0FDRjthQUNBLEdBQUcsQ0FDRixDQUFDLEtBQStELEVBQUUsRUFBRSxDQUNsRSxLQUFLLENBQUMsTUFBTSxDQUNmLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUNiLDBFQUEwRSxDQUMzRSxDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eVRyYW5zYWN0aW9uT3B0aW9ucyxcclxuICBFbnRpdHlPcGVyYXRpb25TdGF0ZVxyXG59IGZyb20gJy4vZW50aXR5LmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4vc3RvcmUnO1xyXG5pbXBvcnQgeyBFbnRpdHlPcGVyYXRpb25UeXBlIH0gZnJvbSAnLi9lbnRpdHkuZW51bXMnO1xyXG5pbXBvcnQgeyBnZXRFbnRpdHlJZCB9IGZyb20gJy4vZW50aXR5LnV0aWxzJztcclxuXHJcbmludGVyZmFjZSBFbnRpdHlPcGVyYXRpb248RSBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ge1xyXG4gIGtleTogRW50aXR5S2V5O1xyXG4gIHR5cGU6IEVudGl0eU9wZXJhdGlvblR5cGU7XHJcbiAgcHJldmlvdXM6IEUgfCB1bmRlZmluZWQ7XHJcbiAgY3VycmVudDogRSB8IHVuZGVmaW5lZDtcclxuICBzdG9yZT86IEVudGl0eVN0b3JlPEU+O1xyXG4gIG1ldGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFbnRpdHlUcmFuc2FjdGlvbkNvbW1pdEhhbmRsZXIgPSAoXHJcbiAgdHJhbnNhY3Rpb246IEVudGl0eVRyYW5zYWN0aW9uLFxyXG4gIG9wZXJhdGlvbnM6IEVudGl0eU9wZXJhdGlvbltdXHJcbikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGVcclxuICogb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYSBzdG9yZS4gVGhpcyBpcyB1c2VmdWwgdG8gY29tbWl0XHJcbiAqIHRoZXNlIG9wZXJhdGlvbnMgaW4gYSBzaW5nbGUgcGFzcyBvciB0byBjYW5jZWwgdGhlbS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlUcmFuc2FjdGlvbiB7XHJcbiAgLyoqXHJcbiAgICogU3RvcmUgaG9sZGluZyB0aGUgb3BlcmF0aW9ucyBvbiBhbm90aGVyIHN0b3JlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgb3BlcmF0aW9uczogRW50aXR5U3RvcmU8RW50aXR5T3BlcmF0aW9uLCBFbnRpdHlPcGVyYXRpb25TdGF0ZT47XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCB0byBnZXQgYW4gZW50aXR5J3MgaWRcclxuICAgKi9cclxuICByZWFkb25seSBnZXRLZXk6IChFKSA9PiBFbnRpdHlLZXk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlcmUgYXJlIHBlbmRpbmcgb3BlcmF0aW9uc1xyXG4gICAqL1xyXG4gIGdldCBlbXB0eSQoKTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnMuZW1wdHkkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGVyZSBhcmUgcGVuZGluZyBvcGVyYXRpb25zXHJcbiAgICovXHJcbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZW1wdHkkLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGlzZSBzdG9yZSBpcyBpbiBjb21taXQgcGhhc2VcclxuICAgKi9cclxuICBnZXQgaW5Db21taXRQaGFzZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmluQ29tbWl0UGhhc2UkLnZhbHVlO1xyXG4gIH1cclxuICByZWFkb25seSBpbkNvbW1pdFBoYXNlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIGZhbHNlXHJcbiAgKTtcclxuXHJcbiAgY29uc3RydWN0b3Iob3B0aW9uczogRW50aXR5VHJhbnNhY3Rpb25PcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMuZ2V0S2V5ID0gb3B0aW9ucy5nZXRLZXkgPyBvcHRpb25zLmdldEtleSA6IGdldEVudGl0eUlkO1xyXG4gICAgdGhpcy5vcGVyYXRpb25zID0gbmV3IEVudGl0eVN0b3JlPEVudGl0eU9wZXJhdGlvbiwgRW50aXR5T3BlcmF0aW9uU3RhdGU+KFxyXG4gICAgICBbXSxcclxuICAgICAge1xyXG4gICAgICAgIGdldEtleTogKG9wZXJhdGlvbjogRW50aXR5T3BlcmF0aW9uKSA9PiBvcGVyYXRpb24ua2V5XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95KCkge1xyXG4gICAgdGhpcy5vcGVyYXRpb25zLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VydCBhbiBlbnRpdHkgaW50byBhIHN0b3JlLiBJZiBubyBzdG9yZSBpcyBzcGVjaWZpZWQsIGFuIGluc2VydFxyXG4gICAqIG9wZXJhdGlvbiBpcyBzdGlsbCBjcmVhdGVkIGJ1dCB0aGUgdHJhbnNhY3Rpb24gd29uJ3QgYWRkIHRoZSBuZXdcclxuICAgKiBlbnRpdHkgdG8gdGhlIHN0b3JlLlxyXG4gICAqIEBwYXJhbSBjdXJyZW50IFRoZSBlbnRpdHkgdG8gaW5zZXJ0XHJcbiAgICogQHBhcmFtIHN0b3JlIE9wdGlvbmFsOiBUaGUgc3RvcmUgdG8gaW5zZXJ0IHRoZSBlbnRpdHkgaW50b1xyXG4gICAqIEBwYXJhbSBtZXRhIE9wdGlvbmFsOiBBbnkgbWV0YWRhdGEgb24gdGhlIG9wZXJhdGlvblxyXG4gICAqL1xyXG4gIGluc2VydChcclxuICAgIGN1cnJlbnQ6IG9iamVjdCxcclxuICAgIHN0b3JlPzogRW50aXR5U3RvcmU8b2JqZWN0PixcclxuICAgIG1ldGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgKSB7XHJcbiAgICBjb25zdCBleGlzdGluZ09wZXJhdGlvbiA9IHRoaXMuZ2V0T3BlcmF0aW9uQnlFbnRpdHkoY3VycmVudCk7XHJcbiAgICBpZiAoZXhpc3RpbmdPcGVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlbW92ZU9wZXJhdGlvbihleGlzdGluZ09wZXJhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kb0luc2VydChjdXJyZW50LCBzdG9yZSwgbWV0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYW4gZW50aXR5IGluIGEgc3RvcmUuIElmIG5vIHN0b3JlIGlzIHNwZWNpZmllZCwgYW4gdXBkYXRlXHJcbiAgICogb3BlcmF0aW9uIGlzIHN0aWxsIGNyZWF0ZWQgYnV0IHRoZSB0cmFuc2FjdGlvbiB3b24ndCB1cGRhdGUgdGhlXHJcbiAgICogZW50aXR5IGludG8gdGhlIHN0b3JlLlxyXG4gICAqIEBwYXJhbSBwcmV2aW91cyBUaGUgZW50aXR5IGJlZm9yZSB1cGRhdGVcclxuICAgKiBAcGFyYW0gY3VycmVudCBUaGUgZW50aXR5IGFmdGVyIHVwZGF0ZVxyXG4gICAqIEBwYXJhbSBzdG9yZSBPcHRpb25hbDogVGhlIHN0b3JlIHRvIHVwZGF0ZSB0aGUgZW50aXR5IGludG9cclxuICAgKiBAcGFyYW0gbWV0YSBPcHRpb25hbDogQW55IG1ldGFkYXRhIG9uIHRoZSBvcGVyYXRpb25cclxuICAgKi9cclxuICB1cGRhdGUoXHJcbiAgICBwcmV2aW91czogb2JqZWN0LFxyXG4gICAgY3VycmVudDogb2JqZWN0LFxyXG4gICAgc3RvcmU/OiBFbnRpdHlTdG9yZTxvYmplY3Q+LFxyXG4gICAgbWV0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICApIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nT3BlcmF0aW9uID0gdGhpcy5nZXRPcGVyYXRpb25CeUVudGl0eShjdXJyZW50KTtcclxuICAgIGlmIChleGlzdGluZ09wZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlT3BlcmF0aW9uKGV4aXN0aW5nT3BlcmF0aW9uKTtcclxuICAgICAgaWYgKGV4aXN0aW5nT3BlcmF0aW9uLnR5cGUgPT09IEVudGl0eU9wZXJhdGlvblR5cGUuSW5zZXJ0KSB7XHJcbiAgICAgICAgdGhpcy5kb0luc2VydChjdXJyZW50LCBzdG9yZSwgbWV0YSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKGV4aXN0aW5nT3BlcmF0aW9uLnR5cGUgPT09IEVudGl0eU9wZXJhdGlvblR5cGUuVXBkYXRlKSB7XHJcbiAgICAgICAgcHJldmlvdXMgPSBleGlzdGluZ09wZXJhdGlvbi5wcmV2aW91cztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG9VcGRhdGUocHJldmlvdXMsIGN1cnJlbnQsIHN0b3JlLCBtZXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBhbiBlbnRpdHkgZnJvbSBhIHN0b3JlLiBJZiBubyBzdG9yZSBpcyBzcGVjaWZpZWQsIGEgZGVsZXRlXHJcbiAgICogb3BlcmF0aW9uIGlzIHN0aWxsIGNyZWF0ZWQgYnV0IHRoZSB0cmFuc2FjdGlvbiB3b24ndCByZW1vdmUgdGhlXHJcbiAgICogZW50aXR5IGZyb20gdGhlIHN0b3JlLlxyXG4gICAqIEBwYXJhbSBwcmV2aW91cyBUaGUgZW50aXR5IGJlZm9yZSBkZWxldGVcclxuICAgKiBAcGFyYW0gc3RvcmUgT3B0aW9uYWw6IFRoZSBzdG9yZSB0byBkZWxldGUgdGhlIGVudGl0eSBmcm9tXHJcbiAgICogQHBhcmFtIG1ldGEgT3B0aW9uYWw6IEFueSBtZXRhZGF0YSBvbiB0aGUgb3BlcmF0aW9uXHJcbiAgICovXHJcbiAgZGVsZXRlKFxyXG4gICAgcHJldmlvdXM6IG9iamVjdCxcclxuICAgIHN0b3JlPzogRW50aXR5U3RvcmU8b2JqZWN0PixcclxuICAgIG1ldGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgKSB7XHJcbiAgICBjb25zdCBleGlzdGluZ09wZXJhdGlvbiA9IHRoaXMuZ2V0T3BlcmF0aW9uQnlFbnRpdHkocHJldmlvdXMpO1xyXG4gICAgaWYgKGV4aXN0aW5nT3BlcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yZW1vdmVPcGVyYXRpb24oZXhpc3RpbmdPcGVyYXRpb24pO1xyXG4gICAgICBpZiAoZXhpc3RpbmdPcGVyYXRpb24udHlwZSA9PT0gRW50aXR5T3BlcmF0aW9uVHlwZS5JbnNlcnQpIHtcclxuICAgICAgICBpZiAoc3RvcmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgc3RvcmUuZGVsZXRlKHByZXZpb3VzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kb0RlbGV0ZShwcmV2aW91cywgc3RvcmUsIG1ldGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tbWl0IG9wZXJhdGlvbnMgdGhlIHRyYW5zYWN0aW9uLiBUaGlzIG1ldGhvZCBkb2Vzbid0IGRvIG11Y2hcclxuICAgKiBpbiBpdHNlbGYuIFRoZSBoYW5kbGVyIGl0IHJlY2VpdmVzIGRvZXMgdGhlIGhhcmQgd29yayBhbmQgaXQnc1xyXG4gICAqIGltcGxlbWVudGF0aW9uIGlzIGxlZnQgdG8gdGhlIGNhbGxlci4gVGhpcyBtZXRob2Qgc2ltcGx5IHdyYXBzXHJcbiAgICogdGhlIGhhbmRsZXIgaW50byBhbiBlcnJvciBjYXRjaGluZyBtZWNoYW5pc20gdG8gdXBkYXRlXHJcbiAgICogdGhlIHRyYW5zYWN0aW9uIGFmdGVyd2FyZC4gVGhlIGNhbGxlciBuZWVkcyB0byBzdWJzY3JpYmUgdG8gdGhpc1xyXG4gICAqIG1ldGhvZCdzIG91dHB1dCAob2JzZXJ2YWJsZSkgZm9yIHRoZSBjb21taXQgdG8gYmUgcGVyZm9ybWVkLlxyXG4gICAqIEBwYXJhbSBvcGVyYXRpb25zIE9wZXJhdGlvbnMgdG8gY29tbWl0XHJcbiAgICogQHBhcmFtIGhhbmRsZXIgRnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBjb21taXQgb3BlcmF0aW9uXHJcbiAgICogQHJldHVybnMgVGhlIGhhbmRsZXIgb3V0cHV0IChvYnNlcnZhYmxlKVxyXG4gICAqL1xyXG4gIGNvbW1pdChcclxuICAgIG9wZXJhdGlvbnM6IEVudGl0eU9wZXJhdGlvbltdLFxyXG4gICAgaGFuZGxlcjogRW50aXR5VHJhbnNhY3Rpb25Db21taXRIYW5kbGVyXHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuaW5Db21taXRQaGFzZSQubmV4dCh0cnVlKTtcclxuXHJcbiAgICByZXR1cm4gaGFuZGxlcih0aGlzLCBvcGVyYXRpb25zKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG5ldyBFcnJvcigpKSksXHJcbiAgICAgIHRhcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgIHRoaXMub25Db21taXRFcnJvcihvcGVyYXRpb25zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbkNvbW1pdFN1Y2Nlc3Mob3BlcmF0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbW1pdCBhbGwgdGhlIG9wZXJhdGlvbnMgb2YgdGhlIHRyYW5zYWN0aW9uLlxyXG4gICAqIEBwYXJhbSBoYW5kbGVyIEZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgY29tbWl0IG9wZXJhdGlvblxyXG4gICAqIEByZXR1cm5zIFRoZSBoYW5kbGVyIG91dHB1dCAob2JzZXJ2YWJsZSlcclxuICAgKi9cclxuICBjb21taXRBbGwoaGFuZGxlcjogRW50aXR5VHJhbnNhY3Rpb25Db21taXRIYW5kbGVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSB0aGlzLmdldE9wZXJhdGlvbnNJbkNvbW1pdCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuY29tbWl0KG9wZXJhdGlvbnMsIGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUm9sbGJhY2sgdGhpcyB0cmFuc2FjdGlvblxyXG4gICAqL1xyXG4gIHJvbGxiYWNrKCkge1xyXG4gICAgdGhpcy5yb2xsYmFja09wZXJhdGlvbnModGhpcy5vcGVyYXRpb25zLmFsbCgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJvbGxiYWNrIHNwZWNpZmljIG9wZXJhdGlvbnNcclxuICAgKi9cclxuICByb2xsYmFja09wZXJhdGlvbnMob3BlcmF0aW9uczogRW50aXR5T3BlcmF0aW9uW10pIHtcclxuICAgIHRoaXMuY2hlY2tJbkNvbW1pdFBoYXNlKCk7XHJcblxyXG4gICAgY29uc3Qgb3BlcmF0aW9uc0ZhY3RvcnkgPSAoKSA9PlxyXG4gICAgICBuZXcgTWFwKFtcclxuICAgICAgICBbRW50aXR5T3BlcmF0aW9uVHlwZS5EZWxldGUsIFtdXSxcclxuICAgICAgICBbRW50aXR5T3BlcmF0aW9uVHlwZS5VcGRhdGUsIFtdXSxcclxuICAgICAgICBbRW50aXR5T3BlcmF0aW9uVHlwZS5JbnNlcnQsIFtdXVxyXG4gICAgICBdKTtcclxuICAgIGNvbnN0IHN0b3Jlc09wZXJhdGlvbnMgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgLy8gR3JvdXAgb3BlcmF0aW9ucyBieSBzdG9yZSBhbmQgYnkgb3BlcmF0aW9uIHR5cGUuXHJcbiAgICAvLyBHcm91cGluZyBvcGVyYXRpb25zIGFsbG93cyB1cyB0byByZXZlcnQgdGhlbSBpbiBiYWN0aCwgdGh1cywgdHJpZ2dlcmluZ1xyXG4gICAgLy8gb2JzZXJ2YWJsZXMgb25seSBvbmUgcGVyIG9wZXJhdGlvbiB0eXBlLlxyXG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xyXG4gICAgICBjb25zdCBzdG9yZSA9IG9wZXJhdGlvbi5zdG9yZTtcclxuICAgICAgaWYgKG9wZXJhdGlvbi5zdG9yZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBzdG9yZU9wZXJhdGlvbnMgPSBzdG9yZXNPcGVyYXRpb25zLmdldChzdG9yZSk7XHJcbiAgICAgIGlmIChzdG9yZU9wZXJhdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN0b3JlT3BlcmF0aW9ucyA9IG9wZXJhdGlvbnNGYWN0b3J5KCk7XHJcbiAgICAgICAgc3RvcmVzT3BlcmF0aW9ucy5zZXQoc3RvcmUsIHN0b3JlT3BlcmF0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgc3RvcmVPcGVyYXRpb25zLmdldChvcGVyYXRpb24udHlwZSkucHVzaChvcGVyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIEFycmF5LmZyb20oc3RvcmVzT3BlcmF0aW9ucy5rZXlzKCkpLmZvckVhY2goXHJcbiAgICAgIChzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0b3JlT3BlcmF0aW9ucyA9IHN0b3Jlc09wZXJhdGlvbnMuZ2V0KHN0b3JlKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlcyA9IHN0b3JlT3BlcmF0aW9ucy5nZXQoRW50aXR5T3BlcmF0aW9uVHlwZS5EZWxldGUpO1xyXG4gICAgICAgIHN0b3JlLmluc2VydE1hbnkoXHJcbiAgICAgICAgICBkZWxldGVzLm1hcCgoX2RlbGV0ZTogRW50aXR5T3BlcmF0aW9uKSA9PiBfZGVsZXRlLnByZXZpb3VzKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZXMgPSBzdG9yZU9wZXJhdGlvbnMuZ2V0KEVudGl0eU9wZXJhdGlvblR5cGUuVXBkYXRlKTtcclxuICAgICAgICBzdG9yZS51cGRhdGVNYW55KFxyXG4gICAgICAgICAgdXBkYXRlcy5tYXAoKF91cGRhdGU6IEVudGl0eU9wZXJhdGlvbikgPT4gX3VwZGF0ZS5wcmV2aW91cylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBpbnNlcnRzID0gc3RvcmVPcGVyYXRpb25zLmdldChFbnRpdHlPcGVyYXRpb25UeXBlLkluc2VydCk7XHJcbiAgICAgICAgc3RvcmUuZGVsZXRlTWFueShcclxuICAgICAgICAgIGluc2VydHMubWFwKChfaW5zZXJ0OiBFbnRpdHlPcGVyYXRpb24pID0+IF9pbnNlcnQuY3VycmVudClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMub3BlcmF0aW9ucy5kZWxldGVNYW55KG9wZXJhdGlvbnMpO1xyXG4gICAgdGhpcy5pbkNvbW1pdFBoYXNlJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoaXMgdHJhbnNhY3Rpb25cclxuICAgKiBAdG9kbyBSYWlzZSBldmVudCBhbmQgc3luY2hyb25pemUgc3RvcmVzP1xyXG4gICAqL1xyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5vcGVyYXRpb25zLmNsZWFyKCk7XHJcbiAgICB0aGlzLmluQ29tbWl0UGhhc2UkLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFueSBleGlzdGluZyBvcGVyYXRpb24gb24gYW4gZW50aXR5XHJcbiAgICogQHBhcmFtIGVudGl0eSBFbnRpdHlcclxuICAgKiBAcmV0dXJucyBFaXRoZXIgYW4gaW5zZXJ0LCB1cGRhdGUgb3IgZGVsZXRlIG9wZXJhdGlvblxyXG4gICAqL1xyXG4gIGdldE9wZXJhdGlvbkJ5RW50aXR5KGVudGl0eTogb2JqZWN0KTogRW50aXR5T3BlcmF0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnMuZ2V0KHRoaXMuZ2V0S2V5KGVudGl0eSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWVyZ2UgYW5vdGhlciB0cmFuc2FjdGlvbiBpbiB0aGlzIG9uZVxyXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiBBbm90aGVyIHRyYW5zYWN0aW9uXHJcbiAgICovXHJcbiAgbWVyZ2VUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogRW50aXR5VHJhbnNhY3Rpb24pIHtcclxuICAgIHRoaXMuY2hlY2tJbkNvbW1pdFBoYXNlKCk7XHJcblxyXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHRyYW5zYWN0aW9uLm9wZXJhdGlvbnMuYWxsKCk7XHJcbiAgICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbjogRW50aXR5T3BlcmF0aW9uKSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBpbnNlcnQgb3BlcmF0aW9uIGFuZCBhZGQgYW4gZW50aXR5IHRvIHRoZSBzdG9yZVxyXG4gICAqIEBwYXJhbSBjdXJyZW50IFRoZSBlbnRpdHkgdG8gaW5zZXJ0XHJcbiAgICogQHBhcmFtIHN0b3JlIE9wdGlvbmFsOiBUaGUgc3RvcmUgdG8gaW5zZXJ0IHRoZSBlbnRpdHkgaW50b1xyXG4gICAqIEBwYXJhbSBtZXRhIE9wdGlvbmFsOiBBbnkgbWV0YWRhdGEgb24gdGhlIG9wZXJhdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZG9JbnNlcnQoXHJcbiAgICBjdXJyZW50OiBvYmplY3QsXHJcbiAgICBzdG9yZT86IEVudGl0eVN0b3JlPG9iamVjdD4sXHJcbiAgICBtZXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gICkge1xyXG4gICAgdGhpcy5hZGRPcGVyYXRpb24oe1xyXG4gICAgICBrZXk6IHRoaXMuZ2V0S2V5KGN1cnJlbnQpLFxyXG4gICAgICB0eXBlOiBFbnRpdHlPcGVyYXRpb25UeXBlLkluc2VydCxcclxuICAgICAgcHJldmlvdXM6IHVuZGVmaW5lZCxcclxuICAgICAgY3VycmVudCxcclxuICAgICAgc3RvcmUsXHJcbiAgICAgIG1ldGFcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzdG9yZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN0b3JlLmluc2VydChjdXJyZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiB1cGRhdGUgb3BlcmF0aW9uIGFuZCB1cGRhdGUgYW4gZW50aXR5IGludG8gdGhlIHN0b3JlXHJcbiAgICogQHBhcmFtIHByZXZpb3VzIFRoZSBlbnRpdHkgYmVmb3JlIHVwZGF0ZVxyXG4gICAqIEBwYXJhbSBjdXJyZW50IFRoZSBlbnRpdHkgYWZ0ZXIgdXBkYXRlXHJcbiAgICogQHBhcmFtIHN0b3JlIE9wdGlvbmFsOiBUaGUgc3RvcmUgdG8gdXBkYXRlIHRoZSBlbnRpdHkgaW50b1xyXG4gICAqIEBwYXJhbSBtZXRhIE9wdGlvbmFsOiBBbnkgbWV0YWRhdGEgb24gdGhlIG9wZXJhdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZG9VcGRhdGUoXHJcbiAgICBwcmV2aW91czogb2JqZWN0LFxyXG4gICAgY3VycmVudDogb2JqZWN0LFxyXG4gICAgc3RvcmU/OiBFbnRpdHlTdG9yZTxvYmplY3Q+LFxyXG4gICAgbWV0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICApIHtcclxuICAgIHRoaXMuYWRkT3BlcmF0aW9uKHtcclxuICAgICAga2V5OiB0aGlzLmdldEtleShjdXJyZW50KSxcclxuICAgICAgdHlwZTogRW50aXR5T3BlcmF0aW9uVHlwZS5VcGRhdGUsXHJcbiAgICAgIHByZXZpb3VzLFxyXG4gICAgICBjdXJyZW50LFxyXG4gICAgICBzdG9yZSxcclxuICAgICAgbWV0YVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHN0b3JlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgc3RvcmUudXBkYXRlKGN1cnJlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgZGVsZXRlIG9wZXJhdGlvbiBhbmQgZGVsZXRlIGFuIGVudGl0eSBmcm9tIHRoZSBzdG9yZVxyXG4gICAqIEBwYXJhbSBwcmV2aW91cyBUaGUgZW50aXR5IGJlZm9yZSBkZWxldGVcclxuICAgKiBAcGFyYW0gc3RvcmUgT3B0aW9uYWw6IFRoZSBzdG9yZSB0byBkZWxldGUgdGhlIGVudGl0eSBmcm9tXHJcbiAgICogQHBhcmFtIG1ldGEgT3B0aW9uYWw6IEFueSBtZXRhZGF0YSBvbiB0aGUgb3BlcmF0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkb0RlbGV0ZShcclxuICAgIHByZXZpb3VzOiBvYmplY3QsXHJcbiAgICBzdG9yZT86IEVudGl0eVN0b3JlPG9iamVjdD4sXHJcbiAgICBtZXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gICkge1xyXG4gICAgdGhpcy5hZGRPcGVyYXRpb24oe1xyXG4gICAgICBrZXk6IHRoaXMuZ2V0S2V5KHByZXZpb3VzKSxcclxuICAgICAgdHlwZTogRW50aXR5T3BlcmF0aW9uVHlwZS5EZWxldGUsXHJcbiAgICAgIHByZXZpb3VzLFxyXG4gICAgICBjdXJyZW50OiB1bmRlZmluZWQsXHJcbiAgICAgIHN0b3JlLFxyXG4gICAgICBtZXRhXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc3RvcmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzdG9yZS5kZWxldGUocHJldmlvdXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGNvbW1pdHRlZCBvcGVyYXRpb25zIGZyb20gc3RvcmVcclxuICAgKiBAcGFyYW0gb3BlcmF0aW9ucyBDb21taXRlZCBvcGVyYXRpb25zXHJcbiAgICogQHRvZG8gUmFpc2UgZXZlbnQgYW5kIHN5bmNocm9uaXplIHN0b3Jlcz9cclxuICAgKi9cclxuICBwcml2YXRlIHJlc29sdmVPcGVyYXRpb25zKG9wZXJhdGlvbnM6IEVudGl0eU9wZXJhdGlvbltdKSB7XHJcbiAgICB0aGlzLm9wZXJhdGlvbnMuZGVsZXRlTWFueShvcGVyYXRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGNvbW1pdCBzdWNjZXNzLCByZXNvbHZlIGNvbW1pdGVkIG9wZXJhdGlvbnMgYW5kIGV4aXQgY29tbWl0IHBoYXNlXHJcbiAgICogQHBhcmFtIG9wZXJhdGlvbnMgQ29tbWl0ZWQgb3BlcmF0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgb25Db21taXRTdWNjZXNzKG9wZXJhdGlvbnM6IEVudGl0eU9wZXJhdGlvbltdKSB7XHJcbiAgICB0aGlzLnJlc29sdmVPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgdGhpcy5pbkNvbW1pdFBoYXNlJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGNvbW1pdCBlcnJvciwgYWJvcnQgdHJhbnNhY3Rpb25cclxuICAgKiBAcGFyYW0gb3BlcmF0aW9ucyBDb21taXRlZCBvcGVyYXRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkNvbW1pdEVycm9yKG9wZXJhdGlvbnM6IEVudGl0eU9wZXJhdGlvbltdKSB7XHJcbiAgICB0aGlzLmluQ29tbWl0UGhhc2UkLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGFuIG9wZXJhdGlvbiB0byB0aGUgb3BlcmF0aW9ucyBzdG9yZVxyXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gT3BlcmF0aW9uIHRvIGFkZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkT3BlcmF0aW9uKG9wZXJhdGlvbjogRW50aXR5T3BlcmF0aW9uKSB7XHJcbiAgICB0aGlzLmNoZWNrSW5Db21taXRQaGFzZSgpO1xyXG5cclxuICAgIHRoaXMub3BlcmF0aW9ucy5pbnNlcnQob3BlcmF0aW9uKTtcclxuICAgIHRoaXMub3BlcmF0aW9ucy5zdGF0ZS51cGRhdGUob3BlcmF0aW9uLCB7IGFkZGVkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFuIG9wZXJhdGlvbiBmcm9tIHRoZSBvcGVyYXRpb25zIHN0b3JlXHJcbiAgICogQHBhcmFtIG9wZXJhdGlvbiBPcGVyYXRpb24gdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmVPcGVyYXRpb24ob3BlcmF0aW9uOiBFbnRpdHlPcGVyYXRpb24pIHtcclxuICAgIHRoaXMuY2hlY2tJbkNvbW1pdFBoYXNlKCk7XHJcblxyXG4gICAgdGhpcy5vcGVyYXRpb25zLmRlbGV0ZShvcGVyYXRpb24pO1xyXG4gICAgdGhpcy5vcGVyYXRpb25zLnN0YXRlLnVwZGF0ZShvcGVyYXRpb24sIHsgYWRkZWQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCB0aGUgb3BlcmF0aW9ucyB0byBjb21taXRcclxuICAgKiBAcmV0dXJucyBPcGVyYXRpb25zIHRvIGNvbW1pdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0T3BlcmF0aW9uc0luQ29tbWl0KCk6IEVudGl0eU9wZXJhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnMuc3RhdGVWaWV3XHJcbiAgICAgIC5tYW55QnkoXHJcbiAgICAgICAgKHZhbHVlOiB7IGVudGl0eTogRW50aXR5T3BlcmF0aW9uOyBzdGF0ZTogRW50aXR5T3BlcmF0aW9uU3RhdGUgfSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnN0YXRlLmFkZGVkID09PSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAubWFwKFxyXG4gICAgICAgICh2YWx1ZTogeyBlbnRpdHk6IEVudGl0eU9wZXJhdGlvbjsgc3RhdGU6IEVudGl0eU9wZXJhdGlvblN0YXRlIH0pID0+XHJcbiAgICAgICAgICB2YWx1ZS5lbnRpdHlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBpbiB0aGUgY29tbWl0IHBoYXNlIGFuZCB0aHJvdyBhbiBlcnJvciBpZiBpdCBpc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tJbkNvbW1pdFBoYXNlKCkge1xyXG4gICAgaWYgKHRoaXMuaW5Db21taXRQaGFzZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ1RoaXMgdHJhbnNhY3Rpb24gaXMgaW4gdGhlIGNvbW1pdCBwaGFzZS4gQ2Fubm90IGNvbXBsZXRlIHRoaXMgb3BlcmF0aW9uLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|