From 7546aa91a30c9dd28fb6e4ca6f116baa775bf89e Mon Sep 17 00:00:00 2001 From: David Olson <157068235+DavidOlson-Hyland@users.noreply.github.com> Date: Thu, 25 Jun 2026 09:58:24 -0500 Subject: [PATCH] AAE-47577 Form Spinner persists outside of Automate Form (#12005) --- .../spinner/form-cloud-spinner.service.spec.ts | 14 ++++++++++++++ .../services/spinner/form-cloud-spinner.service.ts | 10 ++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.spec.ts b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.spec.ts index c5a606722b..ac2740066c 100644 --- a/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.spec.ts +++ b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.spec.ts @@ -96,4 +96,18 @@ describe('FormCloudSpinnerService', () => { const spinners = await rootLoader.getAllHarnesses(MatProgressSpinnerHarness); expect(spinners.length).toBe(1); }); + + it('should dispose the spinner overlay when the host destroyRef fires without a hide event', async () => { + spinnerService.initSpinnerHandling(destroyRef); + formService.toggleFormSpinner.next(showSpinnerEvent); + fixture.detectChanges(); + + expect(await rootLoader.hasHarness(MatProgressSpinnerHarness)).toBeTrue(); + + fixture.destroy(); + + const overlayContainer = document.querySelector('.cdk-overlay-container'); + expect(overlayContainer?.querySelector('.cdk-overlay-pane')).toBeNull(); + expect(overlayContainer?.querySelector('.cdk-overlay-backdrop')).toBeNull(); + }); }); diff --git a/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts index 15af2a7e8c..4d6a89bc33 100644 --- a/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts +++ b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts @@ -40,9 +40,15 @@ export class FormCloudSpinnerService { const componentRef = this.overlayRef.attach(userProfilePortal); componentRef.instance.message = event.payload.message; } else if (event?.payload.showSpinner === false) { - this.overlayRef?.detach(); - this.overlayRef = null; + this.disposeOverlay(); } }); + + destroyRef.onDestroy(() => this.disposeOverlay()); + } + + private disposeOverlay(): void { + this.overlayRef?.dispose(); + this.overlayRef = null; } }