@wavemaker/app-ng-runtime 11.14.1-rc.6310 → 11.14.2-rc.6311
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/components/advanced/carousel/bundles/index.umd.js +15 -1
- package/components/advanced/carousel/carousel.directive.d.ts +1 -0
- package/components/advanced/carousel/esm2022/carousel.directive.mjs +16 -2
- package/components/advanced/carousel/fesm2022/index.mjs +15 -1
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/bundles/index.umd.js +24 -3
- package/components/advanced/login/esm2022/login.component.mjs +25 -4
- package/components/advanced/login/fesm2022/index.mjs +24 -3
- package/components/advanced/login/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/login.component.d.ts +5 -2
- package/components/base/bundles/index.umd.js +331 -36
- package/components/base/directives/show-in-device.directive.d.ts +2 -1
- package/components/base/esm2022/directives/show-in-device.directive.mjs +22 -4
- package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
- package/components/base/esm2022/utils/widget-utils.mjs +3 -3
- package/components/base/esm2022/widgets/common/base/base-container.component.mjs +27 -1
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +18 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
- package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +9 -1
- package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +44 -11
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +20 -1
- package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +26 -1
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +44 -4
- package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +16 -1
- package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +22 -1
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
- package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +5 -3
- package/components/base/esm2022/widgets/framework/widget-registry.mjs +6 -3
- package/components/base/fesm2022/index.mjs +327 -34
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +5 -5
- package/components/base/widgets/common/base/base-container.component.d.ts +3 -2
- package/components/base/widgets/common/base/base-field-validations.d.ts +1 -0
- package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +3 -2
- package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +6 -2
- package/components/base/widgets/common/base/partial-container.directive.d.ts +3 -2
- package/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -2
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
- package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +3 -2
- package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +3 -2
- package/components/basic/anchor/bundles/index.umd.js +13 -1
- package/components/basic/anchor/esm2022/anchor.component.mjs +14 -2
- package/components/basic/anchor/fesm2022/index.mjs +13 -1
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
- package/components/basic/html/bundles/index.umd.js +13 -1
- package/components/basic/html/esm2022/html.directive.mjs +14 -2
- package/components/basic/html/fesm2022/index.mjs +13 -1
- package/components/basic/html/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/bundles/index.umd.js +17 -1
- package/components/basic/label/esm2022/label.directive.mjs +18 -2
- package/components/basic/label/fesm2022/index.mjs +17 -1
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/label.directive.d.ts +3 -2
- package/components/basic/progress/progress-circle/bundles/index.umd.js +10 -0
- package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +11 -1
- package/components/basic/progress/progress-circle/fesm2022/index.mjs +10 -0
- package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
- package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
- package/components/basic/search/bundles/index.umd.js +31 -5
- package/components/basic/search/esm2022/scrollable.directive.mjs +13 -4
- package/components/basic/search/esm2022/search.component.mjs +20 -3
- package/components/basic/search/fesm2022/index.mjs +31 -5
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/scrollable.directive.d.ts +5 -3
- package/components/basic/search/search.component.d.ts +3 -2
- package/components/basic/spinner/bundles/index.umd.js +9 -1
- package/components/basic/spinner/esm2022/spinner.component.mjs +10 -2
- package/components/basic/spinner/fesm2022/index.mjs +9 -1
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
- package/components/basic/spinner/spinner.component.d.ts +4 -2
- package/components/chart/bundles/index.umd.js +21 -3
- package/components/chart/esm2022/chart.component.mjs +22 -4
- package/components/chart/fesm2022/index.mjs +21 -3
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +3 -2
- package/components/containers/accordion/accordion.directive.d.ts +5 -2
- package/components/containers/accordion/bundles/index.umd.js +49 -2
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -1
- package/components/containers/accordion/esm2022/accordion.directive.mjs +41 -3
- package/components/containers/accordion/fesm2022/index.mjs +49 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/bundles/index.umd.js +13 -0
- package/components/containers/panel/esm2022/panel.component.mjs +14 -1
- package/components/containers/panel/fesm2022/index.mjs +13 -0
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/panel.component.d.ts +3 -2
- package/components/containers/tabs/bundles/index.umd.js +54 -2
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +10 -1
- package/components/containers/tabs/esm2022/tabs.component.mjs +46 -3
- package/components/containers/tabs/fesm2022/index.mjs +54 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -2
- package/components/containers/tabs/tabs.component.d.ts +5 -2
- package/components/containers/wizard/bundles/index.umd.js +47 -3
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +16 -3
- package/components/containers/wizard/esm2022/wizard.component.mjs +33 -2
- package/components/containers/wizard/fesm2022/index.mjs +47 -3
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +3 -2
- package/components/containers/wizard/wizard.component.d.ts +4 -2
- package/components/data/card/bundles/index.umd.js +17 -1
- package/components/data/card/card-content/card-content.component.d.ts +3 -2
- package/components/data/card/card.component.d.ts +4 -2
- package/components/data/card/esm2022/card-content/card-content.component.mjs +6 -1
- package/components/data/card/esm2022/card.component.mjs +13 -2
- package/components/data/card/fesm2022/index.mjs +17 -1
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +92 -0
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +7 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +28 -1
- package/components/data/form/esm2022/form-widget.directive.mjs +8 -1
- package/components/data/form/esm2022/form.component.mjs +27 -1
- package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +7 -1
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +12 -1
- package/components/data/form/esm2022/live-form/live-form.directive.mjs +10 -1
- package/components/data/form/fesm2022/index.mjs +92 -0
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form-action/form-action.directive.d.ts +3 -2
- package/components/data/form/form-field/form-field.directive.d.ts +3 -2
- package/components/data/form/form-widget.directive.d.ts +3 -2
- package/components/data/form/live-actions/live-actions.directive.d.ts +3 -1
- package/components/data/form/live-filter/live-filter.directive.d.ts +3 -1
- package/components/data/form/live-form/live-form.directive.d.ts +3 -1
- package/components/data/list/bundles/index.umd.js +213 -19
- package/components/data/list/esm2022/list-item.directive.mjs +95 -11
- package/components/data/list/esm2022/list.component.mjs +120 -10
- package/components/data/list/fesm2022/index.mjs +213 -19
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +7 -2
- package/components/data/list/list.component.d.ts +7 -0
- package/components/data/live-table/bundles/index.umd.js +13 -1
- package/components/data/live-table/esm2022/live-table.component.mjs +14 -2
- package/components/data/live-table/fesm2022/index.mjs +13 -1
- package/components/data/live-table/fesm2022/index.mjs.map +1 -1
- package/components/data/live-table/live-table.component.d.ts +4 -2
- package/components/data/pagination/bundles/index.umd.js +57 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +58 -5
- package/components/data/pagination/fesm2022/index.mjs +57 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/pagination.component.d.ts +4 -2
- package/components/data/table/bundles/index.umd.js +345 -15
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +107 -3
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
- package/components/data/table/esm2022/table-cud.directive.mjs +8 -2
- package/components/data/table/esm2022/table-filter.directive.mjs +12 -2
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table.component.mjs +193 -12
- package/components/data/table/fesm2022/index.mjs +345 -15
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-action/table-action.directive.d.ts +3 -2
- package/components/data/table/table-column/table-column.directive.d.ts +3 -2
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
- package/components/data/table/table-cud.directive.d.ts +3 -1
- package/components/data/table/table-filter.directive.d.ts +3 -1
- package/components/data/table/table-row/table-row.directive.d.ts +3 -2
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
- package/components/data/table/table.component.d.ts +6 -2
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +6 -1
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/confirm-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -2
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +6 -1
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/default/bundles/index.umd.js +15 -2
- package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +4 -2
- package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -3
- package/components/dialogs/default/fesm2022/index.mjs +15 -2
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/design-dialog/bundles/index.umd.js +7 -0
- package/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -1
- package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -0
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +6 -1
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +3 -2
- package/components/dialogs/partial-dialog/bundles/index.umd.js +23 -3
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +24 -4
- package/components/dialogs/partial-dialog/fesm2022/index.mjs +23 -3
- package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +4 -2
- package/components/input/base-form/base-form.component.d.ts +4 -2
- package/components/input/base-form/bundles/index.umd.js +16 -2
- package/components/input/base-form/esm2022/base-form.component.mjs +17 -3
- package/components/input/base-form/fesm2022/index.mjs +16 -2
- package/components/input/base-form/fesm2022/index.mjs.map +1 -1
- package/components/input/base-form-custom/base-form-custom.component.d.ts +3 -2
- package/components/input/base-form-custom/bundles/index.umd.js +13 -2
- package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +14 -3
- package/components/input/base-form-custom/fesm2022/index.mjs +13 -2
- package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +7 -0
- package/components/input/checkbox/checkbox.component.d.ts +3 -2
- package/components/input/checkbox/esm2022/checkbox.component.mjs +8 -1
- package/components/input/checkbox/fesm2022/index.mjs +7 -0
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +18 -2
- package/components/input/checkboxset/checkboxset.component.d.ts +4 -2
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +19 -3
- package/components/input/checkboxset/fesm2022/index.mjs +18 -2
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/chips/bundles/index.umd.js +45 -5
- package/components/input/chips/chips.component.d.ts +3 -2
- package/components/input/chips/esm2022/chips.component.mjs +46 -6
- package/components/input/chips/fesm2022/index.mjs +45 -5
- package/components/input/chips/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/bundles/index.umd.js +8 -0
- package/components/input/color-picker/color-picker.component.d.ts +3 -2
- package/components/input/color-picker/esm2022/color-picker.component.mjs +9 -1
- package/components/input/color-picker/fesm2022/index.mjs +8 -0
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/composite/bundles/index.umd.js +10 -1
- package/components/input/composite/composite.directive.d.ts +3 -2
- package/components/input/composite/esm2022/composite.directive.mjs +11 -2
- package/components/input/composite/fesm2022/index.mjs +10 -1
- package/components/input/composite/fesm2022/index.mjs.map +1 -1
- package/components/input/currency/bundles/index.umd.js +7 -0
- package/components/input/currency/currency.component.d.ts +3 -2
- package/components/input/currency/esm2022/currency.component.mjs +8 -1
- package/components/input/currency/fesm2022/index.mjs +7 -0
- package/components/input/currency/fesm2022/index.mjs.map +1 -1
- package/components/input/dataset-aware-form/bundles/index.umd.js +26 -2
- package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +27 -3
- package/components/input/dataset-aware-form/fesm2022/index.mjs +26 -2
- package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +22 -0
- package/components/input/epoch/date/date.component.d.ts +1 -0
- package/components/input/epoch/date/esm2022/date.component.mjs +23 -1
- package/components/input/epoch/date/fesm2022/index.mjs +22 -0
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +25 -8
- package/components/input/file-upload/esm2022/file-upload.component.mjs +26 -9
- package/components/input/file-upload/fesm2022/index.mjs +25 -8
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/file-upload.component.d.ts +3 -0
- package/components/input/number/bundles/index.umd.js +8 -0
- package/components/input/number/esm2022/number.component.mjs +9 -1
- package/components/input/number/fesm2022/index.mjs +8 -0
- package/components/input/number/fesm2022/index.mjs.map +1 -1
- package/components/input/number/number.component.d.ts +3 -2
- package/components/input/radioset/bundles/index.umd.js +18 -2
- package/components/input/radioset/esm2022/radioset.component.mjs +19 -3
- package/components/input/radioset/fesm2022/index.mjs +18 -2
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +4 -2
- package/components/input/rating/bundles/index.umd.js +10 -0
- package/components/input/rating/esm2022/rating.component.mjs +11 -1
- package/components/input/rating/fesm2022/index.mjs +10 -0
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/rating.component.d.ts +3 -2
- package/components/input/select/bundles/index.umd.js +6 -0
- package/components/input/select/esm2022/select.component.mjs +7 -1
- package/components/input/select/fesm2022/index.mjs +6 -0
- package/components/input/select/fesm2022/index.mjs.map +1 -1
- package/components/input/select/select.component.d.ts +3 -2
- package/components/input/slider/bundles/index.umd.js +10 -0
- package/components/input/slider/esm2022/slider.component.mjs +11 -1
- package/components/input/slider/fesm2022/index.mjs +10 -0
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +3 -2
- package/components/input/switch/bundles/index.umd.js +22 -2
- package/components/input/switch/esm2022/switch.component.mjs +23 -3
- package/components/input/switch/fesm2022/index.mjs +22 -2
- package/components/input/switch/fesm2022/index.mjs.map +1 -1
- package/components/input/switch/switch.component.d.ts +3 -2
- package/components/input/text/bundles/index.umd.js +36 -0
- package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +8 -1
- package/components/input/text/esm2022/input-color/input-color.component.mjs +8 -1
- package/components/input/text/esm2022/input-email/input-email.component.mjs +8 -1
- package/components/input/text/esm2022/input-number/input-number.component.mjs +8 -1
- package/components/input/text/esm2022/input-text/input-text.component.mjs +9 -1
- package/components/input/text/fesm2022/index.mjs +36 -0
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-calendar/input-calendar.component.d.ts +3 -2
- package/components/input/text/input-color/input-color.component.d.ts +3 -2
- package/components/input/text/input-email/input-email.component.d.ts +3 -2
- package/components/input/text/input-number/input-number.component.d.ts +3 -2
- package/components/input/text/input-text/input-text.component.d.ts +3 -2
- package/components/input/textarea/bundles/index.umd.js +7 -0
- package/components/input/textarea/esm2022/textarea.component.mjs +8 -1
- package/components/input/textarea/fesm2022/index.mjs +7 -0
- package/components/input/textarea/fesm2022/index.mjs.map +1 -1
- package/components/input/textarea/textarea.component.d.ts +3 -2
- package/components/navigation/menu/bundles/index.umd.js +55 -6
- package/components/navigation/menu/esm2022/menu-adapator.component.mjs +17 -3
- package/components/navigation/menu/esm2022/menu.component.mjs +10 -3
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +6 -1
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +11 -1
- package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +16 -3
- package/components/navigation/menu/fesm2022/index.mjs +55 -6
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/menu-adapator.component.d.ts +4 -2
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -2
- package/components/navigation/menu/nav/nav.component.d.ts +3 -2
- package/components/navigation/menu/nav/navigation-control.directive.d.ts +4 -2
- package/components/navigation/navbar/bundles/index.umd.js +5 -0
- package/components/navigation/navbar/esm2022/navbar.component.mjs +6 -1
- package/components/navigation/navbar/fesm2022/index.mjs +5 -0
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/navbar.component.d.ts +3 -2
- package/components/navigation/popover/bundles/index.umd.js +65 -13
- package/components/navigation/popover/esm2022/popover.component.mjs +63 -11
- package/components/navigation/popover/fesm2022/index.mjs +62 -10
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +11 -3
- package/components/page/default/bundles/index.umd.js +30 -6
- package/components/page/default/esm2022/layout.directive.mjs +9 -1
- package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -3
- package/components/page/default/esm2022/router-outlet.directive.mjs +13 -6
- package/components/page/default/fesm2022/index.mjs +30 -6
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/default/layout.directive.d.ts +3 -2
- package/components/page/default/page-content/page-content.component.d.ts +3 -2
- package/components/page/default/router-outlet.directive.d.ts +5 -2
- package/components/page/left-panel/bundles/index.umd.js +16 -0
- package/components/page/left-panel/esm2022/left-panel.directive.mjs +17 -1
- package/components/page/left-panel/fesm2022/index.mjs +16 -0
- package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- package/components/page/left-panel/left-panel.directive.d.ts +3 -2
- package/components/page/top-nav/bundles/index.umd.js +2 -1
- package/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
- package/components/page/top-nav/fesm2022/index.mjs +2 -1
- package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
- package/components/prefab/bundles/index.umd.js +4 -0
- package/components/prefab/esm2022/prefab.directive.mjs +5 -1
- package/components/prefab/fesm2022/index.mjs +4 -0
- package/components/prefab/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +391 -94
- package/core/esm2022/public_api.mjs +3 -3
- package/core/esm2022/services/viewport.service.mjs +24 -10
- package/core/esm2022/types/types.mjs +1 -1
- package/core/esm2022/utils/dom.mjs +18 -2
- package/core/esm2022/utils/event-notifier.mjs +5 -2
- package/core/esm2022/utils/lru-cache.mjs +16 -2
- package/core/esm2022/utils/utils.mjs +6 -2
- package/core/esm2022/utils/watcher.mjs +323 -81
- package/core/fesm2022/index.mjs +390 -96
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +2 -2
- package/core/services/viewport.service.d.ts +5 -2
- package/core/types/types.d.ts +1 -0
- package/core/utils/lru-cache.d.ts +6 -0
- package/core/utils/utils.d.ts +1 -0
- package/core/utils/watcher.d.ts +26 -5
- package/http/bundles/index.umd.js +31 -1
- package/http/esm2022/http.service.mjs +32 -2
- package/http/fesm2022/index.mjs +31 -1
- package/http/fesm2022/index.mjs.map +1 -1
- package/http/http.service.d.ts +6 -2
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/bundles/index.umd.js +9 -0
- package/oAuth/esm2022/oAuth.service.mjs +10 -1
- package/oAuth/fesm2022/index.mjs +9 -0
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +3 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +367 -32
- package/runtime/base/components/app-component/app.component.d.ts +4 -0
- package/runtime/base/components/prefab-preview.component.d.ts +5 -2
- package/runtime/base/directives/accessroles.directive.d.ts +4 -3
- package/runtime/base/directives/prefab.directive.d.ts +3 -2
- package/runtime/base/esm2022/components/app-component/app.component.mjs +40 -9
- package/runtime/base/esm2022/components/base-custom-widget.component.mjs +33 -2
- package/runtime/base/esm2022/components/base-layout.component.mjs +7 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +36 -3
- package/runtime/base/esm2022/components/base-partial.component.mjs +37 -3
- package/runtime/base/esm2022/components/base-prefab.component.mjs +32 -3
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +37 -3
- package/runtime/base/esm2022/components/prefab-preview.component.mjs +23 -4
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -2
- package/runtime/base/esm2022/directives/prefab.directive.mjs +9 -1
- package/runtime/base/esm2022/services/app.manager.service.mjs +40 -12
- package/runtime/base/esm2022/services/app.service.mjs +34 -2
- package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +4 -1
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +7 -4
- package/runtime/base/esm2022/services/spinner.service.mjs +15 -1
- package/runtime/base/esm2022/util/fragment-monitor.mjs +23 -2
- package/runtime/base/fesm2022/index.mjs +368 -33
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +2 -2
- package/runtime/base/services/app.manager.service.d.ts +6 -1
- package/runtime/base/services/app.service.d.ts +12 -2
- package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +2 -1
- package/runtime/base/services/spinner.service.d.ts +3 -1
- package/runtime/base/util/fragment-monitor.d.ts +6 -0
- package/runtime/dynamic/bundles/index.umd.js +5 -0
- package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +6 -1
- package/runtime/dynamic/fesm2022/index.mjs +5 -0
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
- package/scripts/datatable/datatable.js +100 -14
- package/security/bundles/index.umd.js +41 -2
- package/security/esm2022/security.service.mjs +42 -3
- package/security/fesm2022/index.mjs +41 -2
- package/security/fesm2022/index.mjs.map +1 -1
- package/security/security.service.d.ts +5 -2
- package/variables/bundles/index.umd.js +50 -6
- package/variables/esm2022/manager/action/notification-action.manager.mjs +18 -3
- package/variables/esm2022/manager/variable/base-variable.manager.mjs +15 -2
- package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +13 -3
- package/variables/esm2022/service/variables.service.mjs +8 -2
- package/variables/fesm2022/index.mjs +50 -6
- package/variables/fesm2022/index.mjs.map +1 -1
|
@@ -81,10 +81,13 @@
|
|
|
81
81
|
this.appVariablesLoaded = false;
|
|
82
82
|
this.appVariablesFired = false;
|
|
83
83
|
this._noRedirect = false;
|
|
84
|
+
this.appSubscriptions = []; // MEMORY LEAK FIX: Track subscriptions
|
|
84
85
|
// register method to invoke on session timeout
|
|
85
|
-
|
|
86
|
+
// MEMORY LEAK FIX: Store unsubscribe function for cleanup
|
|
87
|
+
this.sessionTimeoutUnsubscribe = this.$http.registerOnSessionTimeout(this.handle401.bind(this));
|
|
86
88
|
this.$variables.registerDependency('appManager', this);
|
|
87
|
-
|
|
89
|
+
// MEMORY LEAK FIX: Store subscription unsubscribe functions
|
|
90
|
+
this.appSubscriptions.push(this.$app.subscribe('toggle-variable-state', (data) => {
|
|
88
91
|
const variable = data.variable, active = data.active;
|
|
89
92
|
if (!lodashEs.isEmpty(lodashEs.trim(variable.spinnerContext))) {
|
|
90
93
|
if (active) {
|
|
@@ -109,8 +112,8 @@
|
|
|
109
112
|
this.$spinner.hide(variable._spinnerId.shift());
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
|
-
});
|
|
113
|
-
this.$app.subscribe('userLoggedIn', () => {
|
|
115
|
+
}));
|
|
116
|
+
this.appSubscriptions.push(this.$app.subscribe('userLoggedIn', () => {
|
|
114
117
|
this.setLandingPage();
|
|
115
118
|
if (this.lastLoggedUserId) {
|
|
116
119
|
this.$security.getConfig(config => {
|
|
@@ -119,11 +122,11 @@
|
|
|
119
122
|
}
|
|
120
123
|
}, null);
|
|
121
124
|
}
|
|
122
|
-
});
|
|
123
|
-
this.$app.subscribe('userLoggedOut', () => this.setLandingPage().then(() => {
|
|
124
|
-
this.$app.clearPageCache();
|
|
125
125
|
}));
|
|
126
|
-
this.$app.subscribe('
|
|
126
|
+
this.appSubscriptions.push(this.$app.subscribe('userLoggedOut', () => this.setLandingPage().then(() => {
|
|
127
|
+
this.$app.clearPageCache();
|
|
128
|
+
})));
|
|
129
|
+
this.appSubscriptions.push(this.$app.subscribe('http401', (d = {}) => this.handle401(d.page, d.options)));
|
|
127
130
|
}
|
|
128
131
|
/**
|
|
129
132
|
* On session timeout, if the session timeout config is set to a dialog, then open login dialog
|
|
@@ -363,8 +366,9 @@
|
|
|
363
366
|
reloadAppData() {
|
|
364
367
|
return this.loadSecurityConfig(true).then(() => {
|
|
365
368
|
return this.loadMetadata().then(() => {
|
|
366
|
-
return this.updateLoggedInUserVariable().then(() => {
|
|
367
|
-
return this.beforeAppReady()
|
|
369
|
+
return this.updateLoggedInUserVariable().then((config) => {
|
|
370
|
+
return Promise.resolve(this.beforeAppReady())
|
|
371
|
+
.then(() => Promise.resolve(config));
|
|
368
372
|
});
|
|
369
373
|
});
|
|
370
374
|
});
|
|
@@ -522,12 +526,36 @@
|
|
|
522
526
|
// Apply restored modes
|
|
523
527
|
this.$app.setMode(storedModes);
|
|
524
528
|
// Listener for postMessage-based mode changes
|
|
525
|
-
|
|
529
|
+
// MEMORY LEAK FIX: Store bound function reference for cleanup
|
|
530
|
+
this.windowMessageListener = (event) => {
|
|
526
531
|
const { key, modes, shouldPersist } = event.data || {};
|
|
527
532
|
if (key === 'switch-mode' && modes) {
|
|
528
533
|
this.$app.setMode(modes, !shouldPersist);
|
|
529
534
|
}
|
|
535
|
+
};
|
|
536
|
+
window.addEventListener('message', this.windowMessageListener);
|
|
537
|
+
}
|
|
538
|
+
ngOnDestroy() {
|
|
539
|
+
// MEMORY LEAK FIX: Unsubscribe from all app subscriptions
|
|
540
|
+
this.appSubscriptions.forEach(unsubscribe => {
|
|
541
|
+
if (unsubscribe) {
|
|
542
|
+
unsubscribe();
|
|
543
|
+
}
|
|
530
544
|
});
|
|
545
|
+
this.appSubscriptions = [];
|
|
546
|
+
// MEMORY LEAK FIX: Unsubscribe from session timeout
|
|
547
|
+
if (this.sessionTimeoutUnsubscribe) {
|
|
548
|
+
this.sessionTimeoutUnsubscribe();
|
|
549
|
+
this.sessionTimeoutUnsubscribe = null;
|
|
550
|
+
}
|
|
551
|
+
// MEMORY LEAK FIX: Remove window message listener
|
|
552
|
+
if (this.windowMessageListener) {
|
|
553
|
+
window.removeEventListener('message', this.windowMessageListener);
|
|
554
|
+
this.windowMessageListener = null;
|
|
555
|
+
}
|
|
556
|
+
// MEMORY LEAK FIX: Clear references
|
|
557
|
+
this.templates = null;
|
|
558
|
+
this.lastLoggedUserId = null;
|
|
531
559
|
}
|
|
532
560
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppManagerService, deps: [{ token: i1__namespace.AbstractHttpService }, { token: i2__namespace.SecurityService }, { token: i1__namespace.AbstractDialogService }, { token: i1$1__namespace.Router }, { token: i1__namespace.App }, { token: i4__namespace.VariablesService }, { token: i4__namespace.MetadataService }, { token: i1__namespace.AbstractSpinnerService }, { token: i1__namespace.AbstractI18nService }, { token: i5__namespace.DatePipe }], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
|
|
533
561
|
static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppManagerService }); }
|
|
@@ -653,11 +681,32 @@
|
|
|
653
681
|
}
|
|
654
682
|
init() {
|
|
655
683
|
// console.log(`inside fragmentMonitor: Page-${(this as any).pageName}, Partial-${(this as any).partialName}`);
|
|
656
|
-
|
|
684
|
+
// MEMORY LEAK FIX: Store subscription reference for cleanup
|
|
685
|
+
this.viewInitSubscription = this.viewInit$.subscribe(i1.noop, i1.noop, () => {
|
|
657
686
|
this.isViewInitialized = true;
|
|
658
687
|
this.isReady();
|
|
659
688
|
});
|
|
660
689
|
}
|
|
690
|
+
/**
|
|
691
|
+
* MEMORY LEAK FIX: Clean up FragmentMonitor resources
|
|
692
|
+
* Should be called from implementing class's ngOnDestroy
|
|
693
|
+
*/
|
|
694
|
+
cleanupFragmentMonitor() {
|
|
695
|
+
// MEMORY LEAK FIX: Unsubscribe from viewInit$ subscription
|
|
696
|
+
if (this.viewInitSubscription) {
|
|
697
|
+
this.viewInitSubscription.unsubscribe();
|
|
698
|
+
this.viewInitSubscription = null;
|
|
699
|
+
}
|
|
700
|
+
// MEMORY LEAK FIX: Complete Subjects to release subscriptions (if not already completed)
|
|
701
|
+
if (this.viewInit$ && !this.viewInit$.closed) {
|
|
702
|
+
this.viewInit$.complete();
|
|
703
|
+
}
|
|
704
|
+
this.viewInit$ = null;
|
|
705
|
+
if (this.fragmentsLoaded$ && !this.fragmentsLoaded$.closed) {
|
|
706
|
+
this.fragmentsLoaded$.complete();
|
|
707
|
+
}
|
|
708
|
+
this.fragmentsLoaded$ = null;
|
|
709
|
+
}
|
|
661
710
|
registerFragment() {
|
|
662
711
|
this.fragments++;
|
|
663
712
|
}
|
|
@@ -841,7 +890,41 @@
|
|
|
841
890
|
});
|
|
842
891
|
}
|
|
843
892
|
ngOnDestroy() {
|
|
844
|
-
|
|
893
|
+
// MEMORY LEAK FIX: Unwatch all Partial-scoped watchers for THIS specific partial when partial is destroyed
|
|
894
|
+
// Only unwatch watchers for this partial, not all partials (other partials may still be on the page)
|
|
895
|
+
if (this.partialName) {
|
|
896
|
+
i1.$unwatchAllByScope('Partial', this.partialName);
|
|
897
|
+
}
|
|
898
|
+
// MEMORY LEAK FIX: Complete Subjects to release subscriptions
|
|
899
|
+
if (this.destroy$) {
|
|
900
|
+
this.destroy$.complete();
|
|
901
|
+
this.destroy$ = null;
|
|
902
|
+
}
|
|
903
|
+
if (this.viewInit$) {
|
|
904
|
+
this.viewInit$.complete();
|
|
905
|
+
this.viewInit$ = null;
|
|
906
|
+
}
|
|
907
|
+
// MEMORY LEAK FIX: Clear references to prevent memory leaks
|
|
908
|
+
this.Widgets = null;
|
|
909
|
+
this.Variables = null;
|
|
910
|
+
this.Actions = null;
|
|
911
|
+
this.App = null;
|
|
912
|
+
this.containerWidget = null;
|
|
913
|
+
this.i18nService = null;
|
|
914
|
+
this.appLocale = null;
|
|
915
|
+
this.partialDirective = null;
|
|
916
|
+
this.pageDirective = null;
|
|
917
|
+
this.Prefab = null;
|
|
918
|
+
this.scriptLoaderService = null;
|
|
919
|
+
this.Viewport = null;
|
|
920
|
+
this.route = null;
|
|
921
|
+
this.appManager = null;
|
|
922
|
+
this.navigationService = null;
|
|
923
|
+
this.router = null;
|
|
924
|
+
this.pageParams = null;
|
|
925
|
+
this.viewParent = null;
|
|
926
|
+
// MEMORY LEAK FIX: Cleanup FragmentMonitor resources
|
|
927
|
+
this.cleanupFragmentMonitor();
|
|
845
928
|
}
|
|
846
929
|
ngOnAttach(refreshData) {
|
|
847
930
|
this.unmute();
|
|
@@ -1286,9 +1369,42 @@
|
|
|
1286
1369
|
});
|
|
1287
1370
|
}
|
|
1288
1371
|
ngOnDestroy() {
|
|
1372
|
+
// MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
|
|
1373
|
+
if (this.pageName) {
|
|
1374
|
+
const removedCount = i1.$unwatchAllByScope('Page', this.pageName);
|
|
1375
|
+
if (removedCount > 0) {
|
|
1376
|
+
console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1289
1379
|
//this.captureApplicationThumbnail();
|
|
1290
1380
|
this.savePageSnapShot();
|
|
1291
|
-
|
|
1381
|
+
// MEMORY LEAK FIX: Complete Subjects to release subscriptions
|
|
1382
|
+
if (this.destroy$) {
|
|
1383
|
+
this.destroy$.complete();
|
|
1384
|
+
this.destroy$ = null;
|
|
1385
|
+
}
|
|
1386
|
+
if (this.viewInit$) {
|
|
1387
|
+
this.viewInit$.complete();
|
|
1388
|
+
this.viewInit$ = null;
|
|
1389
|
+
}
|
|
1390
|
+
// MEMORY LEAK FIX: Clear references to prevent memory leaks
|
|
1391
|
+
this.Widgets = null;
|
|
1392
|
+
this.Variables = null;
|
|
1393
|
+
this.Actions = null;
|
|
1394
|
+
this.App = null;
|
|
1395
|
+
this.route = null;
|
|
1396
|
+
this.appManager = null;
|
|
1397
|
+
this.navigationService = null;
|
|
1398
|
+
this.router = null;
|
|
1399
|
+
this.pageParams = null;
|
|
1400
|
+
this.i18nService = null;
|
|
1401
|
+
this.appLocale = null;
|
|
1402
|
+
this.pageDirective = null;
|
|
1403
|
+
this.$page = null;
|
|
1404
|
+
this.scriptLoaderService = null;
|
|
1405
|
+
this.Viewport = null;
|
|
1406
|
+
// MEMORY LEAK FIX: Cleanup FragmentMonitor resources
|
|
1407
|
+
this.cleanupFragmentMonitor();
|
|
1292
1408
|
}
|
|
1293
1409
|
captureApplicationThumbnail() {
|
|
1294
1410
|
const root = this;
|
|
@@ -1653,7 +1769,38 @@
|
|
|
1653
1769
|
}, 100);
|
|
1654
1770
|
}
|
|
1655
1771
|
ngOnDestroy() {
|
|
1656
|
-
|
|
1772
|
+
// MEMORY LEAK FIX: Complete Subjects to release subscriptions
|
|
1773
|
+
if (this.destroy$) {
|
|
1774
|
+
this.destroy$.complete();
|
|
1775
|
+
this.destroy$ = null;
|
|
1776
|
+
}
|
|
1777
|
+
if (this.viewInit$) {
|
|
1778
|
+
this.viewInit$.complete();
|
|
1779
|
+
this.viewInit$ = null;
|
|
1780
|
+
}
|
|
1781
|
+
// MEMORY LEAK FIX: Clear references to prevent memory leaks
|
|
1782
|
+
this.Widgets = null;
|
|
1783
|
+
this.BaseWidget = null;
|
|
1784
|
+
this.Variables = null;
|
|
1785
|
+
this.Actions = null;
|
|
1786
|
+
this.App = null;
|
|
1787
|
+
this.containerWidget = null;
|
|
1788
|
+
this.i18nService = null;
|
|
1789
|
+
this.appLocale = null;
|
|
1790
|
+
this.pageDirective = null;
|
|
1791
|
+
this.Prefab = null;
|
|
1792
|
+
this.scriptLoaderService = null;
|
|
1793
|
+
this.customwidgetConfigProvider = null;
|
|
1794
|
+
this.Viewport = null;
|
|
1795
|
+
this.route = null;
|
|
1796
|
+
this.appManager = null;
|
|
1797
|
+
this.navigationService = null;
|
|
1798
|
+
this.router = null;
|
|
1799
|
+
this.props = null;
|
|
1800
|
+
this.events = null;
|
|
1801
|
+
this.viewParent = null;
|
|
1802
|
+
// MEMORY LEAK FIX: Cleanup FragmentMonitor resources
|
|
1803
|
+
this.cleanupFragmentMonitor();
|
|
1657
1804
|
}
|
|
1658
1805
|
ngOnAttach(refreshData) {
|
|
1659
1806
|
this.unmute();
|
|
@@ -1880,7 +2027,36 @@
|
|
|
1880
2027
|
});
|
|
1881
2028
|
}
|
|
1882
2029
|
ngOnDestroy() {
|
|
1883
|
-
|
|
2030
|
+
// MEMORY LEAK FIX: Unwatch all Prefab-scoped watchers for THIS specific prefab when prefab is destroyed
|
|
2031
|
+
// Only unwatch watchers for this prefab, not all prefabs (other prefabs may still be on the page)
|
|
2032
|
+
if (this.prefabName) {
|
|
2033
|
+
i1.$unwatchAllByScope('Prefab', this.prefabName);
|
|
2034
|
+
}
|
|
2035
|
+
// MEMORY LEAK FIX: Complete Subjects to release subscriptions
|
|
2036
|
+
if (this.destroy$) {
|
|
2037
|
+
this.destroy$.complete();
|
|
2038
|
+
this.destroy$ = null;
|
|
2039
|
+
}
|
|
2040
|
+
if (this.viewInit$) {
|
|
2041
|
+
this.viewInit$.complete();
|
|
2042
|
+
this.viewInit$ = null;
|
|
2043
|
+
}
|
|
2044
|
+
// MEMORY LEAK FIX: Clear references to prevent memory leaks
|
|
2045
|
+
this.Widgets = null;
|
|
2046
|
+
this.Variables = null;
|
|
2047
|
+
this.Actions = null;
|
|
2048
|
+
this.App = null;
|
|
2049
|
+
this.containerWidget = null;
|
|
2050
|
+
this.prefabMngr = null;
|
|
2051
|
+
this.i18nService = null;
|
|
2052
|
+
this.appLocale = null;
|
|
2053
|
+
this.prefabContainerDirective = null;
|
|
2054
|
+
this.scriptLoaderService = null;
|
|
2055
|
+
this.pageDirective = null;
|
|
2056
|
+
this.Viewport = null;
|
|
2057
|
+
this.viewParent = null;
|
|
2058
|
+
// MEMORY LEAK FIX: Cleanup FragmentMonitor resources
|
|
2059
|
+
this.cleanupFragmentMonitor();
|
|
1884
2060
|
}
|
|
1885
2061
|
// user overrides this
|
|
1886
2062
|
onPropertyChange() { }
|
|
@@ -1934,6 +2110,12 @@
|
|
|
1934
2110
|
}
|
|
1935
2111
|
//TODO: To work cache properly need to implement the below methods and WmRouteReuseStrategy
|
|
1936
2112
|
ngOnDestroy() {
|
|
2113
|
+
// MEMORY LEAK FIX: Clear references to prevent memory leaks
|
|
2114
|
+
this.App = null;
|
|
2115
|
+
this.routerOutlet = null;
|
|
2116
|
+
this.pageDirective = null;
|
|
2117
|
+
this.layoutPages = null;
|
|
2118
|
+
this.layoutName = null;
|
|
1937
2119
|
}
|
|
1938
2120
|
canReuse() {
|
|
1939
2121
|
}
|
|
@@ -2615,8 +2797,42 @@
|
|
|
2615
2797
|
});
|
|
2616
2798
|
}
|
|
2617
2799
|
ngOnDestroy() {
|
|
2800
|
+
// MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
|
|
2801
|
+
if (this.pageName) {
|
|
2802
|
+
i1.$unwatchAllByScope('Page', this.pageName);
|
|
2803
|
+
// if (removedCount > 0) {
|
|
2804
|
+
// console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
|
|
2805
|
+
// }
|
|
2806
|
+
}
|
|
2618
2807
|
this.savePageSnapShot();
|
|
2619
|
-
|
|
2808
|
+
// MEMORY LEAK FIX: Complete Subjects to release subscriptions
|
|
2809
|
+
if (this.destroy$) {
|
|
2810
|
+
this.destroy$.complete();
|
|
2811
|
+
this.destroy$ = null;
|
|
2812
|
+
}
|
|
2813
|
+
if (this.viewInit$) {
|
|
2814
|
+
this.viewInit$.complete();
|
|
2815
|
+
this.viewInit$ = null;
|
|
2816
|
+
}
|
|
2817
|
+
// MEMORY LEAK FIX: Clear references to prevent memory leaks
|
|
2818
|
+
this.Widgets = null;
|
|
2819
|
+
this.Variables = null;
|
|
2820
|
+
this.Actions = null;
|
|
2821
|
+
this.App = null;
|
|
2822
|
+
this.route = null;
|
|
2823
|
+
this.appManager = null;
|
|
2824
|
+
this.navigationService = null;
|
|
2825
|
+
this.router = null;
|
|
2826
|
+
this.pageParams = null;
|
|
2827
|
+
this.i18nService = null;
|
|
2828
|
+
this.appLocale = null;
|
|
2829
|
+
this.layoutDirective = null;
|
|
2830
|
+
this.spaPageDirective = null;
|
|
2831
|
+
this.$page = null;
|
|
2832
|
+
this.scriptLoaderService = null;
|
|
2833
|
+
this.Viewport = null;
|
|
2834
|
+
// MEMORY LEAK FIX: Cleanup FragmentMonitor resources
|
|
2835
|
+
this.cleanupFragmentMonitor();
|
|
2620
2836
|
}
|
|
2621
2837
|
onReady() { }
|
|
2622
2838
|
onBeforePageReady() { }
|
|
@@ -2702,7 +2918,7 @@
|
|
|
2702
2918
|
this.securityService = securityService;
|
|
2703
2919
|
this.inj = inj;
|
|
2704
2920
|
this.processed = false;
|
|
2705
|
-
this.context = {};
|
|
2921
|
+
this.context = {}; // Changed from readonly to allow cleanup
|
|
2706
2922
|
const securityConfig = this.securityService.get();
|
|
2707
2923
|
this.securityEnabled = lodashEs.get(securityConfig, 'securityEnabled');
|
|
2708
2924
|
this.isUserAuthenticated = lodashEs.get(securityConfig, 'authenticated');
|
|
@@ -2775,6 +2991,15 @@
|
|
|
2775
2991
|
this.viewContainerRef.clear();
|
|
2776
2992
|
}
|
|
2777
2993
|
}
|
|
2994
|
+
ngOnDestroy() {
|
|
2995
|
+
// MEMORY LEAK FIX: Clear context to release references to parent scope data
|
|
2996
|
+
if (this.context) {
|
|
2997
|
+
Object.keys(this.context).forEach(key => {
|
|
2998
|
+
delete this.context[key];
|
|
2999
|
+
});
|
|
3000
|
+
this.context = null;
|
|
3001
|
+
}
|
|
3002
|
+
}
|
|
2778
3003
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AccessrolesDirective, deps: [{ token: i0__namespace.TemplateRef }, { token: i0__namespace.ViewContainerRef }, { token: i2__namespace.SecurityService }, { token: i0__namespace.Injector }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
2779
3004
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AccessrolesDirective, isStandalone: true, selector: "[accessroles]", inputs: { accessroles: "accessroles" }, ngImport: i0__namespace }); }
|
|
2780
3005
|
}
|
|
@@ -3004,7 +3229,10 @@
|
|
|
3004
3229
|
this.preparePipeMeta(i5.CurrencyPipe, 'currency', true, [this._locale]),
|
|
3005
3230
|
this.preparePipeMeta(i5.DatePipe, 'date', true, [this._locale]),
|
|
3006
3231
|
this.preparePipeMeta(base.ToDatePipe, 'toDate', true, [
|
|
3007
|
-
new i5.DatePipe(this._locale),
|
|
3232
|
+
new i5.DatePipe(this._locale),
|
|
3233
|
+
undefined,
|
|
3234
|
+
this.injector.get(i1.App),
|
|
3235
|
+
this.injector.get(i1.CustomPipeManager)
|
|
3008
3236
|
]),
|
|
3009
3237
|
this.preparePipeMeta(base.ToNumberPipe, 'toNumber', true, [
|
|
3010
3238
|
new i5.DecimalPipe(this._locale),
|
|
@@ -3021,7 +3249,7 @@
|
|
|
3021
3249
|
new i5.DecimalPipe(this._locale)
|
|
3022
3250
|
]),
|
|
3023
3251
|
this.preparePipeMeta(base.StringToNumberPipe, 'stringToNumber', true),
|
|
3024
|
-
this.preparePipeMeta(base.CustomPipe, 'custom', true, [this.injector.get(i1.CustomPipeManager)]),
|
|
3252
|
+
this.preparePipeMeta(base.CustomPipe, 'custom', true, [this.injector.get(i1.App), this.injector.get(i1.CustomPipeManager)]),
|
|
3025
3253
|
this.preparePipeMeta(base.TrustAsPipe, 'trustAs', true, [this.domSanitizer]),
|
|
3026
3254
|
this.preparePipeMeta(base.SanitizePipe, 'sanitize', true, [this.domSanitizer]),
|
|
3027
3255
|
this.preparePipeMeta(base.TemplateReplacePipe, 'templateReplace', true),
|
|
@@ -3184,7 +3412,8 @@
|
|
|
3184
3412
|
this.isTemplateBundleType = wmProjectProperties.type === "TEMPLATEBUNDLE" /* PROJECT_TYPE.TEMPLATE_BUNDLE */;
|
|
3185
3413
|
this.targetPlatform = wmProjectProperties.platformType;
|
|
3186
3414
|
this.isPrism = wmProjectProperties.template === "PRISM";
|
|
3187
|
-
|
|
3415
|
+
// MEMORY LEAK FIX: Store unsubscribe function for cleanup
|
|
3416
|
+
this.sessionTimeoutUnsubscribe = this.httpService.registerOnSessionTimeout(this.on401.bind(this));
|
|
3188
3417
|
this.appLocale = this.i18nService.getAppLocale();
|
|
3189
3418
|
this.httpService.setLocale(this.appLocale);
|
|
3190
3419
|
}
|
|
@@ -3271,6 +3500,19 @@
|
|
|
3271
3500
|
i1.registerFnByExpr(expr, fn[0], fn[1]);
|
|
3272
3501
|
});
|
|
3273
3502
|
}
|
|
3503
|
+
/**
|
|
3504
|
+
* Utility method to check if an object has a property
|
|
3505
|
+
* This is commonly used in expressions to check object properties
|
|
3506
|
+
* @param obj The object to check
|
|
3507
|
+
* @param prop The property name to check
|
|
3508
|
+
* @returns true if the object has the property, false otherwise
|
|
3509
|
+
*/
|
|
3510
|
+
hasOwnObjectProperty(obj, prop) {
|
|
3511
|
+
if (!obj || typeof obj !== 'object') {
|
|
3512
|
+
return false;
|
|
3513
|
+
}
|
|
3514
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
3515
|
+
}
|
|
3274
3516
|
setMode(modes, shouldPersist = false) {
|
|
3275
3517
|
const htmlEl = document.getElementsByTagName('html')[0];
|
|
3276
3518
|
//html element sanity check
|
|
@@ -3299,6 +3541,24 @@
|
|
|
3299
3541
|
localStorage.setItem('wm-app-modes', JSON.stringify(modes));
|
|
3300
3542
|
}
|
|
3301
3543
|
;
|
|
3544
|
+
ngOnDestroy() {
|
|
3545
|
+
// MEMORY LEAK FIX: Destroy EventNotifier to release subscribers
|
|
3546
|
+
if (this._eventNotifier) {
|
|
3547
|
+
this._eventNotifier.destroy();
|
|
3548
|
+
this._eventNotifier = null;
|
|
3549
|
+
}
|
|
3550
|
+
// MEMORY LEAK FIX: Unsubscribe from session timeout
|
|
3551
|
+
if (this.sessionTimeoutUnsubscribe) {
|
|
3552
|
+
this.sessionTimeoutUnsubscribe();
|
|
3553
|
+
this.sessionTimeoutUnsubscribe = null;
|
|
3554
|
+
}
|
|
3555
|
+
// MEMORY LEAK FIX: Clear references
|
|
3556
|
+
this.Variables = null;
|
|
3557
|
+
this.Actions = null;
|
|
3558
|
+
this.appLocale = null;
|
|
3559
|
+
this.modes = null;
|
|
3560
|
+
this.dynamicComponentContainerRef = null;
|
|
3561
|
+
}
|
|
3302
3562
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppRef, deps: [{ token: i0__namespace.Injector }, { token: i1__namespace.AbstractI18nService }, { token: i1__namespace.StatePersistence }, { token: i1__namespace.AbstractHttpService }, { token: i2__namespace.SecurityService }, { token: i1$1__namespace.RouteReuseStrategy }], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
|
|
3303
3563
|
static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppRef }); }
|
|
3304
3564
|
}
|
|
@@ -3801,6 +4061,20 @@
|
|
|
3801
4061
|
this.messagesByContext[ctx] = {};
|
|
3802
4062
|
}
|
|
3803
4063
|
}
|
|
4064
|
+
ngOnDestroy() {
|
|
4065
|
+
// MEMORY LEAK FIX: Complete Subject to release subscriptions
|
|
4066
|
+
if (this.messageSource) {
|
|
4067
|
+
this.messageSource.complete();
|
|
4068
|
+
this.messageSource = null;
|
|
4069
|
+
}
|
|
4070
|
+
// MEMORY LEAK FIX: Clear messages by context
|
|
4071
|
+
if (this.messagesByContext) {
|
|
4072
|
+
Object.keys(this.messagesByContext).forEach(key => {
|
|
4073
|
+
delete this.messagesByContext[key];
|
|
4074
|
+
});
|
|
4075
|
+
this.messagesByContext = null;
|
|
4076
|
+
}
|
|
4077
|
+
}
|
|
3804
4078
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: SpinnerServiceImpl, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
|
|
3805
4079
|
static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: SpinnerServiceImpl }); }
|
|
3806
4080
|
}
|
|
@@ -4316,6 +4590,7 @@
|
|
|
4316
4590
|
this.isApplicationType = false;
|
|
4317
4591
|
this.enableSkipToMainContent = i1.getWmProjectProperties().enableSkipToMainContent === 'true' || i1.getWmProjectProperties().enableSkipToMainContent === true;
|
|
4318
4592
|
this.retryCount = 0;
|
|
4593
|
+
this.appManagerSubscriptions = []; // MEMORY LEAK FIX: Track appManager subscriptions
|
|
4319
4594
|
this.appLocale = {};
|
|
4320
4595
|
this.spinner = { show: false, messages: [], arialabel: '' };
|
|
4321
4596
|
this.isOAuthDialogOpen = false;
|
|
@@ -4328,7 +4603,8 @@
|
|
|
4328
4603
|
this.customIconsLoaderService.load();
|
|
4329
4604
|
}
|
|
4330
4605
|
// subscribe to OAuth changes
|
|
4331
|
-
|
|
4606
|
+
// MEMORY LEAK FIX: Store subscription reference for cleanup
|
|
4607
|
+
this.oAuthProvidersSubscription = oAuthService.getOAuthProvidersAsObservable().subscribe((providers) => {
|
|
4332
4608
|
this.providersConfig = providers;
|
|
4333
4609
|
if (providers.length) {
|
|
4334
4610
|
this.showOAuthDialog();
|
|
@@ -4338,7 +4614,8 @@
|
|
|
4338
4614
|
}
|
|
4339
4615
|
});
|
|
4340
4616
|
// Subscribe to the message source to show/hide app spinner
|
|
4341
|
-
|
|
4617
|
+
// MEMORY LEAK FIX: Store subscription reference for cleanup
|
|
4618
|
+
this.spinnerMessageSubscription = this.spinnerService.getMessageSource().asObservable().subscribe((data) => {
|
|
4342
4619
|
// setTimeout is to avoid 'ExpressionChangedAfterItHasBeenCheckedError'
|
|
4343
4620
|
setTimeout(() => {
|
|
4344
4621
|
this.spinner.show = data.show;
|
|
@@ -4350,7 +4627,8 @@
|
|
|
4350
4627
|
utils.setTheme('bs3');
|
|
4351
4628
|
let spinnerId;
|
|
4352
4629
|
let onPageRendered = i1.noop;
|
|
4353
|
-
|
|
4630
|
+
// MEMORY LEAK FIX: Store subscription reference for cleanup
|
|
4631
|
+
this.routerEventsSubscription = this.router.events.subscribe(e => {
|
|
4354
4632
|
if (e instanceof i1$1.NavigationStart) {
|
|
4355
4633
|
let page = e.url.split('?')[0];
|
|
4356
4634
|
page = page.substring(1);
|
|
@@ -4385,12 +4663,13 @@
|
|
|
4385
4663
|
}, 1000);
|
|
4386
4664
|
}
|
|
4387
4665
|
});
|
|
4388
|
-
|
|
4666
|
+
// MEMORY LEAK FIX: Store subscription unsubscribe functions
|
|
4667
|
+
this.appManagerSubscriptions.push(this.appManager.subscribe('pageReady', () => {
|
|
4389
4668
|
onPageRendered();
|
|
4390
|
-
});
|
|
4391
|
-
this.appManager.subscribe('pageAttach', () => {
|
|
4669
|
+
}));
|
|
4670
|
+
this.appManagerSubscriptions.push(this.appManager.subscribe('pageAttach', () => {
|
|
4392
4671
|
onPageRendered();
|
|
4393
|
-
});
|
|
4672
|
+
}));
|
|
4394
4673
|
}
|
|
4395
4674
|
showOAuthDialog() {
|
|
4396
4675
|
if (!this.isOAuthDialogOpen) {
|
|
@@ -4465,9 +4744,35 @@
|
|
|
4465
4744
|
i1.$invokeWatchers();
|
|
4466
4745
|
}
|
|
4467
4746
|
ngOnDestroy() {
|
|
4747
|
+
// MEMORY LEAK FIX: Unwatch all App-scoped watchers when app is destroyed
|
|
4748
|
+
i1.$unwatchAllByScope('App');
|
|
4749
|
+
// MEMORY LEAK FIX: Unsubscribe from navigation end subscription
|
|
4468
4750
|
if (this.navigationEndSubscription) {
|
|
4469
4751
|
this.navigationEndSubscription.unsubscribe();
|
|
4470
|
-
|
|
4752
|
+
this.navigationEndSubscription = null;
|
|
4753
|
+
}
|
|
4754
|
+
// MEMORY LEAK FIX: Unsubscribe from OAuth providers subscription
|
|
4755
|
+
if (this.oAuthProvidersSubscription) {
|
|
4756
|
+
this.oAuthProvidersSubscription.unsubscribe();
|
|
4757
|
+
this.oAuthProvidersSubscription = null;
|
|
4758
|
+
}
|
|
4759
|
+
// MEMORY LEAK FIX: Unsubscribe from spinner message subscription
|
|
4760
|
+
if (this.spinnerMessageSubscription) {
|
|
4761
|
+
this.spinnerMessageSubscription.unsubscribe();
|
|
4762
|
+
this.spinnerMessageSubscription = null;
|
|
4763
|
+
}
|
|
4764
|
+
// MEMORY LEAK FIX: Unsubscribe from router events subscription
|
|
4765
|
+
if (this.routerEventsSubscription) {
|
|
4766
|
+
this.routerEventsSubscription.unsubscribe();
|
|
4767
|
+
this.routerEventsSubscription = null;
|
|
4768
|
+
}
|
|
4769
|
+
// MEMORY LEAK FIX: Unsubscribe from appManager subscriptions
|
|
4770
|
+
this.appManagerSubscriptions.forEach(unsubscribe => {
|
|
4771
|
+
if (unsubscribe) {
|
|
4772
|
+
unsubscribe();
|
|
4773
|
+
}
|
|
4774
|
+
});
|
|
4775
|
+
this.appManagerSubscriptions = [];
|
|
4471
4776
|
}
|
|
4472
4777
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppComponent, deps: [{ token: PipeProvider }, { token: i0__namespace.ApplicationRef }, { token: i0__namespace.ElementRef }, { token: i2$2__namespace.OAuthService }, { token: i1__namespace.AbstractDialogService }, { token: i1__namespace.AbstractSpinnerService }, { token: i0__namespace.NgZone }, { token: i1$1__namespace.Router }, { token: i1__namespace.App }, { token: AppManagerService }, { token: i1__namespace.CustomIconsLoaderService }], target: i0__namespace.ɵɵFactoryTarget.Component }); }
|
|
4473
4778
|
static { this.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppComponent, isStandalone: true, selector: "app-root", viewQueries: [{ propertyName: "routerOutlet", first: true, predicate: i1$1.RouterOutlet, descendants: true }, { propertyName: "dynamicComponentContainerRef", first: true, predicate: ["dynamicComponent"], descendants: true, read: i0.ViewContainerRef }], ngImport: i0__namespace, template: "@if (startApp) {\n @if(enableSkipToMainContent) {\n <div id=\"app-focus-start\" tabindex=\"-1\"></div>\n <a href=\"javascript:void(0);\" class=\"skip\" (click)=\"skipToAppContent($event)\">{{appLocale.LABEL_SKIP_TO_MAIN_CONTENT || 'Skip to main content'}}</a>\n }\n <router-outlet></router-outlet>\n @if (isApplicationType) {\n <div wmContainer partialContainer content=\"Common\" hidden class=\"ng-hide\"></div>\n }\n <app-spinner name=\"globalspinner\" classname=\"global-spinner\" role=\"alert\" aria-live=\"assertive\" [attr.aria-label]=\"spinner.arialabel || 'Loading'\" [show]=\"spinner.show\" [spinnermessages]=\"spinner.messages\"></app-spinner>\n <div wmDialog name=\"oAuthLoginDialog\" title=\"Application is requesting you to sign in with\"\n close.event=\"closeOAuthDialog()\">\n <ng-template #dialogBody>\n <ul class=\"list-items\">\n @for (provider of providersConfig; track provider) {\n <li class=\"list-item\">\n <button class=\"btn\" (click)=\"provider.invoke()\">{{provider.name}}</button>\n </li>\n }\n </ul>\n </ng-template>\n </div>\n <div wmConfirmDialog name=\"_app-confirm-dialog\" title.bind=\"title\" message.bind=\"message\" oktext.bind=\"oktext\"\n canceltext.bind=\"canceltext\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n @if (!isApplicationType) {\n <div wmConfirmDialog name=\"PrefabConfirmDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n }\n @if (!isApplicationType) {\n <div wmAlertDialog name=\"PrefabAlertDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n }\n <div wmAppExt></div>\n <i id=\"wm-mobile-display\"></i>\n}\n<!--Dummy container to create the component dynamically-->\n<ng-container #dynamicComponent></ng-container>\n", dependencies: [{ kind: "ngmodule", type: i5.CommonModule }, { kind: "directive", type: i1$1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: alertDialog.AlertDialogComponent, selector: "div[wmAlertDialog]" }, { kind: "component", type: confirmDialog.ConfirmDialogComponent, selector: "div[wmConfirmDialog]" }, { kind: "component", type: designDialog.DialogComponent, selector: "div[wmDialog]" }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["show", "spinnermessages", "classname", "arialabel"] }, { kind: "directive", type: base.ContainerDirective, selector: "[wmContainer]" }, { kind: "directive", type: base.PartialParamHandlerDirective, selector: "[partialContainer]" }, { kind: "directive", type: base.PartialContainerDirective, selector: "[partialContainer]" }], encapsulation: i0__namespace.ViewEncapsulation.None }); }
|
|
@@ -4576,6 +4881,14 @@
|
|
|
4576
4881
|
}
|
|
4577
4882
|
});
|
|
4578
4883
|
}
|
|
4884
|
+
ngOnDestroy() {
|
|
4885
|
+
// MEMORY LEAK FIX: Clear ViewContainerRef to destroy dynamically created components
|
|
4886
|
+
if (this.vcRef) {
|
|
4887
|
+
this.vcRef.clear();
|
|
4888
|
+
}
|
|
4889
|
+
// MEMORY LEAK FIX: Clear ElementRef reference
|
|
4890
|
+
this.elRef = null;
|
|
4891
|
+
}
|
|
4579
4892
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: PrefabDirective, deps: [{ token: base.WidgetRef, self: true }, { token: i0__namespace.ViewContainerRef }, { token: i0__namespace.ElementRef }, { token: PrefabManagerService }, { token: i0__namespace.ComponentFactoryResolver }, { token: i0__namespace.Injector }, { token: ComponentRefProvider }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
4580
4893
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PrefabDirective, isStandalone: true, selector: "[wmPrefab][prefabname]", ngImport: i0__namespace }); }
|
|
4581
4894
|
}
|
|
@@ -4596,7 +4909,8 @@
|
|
|
4596
4909
|
class PrefabPreviewComponent {
|
|
4597
4910
|
constructor(prefabManager) {
|
|
4598
4911
|
this.prefabManager = prefabManager;
|
|
4599
|
-
|
|
4912
|
+
// MEMORY LEAK FIX: Store bound function reference for cleanup
|
|
4913
|
+
this.windowMessageListener = (e) => {
|
|
4600
4914
|
const context = e.data && e.data.context;
|
|
4601
4915
|
if (context !== PREFAB) {
|
|
4602
4916
|
return;
|
|
@@ -4615,7 +4929,8 @@
|
|
|
4615
4929
|
else if (action === 'invoke-script') {
|
|
4616
4930
|
this.invokeScript(payload);
|
|
4617
4931
|
}
|
|
4618
|
-
}
|
|
4932
|
+
};
|
|
4933
|
+
window.addEventListener('message', this.windowMessageListener);
|
|
4619
4934
|
}
|
|
4620
4935
|
postMessage(action, payload) {
|
|
4621
4936
|
const data = {
|
|
@@ -4632,7 +4947,8 @@
|
|
|
4632
4947
|
}
|
|
4633
4948
|
init() {
|
|
4634
4949
|
this.previewMode = true;
|
|
4635
|
-
|
|
4950
|
+
// MEMORY LEAK FIX: Store subscription reference
|
|
4951
|
+
this.readyStateSubscription = this.prefabInstance.readyState.subscribe(() => { }, () => { }, () => {
|
|
4636
4952
|
this.prefabManager.getConfig('__self__')
|
|
4637
4953
|
.then(config => {
|
|
4638
4954
|
this.config = config;
|
|
@@ -4666,6 +4982,22 @@
|
|
|
4666
4982
|
this.setupEventListeners();
|
|
4667
4983
|
this.postMessage('init');
|
|
4668
4984
|
}
|
|
4985
|
+
ngOnDestroy() {
|
|
4986
|
+
// MEMORY LEAK FIX: Remove window message listener
|
|
4987
|
+
if (this.windowMessageListener) {
|
|
4988
|
+
window.removeEventListener('message', this.windowMessageListener);
|
|
4989
|
+
this.windowMessageListener = null;
|
|
4990
|
+
}
|
|
4991
|
+
// MEMORY LEAK FIX: Unsubscribe from readyState
|
|
4992
|
+
if (this.readyStateSubscription) {
|
|
4993
|
+
this.readyStateSubscription.unsubscribe();
|
|
4994
|
+
this.readyStateSubscription = null;
|
|
4995
|
+
}
|
|
4996
|
+
// MEMORY LEAK FIX: Clear ViewChild reference
|
|
4997
|
+
this.prefabInstance = null;
|
|
4998
|
+
// MEMORY LEAK FIX: Clear config
|
|
4999
|
+
this.config = null;
|
|
5000
|
+
}
|
|
4669
5001
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: PrefabPreviewComponent, deps: [{ token: PrefabManagerService }], target: i0__namespace.ɵɵFactoryTarget.Component }); }
|
|
4670
5002
|
static { this.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PrefabPreviewComponent, isStandalone: true, selector: "wm-prefab-preview", viewQueries: [{ propertyName: "prefabInstance", first: true, predicate: prefab.PrefabDirective, descendants: true, static: true }], ngImport: i0__namespace, template: `
|
|
4671
5003
|
<div class="prefab-preview row">
|
|
@@ -4746,6 +5078,7 @@
|
|
|
4746
5078
|
selector: selector of the component
|
|
4747
5079
|
transpile: flag for transpiling HTML. By default it is true
|
|
4748
5080
|
nocache: flag for render it from cache or not. By default it is true
|
|
5081
|
+
* @returns ComponentRef - the created component reference for cleanup
|
|
4749
5082
|
*/
|
|
4750
5083
|
async addComponent(target, markup, context = {}, options = {}) {
|
|
4751
5084
|
options.transpile = i1.isDefined(options.transpile) ? options.transpile : true;
|
|
@@ -4755,6 +5088,8 @@
|
|
|
4755
5088
|
const component = this.app.dynamicComponentContainerRef.createComponent(componentFactoryRef, 0, lodashEs.get(options, 'inj'));
|
|
4756
5089
|
i1.extendProto(component.instance, context);
|
|
4757
5090
|
target.appendChild(component.location.nativeElement);
|
|
5091
|
+
// MEMORY LEAK FIX: Return component reference so caller can destroy it
|
|
5092
|
+
return component;
|
|
4758
5093
|
}
|
|
4759
5094
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: DynamicComponentRefProviderService, deps: [{ token: i1__namespace.App }, { token: AppManagerService }, { token: i0__namespace.Compiler }], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
|
|
4760
5095
|
static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: DynamicComponentRefProviderService }); }
|
|
@@ -24,6 +24,10 @@ export declare class AppComponent implements DoCheck, AfterViewInit, OnDestroy {
|
|
|
24
24
|
enableSkipToMainContent: boolean;
|
|
25
25
|
private retryCount;
|
|
26
26
|
private navigationEndSubscription;
|
|
27
|
+
private oAuthProvidersSubscription;
|
|
28
|
+
private spinnerMessageSubscription;
|
|
29
|
+
private routerEventsSubscription;
|
|
30
|
+
private appManagerSubscriptions;
|
|
27
31
|
appLocale: any;
|
|
28
32
|
routerOutlet: RouterOutlet;
|
|
29
33
|
dynamicComponentContainerRef: ViewContainerRef;
|