{"version":3,"file":"pebula-ngrid-block-ui.mjs","sources":["../../../../libs/ngrid/block-ui/src/lib/block-ui/directives.ts","../../../../libs/ngrid/block-ui/src/lib/block-ui/block-ui-plugin.ts","../../../../libs/ngrid/block-ui/src/lib/table-block-ui.module.ts","../../../../libs/ngrid/block-ui/src/pebula-ngrid-block-ui.ts"],"sourcesContent":["// tslint:disable:use-host-property-decorator\nimport { Directive, TemplateRef } from '@angular/core';\nimport { PblNgridComponent, PblNgridRegistryService, PblNgridSingleTemplateRegistry } from '@pebula/ngrid';\n\ndeclare module '@pebula/ngrid/core/lib/registry/types' {\n  interface PblNgridSingleRegistryMap {\n    blocker?: PblNgridBlockUiDefDirective;\n  }\n}\n\n/**\n * Marks the element as the display element when the form is busy.\n */\n@Directive({ selector: '[pblNgridBlockUiDef]' })\nexport class PblNgridBlockUiDefDirective extends PblNgridSingleTemplateRegistry<{ $implicit: PblNgridComponent<any> }, 'blocker'> {\n  readonly kind = 'blocker';\n  constructor(tRef: TemplateRef<{ $implicit: PblNgridComponent<any> }>, registry: PblNgridRegistryService) { super(tRef, registry); }\n}\n","import { Observable, isObservable } from 'rxjs';\nimport { Directive, EmbeddedViewRef, Input, OnDestroy } from '@angular/core';\nimport { coerceBooleanProperty, BooleanInput } from '@angular/cdk/coercion';\n\nimport { unrx } from '@pebula/ngrid/core';\nimport { PblNgridComponent, PblNgridPluginController } from '@pebula/ngrid';\n\ndeclare module '@pebula/ngrid/lib/ext/types' {\n  interface PblNgridPluginExtension {\n    blockUi?: { blockUi: BooleanInput | 'auto' | Observable<boolean> };\n  }\n}\n\nexport const PLUGIN_KEY: 'blockUi' = 'blockUi';\n\n@Directive({ selector: 'pbl-ngrid[blockUi]', exportAs: 'blockUi' })\nexport class PblNgridBlockUiPluginDirective<T> implements OnDestroy {\n\n  /**\n   * Blocks the UI with the template defined via `PblNgridBlockUiDefDirective`.\n   * If a template does not exist blocking is ignored.\n   *\n   * There are 3 operation modes, the modes are set based on the input value:\n   *   - Auto mode (INPUT: 'auto')\n   *     The UI will be blocked automatically based on datasource changes.\n   *\n   *    - Manual mode (INPUT: boolean)\n   *     The UI will be block is toggled based on the value, i.e. `true` will block and false will unblock.\n   *\n   *   - Notification mode (INPUT: Observable<boolean>)\n   *     Similar to Manual mode but controlled by a stream boolean value.\n   *\n   * **Note about Notification mode**\n   * Notification mode accepts an observable, at the point where the value is set the block state does not change (if it was \"on\" it will stay \"on\" and vice versa)\n   * It will only change on the first emission, this is important to understand.\n   *\n   * For example, if the current block state is off and we pass a `Subject`, the state remains off until the next emission\n   * of the `Subject` is `true`. If it already emitted `true` before the assignment it will not be taken into account. This is why\n   * using `BehaviouralSubject` is preferred.\n   *\n   * Also note that when sending an observable it is treated as \"notifier\", do not send cold observable as they get subscribed to.\n   * For example, sending the returned value from `HttpClient` will probably result in 2 HTTP calls, if you already subscribed to it\n   * > The default value is `auto` which means that `<pbl-ngrid blockUi>` is similar to `<pbl-ngrid blockUi=\"auto\">`\n   */\n  @Input() get blockUi(): BooleanInput | 'auto' | Observable<boolean> { return this._blockUi; }\n  set blockUi(value: BooleanInput | 'auto' | Observable<boolean>) {\n    let coerced: boolean | 'auto' = coerceBooleanProperty(value);\n    if (coerced && (value === 'auto' || (value as any) === '')) {\n      coerced = 'auto';\n    }\n\n    if (isObservable(value) && this._blockUi !== value) {\n      if (isObservable(this._blockUi)) {\n        unrx.kill(this, this._blockUi);\n      }\n      this._blockUi = value;\n      value\n        .pipe(unrx(this, this._blockUi))\n        .subscribe( state => {\n          this._blockInProgress = state;\n          this.setupBlocker();\n        });\n    } else if (this._blockUi !== coerced) {\n      this._blockUi = coerced;\n      if (coerced !== 'auto') {\n        this._blockInProgress = coerced;\n        this.setupBlocker();\n      }\n    }\n  }\n\n  private _blockInProgress = false;\n  private _blockUi: boolean | 'auto' | Observable<boolean>;\n  private _blockerEmbeddedVRef: EmbeddedViewRef<any>;\n  private _removePlugin: (grid: PblNgridComponent<any>) => void;\n\n  constructor(private grid: PblNgridComponent<any>, pluginCtrl: PblNgridPluginController<T>) {\n    this._removePlugin = pluginCtrl.setPlugin(PLUGIN_KEY, this);\n\n    grid.registry.changes.subscribe( changes => {\n      for (const c of changes) {\n        switch (c.type) {\n          case 'blocker':\n            this.setupBlocker();\n            break;\n        }\n      }\n    });\n\n    pluginCtrl.onInit()\n      .subscribe( isInitNow => {\n        if (isInitNow && this._blockUi && typeof this._blockUi === 'boolean') {\n          this.setupBlocker();\n        }\n      });\n\n    pluginCtrl.events\n      .subscribe( event => {\n        if (event.kind === 'onDataSource') {\n          const { prev, curr } = event;\n          if (prev) {\n            unrx.kill(this, prev);\n          }\n          curr.onSourceChanging\n            .pipe(unrx(this, curr))\n            .subscribe( () => {\n              if (this._blockUi === 'auto') {\n                this._blockInProgress = true;\n                this.setupBlocker();\n              }\n            });\n          curr.onSourceChanged\n            .pipe(unrx(this, curr))\n            .subscribe( () => {\n              if (this._blockUi === 'auto') {\n                this._blockInProgress = false;\n                this.setupBlocker();\n              }\n            });\n        }\n      });\n  }\n\n  ngOnDestroy(): void {\n    unrx.kill(this);\n    this._removePlugin(this.grid);\n  }\n\n  private setupBlocker(): void {\n    if (this.grid.isInit) {\n      const state = this._blockInProgress;\n      if (state) {\n        if (!this._blockerEmbeddedVRef) {\n          const blockerTemplate = this.grid.registry.getSingle('blocker');\n          if (blockerTemplate) {\n            this._blockerEmbeddedVRef = this.grid.createView('afterContent', blockerTemplate.tRef, { $implicit: this.grid });\n            this._blockerEmbeddedVRef.detectChanges();\n          }\n        }\n      } else if (this._blockerEmbeddedVRef) {\n        this.grid.removeView(this._blockerEmbeddedVRef, 'afterContent');\n        this._blockerEmbeddedVRef = undefined;\n      }\n    }\n  }\n\n  static ngAcceptInputType_blockUi: BooleanInput;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { PblNgridModule, ngridPlugin } from '@pebula/ngrid';\nimport { PblNgridBlockUiDefDirective } from './block-ui/directives';\nimport { PblNgridBlockUiPluginDirective, PLUGIN_KEY } from './block-ui/block-ui-plugin';\n\n@NgModule({\n  imports: [ CommonModule, CdkTableModule, PblNgridModule ],\n  declarations: [ PblNgridBlockUiDefDirective, PblNgridBlockUiPluginDirective ],\n  exports: [  PblNgridBlockUiDefDirective, PblNgridBlockUiPluginDirective  ]\n})\nexport class PblNgridBlockUiModule {\n  static readonly NGRID_PLUGIN = ngridPlugin({ id: PLUGIN_KEY }, PblNgridBlockUiPluginDirective);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}