survey-angular-ui 2.5.7 → 2.5.8

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.
@@ -1,13 +1,13 @@
1
- import { IDialogOptions, PopupBaseViewModel } from "survey-core";
1
+ import { PopupModalManager } from "survey-core";
2
2
  import { PopupService } from "./popup.service";
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class ModalComponent {
5
5
  private popupService;
6
- model: PopupBaseViewModel;
7
- private portalHost;
8
6
  private functionDefined;
7
+ private hosts;
8
+ private modalManager;
9
9
  constructor(popupService: PopupService);
10
- showDialog(dialogOptions: IDialogOptions, rootElement?: HTMLElement): PopupBaseViewModel;
10
+ createModalManager(): PopupModalManager;
11
11
  ngOnInit(): void;
12
12
  ngOnDestroy(): void;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, never>;
@@ -1,35 +1,35 @@
1
1
  import { Component } from "@angular/core";
2
- import { createPopupModalViewModel, settings } from "survey-core";
2
+ import { PopupModalManager, settings } from "survey-core";
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "./popup.service";
5
5
  export class ModalComponent {
6
6
  constructor(popupService) {
7
7
  this.popupService = popupService;
8
8
  this.functionDefined = false;
9
+ this.hosts = {};
10
+ this.modalManager = this.createModalManager();
9
11
  }
10
- showDialog(dialogOptions, rootElement) {
11
- const popupViewModel = this.model = createPopupModalViewModel(dialogOptions, rootElement);
12
- const onVisibilityChangedCallback = (_, options) => {
13
- if (!options.isVisible) {
14
- this.portalHost.detach();
15
- this.model.dispose();
12
+ createModalManager() {
13
+ const modalManager = new PopupModalManager();
14
+ modalManager.onModalsChangedCallback = (_, addedModals, removedModals) => {
15
+ for (const modal of addedModals) {
16
+ this.hosts[modal.uniqueId] = this.popupService.createComponent(modal);
17
+ }
18
+ for (const modal of removedModals) {
19
+ if (this.hosts[modal.uniqueId]) {
20
+ this.hosts[modal.uniqueId].detach();
21
+ delete this.hosts[modal.uniqueId];
22
+ }
16
23
  }
17
24
  };
18
- popupViewModel.onVisibilityChanged.add(onVisibilityChangedCallback);
19
- this.portalHost = this.popupService.createComponent(this.model);
20
- this.model.model.isVisible = true;
21
- return this.model;
25
+ return modalManager;
22
26
  }
23
27
  ngOnInit() {
24
28
  this.functionDefined = true;
25
- settings.showDialog = (dialogOptions, rootElement) => {
26
- return this.showDialog(dialogOptions, rootElement);
27
- };
29
+ settings.showDialog = (dialogOptions, rootElement) => this.modalManager.addDialog(dialogOptions, rootElement);
28
30
  }
29
31
  ngOnDestroy() {
30
- var _a, _b;
31
- (_a = this.portalHost) === null || _a === void 0 ? void 0 : _a.detach();
32
- (_b = this.model) === null || _b === void 0 ? void 0 : _b.dispose();
32
+ this.modalManager.clear();
33
33
  if (this.functionDefined) {
34
34
  settings.showDialog = undefined;
35
35
  }
@@ -45,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
45
45
  styleUrls: ["../../hide-host.scss"]
46
46
  }]
47
47
  }], ctorParameters: function () { return [{ type: i1.PopupService }]; } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BvcHVwL21vZGFsLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQXNDLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBU3RHLE1BQU0sT0FBTyxjQUFjO0lBTXpCLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRnRDLG9CQUFlLEdBQVksS0FBSyxDQUFDO0lBR3pDLENBQUM7SUFDRCxVQUFVLENBQUMsYUFBNkIsRUFBRSxXQUF5QjtRQUNqRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLHlCQUF5QixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRixNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBcUIsRUFBRSxPQUErQixFQUFFLEVBQUU7WUFDN0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUM7UUFDRixjQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUU1QixRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsYUFBNkIsRUFBRSxXQUF5QixFQUFFLEVBQUU7WUFDakYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsV0FBVzs7UUFDVCxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzFCLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLFFBQVEsQ0FBQyxVQUFVLEdBQVEsU0FBUyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQzs7NEdBbENVLGNBQWM7Z0dBQWQsY0FBYyw2REFKZixFQUFFOzRGQUlELGNBQWM7a0JBTjFCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osU0FBUyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9tUG9ydGFsT3V0bGV0IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRGlhbG9nT3B0aW9ucywgUG9wdXBCYXNlVmlld01vZGVsLCBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUG9wdXBTZXJ2aWNlIH0gZnJvbSBcIi4vcG9wdXAuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic3YtbmctbW9kYWwtY29udGFpbmVyXCIsXG4gIHRlbXBsYXRlOiBcIlwiLFxuICBzdHlsZVVybHM6IFtcIi4uLy4uL2hpZGUtaG9zdC5zY3NzXCJdXG59KVxuXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQge1xuXG4gIHB1YmxpYyBtb2RlbCE6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBwb3J0YWxIb3N0ITogRG9tUG9ydGFsT3V0bGV0O1xuICBwcml2YXRlIGZ1bmN0aW9uRGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcG9wdXBTZXJ2aWNlOiBQb3B1cFNlcnZpY2UpIHtcbiAgfVxuICBzaG93RGlhbG9nKGRpYWxvZ09wdGlvbnM6IElEaWFsb2dPcHRpb25zLCByb290RWxlbWVudD86IEhUTUxFbGVtZW50KTogUG9wdXBCYXNlVmlld01vZGVsIHtcbiAgICBjb25zdCBwb3B1cFZpZXdNb2RlbCA9IHRoaXMubW9kZWwgPSBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsKGRpYWxvZ09wdGlvbnMsIHJvb3RFbGVtZW50KTtcbiAgICBjb25zdCBvblZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2sgPSAoXzogUG9wdXBCYXNlVmlld01vZGVsLCBvcHRpb25zOiB7IGlzVmlzaWJsZTogYm9vbGVhbiB9KSA9PiB7XG4gICAgICBpZiAoIW9wdGlvbnMuaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMucG9ydGFsSG9zdC5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBwb3B1cFZpZXdNb2RlbC5vblZpc2liaWxpdHlDaGFuZ2VkLmFkZChvblZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIHRoaXMucG9ydGFsSG9zdCA9IHRoaXMucG9wdXBTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudCh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLm1vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mdW5jdGlvbkRlZmluZWQgPSB0cnVlO1xuXG4gICAgc2V0dGluZ3Muc2hvd0RpYWxvZyA9IChkaWFsb2dPcHRpb25zOiBJRGlhbG9nT3B0aW9ucywgcm9vdEVsZW1lbnQ/OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0RpYWxvZyhkaWFsb2dPcHRpb25zLCByb290RWxlbWVudCk7XG4gICAgfTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnBvcnRhbEhvc3Q/LmRldGFjaCgpO1xuICAgIHRoaXMubW9kZWw/LmRpc3Bvc2UoKTtcbiAgICBpZiAodGhpcy5mdW5jdGlvbkRlZmluZWQpIHtcbiAgICAgIHNldHRpbmdzLnNob3dEaWFsb2cgPSA8YW55PnVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BvcHVwL21vZGFsLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQXNDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBYzlGLE1BQU0sT0FBTyxjQUFjO0lBSXpCLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBSHRDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLFVBQUssR0FBeUMsRUFBRSxDQUFDO1FBQ2pELGlCQUFZLEdBQXNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBRXBFLENBQUM7SUFDRCxrQkFBa0I7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQzdDLFlBQVksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEVBQUU7WUFDdkUsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUU7Z0JBQ2pDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNuQzthQUNGO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsYUFBNkIsRUFBRSxXQUF5QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUksQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixRQUFRLENBQUMsVUFBVSxHQUFRLFNBQVMsQ0FBQztTQUN0QztJQUNILENBQUM7OzRHQTlCVSxjQUFjO2dHQUFkLGNBQWMsNkRBSmYsRUFBRTs0RkFJRCxjQUFjO2tCQU4xQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSxFQUFFO29CQUNaLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERvbVBvcnRhbE91dGxldCB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSURpYWxvZ09wdGlvbnMsIFBvcHVwQmFzZVZpZXdNb2RlbCwgUG9wdXBNb2RhbE1hbmFnZXIsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQb3B1cFNlcnZpY2UgfSBmcm9tIFwiLi9wb3B1cC5zZXJ2aWNlXCI7XG5cbmludGVyZmFjZSBJTW9kYWxXaW5kb3dEZXNjcmlwdG9yIHtcbiAgbW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcG9ydGFsSG9zdDogRG9tUG9ydGFsT3V0bGV0O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic3YtbmctbW9kYWwtY29udGFpbmVyXCIsXG4gIHRlbXBsYXRlOiBcIlwiLFxuICBzdHlsZVVybHM6IFtcIi4uLy4uL2hpZGUtaG9zdC5zY3NzXCJdXG59KVxuXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQge1xuICBwcml2YXRlIGZ1bmN0aW9uRGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGhvc3RzOiB7IFtpbmRleDogbnVtYmVyXTogRG9tUG9ydGFsT3V0bGV0IH0gPSB7fTtcbiAgcHJpdmF0ZSBtb2RhbE1hbmFnZXI6IFBvcHVwTW9kYWxNYW5hZ2VyID0gdGhpcy5jcmVhdGVNb2RhbE1hbmFnZXIoKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwb3B1cFNlcnZpY2U6IFBvcHVwU2VydmljZSkge1xuICB9XG4gIGNyZWF0ZU1vZGFsTWFuYWdlcigpOiBQb3B1cE1vZGFsTWFuYWdlciB7XG4gICAgY29uc3QgbW9kYWxNYW5hZ2VyID0gbmV3IFBvcHVwTW9kYWxNYW5hZ2VyKCk7XG4gICAgbW9kYWxNYW5hZ2VyLm9uTW9kYWxzQ2hhbmdlZENhbGxiYWNrID0gKF8sIGFkZGVkTW9kYWxzLCByZW1vdmVkTW9kYWxzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGFsIG9mIGFkZGVkTW9kYWxzKSB7XG4gICAgICAgIHRoaXMuaG9zdHNbbW9kYWwudW5pcXVlSWRdID0gdGhpcy5wb3B1cFNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KG1vZGFsKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbW9kYWwgb2YgcmVtb3ZlZE1vZGFscykge1xuICAgICAgICBpZiAodGhpcy5ob3N0c1ttb2RhbC51bmlxdWVJZF0pIHtcbiAgICAgICAgICB0aGlzLmhvc3RzW21vZGFsLnVuaXF1ZUlkXS5kZXRhY2goKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ob3N0c1ttb2RhbC51bmlxdWVJZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBtb2RhbE1hbmFnZXI7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mdW5jdGlvbkRlZmluZWQgPSB0cnVlO1xuICAgIHNldHRpbmdzLnNob3dEaWFsb2cgPSAoZGlhbG9nT3B0aW9uczogSURpYWxvZ09wdGlvbnMsIHJvb3RFbGVtZW50PzogSFRNTEVsZW1lbnQpID0+IHRoaXMubW9kYWxNYW5hZ2VyLmFkZERpYWxvZyhkaWFsb2dPcHRpb25zLCByb290RWxlbWVudCk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5tb2RhbE1hbmFnZXIuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5mdW5jdGlvbkRlZmluZWQpIHtcbiAgICAgIHNldHRpbmdzLnNob3dEaWFsb2cgPSA8YW55PnVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuIl19
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, Component, ViewChild, Directive, Input, VERSION, Injectable, HostBinding, Pipe, ElementRef, HostListener, ViewContainerRef, NgModule } from '@angular/core';
3
3
  import * as Survey from 'survey-core';
4
- import { createPopupModalViewModel, settings, ScrollViewModel, SvgRegistry, addIconsToThemeSet, PopupSurveyModel, LocalizableString, createPopupViewModel, Helpers, DropdownMultiSelectListModel, RendererFactory, ButtonGroupItemModel, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, ActionDropdownViewModel, SurveyProgressModel, ProgressButtonsResponsivityManager, SurveyModel } from 'survey-core';
4
+ import { PopupModalManager, settings, ScrollViewModel, SvgRegistry, addIconsToThemeSet, PopupSurveyModel, LocalizableString, createPopupViewModel, Helpers, DropdownMultiSelectListModel, RendererFactory, ButtonGroupItemModel, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, ActionDropdownViewModel, SurveyProgressModel, ProgressButtonsResponsivityManager, SurveyModel } from 'survey-core';
5
5
  import { icons } from 'survey-core/icons/iconsV1';
6
6
  import { icons as icons$1 } from 'survey-core/icons/iconsV2';
7
7
  import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
@@ -456,30 +456,30 @@ class ModalComponent {
456
456
  constructor(popupService) {
457
457
  this.popupService = popupService;
458
458
  this.functionDefined = false;
459
- }
460
- showDialog(dialogOptions, rootElement) {
461
- const popupViewModel = this.model = createPopupModalViewModel(dialogOptions, rootElement);
462
- const onVisibilityChangedCallback = (_, options) => {
463
- if (!options.isVisible) {
464
- this.portalHost.detach();
465
- this.model.dispose();
459
+ this.hosts = {};
460
+ this.modalManager = this.createModalManager();
461
+ }
462
+ createModalManager() {
463
+ const modalManager = new PopupModalManager();
464
+ modalManager.onModalsChangedCallback = (_, addedModals, removedModals) => {
465
+ for (const modal of addedModals) {
466
+ this.hosts[modal.uniqueId] = this.popupService.createComponent(modal);
467
+ }
468
+ for (const modal of removedModals) {
469
+ if (this.hosts[modal.uniqueId]) {
470
+ this.hosts[modal.uniqueId].detach();
471
+ delete this.hosts[modal.uniqueId];
472
+ }
466
473
  }
467
474
  };
468
- popupViewModel.onVisibilityChanged.add(onVisibilityChangedCallback);
469
- this.portalHost = this.popupService.createComponent(this.model);
470
- this.model.model.isVisible = true;
471
- return this.model;
475
+ return modalManager;
472
476
  }
473
477
  ngOnInit() {
474
478
  this.functionDefined = true;
475
- settings.showDialog = (dialogOptions, rootElement) => {
476
- return this.showDialog(dialogOptions, rootElement);
477
- };
479
+ settings.showDialog = (dialogOptions, rootElement) => this.modalManager.addDialog(dialogOptions, rootElement);
478
480
  }
479
481
  ngOnDestroy() {
480
- var _a, _b;
481
- (_a = this.portalHost) === null || _a === void 0 ? void 0 : _a.detach();
482
- (_b = this.model) === null || _b === void 0 ? void 0 : _b.dispose();
482
+ this.modalManager.clear();
483
483
  if (this.functionDefined) {
484
484
  settings.showDialog = undefined;
485
485
  }