{"version":3,"file":"gewd-ng-utils-dynamic-portal.mjs","sources":["../../../../libs/ng-utils/dynamic-portal/portal-hub.service.ts","../../../../libs/ng-utils/dynamic-portal/dynamic-portal/dynamic-portal.component.ts","../../../../libs/ng-utils/dynamic-portal/dynamic-portal/dynamic-portal.component.html","../../../../libs/ng-utils/dynamic-portal/portal-source.directive.ts","../../../../libs/ng-utils/dynamic-portal/dynamic-portal.module.ts","../../../../libs/ng-utils/dynamic-portal/gewd-ng-utils-dynamic-portal.ts"],"sourcesContent":["import { Injectable, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, map, startWith } from 'rxjs/operators';\n\nexport const enum PortalSourceActionType {\n  Added,\n  Removed\n}\n\nexport class PortalSourceAction {\n  constructor (public type: PortalSourceActionType,\n               public key: string) {\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PortalHubService {\n  private templateSourceSubject = new Subject<PortalSourceAction>();\n  private templateSourceHub: { [key: string]: TemplateRef<any> } = {};\n\n  constructor () { }\n\n  public getTemplate$(key: string) {\n    return this.templateSourceSubject.pipe(\n      filter(a => a.key === key),\n      map(a => {\n        switch (a.type) {\n          case PortalSourceActionType.Added: {\n            return this.templateSourceHub[key];\n          }\n          case PortalSourceActionType.Removed: {\n            return null;\n          }\n        }\n      }),\n      startWith(this.templateSourceHub[key])\n    );\n  }\n\n  public registerTemplate (key: string, templateRef: TemplateRef<any>): void  {\n    if (this.templateSourceHub[key]) {\n      return;\n    }\n\n    this.templateSourceHub[key] = templateRef;\n    this.templateSourceSubject.next(new PortalSourceAction(PortalSourceActionType.Added, key));\n  }\n\n\n  public unregisterTemplate (key: string): void  {\n    if (!this.templateSourceHub[key]) {\n      return;\n    }\n\n    this.templateSourceHub[key] = null;\n    this.templateSourceSubject.next(new PortalSourceAction(PortalSourceActionType.Removed, key));\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n  TemplateRef\n} from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { PortalHubService } from '../portal-hub.service';\nimport { switchMap } from 'rxjs/operators';\n\n@Component({\n  selector: 'dynamic-portal',\n  templateUrl: './dynamic-portal.component.html',\n  styleUrls: ['./dynamic-portal.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicPortalComponent implements OnInit, OnChanges {\n  @Input()\n  key: string;\n\n  templateToShow$: Observable<TemplateRef<any>>;\n\n  private key$ = new BehaviorSubject('');\n\n  constructor (private hub: PortalHubService) {\n    this.templateToShow$ = this.key$.pipe(\n      switchMap(key => this.hub.getTemplate$(key))\n    );\n  }\n\n  ngOnInit (): void  {\n    this.checkKeyAndPushTemplate();\n  }\n\n  ngOnChanges (changes: SimpleChanges): void {\n    if (changes['key']) {\n      this.checkKeyAndPushTemplate();\n    }\n  }\n\n  private checkKeyAndPushTemplate () {\n    this.key$.next(this.key);\n  }\n}\n","<ng-container *ngIf=\"templateToShow$ | async as templateRef\"\n              [ngTemplateOutlet]=\"templateRef\">\n</ng-container>\n<ng-container *ngIf=\"!(templateToShow$ | async)\">\n  <ng-content></ng-content>\n</ng-container>\n","import {Directive, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef} from '@angular/core';\nimport { PortalHubService } from './portal-hub.service';\n\n@Directive({\n  selector: '[dynamicPortalSource]'\n})\nexport class PortalSourceDirective implements OnInit, OnDestroy, OnChanges {\n  @Input('dynamicPortalSource')\n  public key: string;\n\n  constructor (private templateRef: TemplateRef<any>,\n               private hub: PortalHubService) {\n  }\n\n  ngOnChanges (changes: SimpleChanges): void {\n    const keyChange = changes['key'];\n    if (keyChange) {\n      if (keyChange.previousValue) {\n        this.unregisterTemplate(keyChange.previousValue);\n      }\n\n      this.registerTemplate(keyChange.currentValue);\n    }\n  }\n\n  ngOnDestroy (): void {\n    this.unregisterTemplate(this.key);\n  }\n\n  ngOnInit (): void {\n    if (!this.key) {\n      return;\n    }\n\n    this.registerTemplate(this.key);\n  }\n\n  private registerTemplate (key: string) {\n    this.hub.registerTemplate(key, this.templateRef);\n  }\n\n  private unregisterTemplate (key: string) {\n    this.hub.unregisterTemplate(key);\n  }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DynamicPortalComponent} from './dynamic-portal/dynamic-portal.component';\nimport {PortalSourceDirective} from './portal-source.directive';\n\n@NgModule({\n  declarations: [DynamicPortalComponent, PortalSourceDirective],\n  exports: [\n    DynamicPortalComponent,\n    PortalSourceDirective\n  ],\n  imports: [\n    CommonModule\n  ],\n  providers: []\n})\nexport class DynamicPortalModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.PortalHubService"],"mappings":"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"}