{"version":3,"file":"ngx-observe.mjs","sources":["../../../projects/ngx-observe/src/lib/ngx-observe.directive.ts","../../../projects/ngx-observe/src/public-api.ts","../../../projects/ngx-observe/src/ngx-observe.ts"],"sourcesContent":["import {\n  ChangeDetectorRef,\n  Directive,\n  EmbeddedViewRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n  ViewContainerRef,\n  ɵstringify as stringify\n} from '@angular/core'\nimport {AsyncSubject, Observable, Subject} from 'rxjs'\nimport {concatMap, takeUntil} from 'rxjs/operators'\n\nfunction assertTemplate(property: string, templateRef: TemplateRef<any> | null): void {\n  const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView)\n  if (!isTemplateRefOrNull) {\n    throw new Error(`${property} must be a TemplateRef, but received '${stringify(templateRef)}'.`)\n  }\n}\n\nexport class ObserveContext<T = any> {\n  $implicit: T\n  ngxObserve: T\n\n  constructor(value: T) {\n    this.$implicit = value\n    this.ngxObserve = value\n  }\n}\n\nexport class ErrorContext {\n  $implicit: Error\n\n  constructor(error: Error) {\n    this.$implicit = error\n  }\n}\n\n@Directive({\n    selector: '[ngxObserve]',\n    standalone: true\n})\nexport class NgxObserveDirective<T = any> implements OnDestroy, OnInit {\n\n  private nextTemplateRef: TemplateRef<ObserveContext<T>>\n  private errorTemplateRef: TemplateRef<ErrorContext>\n  private beforeTemplateRef: TemplateRef<undefined>\n  private nextViewRef: EmbeddedViewRef<ObserveContext<T>> | undefined\n  private errorViewRef: EmbeddedViewRef<ErrorContext> | undefined\n  private beforeViewRef: EmbeddedViewRef<undefined> | undefined\n  private unsubscribe = new Subject<void>()\n  private init = new AsyncSubject<void>()\n  private source: Observable<T>\n\n  constructor(\n    private view: ViewContainerRef,\n    private changes: ChangeDetectorRef,\n    nextTemplateRef: TemplateRef<ObserveContext<T>>\n  ) {\n    this.nextTemplateRef = nextTemplateRef\n  }\n\n  @Input()\n  set ngxObserve(source: Observable<T>) {\n    if (this.source && source !== this.source) {\n      this.unsubscribe.next(undefined)\n    }\n    if (source && source !== this.source) {\n      if (this.beforeTemplateRef) {\n        this.view.clear()\n        this.nextViewRef = undefined\n        this.errorViewRef = undefined\n        this.beforeViewRef = this.view.createEmbeddedView(this.beforeTemplateRef)\n      }\n      this.init.pipe(\n        concatMap(() => {\n          if (this.beforeTemplateRef) {\n            this.view.clear()\n            this.nextViewRef = undefined\n            this.errorViewRef = undefined\n            this.beforeViewRef = this.view.createEmbeddedView(this.beforeTemplateRef)\n          }\n          return source\n        }),\n        takeUntil(this.unsubscribe)\n      ).subscribe(value => {\n        this.view.clear()\n        this.errorViewRef = undefined\n        this.beforeViewRef = undefined\n        this.nextViewRef = this.view.createEmbeddedView(this.nextTemplateRef, new ObserveContext<T>(value))\n        this.changes.markForCheck()\n      }, error => {\n        if (this.errorTemplateRef) {\n          this.view.clear()\n          this.beforeViewRef = undefined\n          this.nextViewRef = undefined\n          this.errorViewRef = this.view.createEmbeddedView(this.errorTemplateRef, new ErrorContext(error))\n          this.changes.markForCheck()\n        }\n      })\n    }\n    this.source = source\n  }\n\n  @Input()\n  set ngxObserveError(ref: TemplateRef<ErrorContext>) {\n    assertTemplate('ngxObserveError', ref)\n    this.errorTemplateRef = ref\n    if (this.errorViewRef) {\n      this.view.clear()\n      this.errorViewRef = this.view.createEmbeddedView(this.errorTemplateRef, this.errorViewRef.context)\n    }\n  }\n\n  @Input()\n  set ngxObserveBefore(ref: TemplateRef<undefined>) {\n    assertTemplate('ngxObserveBefore', ref)\n    this.beforeTemplateRef = ref\n    if (this.beforeViewRef) {\n      this.view.clear()\n      this.beforeViewRef = this.view.createEmbeddedView(this.beforeTemplateRef)\n    }\n  }\n\n  @Input()\n  set ngxObserveNext(ref: TemplateRef<ObserveContext<T>>) {\n    assertTemplate('ngxObserveNext', ref)\n    this.nextTemplateRef = ref\n    if (this.nextViewRef) {\n      this.view.clear()\n      this.nextViewRef = this.view.createEmbeddedView(this.nextTemplateRef, this.nextViewRef.context)\n      this.changes.markForCheck()\n    }\n  }\n\n  static ngTemplateContextGuard<T>(dir: NgxObserveDirective<T>, ctx: any): ctx is ObserveContext<T> {\n    return true\n  }\n\n  ngOnDestroy() {\n    this.unsubscribe.next(undefined)\n  }\n\n  ngOnInit() {\n    this.init.next(undefined)\n    this.init.complete()\n  }\n\n}\n","/*\n * Public API Surface of ngx-observe\n */\n\nexport * from './lib/ngx-observe.directive'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["stringify"],"mappings":"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"}