From a7e1d8995fdfa751d442cae072026b6ee2104b32 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Mon, 14 Sep 2026 14:50:15 -0300 Subject: [PATCH] fix(modal): preserve sequential dialogs --- src/app/core/services/modal.service.spec.ts | 15 +++++++++++++++ src/app/core/services/modal.service.ts | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) 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 {