@igo2/common 1.8.1 → 1.9.3
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/bundles/igo2-common.umd.js +10700 -10473
- package/bundles/igo2-common.umd.js.map +1 -1
- package/esm2015/igo2-common.js +5 -5
- package/esm2015/lib/action/action.module.js +29 -28
- package/esm2015/lib/action/actionbar/actionbar-item.component.js +257 -257
- package/esm2015/lib/action/actionbar/actionbar.component.js +385 -387
- package/esm2015/lib/action/actionbar/actionbar.module.js +59 -58
- package/esm2015/lib/action/index.js +3 -3
- package/esm2015/lib/action/shared/action.enums.js +7 -7
- package/esm2015/lib/action/shared/action.interfaces.js +2 -1
- package/esm2015/lib/action/shared/index.js +4 -4
- package/esm2015/lib/action/shared/store.js +8 -8
- package/esm2015/lib/backdrop/backdrop.component.js +30 -30
- package/esm2015/lib/backdrop/backdrop.module.js +25 -24
- package/esm2015/lib/backdrop/index.js +2 -2
- package/esm2015/lib/badge-icon/badge-icon.directive.js +125 -121
- package/esm2015/lib/badge-icon/badge-icon.module.js +26 -25
- package/esm2015/lib/badge-icon/index.js +2 -2
- package/esm2015/lib/clickout/clickout.directive.js +32 -32
- package/esm2015/lib/clickout/clickout.module.js +24 -23
- package/esm2015/lib/clickout/index.js +2 -2
- package/esm2015/lib/clone/clone.module.js +24 -23
- package/esm2015/lib/clone/clone.pipe.js +24 -24
- package/esm2015/lib/clone/index.js +2 -2
- package/esm2015/lib/collapsible/collapse.directive.js +55 -55
- package/esm2015/lib/collapsible/collapsible.component.js +63 -63
- package/esm2015/lib/collapsible/collapsible.module.js +27 -26
- package/esm2015/lib/collapsible/index.js +3 -3
- package/esm2015/lib/confirm-dialog/confirm-dialog.component.js +50 -51
- package/esm2015/lib/confirm-dialog/confirm-dialog.module.js +29 -28
- package/esm2015/lib/confirm-dialog/confirm-dialog.service.js +22 -23
- package/esm2015/lib/confirm-dialog/index.js +3 -3
- package/esm2015/lib/context-menu/context-menu.directive.js +135 -89
- package/esm2015/lib/context-menu/context-menu.module.js +24 -23
- package/esm2015/lib/context-menu/index.js +2 -2
- package/esm2015/lib/custom-html/custom-html.component.js +32 -32
- package/esm2015/lib/custom-html/custom-html.module.js +49 -48
- package/esm2015/lib/custom-html/custom-html.pipe.js +18 -19
- package/esm2015/lib/custom-html/index.js +3 -3
- package/esm2015/lib/drag-drop/drag-drop.directive.js +88 -88
- package/esm2015/lib/drag-drop/drag-drop.module.js +24 -23
- package/esm2015/lib/drag-drop/index.js +2 -2
- package/esm2015/lib/dynamic-component/dynamic-component.module.js +33 -32
- package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.js +124 -125
- package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.js +30 -29
- package/esm2015/lib/dynamic-component/index.js +3 -3
- package/esm2015/lib/dynamic-component/shared/dynamic-component.interfaces.js +2 -1
- package/esm2015/lib/dynamic-component/shared/dynamic-component.js +174 -174
- package/esm2015/lib/dynamic-component/shared/dynamic-component.service.js +29 -29
- package/esm2015/lib/dynamic-component/shared/index.js +4 -4
- package/esm2015/lib/entity/entity-selector/entity-selector.component.js +201 -202
- package/esm2015/lib/entity/entity-selector/entity-selector.module.js +34 -33
- package/esm2015/lib/entity/entity-table/entity-table-row.directive.js +137 -137
- package/esm2015/lib/entity/entity-table/entity-table.component.js +912 -916
- package/esm2015/lib/entity/entity-table/entity-table.module.js +77 -76
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.component.js +138 -140
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.interface.js +2 -1
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.module.js +30 -29
- package/esm2015/lib/entity/entity.module.js +33 -32
- package/esm2015/lib/entity/index.js +6 -6
- package/esm2015/lib/entity/shared/entity.enums.js +27 -27
- package/esm2015/lib/entity/shared/entity.interfaces.js +2 -1
- package/esm2015/lib/entity/shared/entity.utils.js +67 -67
- package/esm2015/lib/entity/shared/index.js +10 -10
- package/esm2015/lib/entity/shared/state.js +191 -191
- package/esm2015/lib/entity/shared/store.js +288 -288
- package/esm2015/lib/entity/shared/strategies/filter-custom-function.js +79 -79
- package/esm2015/lib/entity/shared/strategies/filter-selection.js +84 -84
- package/esm2015/lib/entity/shared/strategies/index.js +4 -4
- package/esm2015/lib/entity/shared/strategies/strategy.js +75 -75
- package/esm2015/lib/entity/shared/transaction.js +316 -316
- package/esm2015/lib/entity/shared/view.js +315 -315
- package/esm2015/lib/entity/shared/watcher.js +120 -120
- package/esm2015/lib/flexible/flexible.component.js +158 -159
- package/esm2015/lib/flexible/flexible.module.js +24 -23
- package/esm2015/lib/flexible/flexible.type.js +2 -1
- package/esm2015/lib/flexible/index.js +3 -3
- package/esm2015/lib/form/form/form.component.js +125 -125
- package/esm2015/lib/form/form/form.module.js +42 -41
- package/esm2015/lib/form/form-field/form-field-select.component.js +132 -132
- package/esm2015/lib/form/form-field/form-field-text.component.js +108 -108
- package/esm2015/lib/form/form-field/form-field-textarea.component.js +110 -110
- package/esm2015/lib/form/form-field/form-field.component.js +77 -78
- package/esm2015/lib/form/form-field/form-field.module.js +76 -75
- package/esm2015/lib/form/form-field/index.js +5 -5
- package/esm2015/lib/form/form-group/form-group.component.js +110 -110
- package/esm2015/lib/form/form-group/form-group.module.js +42 -41
- package/esm2015/lib/form/form.module.js +51 -50
- package/esm2015/lib/form/index.js +5 -5
- package/esm2015/lib/form/shared/form-field-component.js +7 -7
- package/esm2015/lib/form/shared/form-field.service.js +29 -29
- package/esm2015/lib/form/shared/form.interfaces.js +2 -1
- package/esm2015/lib/form/shared/form.service.js +77 -77
- package/esm2015/lib/form/shared/form.utils.js +40 -40
- package/esm2015/lib/form/shared/index.js +6 -6
- package/esm2015/lib/home-button/home-button.component.js +35 -0
- package/esm2015/lib/home-button/home-button.module.js +43 -0
- package/esm2015/lib/home-button/index.js +2 -0
- package/esm2015/lib/image/image.module.js +24 -23
- package/esm2015/lib/image/index.js +2 -2
- package/esm2015/lib/image/secure-image.pipe.js +48 -51
- package/esm2015/lib/interactive-tour/index.js +5 -5
- package/esm2015/lib/interactive-tour/interactive-tour.component.js +140 -142
- package/esm2015/lib/interactive-tour/interactive-tour.interface.js +2 -1
- package/esm2015/lib/interactive-tour/interactive-tour.loader.js +44 -46
- package/esm2015/lib/interactive-tour/interactive-tour.module.js +42 -41
- package/esm2015/lib/interactive-tour/interactive-tour.service.js +285 -288
- package/esm2015/lib/json-dialog/index.js +3 -3
- package/esm2015/lib/json-dialog/json-dialog.component.js +116 -117
- package/esm2015/lib/json-dialog/json-dialog.module.js +29 -28
- package/esm2015/lib/json-dialog/json-dialog.service.js +24 -25
- package/esm2015/lib/keyvalue/index.js +2 -2
- package/esm2015/lib/keyvalue/keyvalue.module.js +24 -23
- package/esm2015/lib/keyvalue/keyvalue.pipe.js +18 -18
- package/esm2015/lib/list/index.js +3 -3
- package/esm2015/lib/list/list-item.directive.js +165 -165
- package/esm2015/lib/list/list.component.js +266 -266
- package/esm2015/lib/list/list.module.js +29 -28
- package/esm2015/lib/panel/index.js +2 -2
- package/esm2015/lib/panel/panel.component.js +67 -67
- package/esm2015/lib/panel/panel.module.js +19 -18
- package/esm2015/lib/sidenav/index.js +2 -2
- package/esm2015/lib/sidenav/sidenav-shim.directive.js +55 -56
- package/esm2015/lib/sidenav/sidenav.module.js +24 -23
- package/esm2015/lib/spinner/index.js +3 -3
- package/esm2015/lib/spinner/spinner-activity.directive.js +47 -49
- package/esm2015/lib/spinner/spinner.component.js +40 -40
- package/esm2015/lib/spinner/spinner.module.js +21 -20
- package/esm2015/lib/stop-propagation/index.js +3 -3
- package/esm2015/lib/stop-propagation/stop-drop-propagation.directive.js +22 -22
- package/esm2015/lib/stop-propagation/stop-propagation.directive.js +21 -21
- package/esm2015/lib/stop-propagation/stop-propagation.module.js +25 -24
- package/esm2015/lib/table/index.js +6 -6
- package/esm2015/lib/table/table-action-color.enum.js +7 -7
- package/esm2015/lib/table/table-database.js +28 -28
- package/esm2015/lib/table/table-datasource.js +61 -61
- package/esm2015/lib/table/table-model.interface.js +2 -1
- package/esm2015/lib/table/table.component.js +310 -311
- package/esm2015/lib/table/table.module.js +69 -68
- package/esm2015/lib/tool/index.js +3 -3
- package/esm2015/lib/tool/shared/index.js +6 -6
- package/esm2015/lib/tool/shared/tool-component.js +9 -9
- package/esm2015/lib/tool/shared/tool.interface.js +2 -1
- package/esm2015/lib/tool/shared/tool.service.js +43 -43
- package/esm2015/lib/tool/shared/toolbox.enums.js +7 -7
- package/esm2015/lib/tool/shared/toolbox.js +179 -179
- package/esm2015/lib/tool/tool.module.js +34 -33
- package/esm2015/lib/tool/toolbox/toolbox.animation.js +10 -10
- package/esm2015/lib/tool/toolbox/toolbox.component.js +261 -262
- package/esm2015/lib/tool/toolbox/toolbox.module.js +38 -37
- package/esm2015/lib/widget/index.js +3 -3
- package/esm2015/lib/widget/shared/index.js +4 -4
- package/esm2015/lib/widget/shared/widget.interfaces.js +2 -1
- package/esm2015/lib/widget/shared/widget.js +4 -4
- package/esm2015/lib/widget/shared/widget.service.js +20 -21
- package/esm2015/lib/widget/widget-outlet/widget-outlet.component.js +121 -122
- package/esm2015/lib/widget/widget-outlet/widget-outlet.module.js +34 -33
- package/esm2015/lib/widget/widget.module.js +34 -33
- package/esm2015/lib/workspace/index.js +4 -4
- package/esm2015/lib/workspace/shared/index.js +4 -4
- package/esm2015/lib/workspace/shared/store.js +40 -40
- package/esm2015/lib/workspace/shared/workspace.interfaces.js +2 -1
- package/esm2015/lib/workspace/shared/workspace.js +117 -117
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.component.js +54 -55
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +34 -33
- package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.js +93 -94
- package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.js +34 -33
- package/esm2015/lib/workspace/workspace.module.js +29 -28
- package/esm2015/public_api.js +72 -70
- package/fesm2015/igo2-common.js +9015 -8846
- package/fesm2015/igo2-common.js.map +1 -1
- package/igo2-common.d.ts +5 -5
- package/lib/action/action.module.d.ts +8 -7
- package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
- package/lib/action/actionbar/actionbar.component.d.ts +146 -146
- package/lib/action/actionbar/actionbar.module.d.ts +20 -19
- 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 -9
- package/lib/backdrop/index.d.ts +1 -1
- package/lib/badge-icon/badge-icon.directive.d.ts +32 -27
- package/lib/badge-icon/badge-icon.module.d.ts +11 -10
- 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 -8
- package/lib/clickout/index.d.ts +1 -1
- package/lib/clone/clone.module.d.ts +9 -8
- 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 -11
- package/lib/collapsible/index.d.ts +2 -2
- package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
- package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -11
- package/lib/confirm-dialog/confirm-dialog.service.d.ts +10 -10
- package/lib/confirm-dialog/index.d.ts +2 -2
- package/lib/context-menu/context-menu.directive.d.ts +27 -21
- package/lib/context-menu/context-menu.module.d.ts +9 -8
- package/lib/context-menu/index.d.ts +1 -1
- package/lib/custom-html/custom-html.component.d.ts +9 -9
- package/lib/custom-html/custom-html.module.d.ts +16 -15
- package/lib/custom-html/custom-html.pipe.d.ts +10 -10
- package/lib/custom-html/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 -8
- package/lib/drag-drop/index.d.ts +1 -1
- package/lib/dynamic-component/dynamic-component.module.d.ts +8 -7
- 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 -10
- 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 -12
- package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
- package/lib/entity/entity-table/entity-table.component.d.ts +275 -275
- package/lib/entity/entity-table/entity-table.module.d.ts +23 -22
- 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 -10
- package/lib/entity/entity.module.d.ts +10 -9
- package/lib/entity/index.d.ts +5 -5
- package/lib/entity/shared/entity.enums.d.ts +22 -22
- package/lib/entity/shared/entity.interfaces.d.ts +88 -88
- package/lib/entity/shared/entity.utils.d.ts +49 -49
- package/lib/entity/shared/index.d.ts +9 -9
- package/lib/entity/shared/state.d.ts +103 -103
- package/lib/entity/shared/store.d.ts +176 -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 +168 -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 -8
- 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 -11
- 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 +34 -34
- package/lib/form/form-field/form-field.module.d.ts +21 -20
- 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 -13
- package/lib/form/form.module.d.ts +13 -12
- 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 +57 -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 -0
- package/lib/home-button/home-button.module.d.ts +15 -0
- package/lib/home-button/index.d.ts +1 -0
- package/lib/image/image.module.d.ts +9 -8
- package/lib/image/index.d.ts +1 -1
- package/lib/image/secure-image.pipe.d.ts +11 -11
- 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 -11
- package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
- 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 -12
- 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 -8
- 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 -13
- package/lib/panel/index.d.ts +1 -1
- package/lib/panel/panel.component.d.ts +11 -11
- package/lib/panel/panel.module.d.ts +8 -7
- 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 -8
- 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 -9
- 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 -9
- 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 +17 -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 -19
- 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 -9
- package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
- package/lib/tool/toolbox/toolbox.component.d.ts +127 -127
- package/lib/tool/toolbox/toolbox.module.d.ts +13 -12
- 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 -11
- package/lib/widget/widget.module.d.ts +8 -7
- 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 +35 -35
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -11
- 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 -11
- package/lib/workspace/workspace.module.d.ts +9 -8
- package/package.json +8 -7
- package/public_api.d.ts +68 -66
- package/style/common.theming.scss +12 -236
- package/style/partial/action.scss +18 -18
- package/style/partial/common.variables.scss +8 -8
- package/bundles/igo2-common.umd.min.js +0 -17
- package/bundles/igo2-common.umd.min.js.map +0 -1
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
/**
|
|
3
|
-
* This class is used in the DynamicComponentOutlet component. It holds
|
|
4
|
-
* a reference to a component factory and can render that component
|
|
5
|
-
* in a target element on demand. It's also possible to set inputs
|
|
6
|
-
* and to subscribe to outputs.
|
|
7
|
-
*/
|
|
8
|
-
export class DynamicComponent {
|
|
9
|
-
constructor(componentFactory) {
|
|
10
|
-
this.componentFactory = componentFactory;
|
|
11
|
-
/**
|
|
12
|
-
* Subscriptions to the component's outputs. Those need
|
|
13
|
-
* to be unsubscribed when the component is destroyed.
|
|
14
|
-
*/
|
|
15
|
-
this.subscriptions = [];
|
|
16
|
-
/**
|
|
17
|
-
* Component inputs
|
|
18
|
-
*/
|
|
19
|
-
this.inputs = {};
|
|
20
|
-
/**
|
|
21
|
-
* Subscriptions to the component's async inputs
|
|
22
|
-
*/
|
|
23
|
-
this.inputs$$ = {};
|
|
24
|
-
/**
|
|
25
|
-
* Subscribers to the component's outputs
|
|
26
|
-
*/
|
|
27
|
-
this.subscribers = {};
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Render the component to a target element.
|
|
31
|
-
* Set it's inputs and subscribe to it's outputs.
|
|
32
|
-
* @param target Target element
|
|
33
|
-
*/
|
|
34
|
-
setTarget(target) {
|
|
35
|
-
this.target = target;
|
|
36
|
-
this.componentRef = target.createComponent(this.componentFactory);
|
|
37
|
-
this.updateInputs(this.inputs);
|
|
38
|
-
this.updateSubscribers(this.subscribers);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Destroy this component. That means, removing from it's target
|
|
42
|
-
* element and unsubscribing to it's outputs.
|
|
43
|
-
*/
|
|
44
|
-
destroy() {
|
|
45
|
-
if (this.target !== undefined) {
|
|
46
|
-
this.target.clear();
|
|
47
|
-
}
|
|
48
|
-
if (this.componentRef !== undefined) {
|
|
49
|
-
this.componentRef.destroy();
|
|
50
|
-
this.componentRef = undefined;
|
|
51
|
-
}
|
|
52
|
-
this.unobserveAllInputs();
|
|
53
|
-
this.unsubscribeAll();
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Update the component inputs. This is an update so any
|
|
57
|
-
* key not defined won't be overwritten.
|
|
58
|
-
*/
|
|
59
|
-
updateInputs(inputs) {
|
|
60
|
-
this.inputs = inputs;
|
|
61
|
-
if (this.componentRef === undefined) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const instance = this.componentRef.instance;
|
|
65
|
-
const allowedInputs = this.componentFactory.inputs;
|
|
66
|
-
allowedInputs.forEach((value) => {
|
|
67
|
-
const key = value.propName;
|
|
68
|
-
this.unobserveInput(key);
|
|
69
|
-
const inputValue = inputs[key];
|
|
70
|
-
if (inputs.hasOwnProperty(key)) {
|
|
71
|
-
if (inputValue instanceof Observable) {
|
|
72
|
-
this.observeInput(key, inputValue);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
this.setInputValue(instance, key, inputValue);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
if (typeof instance.onUpdateInputs === 'function') {
|
|
80
|
-
instance.onUpdateInputs();
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Set an instance's input value
|
|
85
|
-
* @param instance Component instance
|
|
86
|
-
* @param key Input key
|
|
87
|
-
* @param value Input value
|
|
88
|
-
*/
|
|
89
|
-
setInputValue(instance, key, value) {
|
|
90
|
-
const currentValue = instance[key];
|
|
91
|
-
if (value === currentValue) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
const prototype = Object.getPrototypeOf(instance);
|
|
95
|
-
const descriptor = Object.getOwnPropertyDescriptor(prototype, key);
|
|
96
|
-
if (descriptor !== undefined && descriptor.set !== undefined) {
|
|
97
|
-
descriptor.set.call(instance, value);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
instance[key] = value;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Update the component subscribers. This is an update so any
|
|
105
|
-
* key not defined won't be overwritten.
|
|
106
|
-
*/
|
|
107
|
-
updateSubscribers(subscribers) {
|
|
108
|
-
this.subscribers = subscribers;
|
|
109
|
-
if (this.componentRef === undefined) {
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const instance = this.componentRef.instance;
|
|
113
|
-
const allowedSubscribers = this.componentFactory.outputs;
|
|
114
|
-
allowedSubscribers.forEach((value) => {
|
|
115
|
-
const key = value.propName;
|
|
116
|
-
if (subscribers.hasOwnProperty(key)) {
|
|
117
|
-
const emitter = instance[key];
|
|
118
|
-
const subscriber = subscribers[key];
|
|
119
|
-
if (Array.isArray(subscriber)) {
|
|
120
|
-
subscriber.forEach((_subscriber) => {
|
|
121
|
-
this.subscriptions.push(emitter.subscribe(_subscriber));
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this.subscriptions.push(emitter.subscribe(subscriber));
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Subscribe to an observable input and update the component's input value
|
|
132
|
-
* accordingly
|
|
133
|
-
* @param key Input key
|
|
134
|
-
* @param observable Observable
|
|
135
|
-
*/
|
|
136
|
-
observeInput(key, observable) {
|
|
137
|
-
this.inputs$$[key] = observable.subscribe((value) => {
|
|
138
|
-
const instance = this.componentRef.instance;
|
|
139
|
-
this.setInputValue(instance, key, value);
|
|
140
|
-
if (typeof instance.onUpdateInputs === 'function') {
|
|
141
|
-
instance.onUpdateInputs();
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Unsubscribe to an observable input
|
|
147
|
-
* @param key Input key
|
|
148
|
-
*/
|
|
149
|
-
unobserveInput(key) {
|
|
150
|
-
if (this.inputs$$[key] !== undefined) {
|
|
151
|
-
this.inputs$$[key].unsubscribe();
|
|
152
|
-
this.inputs$$[key] = undefined;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Unsubscribe to all outputs.
|
|
157
|
-
*/
|
|
158
|
-
unobserveAllInputs() {
|
|
159
|
-
Object.values(this.inputs$$).forEach((s) => {
|
|
160
|
-
if (s !== undefined) {
|
|
161
|
-
s.unsubscribe();
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
this.inputs$$ = {};
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Unsubscribe to all outputs.
|
|
168
|
-
*/
|
|
169
|
-
unsubscribeAll() {
|
|
170
|
-
this.subscriptions.forEach((s) => s.unsubscribe());
|
|
171
|
-
this.subscriptions = [];
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL3Nydi9hcHBzL2lnbzItbGliL3BhY2thZ2VzL2NvbW1vbi9zcmMvIiwic291cmNlcyI6WyJsaWIvZHluYW1pYy1jb21wb25lbnQvc2hhcmVkL2R5bmFtaWMtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWhEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQWlDM0IsWUFBb0IsZ0JBQXFDO1FBQXJDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBcUI7UUExQnpEOzs7V0FHRztRQUNLLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQU8zQzs7V0FFRztRQUNLLFdBQU0sR0FBeUIsRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ0ssYUFBUSxHQUFrQyxFQUFFLENBQUM7UUFFckQ7O1dBRUc7UUFDSyxnQkFBVyxHQUEwQyxFQUFFLENBQUM7SUFFSixDQUFDO0lBRTdEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsTUFBd0I7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQ25DLElBQUks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O0lBQ0ssa0JBQWtCO1FBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQTJCLEVBQUUsRUFBRTtZQUNuRSxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQ25CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNqQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgQ29tcG9uZW50UmVmLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW4gdGhlIER5bmFtaWNDb21wb25lbnRPdXRsZXQgY29tcG9uZW50LiBJdCBob2xkc1xuICogYSByZWZlcmVuY2UgdG8gYSBjb21wb25lbnQgZmFjdG9yeSBhbmQgY2FuIHJlbmRlciB0aGF0IGNvbXBvbmVudFxuICogaW4gYSB0YXJnZXQgZWxlbWVudCBvbiBkZW1hbmQuIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZXQgaW5wdXRzXG4gKiBhbmQgdG8gc3Vic2NyaWJlIHRvIG91dHB1dHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEeW5hbWljQ29tcG9uZW50PEM+IHtcblxuICAvKipcbiAgICogQ29tcG9uZW50IHJlZmVyZW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxDPjtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9ucyB0byB0aGUgY29tcG9uZW50J3Mgb3V0cHV0cy4gVGhvc2UgbmVlZFxuICAgKiB0byBiZSB1bnN1YnNjcmliZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAvKipcbiAgICogQ29tcG9uZW50IHRhcmdldCBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIHRhcmdldDogVmlld0NvbnRhaW5lclJlZjtcblxuICAvKipcbiAgICogQ29tcG9uZW50IGlucHV0c1xuICAgKi9cbiAgcHJpdmF0ZSBpbnB1dHM6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cbiAgLyoqXG4gICAqIFN1YnNjcmlwdGlvbnMgdG8gdGhlIGNvbXBvbmVudCdzIGFzeW5jIGlucHV0c1xuICAgKi9cbiAgcHJpdmF0ZSBpbnB1dHMkJDoge1trZXk6IHN0cmluZ106IFN1YnNjcmlwdGlvbn0gPSB7fTtcblxuICAvKipcbiAgICogU3Vic2NyaWJlcnMgdG8gdGhlIGNvbXBvbmVudCdzIG91dHB1dHNcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlcnM6IHtba2V5OiBzdHJpbmddOiAoZXZlbnQ6IGFueSkgPT4gdm9pZH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8Qz4pIHt9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgY29tcG9uZW50IHRvIGEgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIFNldCBpdCdzIGlucHV0cyBhbmQgc3Vic2NyaWJlIHRvIGl0J3Mgb3V0cHV0cy5cbiAgICogQHBhcmFtIHRhcmdldCBUYXJnZXQgZWxlbWVudFxuICAgKi9cbiAgc2V0VGFyZ2V0KHRhcmdldDogVmlld0NvbnRhaW5lclJlZikge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGFyZ2V0LmNyZWF0ZUNvbXBvbmVudCh0aGlzLmNvbXBvbmVudEZhY3RvcnkpO1xuICAgIHRoaXMudXBkYXRlSW5wdXRzKHRoaXMuaW5wdXRzKTtcbiAgICB0aGlzLnVwZGF0ZVN1YnNjcmliZXJzKHRoaXMuc3Vic2NyaWJlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhpcyBjb21wb25lbnQuIFRoYXQgbWVhbnMsIHJlbW92aW5nIGZyb20gaXQncyB0YXJnZXRcbiAgICogZWxlbWVudCBhbmQgdW5zdWJzY3JpYmluZyB0byBpdCdzIG91dHB1dHMuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRhcmdldC5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMudW5vYnNlcnZlQWxsSW5wdXRzKCk7XG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29tcG9uZW50IGlucHV0cy4gVGhpcyBpcyBhbiB1cGRhdGUgc28gYW55XG4gICAqIGtleSBub3QgZGVmaW5lZCB3b24ndCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHVwZGF0ZUlucHV0cyhpbnB1dHM6IHtba2V5OiBzdHJpbmddOiBhbnl9KSB7XG4gICAgdGhpcy5pbnB1dHMgPSBpbnB1dHM7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIGNvbnN0IGFsbG93ZWRJbnB1dHMgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnkuaW5wdXRzO1xuICAgIGFsbG93ZWRJbnB1dHMuZm9yRWFjaCgodmFsdWU6IHtwcm9wTmFtZTogc3RyaW5nOyB0ZW1wbGF0ZU5hbWU6IHN0cmluZzsgfSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdmFsdWUucHJvcE5hbWU7XG5cbiAgICAgIHRoaXMudW5vYnNlcnZlSW5wdXQoa2V5KTtcblxuICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0c1trZXldO1xuICAgICAgaWYgKGlucHV0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGlmIChpbnB1dFZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZUlucHV0KGtleSwgaW5wdXRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKGluc3RhbmNlLCBrZXksIGlucHV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIChpbnN0YW5jZSBhcyBhbnkpLm9uVXBkYXRlSW5wdXRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5vblVwZGF0ZUlucHV0cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gaW5zdGFuY2UncyBpbnB1dCB2YWx1ZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgQ29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBwYXJhbSBrZXkgSW5wdXQga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSBJbnB1dCB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbnB1dFZhbHVlKGluc3RhbmNlOiBDLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGluc3RhbmNlW2tleV07XG4gICAgaWYgKHZhbHVlID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwga2V5KTtcbiAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkICYmIGRlc2NyaXB0b3Iuc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwoaW5zdGFuY2UsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGNvbXBvbmVudCBzdWJzY3JpYmVycy4gVGhpcyBpcyBhbiB1cGRhdGUgc28gYW55XG4gICAqIGtleSBub3QgZGVmaW5lZCB3b24ndCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHVwZGF0ZVN1YnNjcmliZXJzKHN1YnNjcmliZXJzOiB7W2tleTogc3RyaW5nXTogKGV2ZW50OiBhbnkpID0+IHZvaWR9KSB7XG4gICAgdGhpcy5zdWJzY3JpYmVycyA9IHN1YnNjcmliZXJzO1xuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBjb25zdCBhbGxvd2VkU3Vic2NyaWJlcnMgPSB0aGlzLmNvbXBvbmVudEZhY3Rvcnkub3V0cHV0cztcbiAgICBhbGxvd2VkU3Vic2NyaWJlcnMuZm9yRWFjaCgodmFsdWU6IHtwcm9wTmFtZTogc3RyaW5nOyB0ZW1wbGF0ZU5hbWU6IHN0cmluZzsgfSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdmFsdWUucHJvcE5hbWU7XG4gICAgICBpZiAoc3Vic2NyaWJlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IHN1YnNjcmliZXJzW2tleV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1YnNjcmliZXIpKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5mb3JFYWNoKChfc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZW1pdHRlci5zdWJzY3JpYmUoX3N1YnNjcmliZXIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChlbWl0dGVyLnN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYW4gb2JzZXJ2YWJsZSBpbnB1dCBhbmQgdXBkYXRlIHRoZSBjb21wb25lbnQncyBpbnB1dCB2YWx1ZVxuICAgKiBhY2NvcmRpbmdseVxuICAgKiBAcGFyYW0ga2V5IElucHV0IGtleVxuICAgKiBAcGFyYW0gb2JzZXJ2YWJsZSBPYnNlcnZhYmxlXG4gICAqL1xuICBwcml2YXRlIG9ic2VydmVJbnB1dChrZXk6IHN0cmluZywgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgdGhpcy5pbnB1dHMkJFtrZXldID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUoaW5zdGFuY2UsIGtleSwgdmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIChpbnN0YW5jZSBhcyBhbnkpLm9uVXBkYXRlSW5wdXRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm9uVXBkYXRlSW5wdXRzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgdG8gYW4gb2JzZXJ2YWJsZSBpbnB1dFxuICAgKiBAcGFyYW0ga2V5IElucHV0IGtleVxuICAgKi9cbiAgcHJpdmF0ZSB1bm9ic2VydmVJbnB1dChrZXk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlucHV0cyQkW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbnB1dHMkJFtrZXldLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmlucHV0cyQkW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIHRvIGFsbCBvdXRwdXRzLlxuICAgKi9cbiAgcHJpdmF0ZSB1bm9ic2VydmVBbGxJbnB1dHMoKSB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmlucHV0cyQkKS5mb3JFYWNoKChzOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQpID0+IHtcbiAgICAgIGlmIChzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaW5wdXRzJCQgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSB0byBhbGwgb3V0cHV0cy5cbiAgICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVBbGwoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHM6IFN1YnNjcmlwdGlvbikgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgfVxuXG59XG4iXX0=
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* This class is used in the DynamicComponentOutlet component. It holds
|
|
4
|
+
* a reference to a component factory and can render that component
|
|
5
|
+
* in a target element on demand. It's also possible to set inputs
|
|
6
|
+
* and to subscribe to outputs.
|
|
7
|
+
*/
|
|
8
|
+
export class DynamicComponent {
|
|
9
|
+
constructor(componentFactory) {
|
|
10
|
+
this.componentFactory = componentFactory;
|
|
11
|
+
/**
|
|
12
|
+
* Subscriptions to the component's outputs. Those need
|
|
13
|
+
* to be unsubscribed when the component is destroyed.
|
|
14
|
+
*/
|
|
15
|
+
this.subscriptions = [];
|
|
16
|
+
/**
|
|
17
|
+
* Component inputs
|
|
18
|
+
*/
|
|
19
|
+
this.inputs = {};
|
|
20
|
+
/**
|
|
21
|
+
* Subscriptions to the component's async inputs
|
|
22
|
+
*/
|
|
23
|
+
this.inputs$$ = {};
|
|
24
|
+
/**
|
|
25
|
+
* Subscribers to the component's outputs
|
|
26
|
+
*/
|
|
27
|
+
this.subscribers = {};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Render the component to a target element.
|
|
31
|
+
* Set it's inputs and subscribe to it's outputs.
|
|
32
|
+
* @param target Target element
|
|
33
|
+
*/
|
|
34
|
+
setTarget(target) {
|
|
35
|
+
this.target = target;
|
|
36
|
+
this.componentRef = target.createComponent(this.componentFactory);
|
|
37
|
+
this.updateInputs(this.inputs);
|
|
38
|
+
this.updateSubscribers(this.subscribers);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Destroy this component. That means, removing from it's target
|
|
42
|
+
* element and unsubscribing to it's outputs.
|
|
43
|
+
*/
|
|
44
|
+
destroy() {
|
|
45
|
+
if (this.target !== undefined) {
|
|
46
|
+
this.target.clear();
|
|
47
|
+
}
|
|
48
|
+
if (this.componentRef !== undefined) {
|
|
49
|
+
this.componentRef.destroy();
|
|
50
|
+
this.componentRef = undefined;
|
|
51
|
+
}
|
|
52
|
+
this.unobserveAllInputs();
|
|
53
|
+
this.unsubscribeAll();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Update the component inputs. This is an update so any
|
|
57
|
+
* key not defined won't be overwritten.
|
|
58
|
+
*/
|
|
59
|
+
updateInputs(inputs) {
|
|
60
|
+
this.inputs = inputs;
|
|
61
|
+
if (this.componentRef === undefined) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const instance = this.componentRef.instance;
|
|
65
|
+
const allowedInputs = this.componentFactory.inputs;
|
|
66
|
+
allowedInputs.forEach((value) => {
|
|
67
|
+
const key = value.propName;
|
|
68
|
+
this.unobserveInput(key);
|
|
69
|
+
const inputValue = inputs[key];
|
|
70
|
+
if (inputs.hasOwnProperty(key)) {
|
|
71
|
+
if (inputValue instanceof Observable) {
|
|
72
|
+
this.observeInput(key, inputValue);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.setInputValue(instance, key, inputValue);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
if (typeof instance.onUpdateInputs === 'function') {
|
|
80
|
+
instance.onUpdateInputs();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Set an instance's input value
|
|
85
|
+
* @param instance Component instance
|
|
86
|
+
* @param key Input key
|
|
87
|
+
* @param value Input value
|
|
88
|
+
*/
|
|
89
|
+
setInputValue(instance, key, value) {
|
|
90
|
+
const currentValue = instance[key];
|
|
91
|
+
if (value === currentValue) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const prototype = Object.getPrototypeOf(instance);
|
|
95
|
+
const descriptor = Object.getOwnPropertyDescriptor(prototype, key);
|
|
96
|
+
if (descriptor !== undefined && descriptor.set !== undefined) {
|
|
97
|
+
descriptor.set.call(instance, value);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
instance[key] = value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Update the component subscribers. This is an update so any
|
|
105
|
+
* key not defined won't be overwritten.
|
|
106
|
+
*/
|
|
107
|
+
updateSubscribers(subscribers) {
|
|
108
|
+
this.subscribers = subscribers;
|
|
109
|
+
if (this.componentRef === undefined) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const instance = this.componentRef.instance;
|
|
113
|
+
const allowedSubscribers = this.componentFactory.outputs;
|
|
114
|
+
allowedSubscribers.forEach((value) => {
|
|
115
|
+
const key = value.propName;
|
|
116
|
+
if (subscribers.hasOwnProperty(key)) {
|
|
117
|
+
const emitter = instance[key];
|
|
118
|
+
const subscriber = subscribers[key];
|
|
119
|
+
if (Array.isArray(subscriber)) {
|
|
120
|
+
subscriber.forEach((_subscriber) => {
|
|
121
|
+
this.subscriptions.push(emitter.subscribe(_subscriber));
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.subscriptions.push(emitter.subscribe(subscriber));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Subscribe to an observable input and update the component's input value
|
|
132
|
+
* accordingly
|
|
133
|
+
* @param key Input key
|
|
134
|
+
* @param observable Observable
|
|
135
|
+
*/
|
|
136
|
+
observeInput(key, observable) {
|
|
137
|
+
this.inputs$$[key] = observable.subscribe((value) => {
|
|
138
|
+
const instance = this.componentRef.instance;
|
|
139
|
+
this.setInputValue(instance, key, value);
|
|
140
|
+
if (typeof instance.onUpdateInputs === 'function') {
|
|
141
|
+
instance.onUpdateInputs();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Unsubscribe to an observable input
|
|
147
|
+
* @param key Input key
|
|
148
|
+
*/
|
|
149
|
+
unobserveInput(key) {
|
|
150
|
+
if (this.inputs$$[key] !== undefined) {
|
|
151
|
+
this.inputs$$[key].unsubscribe();
|
|
152
|
+
this.inputs$$[key] = undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Unsubscribe to all outputs.
|
|
157
|
+
*/
|
|
158
|
+
unobserveAllInputs() {
|
|
159
|
+
Object.values(this.inputs$$).forEach((s) => {
|
|
160
|
+
if (s !== undefined) {
|
|
161
|
+
s.unsubscribe();
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
this.inputs$$ = {};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Unsubscribe to all outputs.
|
|
168
|
+
*/
|
|
169
|
+
unsubscribeAll() {
|
|
170
|
+
this.subscriptions.forEach((s) => s.unsubscribe());
|
|
171
|
+
this.subscriptions = [];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9keW5hbWljLWNvbXBvbmVudC9zaGFyZWQvZHluYW1pYy1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFaEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBaUMzQixZQUFvQixnQkFBcUM7UUFBckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQTFCekQ7OztXQUdHO1FBQ0ssa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBTzNDOztXQUVHO1FBQ0ssV0FBTSxHQUF5QixFQUFFLENBQUM7UUFFMUM7O1dBRUc7UUFDSyxhQUFRLEdBQWtDLEVBQUUsQ0FBQztRQUVyRDs7V0FFRztRQUNLLGdCQUFXLEdBQTBDLEVBQUUsQ0FBQztJQUVKLENBQUM7SUFFN0Q7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxNQUF3QjtRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDbkMsSUFBSSxD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SUFDSyxrQkFBa0I7UUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBMkIsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDbkIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudEZhY3RvcnksXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBpbiB0aGUgRHluYW1pY0NvbXBvbmVudE91dGxldCBjb21wb25lbnQuIEl0IGhvbGRzXHJcbiAqIGEgcmVmZXJlbmNlIHRvIGEgY29tcG9uZW50IGZhY3RvcnkgYW5kIGNhbiByZW5kZXIgdGhhdCBjb21wb25lbnRcclxuICogaW4gYSB0YXJnZXQgZWxlbWVudCBvbiBkZW1hbmQuIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZXQgaW5wdXRzXHJcbiAqIGFuZCB0byBzdWJzY3JpYmUgdG8gb3V0cHV0cy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljQ29tcG9uZW50PEM+IHtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcG9uZW50IHJlZmVyZW5jZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8Qz47XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbnMgdG8gdGhlIGNvbXBvbmVudCdzIG91dHB1dHMuIFRob3NlIG5lZWRcclxuICAgKiB0byBiZSB1bnN1YnNjcmliZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBvbmVudCB0YXJnZXQgZWxlbWVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdGFyZ2V0OiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAvKipcclxuICAgKiBDb21wb25lbnQgaW5wdXRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpbnB1dHM6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbnMgdG8gdGhlIGNvbXBvbmVudCdzIGFzeW5jIGlucHV0c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgaW5wdXRzJCQ6IHtba2V5OiBzdHJpbmddOiBTdWJzY3JpcHRpb259ID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmliZXJzIHRvIHRoZSBjb21wb25lbnQncyBvdXRwdXRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVyczoge1trZXk6IHN0cmluZ106IChldmVudDogYW55KSA9PiB2b2lkfSA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8Qz4pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmRlciB0aGUgY29tcG9uZW50IHRvIGEgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICogU2V0IGl0J3MgaW5wdXRzIGFuZCBzdWJzY3JpYmUgdG8gaXQncyBvdXRwdXRzLlxyXG4gICAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGVsZW1lbnRcclxuICAgKi9cclxuICBzZXRUYXJnZXQodGFyZ2V0OiBWaWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGFyZ2V0LmNyZWF0ZUNvbXBvbmVudCh0aGlzLmNvbXBvbmVudEZhY3RvcnkpO1xyXG4gICAgdGhpcy51cGRhdGVJbnB1dHModGhpcy5pbnB1dHMpO1xyXG4gICAgdGhpcy51cGRhdGVTdWJzY3JpYmVycyh0aGlzLnN1YnNjcmliZXJzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3Ryb3kgdGhpcyBjb21wb25lbnQuIFRoYXQgbWVhbnMsIHJlbW92aW5nIGZyb20gaXQncyB0YXJnZXRcclxuICAgKiBlbGVtZW50IGFuZCB1bnN1YnNjcmliaW5nIHRvIGl0J3Mgb3V0cHV0cy5cclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy50YXJnZXQuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVub2JzZXJ2ZUFsbElucHV0cygpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBjb21wb25lbnQgaW5wdXRzLiBUaGlzIGlzIGFuIHVwZGF0ZSBzbyBhbnlcclxuICAgKiBrZXkgbm90IGRlZmluZWQgd29uJ3QgYmUgb3ZlcndyaXR0ZW4uXHJcbiAgICovXHJcbiAgdXBkYXRlSW5wdXRzKGlucHV0czoge1trZXk6IHN0cmluZ106IGFueX0pIHtcclxuICAgIHRoaXMuaW5wdXRzID0gaW5wdXRzO1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBjb25zdCBhbGxvd2VkSW5wdXRzID0gdGhpcy5jb21wb25lbnRGYWN0b3J5LmlucHV0cztcclxuICAgIGFsbG93ZWRJbnB1dHMuZm9yRWFjaCgodmFsdWU6IHtwcm9wTmFtZTogc3RyaW5nOyB0ZW1wbGF0ZU5hbWU6IHN0cmluZzsgfSkgPT4ge1xyXG4gICAgICBjb25zdCBrZXkgPSB2YWx1ZS5wcm9wTmFtZTtcclxuXHJcbiAgICAgIHRoaXMudW5vYnNlcnZlSW5wdXQoa2V5KTtcclxuXHJcbiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dHNba2V5XTtcclxuICAgICAgaWYgKGlucHV0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLm9ic2VydmVJbnB1dChrZXksIGlucHV0VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNldElucHV0VmFsdWUoaW5zdGFuY2UsIGtleSwgaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodHlwZW9mIChpbnN0YW5jZSBhcyBhbnkpLm9uVXBkYXRlSW5wdXRzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm9uVXBkYXRlSW5wdXRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgYW4gaW5zdGFuY2UncyBpbnB1dCB2YWx1ZVxyXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBDb21wb25lbnQgaW5zdGFuY2VcclxuICAgKiBAcGFyYW0ga2V5IElucHV0IGtleVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBJbnB1dCB2YWx1ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SW5wdXRWYWx1ZShpbnN0YW5jZTogQywga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGluc3RhbmNlW2tleV07XHJcbiAgICBpZiAodmFsdWUgPT09IGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGluc3RhbmNlKTtcclxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwga2V5KTtcclxuICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiYgZGVzY3JpcHRvci5zZXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkZXNjcmlwdG9yLnNldC5jYWxsKGluc3RhbmNlLCB2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbnN0YW5jZVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGNvbXBvbmVudCBzdWJzY3JpYmVycy4gVGhpcyBpcyBhbiB1cGRhdGUgc28gYW55XHJcbiAgICoga2V5IG5vdCBkZWZpbmVkIHdvbid0IGJlIG92ZXJ3cml0dGVuLlxyXG4gICAqL1xyXG4gIHVwZGF0ZVN1YnNjcmliZXJzKHN1YnNjcmliZXJzOiB7W2tleTogc3RyaW5nXTogKGV2ZW50OiBhbnkpID0+IHZvaWR9KSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZXJzID0gc3Vic2NyaWJlcnM7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcclxuICAgIGNvbnN0IGFsbG93ZWRTdWJzY3JpYmVycyA9IHRoaXMuY29tcG9uZW50RmFjdG9yeS5vdXRwdXRzO1xyXG4gICAgYWxsb3dlZFN1YnNjcmliZXJzLmZvckVhY2goKHZhbHVlOiB7cHJvcE5hbWU6IHN0cmluZzsgdGVtcGxhdGVOYW1lOiBzdHJpbmc7IH0pID0+IHtcclxuICAgICAgY29uc3Qga2V5ID0gdmFsdWUucHJvcE5hbWU7XHJcbiAgICAgIGlmIChzdWJzY3JpYmVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IGluc3RhbmNlW2tleV07XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IHN1YnNjcmliZXJzW2tleV07XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3Vic2NyaWJlcikpIHtcclxuICAgICAgICAgIHN1YnNjcmliZXIuZm9yRWFjaCgoX3N1YnNjcmliZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZW1pdHRlci5zdWJzY3JpYmUoX3N1YnNjcmliZXIpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChlbWl0dGVyLnN1YnNjcmliZShzdWJzY3JpYmVyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmliZSB0byBhbiBvYnNlcnZhYmxlIGlucHV0IGFuZCB1cGRhdGUgdGhlIGNvbXBvbmVudCdzIGlucHV0IHZhbHVlXHJcbiAgICogYWNjb3JkaW5nbHlcclxuICAgKiBAcGFyYW0ga2V5IElucHV0IGtleVxyXG4gICAqIEBwYXJhbSBvYnNlcnZhYmxlIE9ic2VydmFibGVcclxuICAgKi9cclxuICBwcml2YXRlIG9ic2VydmVJbnB1dChrZXk6IHN0cmluZywgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxhbnk+KSB7XHJcbiAgICB0aGlzLmlucHV0cyQkW2tleV0gPSBvYnNlcnZhYmxlLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG4gICAgICB0aGlzLnNldElucHV0VmFsdWUoaW5zdGFuY2UsIGtleSwgdmFsdWUpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiAoaW5zdGFuY2UgYXMgYW55KS5vblVwZGF0ZUlucHV0cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm9uVXBkYXRlSW5wdXRzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5zdWJzY3JpYmUgdG8gYW4gb2JzZXJ2YWJsZSBpbnB1dFxyXG4gICAqIEBwYXJhbSBrZXkgSW5wdXQga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1bm9ic2VydmVJbnB1dChrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzJCRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRzJCRba2V5XS51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLmlucHV0cyQkW2tleV0gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbnN1YnNjcmliZSB0byBhbGwgb3V0cHV0cy5cclxuICAgKi9cclxuICBwcml2YXRlIHVub2JzZXJ2ZUFsbElucHV0cygpIHtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5pbnB1dHMkJCkuZm9yRWFjaCgoczogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIGlmIChzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5pbnB1dHMkJCA9IHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5zdWJzY3JpYmUgdG8gYWxsIG91dHB1dHMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFsbCgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzOiBTdWJzY3JpcHRpb24pID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DynamicComponent } from './dynamic-component';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Service to creates DynamicComponent instances from base component classes
|
|
6
|
-
*/
|
|
7
|
-
export class DynamicComponentService {
|
|
8
|
-
constructor(resolver) {
|
|
9
|
-
this.resolver = resolver;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Creates a DynamicComponent instance from a base component class
|
|
13
|
-
* @param componentCls The component class
|
|
14
|
-
* @returns DynamicComponent instance
|
|
15
|
-
*/
|
|
16
|
-
create(componentCls) {
|
|
17
|
-
const factory = this.resolver.resolveComponentFactory(componentCls);
|
|
18
|
-
return new DynamicComponent(factory);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
DynamicComponentService.ɵfac = function DynamicComponentService_Factory(t) { return new (t || DynamicComponentService)(i0.ɵɵinject(i0.ComponentFactoryResolver)); };
|
|
22
|
-
DynamicComponentService.ɵprov = i0.ɵɵdefineInjectable({ token: DynamicComponentService, factory: DynamicComponentService.ɵfac, providedIn: 'root' });
|
|
23
|
-
|
|
24
|
-
type: Injectable,
|
|
25
|
-
args: [{
|
|
26
|
-
providedIn: 'root'
|
|
27
|
-
}]
|
|
28
|
-
}], function () { return [{ type: i0.ComponentFactoryResolver }]; }, null); })();
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { DynamicComponent } from './dynamic-component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Service to creates DynamicComponent instances from base component classes
|
|
6
|
+
*/
|
|
7
|
+
export class DynamicComponentService {
|
|
8
|
+
constructor(resolver) {
|
|
9
|
+
this.resolver = resolver;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates a DynamicComponent instance from a base component class
|
|
13
|
+
* @param componentCls The component class
|
|
14
|
+
* @returns DynamicComponent instance
|
|
15
|
+
*/
|
|
16
|
+
create(componentCls) {
|
|
17
|
+
const factory = this.resolver.resolveComponentFactory(componentCls);
|
|
18
|
+
return new DynamicComponent(factory);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
DynamicComponentService.ɵfac = function DynamicComponentService_Factory(t) { return new (t || DynamicComponentService)(i0.ɵɵinject(i0.ComponentFactoryResolver)); };
|
|
22
|
+
DynamicComponentService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DynamicComponentService, factory: DynamicComponentService.ɵfac, providedIn: 'root' });
|
|
23
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DynamicComponentService, [{
|
|
24
|
+
type: Injectable,
|
|
25
|
+
args: [{
|
|
26
|
+
providedIn: 'root'
|
|
27
|
+
}]
|
|
28
|
+
}], function () { return [{ type: i0.ComponentFactoryResolver }]; }, null); })();
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2R5bmFtaWMtY29tcG9uZW50L3NoYXJlZC9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBRXZEOztHQUVHO0FBSUgsTUFBTSxPQUFPLHVCQUF1QjtJQUVsQyxZQUFvQixRQUFrQztRQUFsQyxhQUFRLEdBQVIsUUFBUSxDQUEwQjtJQUFHLENBQUM7SUFFMUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxZQUFpQjtRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFlBQW1CLENBQUMsQ0FBQztRQUMzRSxPQUFPLElBQUksZ0JBQWdCLENBQXNCLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7OzhGQVpVLHVCQUF1Qjs2RUFBdkIsdUJBQXVCLFdBQXZCLHVCQUF1QixtQkFGdEIsTUFBTTt1RkFFUCx1QkFBdUI7Y0FIbkMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgSW5qZWN0YWJsZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgdG8gY3JlYXRlcyBEeW5hbWljQ29tcG9uZW50IGluc3RhbmNlcyBmcm9tIGJhc2UgY29tcG9uZW50IGNsYXNzZXNcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgRHluYW1pY0NvbXBvbmVudCBpbnN0YW5jZSBmcm9tIGEgYmFzZSBjb21wb25lbnQgY2xhc3NcclxuICAgKiBAcGFyYW0gY29tcG9uZW50Q2xzIFRoZSBjb21wb25lbnQgY2xhc3NcclxuICAgKiBAcmV0dXJucyBEeW5hbWljQ29tcG9uZW50IGluc3RhbmNlXHJcbiAgICovXHJcbiAgY3JlYXRlKGNvbXBvbmVudENsczogYW55KTogRHluYW1pY0NvbXBvbmVudDxhbnk+IHtcclxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudENscyBhcyBhbnkpO1xyXG4gICAgcmV0dXJuIG5ldyBEeW5hbWljQ29tcG9uZW50PHR5cGVvZiBjb21wb25lbnRDbHM+KGZhY3RvcnkpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './dynamic-component.interfaces';
|
|
2
|
-
export * from './dynamic-component';
|
|
3
|
-
export * from './dynamic-component.service';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './dynamic-component.interfaces';
|
|
2
|
+
export * from './dynamic-component';
|
|
3
|
+
export * from './dynamic-component.service';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9keW5hbWljLWNvbXBvbmVudC9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LmludGVyZmFjZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcclxuIl19
|