@igo2/common
Version: 
1 lines • 20 kB
Source Map (JSON)
{"version":3,"file":"igo2-common-dynamic-component.mjs","sources":["../../../packages/common/dynamic-component/src/shared/dynamic-component.ts","../../../packages/common/dynamic-component/src/shared/dynamic-component.service.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.component.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.component.html","../../../packages/common/dynamic-component/src/dynamic-component.module.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.module.ts","../../../packages/common/dynamic-component/src/igo2-common-dynamic-component.ts"],"sourcesContent":["import {\n  ComponentFactory,\n  ComponentRef,\n  ViewContainerRef\n} from '@angular/core';\n\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * This class is used in the DynamicComponentOutlet component. It holds\n * a reference to a component factory and can render that component\n * in a target element on demand. It's also possible to set inputs\n * and to subscribe to outputs.\n */\nexport class DynamicComponent<C> {\n  /**\n   * Component reference\n   */\n  private componentRef: ComponentRef<C>;\n\n  /**\n   * Subscriptions to the component's outputs. Those need\n   * to be unsubscribed when the component is destroyed.\n   */\n  private subscriptions: Subscription[] = [];\n\n  /**\n   * Component target element\n   */\n  private target: ViewContainerRef;\n\n  /**\n   * Component inputs\n   */\n  private inputs: Record<string, any> = {};\n\n  /**\n   * Subscriptions to the component's async inputs\n   */\n  private inputs$$: Record<string, Subscription> = {};\n\n  /**\n   * Subscribers to the component's outputs\n   */\n  private subscribers: Record<string, (event: any) => void> = {};\n\n  constructor(private componentFactory: ComponentFactory<C>) {}\n\n  /**\n   * Render the component to a target element.\n   * Set it's inputs and subscribe to it's outputs.\n   * @param target Target element\n   */\n  setTarget(target: ViewContainerRef) {\n    this.target = target;\n    this.componentRef = target.createComponent(this.componentFactory);\n    this.updateInputs(this.inputs);\n    this.updateSubscribers(this.subscribers);\n  }\n\n  /**\n   * Destroy this component. That means, removing from it's target\n   * element and unsubscribing to it's outputs.\n   */\n  destroy() {\n    if (this.target !== undefined) {\n      this.target.clear();\n    }\n    if (this.componentRef !== undefined) {\n      this.componentRef.destroy();\n      this.componentRef = undefined;\n    }\n    this.unobserveAllInputs();\n    this.unsubscribeAll();\n  }\n\n  /**\n   * Update the component inputs. This is an update so any\n   * key not defined won't be overwritten.\n   */\n  updateInputs(inputs: Record<string, any>) {\n    this.inputs = inputs;\n    if (this.componentRef === undefined) {\n      return;\n    }\n\n    const instance = this.componentRef.instance;\n    const allowedInputs = this.componentFactory.inputs;\n    allowedInputs.forEach(\n      (value: { propName: string; templateName: string }) => {\n        const key = value.propName;\n\n        this.unobserveInput(key);\n\n        const inputValue = inputs[key];\n        if (Object.prototype.hasOwnProperty.call(inputs, key)) {\n          if (inputValue instanceof Observable) {\n            this.observeInput(key, inputValue);\n          } else {\n            this.setInputValue(instance, key, inputValue);\n          }\n        }\n      }\n    );\n\n    if (typeof (instance as any).onUpdateInputs === 'function') {\n      (instance as any).onUpdateInputs();\n    }\n  }\n\n  /**\n   * Set an instance's input value\n   * @param instance Component instance\n   * @param key Input key\n   * @param value Input value\n   */\n  private setInputValue(instance: C, key: string, value: any) {\n    const currentValue = instance[key];\n    if (value === currentValue) {\n      return;\n    }\n\n    const prototype = Object.getPrototypeOf(instance);\n    const descriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    if (descriptor !== undefined && descriptor.set !== undefined) {\n      descriptor.set.call(instance, value);\n    } else {\n      instance[key] = value;\n    }\n  }\n\n  /**\n   * Update the component subscribers. This is an update so any\n   * key not defined won't be overwritten.\n   */\n  updateSubscribers(subscribers: Record<string, (event: any) => void>) {\n    this.subscribers = subscribers;\n    if (this.componentRef === undefined) {\n      return;\n    }\n\n    const instance = this.componentRef.instance;\n    const allowedSubscribers = this.componentFactory.outputs;\n    allowedSubscribers.forEach(\n      (value: { propName: string; templateName: string }) => {\n        const key = value.propName;\n        if (Object.prototype.hasOwnProperty.call(subscribers, key)) {\n          const emitter = instance[key];\n          const subscriber = subscribers[key];\n          if (Array.isArray(subscriber)) {\n            subscriber.forEach((_subscriber) => {\n              this.subscriptions.push(emitter.subscribe(_subscriber));\n            });\n          } else {\n            this.subscriptions.push(emitter.subscribe(subscriber));\n          }\n        }\n      }\n    );\n  }\n\n  /**\n   * Subscribe to an observable input and update the component's input value\n   * accordingly\n   * @param key Input key\n   * @param observable Observable\n   */\n  private observeInput(key: string, observable: Observable<any>) {\n    this.inputs$$[key] = observable.subscribe((value: any) => {\n      const instance = this.componentRef.instance;\n      this.setInputValue(instance, key, value);\n\n      if (typeof (instance as any).onUpdateInputs === 'function') {\n        (instance as any).onUpdateInputs();\n      }\n    });\n  }\n\n  /**\n   * Unsubscribe to an observable input\n   * @param key Input key\n   */\n  private unobserveInput(key: string) {\n    if (this.inputs$$[key] !== undefined) {\n      this.inputs$$[key].unsubscribe();\n      this.inputs$$[key] = undefined;\n    }\n  }\n\n  /**\n   * Unsubscribe to all outputs.\n   */\n  private unobserveAllInputs() {\n    Object.values(this.inputs$$).forEach((s: Subscription | undefined) => {\n      if (s !== undefined) {\n        s.unsubscribe();\n      }\n    });\n    this.inputs$$ = {};\n  }\n\n  /**\n   * Unsubscribe to all outputs.\n   */\n  private unsubscribeAll() {\n    this.subscriptions.forEach((s: Subscription) => s.unsubscribe());\n    this.subscriptions = [];\n  }\n}\n","import { ComponentFactoryResolver, Injectable } from '@angular/core';\n\nimport { DynamicComponent } from './dynamic-component';\n\n/**\n * Service to creates DynamicComponent instances from base component classes\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class DynamicComponentService {\n  constructor(private resolver: ComponentFactoryResolver) {}\n\n  /**\n   * Creates a DynamicComponent instance from a base component class\n   * @param componentCls The component class\n   * @returns DynamicComponent instance\n   */\n  create(componentCls: any): DynamicComponent<any> {\n    const factory = this.resolver.resolveComponentFactory(componentCls as any);\n    return new DynamicComponent<typeof componentCls>(factory);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { DynamicComponent } from '../shared/dynamic-component';\nimport { DynamicComponentService } from '../shared/dynamic-component.service';\n\n@Component({\n  selector: 'igo-dynamic-outlet',\n  templateUrl: 'dynamic-outlet.component.html',\n  styleUrls: ['dynamic-outlet.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true\n})\nexport class DynamicOutletComponent implements OnChanges, OnDestroy {\n  /**\n   * The dynamic component base class or the dynamic component itself\n   */\n  @Input() component: DynamicComponent<any> | any;\n\n  /**\n   * The dynamic component inputs\n   */\n  @Input() inputs: Record<string, any> = {};\n\n  /**\n   * The subscribers to the dynamic component outputs\n   */\n  @Input() subscribers: Record<string, (event: any) => void> = {};\n\n  /**\n   * The dynamic component\n   */\n  private dynamicComponent: DynamicComponent<any>;\n\n  /**\n   * The view element to render the component to\n   * @ignore\n   */\n  @ViewChild('target', { read: ViewContainerRef, static: true })\n  private target: ViewContainerRef;\n\n  constructor(\n    private dynamicComponentService: DynamicComponentService,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  /**\n   * If the dynamic component changes, create it.\n   * If the inputs or subscribers change, update the current component's\n   * inputs or subscribers.\n   * @internal\n   */\n  ngOnChanges(changes: SimpleChanges) {\n    const component = changes.component;\n    const inputs = changes.inputs;\n    const subscribers = changes.subscribers;\n    const eq = ObjectUtils.objectsAreEquivalent;\n\n    if (!component || !component.currentValue) {\n      return;\n    }\n\n    if (component.currentValue !== component.previousValue) {\n      this.createComponent(component.currentValue);\n    } else {\n      const inputsAreEquivalents =\n        inputs && eq(inputs.currentValue || {}, inputs.previousValue || {});\n      const subscribersAreEquivalents =\n        subscribers &&\n        eq(subscribers.currentValue || {}, subscribers.previousValue || {});\n\n      if (inputsAreEquivalents === false) {\n        this.updateInputs();\n      }\n\n      if (subscribersAreEquivalents === false) {\n        this.updateSubscribers();\n      }\n    }\n    this.cdRef.detectChanges();\n  }\n\n  /**\n   * Destroy the dynamic component and all it's subscribers\n   * @internal\n   */\n  ngOnDestroy() {\n    if (this.dynamicComponent) {\n      this.dynamicComponent.destroy();\n    }\n  }\n\n  /**\n   * Create a  DynamicComponent out of the component class and render it.\n   * @internal\n   */\n  private createComponent(component: DynamicComponent<any> | any) {\n    if (this.dynamicComponent !== undefined) {\n      this.dynamicComponent.destroy();\n    }\n    this.dynamicComponent =\n      component instanceof DynamicComponent\n        ? component\n        : this.dynamicComponentService.create(component);\n    this.renderComponent();\n  }\n\n  /**\n   * Create and render the dynamic component. Set it's inputs and subscribers\n   * @internal\n   */\n  private renderComponent() {\n    this.updateInputs();\n    this.updateSubscribers();\n    this.dynamicComponent.setTarget(this.target);\n  }\n\n  /**\n   * Update the dynamic component inputs. This is an update so any\n   * key not defined won't be overwritten.\n   * @internal\n   */\n  private updateInputs() {\n    this.dynamicComponent.updateInputs(this.inputs);\n  }\n\n  /**\n   * Update the dynamic component subscribers. This is an update so any\n   * key not defined won't be overwritten.\n   * @internal\n   */\n  private updateSubscribers() {\n    this.dynamicComponent.updateSubscribers(this.subscribers);\n  }\n}\n","<ng-template #target></ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { DynamicOutletComponent } from './dynamic-outlet/dynamic-outlet.component';\n\n/**\n * @deprecated import the DynamicOutletComponent directly\n */\n@NgModule({\n  imports: [DynamicOutletComponent],\n  exports: [DynamicOutletComponent]\n})\nexport class IgoDynamicComponentModule {}\n","import { NgModule } from '@angular/core';\n\nimport { DynamicOutletComponent } from './dynamic-outlet.component';\n\n/**\n * @deprecated import the DynamicOutletComponent directly\n */\n@NgModule({\n  imports: [DynamicOutletComponent],\n  exports: [DynamicOutletComponent]\n})\nexport class IgoDynamicOutletModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.DynamicComponentService"],"mappings":"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"}