{"version":3,"file":"nicolabello-ng-suspense.mjs","sources":["../../../../libs/ng-suspense/src/lib/helpers/get-visibility.ts","../../../../libs/ng-suspense/src/lib/helpers/suspense-value.ts","../../../../libs/ng-suspense/src/lib/services/suspense.service.ts","../../../../libs/ng-suspense/src/lib/components/suspense.component.ts","../../../../libs/ng-suspense/src/lib/directives/suspense.directive.ts","../../../../libs/ng-suspense/src/lib/models/suspense.ts","../../../../libs/ng-suspense/src/lib/directives/suspense-if.directive.ts","../../../../libs/ng-suspense/src/lib/directives/suspense-if-data.directive.ts","../../../../libs/ng-suspense/src/lib/directives/suspense-if-empty.directive.ts","../../../../libs/ng-suspense/src/lib/directives/suspense-if-error.directive.ts","../../../../libs/ng-suspense/src/lib/directives/suspense-if-loading.directive.ts","../../../../libs/ng-suspense/src/lib/suspense.module.ts","../../../../libs/ng-suspense/src/nicolabello-ng-suspense.ts"],"sourcesContent":["import { Visibility } from '../models/visibility';\n\nexport function getVisibility(\n  data: boolean,\n  loading: boolean,\n  error: boolean,\n  prioritizeDataOverLoading: boolean,\n  prioritizeDataOverError: boolean\n): Visibility {\n  /*return {\n      data: !loading && !error && data,\n      empty: !loading && !error && !data,\n      loading: loading,\n      error: !loading && error,\n    }*/\n\n  return {\n    data: data && (!loading || prioritizeDataOverLoading) && (!error || prioritizeDataOverError),\n    empty: !data && !loading && !error,\n    loading: loading && !(data && prioritizeDataOverLoading),\n    error: !loading && error && !(data && prioritizeDataOverError),\n  };\n}\n","import { isObservable, Observable, Subject, Subscription } from 'rxjs';\n\nimport { SuspenseInput } from '../models/suspense';\n\nfunction isPromise(value: any): value is Promise<any> {\n  return typeof value?.then === 'function';\n}\n\nfunction isArray(value: any): value is [] {\n  return Array.isArray(value);\n}\n\nfunction isObject(value: any): value is object {\n  return value && typeof value === 'object' && value.constructor === Object;\n}\n\nexport class SuspenseValue<T = any> {\n  public value?: T;\n  public booleanValue = false;\n\n  private source?: SuspenseInput<T>;\n  private valueSubscription?: Subscription;\n  private changeSubject = new Subject<void>();\n\n  public get valueChanges(): Observable<void> {\n    return this.changeSubject.asObservable();\n  }\n\n  public async init(source: SuspenseInput<T>): Promise<any> {\n    if (source !== this.source) {\n      this.unsubscribe();\n      this.source = source;\n\n      if (isObservable(source)) {\n        this.valueSubscription = source.subscribe((value: T) => {\n          this.value = value;\n          this.booleanValue = this.toBoolean(this.value);\n          this.changeSubject.next();\n        });\n        return;\n      }\n\n      if (isPromise(source)) {\n        this.value = await source;\n        this.booleanValue = this.toBoolean(this.value);\n        this.changeSubject.next();\n        return;\n      }\n\n      this.value = source as T;\n      this.booleanValue = this.toBoolean(this.value);\n      this.changeSubject.next();\n    }\n  }\n\n  public unsubscribe(): void {\n    this.valueSubscription?.unsubscribe();\n  }\n\n  private toBoolean(value: T): boolean {\n    if (isArray(value)) {\n      return !!value.length;\n    }\n\n    if (isObject(value)) {\n      return !!Object.keys(value).length;\n    }\n\n    return (value as any) === 0 || !!value;\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { merge, Observable, Subject } from 'rxjs';\n\nimport { getVisibility } from '../helpers/get-visibility';\nimport { SuspenseValue } from '../helpers/suspense-value';\nimport { Config } from '../models/config';\nimport { SuspenseData, SuspenseError, SuspenseLoading } from '../models/suspense';\nimport { Visibility } from '../models/visibility';\n\n@Injectable()\nexport class SuspenseService implements OnDestroy {\n  public readonly data = new SuspenseValue<SuspenseData>();\n  public readonly loading = new SuspenseValue<SuspenseLoading>();\n  public readonly error = new SuspenseValue<SuspenseError>();\n\n  private readonly config: Config = {\n    prioritizeDataOverLoading: true,\n    prioritizeDataOverError: true,\n  };\n  private readonly configChangeSubject = new Subject<void>();\n\n  public get valuesChanges(): Observable<void> {\n    return merge(\n      this.data.valueChanges,\n      this.loading.valueChanges,\n      this.error.valueChanges,\n      this.configChangeSubject.asObservable()\n    );\n  }\n\n  public setConfig(key: keyof Config, value: boolean): void {\n    if (this.config[key] !== value) {\n      this.config[key] = value;\n      this.configChangeSubject.next();\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.data.unsubscribe();\n    this.loading.unsubscribe();\n    this.error.unsubscribe();\n  }\n\n  public get visibility(): Visibility {\n    return getVisibility(\n      this.data.booleanValue,\n      this.loading.booleanValue,\n      this.error.booleanValue,\n      this.config.prioritizeDataOverLoading,\n      this.config.prioritizeDataOverError\n    );\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { SuspenseData, SuspenseError, SuspenseInput, SuspenseLoading } from '../models/suspense';\nimport { SuspenseService } from '../services/suspense.service';\n\n@Component({\n  selector: 'nb-suspense',\n  template: ` <ng-content></ng-content>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [SuspenseService],\n})\nexport class SuspenseComponent implements OnInit, OnDestroy {\n  private changesSubscription?: Subscription;\n\n  public constructor(private cdr: ChangeDetectorRef, private suspenseService: SuspenseService) {}\n\n  @Input()\n  public set data(value: SuspenseInput<SuspenseData>) {\n    this.suspenseService.data.init(value);\n  }\n\n  @Input()\n  public set loading(value: SuspenseInput<SuspenseLoading>) {\n    this.suspenseService.loading.init(value);\n  }\n\n  @Input()\n  public set error(value: SuspenseInput<SuspenseError>) {\n    this.suspenseService.error.init(value);\n  }\n\n  @Input()\n  public set prioritizeDataOverLoading(value: boolean) {\n    this.suspenseService.setConfig('prioritizeDataOverLoading', value);\n  }\n\n  @Input()\n  public set prioritizeDataOverError(value: boolean) {\n    this.suspenseService.setConfig('prioritizeDataOverError', value);\n  }\n\n  public ngOnInit(): void {\n    this.changesSubscription = this.suspenseService.valuesChanges.subscribe(() => this.cdr.markForCheck());\n  }\n\n  public ngOnDestroy(): void {\n    this.changesSubscription?.unsubscribe();\n  }\n}\n","import { ChangeDetectorRef, Directive, inject, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { SuspenseData, SuspenseError, SuspenseInput, SuspenseLoading } from '../models/suspense';\nimport { SuspenseService } from '../services/suspense.service';\n\n@Directive({\n  selector: '[nbSuspense]',\n  providers: [SuspenseService],\n})\nexport class SuspenseDirective implements OnInit, OnDestroy {\n  private changesSubscription?: Subscription;\n\n  private cdr = inject(ChangeDetectorRef);\n  private suspenseService = inject(SuspenseService);\n\n  @Input()\n  public set data(value: SuspenseInput<SuspenseData>) {\n    this.suspenseService.data.init(value);\n  }\n\n  @Input()\n  public set loading(value: SuspenseInput<SuspenseLoading>) {\n    this.suspenseService.loading.init(value);\n  }\n\n  @Input()\n  public set error(value: SuspenseInput<SuspenseError>) {\n    this.suspenseService.error.init(value);\n  }\n\n  @Input()\n  public set prioritizeDataOverLoading(value: boolean) {\n    this.suspenseService.setConfig('prioritizeDataOverLoading', value);\n  }\n\n  @Input()\n  public set prioritizeDataOverError(value: boolean) {\n    this.suspenseService.setConfig('prioritizeDataOverError', value);\n  }\n\n  public ngOnInit(): void {\n    this.changesSubscription = this.suspenseService.valuesChanges.subscribe(() => this.cdr.markForCheck());\n  }\n\n  public ngOnDestroy(): void {\n    this.changesSubscription?.unsubscribe();\n  }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\nexport type SuspenseInput<T> = T | Observable<T> | Promise<T>;\n\nexport type SuspenseData = any;\nexport type SuspenseLoading = boolean | any;\nexport type SuspenseError = boolean | string | HttpErrorResponse | any;\n\nexport class SuspenseIfContext<T> {\n  public readonly $implicit: T;\n\n  public constructor(value: T) {\n    this.$implicit = value;\n  }\n}\n","import { Directive, EmbeddedViewRef, inject, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { SuspenseIfContext } from '../models/suspense';\nimport { SuspenseService } from '../services/suspense.service';\n\n@Directive()\nexport abstract class SuspenseIfDirective<T> implements OnInit, OnDestroy {\n  private subscriptions = new Subscription();\n  private embeddedViewRef: EmbeddedViewRef<SuspenseIfContext<T>> | null = null;\n\n  protected templateRef = inject<TemplateRef<SuspenseIfContext<T>>>(TemplateRef);\n  protected viewContainer = inject(ViewContainerRef);\n  protected suspenseService = inject(SuspenseService);\n\n  public abstract get isVisible(): boolean;\n\n  public abstract get value(): T;\n\n  public ngOnInit(): void {\n    this.subscriptions.add(this.suspenseService.valuesChanges.subscribe(() => this.updateView()));\n    this.updateView();\n  }\n\n  public ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  private updateView(): void {\n    if (this.isVisible) {\n      const context = new SuspenseIfContext<T>(this.value);\n\n      if (this.embeddedViewRef) {\n        this.embeddedViewRef.context = context;\n      } else {\n        this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, context);\n      }\n    } else if (this.embeddedViewRef) {\n      this.viewContainer.clear();\n      this.embeddedViewRef = null;\n    }\n  }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { SuspenseIfContext, SuspenseInput } from '../models/suspense';\n\nimport { SuspenseIfDirective } from './suspense-if.directive';\n\n@Directive({\n  selector: '[nbSuspenseIfData]',\n})\nexport class SuspenseIfDataDirective<T> extends SuspenseIfDirective<T> implements OnInit, OnDestroy {\n  @Input() public nbSuspenseIfDataOfType?: SuspenseInput<T>;\n\n  public get isVisible(): boolean {\n    return this.suspenseService.visibility.data;\n  }\n\n  public get value(): T {\n    return this.suspenseService.data.value;\n  }\n\n  public static ngTemplateContextGuard<T>(\n    dir: SuspenseIfDataDirective<T>,\n    ctx: unknown\n  ): ctx is SuspenseIfContext<NonNullable<T>> {\n    return true;\n  }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { SuspenseIfContext, SuspenseInput } from '../models/suspense';\n\nimport { SuspenseIfDirective } from './suspense-if.directive';\n\n@Directive({\n  selector: '[nbSuspenseIfEmpty]',\n})\nexport class SuspenseIfEmptyDirective<T> extends SuspenseIfDirective<T> implements OnInit, OnDestroy {\n  @Input() public nbSuspenseIfEmptyOfType?: SuspenseInput<T>;\n\n  public get isVisible(): boolean {\n    return this.suspenseService.visibility.empty;\n  }\n\n  public get value(): T {\n    return this.suspenseService.data.value;\n  }\n\n  public static ngTemplateContextGuard<T>(dir: SuspenseIfEmptyDirective<T>, ctx: unknown): ctx is SuspenseIfContext<T> {\n    return true;\n  }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { SuspenseIfContext, SuspenseInput } from '../models/suspense';\n\nimport { SuspenseIfDirective } from './suspense-if.directive';\n\n@Directive({\n  selector: '[nbSuspenseIfError]',\n})\nexport class SuspenseIfErrorDirective<T> extends SuspenseIfDirective<T> implements OnInit, OnDestroy {\n  @Input() public nbSuspenseIfErrorOfType?: SuspenseInput<T>;\n\n  public get isVisible(): boolean {\n    return this.suspenseService.visibility.error;\n  }\n\n  public get value(): T {\n    return this.suspenseService.error.value;\n  }\n\n  public static ngTemplateContextGuard<T>(\n    dir: SuspenseIfErrorDirective<T>,\n    ctx: unknown\n  ): ctx is SuspenseIfContext<NonNullable<T>> {\n    return true;\n  }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { SuspenseIfContext, SuspenseInput } from '../models/suspense';\n\nimport { SuspenseIfDirective } from './suspense-if.directive';\n\n@Directive({\n  selector: '[nbSuspenseIfLoading]',\n})\nexport class SuspenseIfLoadingDirective<T> extends SuspenseIfDirective<T> implements OnInit, OnDestroy {\n  @Input() public nbSuspenseIfLoadingOfType?: SuspenseInput<T>;\n\n  public get isVisible(): boolean {\n    return this.suspenseService.visibility.loading;\n  }\n\n  public get value(): T {\n    return this.suspenseService.loading.value;\n  }\n\n  public static ngTemplateContextGuard<T>(\n    dir: SuspenseIfLoadingDirective<T>,\n    ctx: unknown\n  ): ctx is SuspenseIfContext<T> {\n    return true;\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SuspenseComponent } from './components/suspense.component';\nimport { SuspenseIfDataDirective } from './directives/suspense-if-data.directive';\nimport { SuspenseIfEmptyDirective } from './directives/suspense-if-empty.directive';\nimport { SuspenseIfErrorDirective } from './directives/suspense-if-error.directive';\nimport { SuspenseIfLoadingDirective } from './directives/suspense-if-loading.directive';\nimport { SuspenseDirective } from './directives/suspense.directive';\n\nconst items = [\n  SuspenseComponent,\n  SuspenseDirective,\n  SuspenseIfEmptyDirective,\n  SuspenseIfDataDirective,\n  SuspenseIfErrorDirective,\n  SuspenseIfLoadingDirective,\n];\n\n@NgModule({\n  declarations: items,\n  exports: items,\n})\nexport class SuspenseModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SuspenseService"],"mappings":"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"}