{"version":3,"file":"pebula-ngrid-transpose.mjs","sources":["../../../../libs/ngrid/transpose/src/lib/transpose-table-session.ts","../../../../libs/ngrid/transpose/src/lib/utils.ts","../../../../libs/ngrid/transpose/src/lib/transpose-plugin.directive.ts","../../../../libs/ngrid/transpose/src/lib/transpose.module.ts","../../../../libs/ngrid/transpose/src/pebula-ngrid-transpose.ts"],"sourcesContent":["import { Observable, isObservable, of as obsOf, from as obsFrom } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\nimport { PblNgridColumnDefinitionSet, ON_INVALIDATE_HEADERS, unrx } from '@pebula/ngrid/core';\nimport {\n  PblNgridComponent,\n  PblNgridPluginController,\n  PblDataSource,\n  PblColumn,\n  PblDataSourceTriggerChangedEvent,\n} from '@pebula/ngrid';\n\nexport const LOCAL_COLUMN_DEF = Symbol('LOCAL_COLUMN_DEF');\nexport const VIRTUAL_REFRESH = {};\n\nexport class TransposeTableSession {\n  dsSourceFactory: any;\n  ds: PblDataSource<any>;\n  columnsInput: PblNgridColumnDefinitionSet;\n  storeColumns: PblColumn[];\n  headerRow: boolean;\n\n  private destroyed: boolean;\n  private rawSource: any[];\n\n  constructor(private grid: PblNgridComponent<any>,\n              private pluginCtrl: PblNgridPluginController,\n              private updateColumns: () => void,\n              private sourceFactoryWrapper: (results: any[]) => any[]) {\n    this.init();\n    if (grid.columns && grid.columnApi.visibleColumns.length > 0) {\n      this.onInvalidateHeaders();\n    }\n    this.onDataSource(this.grid.ds);\n  }\n\n  destroy(updateTable: boolean): void {\n    if (!this.destroyed) {\n      this.destroyed = true;\n      unrx.kill(this, this.grid);\n\n      this.grid.showHeader = this.headerRow;\n      this.grid.columns = this.columnsInput;\n      if (updateTable) {\n        this.grid.invalidateColumns();\n        this.grid.ds.refresh(VIRTUAL_REFRESH);\n      }\n    }\n  }\n\n  private init(): void {\n    this.headerRow = this.grid.showHeader;\n    this.grid.showHeader = false;\n    this.pluginCtrl.events\n      .pipe(ON_INVALIDATE_HEADERS, unrx(this, this.grid))\n      .subscribe( e => this.onInvalidateHeaders() );\n\n    this.pluginCtrl.events\n      .pipe(unrx(this, this.grid))\n      .subscribe( e => e.kind === 'onDataSource' && this.onDataSource(e.curr) );\n  }\n\n  private onInvalidateHeaders(): void {\n    if (!this.grid.columns[LOCAL_COLUMN_DEF]) {\n      this.columnsInput = this.grid.columns;\n      this.storeColumns = this.grid.columnApi.visibleColumns;\n      this.updateColumns();\n    }\n  }\n\n  private onDataSource(ds?: PblDataSource): void {\n    this.unPatchDataSource();\n    if (ds) {\n      this.ds = ds;\n      this.dsSourceFactory = ds.adapter.sourceFactory;\n      this.ds.adapter.sourceFactory = (event: PblDataSourceTriggerChangedEvent) => {\n        const rawSource = event.data.changed && event.data.curr === VIRTUAL_REFRESH\n          ? this.ds.source\n          : this.dsSourceFactory(event)\n        ;\n\n        if (rawSource === false) {\n          return rawSource;\n        } else if (this.destroyed) {\n          this.unPatchDataSource();\n          return this.rawSource;\n        }\n\n        const obs: Observable<any[]> = isObservable(rawSource)\n          ? rawSource\n          : Array.isArray(rawSource) ? obsOf<any>(rawSource) : obsFrom(rawSource) // promise...\n        ;\n        return obs\n          .pipe(\n            tap( source => this.rawSource = source ),\n            map(this.sourceFactoryWrapper),\n          );\n      }\n    }\n  }\n\n  private unPatchDataSource(): void {\n    if (this.ds) {\n      this.ds.adapter.sourceFactory = this.dsSourceFactory;\n      this.ds = this.dsSourceFactory = undefined;\n    }\n  }\n}\n","import { PblColumnDefinition, getValue } from '@pebula/ngrid/core';\n\nconst TRANSFORM_ROW_REF = Symbol('TRANSFORM_ROW_REF');\n\nexport function getCellValueAsHeader (row: PblColumnDefinition): any {\n  return row.label;\n}\n\nexport function getCellValueTransformed(this: PblColumnDefinition, colAsRow: PblColumnDefinition): any {\n  return getValue(colAsRow, this.data[TRANSFORM_ROW_REF]);\n}\n\nexport function createTransformedColumn(row: any, index: number): PblColumnDefinition {\n  return { prop: `__transform_item_${index}__`, data: { [TRANSFORM_ROW_REF]: row } };\n}\n","import { Directive, Input, OnDestroy } from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { PblNgridConfigService, PblColumnDefinition, PblNgridColumnDefinitionSet, unrx } from '@pebula/ngrid/core';\nimport {\n  columnFactory,\n  PblNgridComponent,\n  PblNgridPluginController,\n  PblColumn,\n} from '@pebula/ngrid';\n\nimport { TransposeTableSession, LOCAL_COLUMN_DEF, VIRTUAL_REFRESH } from './transpose-table-session';\nimport { getCellValueTransformed, createTransformedColumn } from './utils';\n\nconst DEFAULT_HEADER_COLUMN = { prop: '__transpose__', css: 'pbl-ngrid-header-cell pbl-ngrid-transposed-header-cell' };\n\ndeclare module '@pebula/ngrid/core/lib/configuration/type' {\n  interface PblNgridConfig {\n    transposePlugin?: {\n      header?: Partial<PblColumnDefinition>;\n      defaultCol?: Partial<PblColumnDefinition>;\n      matchTemplates?: boolean;\n    }\n  }\n}\n\ndeclare module '@pebula/ngrid/lib/ext/types' {\n  interface PblNgridPluginExtension {\n    transpose?: PblNgridTransposePluginDirective;\n  }\n}\nexport const PLUGIN_KEY: 'transpose' = 'transpose';\n\n/**\n * Transpose plugin.\n *\n * This plugin will swaps around the rows and columns of the grid.\n *\n * A **regular grid** (not transposed) represents rows horizontally:\n *\n * - Each horizontal row represents an item in the collection.\n * - Each vertical column represents the same property of all rows in the collection.\n *\n * A **transposed** grid represents row vertically:\n *\n * - Each horizontal row represents the same property of all rows in the collection.\n * - Each vertical row represents an item in the collection.\n *\n * > Note that transposing a grid might not play nice with other plugins and/or features.\n * For example, using pagination with transpose make no sense.\n */\n\n@Directive({ selector: 'pbl-ngrid[transpose]' })\nexport class PblNgridTransposePluginDirective implements OnDestroy {\n\n  @Input() get transpose(): boolean { return this.enabled; };\n  set transpose(value: boolean) {\n    value = coerceBooleanProperty(value);\n    if (value !== this.enabled && this.grid.isInit) {\n      this.updateState(this.enabled, value);\n    }\n    this.enabled = value;\n  }\n\n  /**\n   * Column definitions for the new header column, this is the column the first column that\n   * will display all the headers.\n   *\n   * This is an optional value, when not set a default column settings is used:\n   *\n   * ```js\n   * {\n   *  prop: '__transpose__',\n   *  css: 'pbl-ngrid-header-cell pbl-ngrid-transposed-header-cell',\n   * }\n   * ```\n   *\n   * When set, the new column values will merge into the default definitions, overriding existing properties\n   * set on the default column settings.\n   *\n   * > The header column behave like any other column and you can also provide define it in the `column` property on the grid.\n   * When using this approach the column defined on the grid is used as is (no merging). Just make sure you use the right `prop` value for it.\n   * e.g. if `header` is not set here its `__transpose__` otherwise, the actual `prop` value.\n   */\n  @Input('transposeHeaderCol') set header(value: Partial<PblColumnDefinition>) {\n    this._header = Object.assign({}, DEFAULT_HEADER_COLUMN, value || {})\n  }\n\n  /**\n   * Column definitions to be used as the base default definitions for the new transposed columns.\n   * This is an optional value, when not set no default's are applied.\n   */\n  @Input('transposeDefaultCol') defaultCol: Partial<PblColumnDefinition>;\n\n  /**\n   * When true, will try to use the original template of the cell, i.e. the template that would have been used\n   * if we did not transpose at all.\n   *\n   * Defaults to false.\n   */\n  @Input() matchTemplates: boolean;\n\n  private enabled: boolean;\n  private _header: PblColumnDefinition = DEFAULT_HEADER_COLUMN;\n  private gridState: TransposeTableSession;\n  private columns: PblColumn[];\n  private selfColumn: PblColumn;\n  private _removePlugin: (grid: PblNgridComponent<any>) => void;\n\n  constructor(private grid: PblNgridComponent<any>, private pluginCtrl: PblNgridPluginController, config: PblNgridConfigService) {\n    this._removePlugin = pluginCtrl.setPlugin(PLUGIN_KEY, this);\n    const transposePlugin = config.get('transposePlugin');\n    if (transposePlugin) {\n      this.header = transposePlugin.header;\n      this.defaultCol = transposePlugin.defaultCol || {};\n      this.matchTemplates = transposePlugin.matchTemplates || false;\n    }\n\n    pluginCtrl.onInit()\n      .subscribe( () => {\n        if (this.enabled !== undefined) {\n          this.updateState(undefined, this.enabled);\n        }\n      });\n  }\n\n  ngOnDestroy() {\n    this._removePlugin(this.grid);\n    this.disable(false);\n    unrx.kill(this);\n  }\n\n  disable(updateTable: boolean): void {\n    if (this.gridState) {\n      const { gridState } = this;\n      this.columns = this.selfColumn = this.gridState = this.columns = this.selfColumn = undefined;\n      gridState.destroy(updateTable);\n    }\n  }\n\n  enable(refreshDataSource: boolean = false): void {\n    if (this.gridState) {\n      this.disable(false);\n    }\n\n    const sourceFactoryWrapper = (results: any[]) => {\n      if (results) {\n        const local: PblNgridColumnDefinitionSet = this.grid.columns = columnFactory()\n          .default(this.defaultCol || {})\n          .table(\n            this.selfColumn,\n            ...results.map(createTransformedColumn),\n          )\n          .build();\n\n        const prev = this.gridState.columnsInput;\n        local.header = prev.header;\n        local.headerGroup = prev.headerGroup;\n        local.footer = prev.footer;\n        local[LOCAL_COLUMN_DEF] = true;\n\n        this.grid.invalidateColumns();\n\n        const matchTemplates = coerceBooleanProperty(this.matchTemplates);\n        const { prop } = this._header;\n        const columnKeysToProxy: Array<keyof PblColumn> = ['type'];\n\n        if (matchTemplates) {\n          columnKeysToProxy.push('cellTpl');\n        }\n\n        /* The following logic is not for the faint of heart.\n           Basically, the transpose plugin does not swap the actual data but the columns.\n           When transposing, all rows will swap to columns so, A new column definition is created,\n           with columns equal to the total number or items in the datasource.\n           Each column (new one) represents a row so we save a reference to the actual row in the new column.\n\n           The next step is to create a new datasource, the new datasource is simply a collection of all of the original columns.\n\n           Now when `getValue` is called on the new column it is called with a \"row\" which is the original column.\n           Because the new column has a reference to the actual (original) row we can call the `getValue` on the old column with the actual row.\n\n           In this process, all of the column metadata related to the presentation layer is lost. For example, if CSS classes will\n           not be the same, templates, types etc... This is because when the grid renders a cell that cell has a single template across\n           all rows but now we need a different template for every row.\n\n           We can proxy a (VERY) limited set of metadata properties related to the presentation layer, valid only on render time.\n           This relays on the fact that each row is rendered complete, starting from the first cell to the last so\n           with that we can get a reference to the original column tha that now represents the whole row.\n         */\n        let currentColumn: PblColumn;\n        for (const c of this.grid.columnApi.visibleColumns) {\n          if (c.orgProp === prop) {\n            c.getValue = (row: PblColumn) => {\n              currentColumn = row;\n              return row.label as any;\n            };\n          } else {\n            c.getValue = getCellValueTransformed;\n            for (const key of columnKeysToProxy) {\n              Object.defineProperty(c, key, { configurable: true, get: () => currentColumn && currentColumn[key], set: value => {} });\n            }\n          }\n        }\n        return this.columns;\n      }\n      return results;\n    };\n\n    this.gridState = new TransposeTableSession(\n      this.grid,\n      this.pluginCtrl,\n      () => this.updateColumns(this.grid.columnApi.visibleColumns),\n      sourceFactoryWrapper,\n    );\n\n    if (refreshDataSource) {\n      this.pluginCtrl.extApi.contextApi.clear();\n      this.grid.ds.refresh();\n    } else if (this.grid.ds.length > 0) {\n      this.grid.ds.refresh(VIRTUAL_REFRESH);\n    }\n  }\n\n  private updateState(prev: boolean | undefined, curr: boolean): void {\n    const isFirst = prev === undefined;\n    if (!curr) {\n      this.disable(true);\n    } else {\n      this.enable(!isFirst);\n    }\n  }\n\n  private updateColumns(columns: PblColumn[]): void {\n    const { prop } = this._header;\n    this.columns = [];\n    for (const c of columns) {\n      if (c.orgProp === prop) {\n        this.selfColumn = c;\n      } else {\n        this.columns.push(c);\n      }\n    }\n    if (!this.selfColumn) {\n      // TODO: don't assume columns[0]\n      this.selfColumn = new PblColumn(this._header, this.pluginCtrl.extApi.columnStore.groupStore);\n    }\n  }\n\n  static ngAcceptInputType_transpose: BooleanInput;\n  static ngAcceptInputType_matchTemplates: BooleanInput;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PblNgridModule, ngridPlugin } from '@pebula/ngrid';\nimport { PblNgridTransposePluginDirective, PLUGIN_KEY } from './transpose-plugin.directive';\n\n@NgModule({\n  imports: [ CommonModule, PblNgridModule ],\n  declarations: [ PblNgridTransposePluginDirective ],\n  exports: [ PblNgridTransposePluginDirective ],\n})\nexport class PblNgridTransposeModule {\n  static readonly NGRID_PLUGIN = ngridPlugin({ id: PLUGIN_KEY }, PblNgridTransposePluginDirective);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["obsOf","obsFrom"],"mappings":"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"}