File

src/app/component/chat-widget/chat-widget.ref.ts

Index

Properties
Methods

Constructor

constructor(containerInstance: ChatWidgetContainer, _overlayRef: OverlayRef)
Parameters :
Name Type Optional
containerInstance ChatWidgetContainer No
_overlayRef OverlayRef No

Properties

Private Readonly _afterDismissed
Default value : new Subject<R | undefined>()
Private Readonly _afterOpened
Default value : new Subject<void>()
Private _result
Type : R | undefined
containerInstance
Type : ChatWidgetContainer
instance
Type : T

Methods

afterDismissed
afterDismissed()
Returns : Observable<R | undefined>
afterOpend
afterOpend()
Returns : Observable<void>
backdropClick
backdropClick()
Returns : Observable<MouseEvent>
dismiss
dismiss(result?: R)
Parameters :
Name Type Optional
result R Yes
Returns : void
import { OverlayRef } from '@angular/cdk/overlay';
import { Observable, Subject } from 'rxjs';
import { filter, take } from 'rxjs/operators';
import { ChatWidgetContainer } from './chat-widget-container';

export class ChatWidgetRef<T = any, R = any> {
  instance: T;

  containerInstance: ChatWidgetContainer;

  private readonly _afterDismissed = new Subject<R | undefined>();
  private readonly _afterOpened = new Subject<void>();
  private _result: R | undefined;

  constructor(
    containerInstance: ChatWidgetContainer,
    private _overlayRef: OverlayRef
  ) {
    this.containerInstance = containerInstance;

    containerInstance._animationStateChanged
      .pipe(
        filter(
          event => event.phaseName === 'done' && event.toState === 'visible'
        ),
        take(1)
      )
      .subscribe(() => {
        this._afterOpened.next();
        this._afterOpened.complete();
      });

    containerInstance._animationStateChanged
      .pipe(
        filter(
          event => event.phaseName === 'done' && event.toState === 'hidden'
        ),
        take(1)
      )
      .subscribe(() => {
        this._overlayRef.dispose();
        this._afterDismissed.next(this._result);
        this._afterDismissed.complete();
      });
  }

  dismiss(result?: R): void {
    console.log('close');
    if (!this._afterDismissed.closed) {
      this.containerInstance._animationStateChanged.pipe(
        filter(event => event.phaseName === 'start'),
        take(1)
      ).subscribe(() => this._overlayRef.detachBackdrop());

      this._result = result;
      this.containerInstance.exit();
    }
  }

  afterDismissed(): Observable<R | undefined> {
    return this._afterDismissed.asObservable();
  }

  afterOpend(): Observable<void> {
    return this._afterOpened.asObservable();
  }

  backdropClick(): Observable<MouseEvent> {
    return this._overlayRef.backdropClick();
  }
}

result-matching ""

    No results matching ""