diff --git a/src/app/core/services/modal.service.spec.ts b/src/app/core/services/modal.service.spec.ts index 12e140d..6053020 100644 --- a/src/app/core/services/modal.service.spec.ts +++ b/src/app/core/services/modal.service.spec.ts @@ -80,6 +80,21 @@ describe('ModalService', () => { expect(ref.dismissReason()).toBeNull(); }); + it('keeps a modal opened synchronously from an afterClosed subscriber', () => { + const firstRef = service.open(FirstTestModalComponent); + let secondRef: ModalRef | undefined; + + firstRef.afterClosed$.subscribe(() => { + secondRef = service.open(SecondTestModalComponent); + }); + + firstRef.close(); + + expect(secondRef).toBeDefined(); + expect(service.activeModal()?.ref).toBe(secondRef); + expect(service.activeModal()?.component).toBe(SecondTestModalComponent); + }); + it('tracks dismiss reasons when closing programmatically', () => { const ref = service.open(FirstTestModalComponent); const closedSpy = vi.fn(); diff --git a/src/app/core/services/modal.service.ts b/src/app/core/services/modal.service.ts index 958631f..fc8abb9 100644 --- a/src/app/core/services/modal.service.ts +++ b/src/app/core/services/modal.service.ts @@ -253,8 +253,8 @@ export class ModalService { return; } - ref.finalize(result); this.activeModalState.set(null); + ref.finalize(result); } private dismiss( @@ -265,8 +265,8 @@ export class ModalService { return; } - ref.finalize(undefined, reason); this.activeModalState.set(null); + ref.finalize(undefined, reason); } private normalizeConfig(config: ModalConfig): NormalizedModalConfig {