import { ApplicationRef, ComponentRef, inject, Injectable, InjectionToken, Type, } from '@angular/core'; import { SIDE_WINDOW_AFTER_CLOSE_TRIGGER, SIDE_WINDOW_APP_REF, SideWindowAfterCloseTrigger, SideWindowAfterCloseTriggerFn, } from './side-window'; export const SIDE_WINDOW_REF_TOKEN = new InjectionToken('SideWindowRefToken'); @Injectable() export class SideWindowRef { private readonly appRef = inject(SIDE_WINDOW_APP_REF); private readonly componentRef = inject<() => ComponentRef>>(SIDE_WINDOW_REF_TOKEN); private readonly afterCloseTrigger = inject( SIDE_WINDOW_AFTER_CLOSE_TRIGGER, ); dismiss(afterCloseTrigger?: SideWindowAfterCloseTrigger) { this.componentRef().location.nativeElement.classList.add('animate-slide-out-right'); setTimeout(() => { this.componentRef().destroy(); this.appRef.detachView(this.componentRef().hostView); if (afterCloseTrigger) { this.afterCloseTrigger(afterCloseTrigger); } }, 190); } }