@@ -19,7 +19,7 @@ import {
19
19
signal ,
20
20
} from '@angular/core' ;
21
21
import { Observable , Subject , defer } from 'rxjs' ;
22
- import { startWith } from 'rxjs/operators' ;
22
+ import { startWith , take } from 'rxjs/operators' ;
23
23
import { _IdGenerator } from '../a11y' ;
24
24
import { Direction , Directionality } from '../bidi' ;
25
25
import {
@@ -30,8 +30,8 @@ import {
30
30
OverlayContainer ,
31
31
OverlayRef ,
32
32
} from '../overlay' ;
33
- import { BasePortalOutlet , ComponentPortal , TemplatePortal } from '../portal' ;
34
- import { DialogConfig } from './dialog-config' ;
33
+ import { ComponentPortal , TemplatePortal } from '../portal' ;
34
+ import { DialogConfig , DialogContainer } from './dialog-config' ;
35
35
import { DialogRef } from './dialog-ref' ;
36
36
37
37
import { CdkDialogContainer } from './dialog-container' ;
@@ -141,14 +141,21 @@ export class Dialog implements OnDestroy {
141
141
const dialogRef = new DialogRef ( overlayRef , config ) ;
142
142
const dialogContainer = this . _attachContainer ( overlayRef , dialogRef , config ) ;
143
143
144
- ( dialogRef as { containerInstance : BasePortalOutlet } ) . containerInstance = dialogContainer ;
145
- this . _attachDialogContent ( componentOrTemplateRef , dialogRef , dialogContainer , config ) ;
144
+ ( dialogRef as { containerInstance : DialogContainer } ) . containerInstance = dialogContainer ;
146
145
147
146
// If this is the first dialog that we're opening, hide all the non-overlay content.
148
147
if ( ! this . openDialogs . length ) {
149
- this . _hideNonDialogContentFromAssistiveTechnology ( ) ;
148
+ if ( dialogContainer . _focusTrapped ) {
149
+ dialogContainer . _focusTrapped . pipe ( take ( 1 ) ) . subscribe ( ( ) => {
150
+ this . _hideNonDialogContentFromAssistiveTechnology ( ) ;
151
+ } ) ;
152
+ } else {
153
+ this . _hideNonDialogContentFromAssistiveTechnology ( ) ;
154
+ }
150
155
}
151
156
157
+ this . _attachDialogContent ( componentOrTemplateRef , dialogRef , dialogContainer , config ) ;
158
+
152
159
( this . openDialogs as DialogRef < R , C > [ ] ) . push ( dialogRef ) ;
153
160
dialogRef . closed . subscribe ( ( ) => this . _removeOpenDialog ( dialogRef , true ) ) ;
154
161
this . afterOpened . next ( dialogRef ) ;
@@ -233,14 +240,14 @@ export class Dialog implements OnDestroy {
233
240
overlay : OverlayRef ,
234
241
dialogRef : DialogRef < R , C > ,
235
242
config : DialogConfig < D , DialogRef < R , C > > ,
236
- ) : BasePortalOutlet {
243
+ ) : DialogContainer {
237
244
const userInjector = config . injector || config . viewContainerRef ?. injector ;
238
245
const providers : StaticProvider [ ] = [
239
246
{ provide : DialogConfig , useValue : config } ,
240
247
{ provide : DialogRef , useValue : dialogRef } ,
241
248
{ provide : OverlayRef , useValue : overlay } ,
242
249
] ;
243
- let containerType : Type < BasePortalOutlet > ;
250
+ let containerType : Type < DialogContainer > ;
244
251
245
252
if ( config . container ) {
246
253
if ( typeof config . container === 'function' ) {
@@ -274,7 +281,7 @@ export class Dialog implements OnDestroy {
274
281
private _attachDialogContent < R , D , C > (
275
282
componentOrTemplateRef : ComponentType < C > | TemplateRef < C > ,
276
283
dialogRef : DialogRef < R , C > ,
277
- dialogContainer : BasePortalOutlet ,
284
+ dialogContainer : DialogContainer ,
278
285
config : DialogConfig < D , DialogRef < R , C > > ,
279
286
) {
280
287
if ( componentOrTemplateRef instanceof TemplateRef ) {
@@ -316,7 +323,7 @@ export class Dialog implements OnDestroy {
316
323
private _createInjector < R , D , C > (
317
324
config : DialogConfig < D , DialogRef < R , C > > ,
318
325
dialogRef : DialogRef < R , C > ,
319
- dialogContainer : BasePortalOutlet ,
326
+ dialogContainer : DialogContainer ,
320
327
fallbackInjector : Injector | undefined ,
321
328
) : Injector {
322
329
const userInjector = config . injector || config . viewContainerRef ?. injector ;
0 commit comments