1- import { ApplicationRef , ComponentRef , createComponent , createEnvironmentInjector , Injectable } from "@angular/core" ;
1+ import { ApplicationRef , ComponentRef , createComponent , createEnvironmentInjector , inject , Injectable } from "@angular/core" ;
22import { Registry } from "../../Registry" ;
33import { NGSuiteComponent } from "../../core" ;
44import { NGSuiteDialogConfig , NGSuiteDialogPopupOptions , NGSuiteDialogRoot } from "../interfaces" ;
55import { NGSuiteDialogInstance } from "./DialogInstance" ;
66import { NGSuiteDialogAlertComponent } from "../popup/alert/alert.component" ;
77import { NGSuiteDialogConfirmComponent } from "../popup/confirm/confirm.component" ;
88import { Observable , throwError } from "rxjs" ;
9+ import { NGSuiteDialogRegistry } from "./DialogRegistry" ;
910
10- const DialogInstances : NGSuiteDialogInstance [ ] = [ ] ;
1111const DialogRootMap = new Map < NGSuiteDialog , NGSuiteDialogRoot > ( ) ;
1212
1313@Injectable ( {
1414 providedIn : 'root' ,
1515} )
1616export class NGSuiteDialog {
1717
18- constructor ( ) {
19- this . onEscape = this . onEscape . bind ( this ) ;
20- this . onDocumentClick = this . onDocumentClick . bind ( this ) ;
18+ private readonly registry = inject ( NGSuiteDialogRegistry ) ;
2119
20+ constructor ( ) {
2221 document . addEventListener ( 'keydown' , this . onEscape ) ;
2322 document . addEventListener ( 'click' , this . onDocumentClick ) ;
2423 }
@@ -32,26 +31,20 @@ export class NGSuiteDialog {
3231 DialogRootMap . delete ( instance ) ;
3332 }
3433
35- private onEscape ( e : KeyboardEvent ) {
34+ private onEscape = ( e : KeyboardEvent ) => {
3635 if ( e . key === 'Escape' ) {
3736 e . preventDefault ( ) ;
3837
39- if ( ! DialogInstances . length ) return ;
38+ const instance = this . registry . active ( ) ;
4039
41- const instance = DialogInstances [ DialogInstances . length - 1 ] ;
42-
43- instance . send ( {
40+ instance ?. send ( {
4441 name : 'esc.close' ,
4542 value : false
4643 } ) ;
4744 }
4845 }
4946
50- private onDocumentClick ( e : MouseEvent ) {
51- if ( ! DialogInstances . length ) return ;
52- const instance = DialogInstances [ DialogInstances . length - 1 ] ;
53- instance . focus ( ) ;
54- }
47+ private onDocumentClick = ( e : MouseEvent ) => this . registry . focus ( ) ;
5548
5649 open ( component : NGSuiteComponent < any > , config ?: NGSuiteDialogConfig ) : NGSuiteDialogInstance {
5750 if ( ! config ) config = null as any ;
@@ -71,25 +64,16 @@ export class NGSuiteDialog {
7164 config
7265 ) ;
7366
74- DialogInstances . push ( instance ) ;
67+ this . registry . add ( instance ) ;
7568
7669 instance . afterClosed . subscribe ( ( ) => {
77- const index = DialogInstances . indexOf ( instance ) ;
78- DialogInstances . splice ( index , 1 ) ;
79-
80- const hasInstances = DialogInstances . length > 0 ;
81- document . body . classList . toggle ( 'ngs-dialog-open' , hasInstances ) ;
70+ this . registry . remove ( instance ) ;
8271 } ) ;
8372
8473 return instance ;
8574 }
8675
87- closeAll ( ) {
88- while ( DialogInstances . length ) {
89- const instance = DialogInstances . pop ( ) ;
90- instance ?. close ( false ) ;
91- }
92- }
76+ readonly closeAll = ( ) => this . registry . closeAll ( ) ;
9377
9478 alert ( title : string , message : string ) {
9579 const data : NGSuiteDialogPopupOptions = { title, message } ;
0 commit comments