{"version":3,"file":"pebula-ngrid-state.mjs","sources":["../../../../libs/ngrid/state/src/lib/core/state-visor.ts","../../../../libs/ngrid/state/src/lib/core/persistance/local-storage.ts","../../../../libs/ngrid/state/src/lib/core/models/state.ts","../../../../libs/ngrid/state/src/lib/core/handling/base.ts","../../../../libs/ngrid/state/src/lib/core/identification/index.ts","../../../../libs/ngrid/state/src/lib/core/utils.ts","../../../../libs/ngrid/state/src/lib/core/state.ts","../../../../libs/ngrid/state/src/lib/core/built-in-handlers/grid-primitives/index.ts","../../../../libs/ngrid/state/src/lib/core/built-in-handlers/column-def/children.ts","../../../../libs/ngrid/state/src/lib/core/built-in-handlers/column-def/index.ts","../../../../libs/ngrid/state/src/lib/core/built-in-handlers/column-order/index.ts","../../../../libs/ngrid/state/src/lib/presets.ts","../../../../libs/ngrid/state/src/lib/state-plugin.ts","../../../../libs/ngrid/state/src/lib/core/built-in-handlers/column-visibility/index.ts","../../../../libs/ngrid/state/src/lib/core/built-in-handlers/_register.ts","../../../../libs/ngrid/state/src/lib/ngrid-state.module.ts","../../../../libs/ngrid/state/src/pebula-ngrid-state.ts"],"sourcesContent":["import { PblNgridGlobalState, StateChunks, RootStateChunks, PblNgridStateChunkSectionContext } from './models/index';\nimport { PblNgridStateChunkHandlerDefinition } from './handling';\n\nexport let _instance: StateVisor;\n\nexport interface PblNgridStateChunkSectionConfig<T extends keyof RootStateChunks = keyof RootStateChunks> {\n  stateMatcher: (state: PblNgridGlobalState) => RootStateChunks[T]['state'];\n  sourceMatcher: (context: PblNgridStateChunkSectionContext) => RootStateChunks[T]['value'];\n}\n\nexport class StateVisor<T extends keyof StateChunks = keyof StateChunks> {\n\n  private rootChunkSections = new Map<keyof RootStateChunks, PblNgridStateChunkSectionConfig<keyof RootStateChunks>>();\n  private chunkHandlers = new Map<T, PblNgridStateChunkHandlerDefinition<T>[]>();\n\n  private constructor() { }\n\n  static get(): StateVisor { return _instance || (_instance = new StateVisor()); }\n\n  registerRootChunkSection<Z extends keyof RootStateChunks>(chunkId: Z, config: PblNgridStateChunkSectionConfig<Z>): void {\n    if (!this.rootChunkSections.has(chunkId)) {\n      this.rootChunkSections.set(chunkId, config);\n    }\n  }\n\n  registerChunkHandlerDefinition<Z extends T>(chunkHandlerDefs: PblNgridStateChunkHandlerDefinition<Z>): void {\n    const { chunkId } = chunkHandlerDefs;\n    const handlersForGroup = this.chunkHandlers.get(chunkId) || [];\n    handlersForGroup.push(chunkHandlerDefs);\n    this.chunkHandlers.set(chunkId, handlersForGroup);\n  }\n\n  getRootSections(): Array<[keyof RootStateChunks, PblNgridStateChunkSectionConfig<keyof RootStateChunks>]> {\n    return Array.from(this.rootChunkSections.entries());\n  }\n\n  getDefinitionsForSection(chunkId: T): PblNgridStateChunkHandlerDefinition<T>[] {\n    return this.chunkHandlers.get(chunkId) || [];\n  }\n}\n\nexport const stateVisor: StateVisor = StateVisor.get();\n","import { PblNgridGlobalState, PblNgridPersistAdapter } from '../models/index';\n\nexport class PblNgridLocalStoragePersistAdapter implements PblNgridPersistAdapter {\n  private static globalStateKey: string = 'pebulaNgridState';\n\n  save(id: string, state: PblNgridGlobalState): Promise<void> {\n    try {\n      const store = this.loadGlobalStateStore();\n      store[id] = state;\n      if (!state.__metadata__) {\n        state.__metadata__ = {} as any;\n      }\n      state.__metadata__.updatedAt = new Date().toISOString();\n\n      this.saveGlobalStateStore(store);\n      return Promise.resolve();\n    } catch (err) {\n      return Promise.reject(err);\n    }\n  }\n\n  load(id: string): Promise<PblNgridGlobalState> {\n    return Promise.resolve(this.loadGlobalStateStore()[id] || {} as any);\n  }\n\n  exists(id: string): Promise<boolean> {\n    const store = this.loadGlobalStateStore() || {};\n    return Promise.resolve(id in store);\n  }\n\n  private loadGlobalStateStore(): { [id: string]: PblNgridGlobalState } {\n    const raw = localStorage.getItem(PblNgridLocalStoragePersistAdapter.globalStateKey);\n    return raw ? JSON.parse(raw) : {};\n  }\n\n  private saveGlobalStateStore(store: { [id: string]: PblNgridGlobalState }): void {\n    localStorage.setItem(PblNgridLocalStoragePersistAdapter.globalStateKey, JSON.stringify(store));\n  }\n}\n","import { PblNgridComponent, PblNgridExtensionApi } from '@pebula/ngrid';\nimport * as B from '../built-in-handlers/index';\nimport { PblNgridStateOptions } from './options';\n\n/* ======================= State Chunks */\n\nexport interface StateChunkItem<TState, TValue, TData = any, TKeyless = never> {\n  state: TState;\n  value?: TValue;\n  data?: TData;\n  keyless: TKeyless;\n}\n\nexport interface RootStateChunks extends B.BuiltInRootStateChunks { }\n\nexport interface StateChunks extends RootStateChunks, B.BuiltInStateChunks{ }\n\nexport interface PblNgridStateContext {\n  grid: PblNgridComponent;\n  extApi: PblNgridExtensionApi;\n  options: PblNgridStateOptions;\n}\n\nexport interface PblNgridStateChunkSectionContext extends PblNgridStateContext { }\n\nexport interface PblNgridStateChunkContext<T extends keyof StateChunks> extends PblNgridStateChunkSectionContext {\n  source: StateChunks[T]['value'];\n  data?: StateChunks[T]['data']\n  runChildChunk?<TChild extends keyof StateChunks>(childChunkId: TChild, state: StateChunks[TChild]['state'], source: StateChunks[TChild]['value'], data?: StateChunks[TChild]['data']);\n}\n\n/* ======================= State Chunks */\n\n/* ======================= Global State Object */\n\nexport interface PblNgridStateMetadata {\n  updatedAt: string;\n}\n\nexport interface PblNgridGlobalState extends B.PblNgridBuiltInGlobalState {\n  __metadata__: PblNgridStateMetadata;\n}\n\n/* ======================= Global State Object */\n","import { StateChunks, PblNgridStateChunkContext } from '../models/index';\nimport { stateVisor } from '../state-visor';\n\nexport class PblNgridStateChunkHandlerHost<T extends keyof StateChunks, Z extends keyof StateChunks[T]['state'] = keyof StateChunks[T]['state']> {\n  private keys = new Set<Z>();\n  private rKeys = new Set<Z>();\n  private sFn: Parameters<PblNgridStateChunkHandlerHost<T, Z>['serialize']>[0];\n  private dFn: Parameters<PblNgridStateChunkHandlerHost<T, Z>['deserialize']>[0];\n\n  constructor(private chunkId: T) { }\n\n  handleKeys(...keys: Array<Z>): this {\n    for (const k of keys) { this.keys.add(k) }\n    return this;\n  }\n\n  /**\n   * Required keys are keys that cannot get excluded.\n   * Either by adding the to the `exclude` option or by omitting them from the `include` option.\n   */\n  requiredKeys(...keys: Array<Z>): this {\n    for (const k of keys) {\n      this.keys.add(k)\n      this.rKeys.add(k);\n    }\n    return this;\n  }\n\n  serialize(fn: (key: Z, ctx: PblNgridStateChunkContext<T>) => StateChunks[T]['state'][Z]): this {\n    this.sFn = fn;\n    return this;\n  }\n\n  deserialize(fn: (key: Z, stateValue: StateChunks[T]['state'][Z],  ctx: PblNgridStateChunkContext<T>) => void): this {\n    this.dFn = fn;\n    return this;\n  }\n\n  register(): void {\n    if (this.keys.size === 0) {\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        throw new Error('Invalid state chunk handler, no keys defined.');\n      }\n      return;\n    }\n    if (!this.sFn) {\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        throw new Error('Invalid state chunk handler, missing serialize handler.');\n      }\n      return;\n    }\n    if (!this.dFn) {\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        throw new Error('Invalid state chunk handler, missing deserialize handler.');\n      }\n      return;\n    }\n\n    stateVisor.registerChunkHandlerDefinition({\n      chunkId: this.chunkId,\n      keys: Array.from(this.keys.values()),\n      rKeys: Array.from(this.rKeys.values()),\n      serialize: this.sFn,\n      deserialize: this.dFn,\n    })\n  }\n}\n\nexport interface PblNgridStateChunkHandlerDefinition<T extends keyof StateChunks, Z extends keyof StateChunks[T]['state'] = keyof StateChunks[T]['state']>{\n  chunkId: T;\n  keys: Array<Z>;\n  rKeys: Array<Z>;\n  serialize: Parameters<PblNgridStateChunkHandlerHost<T, Z>['serialize']>[0];\n  deserialize: Parameters<PblNgridStateChunkHandlerHost<T, Z>['deserialize']>[0];\n}\n\nexport function createStateChunkHandler<T extends keyof StateChunks>(section: T) {\n  return new PblNgridStateChunkHandlerHost(section);\n}\n","import { PblNgridIdentResolver, PblNgridIdentResolverContext } from '../models/index';\n\nexport class PblNgridIdAttributeIdentResolver implements PblNgridIdentResolver {\n  resolveId(ctx: PblNgridIdentResolverContext): string | undefined {\n    return ctx.grid.id;\n  }\n}\n","import { PblNgridComponent, PblNgridPluginController, PblNgridExtensionApi } from '@pebula/ngrid';\nimport {\n  RootStateChunks,\n  StateChunks,\n  PblNgridStateChunkSectionContext,\n  PblNgridStateChunkContext,\n  PblNgridStateOptions,\n  PblNgridStateLoadOptions,\n} from './models/index';\nimport { PblNgridStateChunkHandlerDefinition } from './handling/base';\nimport { stateVisor, PblNgridStateChunkSectionConfig } from './state-visor';\nimport { PblNgridLocalStoragePersistAdapter } from './persistance/local-storage';\nimport { PblNgridIdAttributeIdentResolver } from './identification/index';\n\n/**\n * Pick Partial No Partial\n * Like Pick but some are partial some are not partial\n */\nexport type PickPNP<T, P extends keyof T, NP extends keyof T> = Partial<Pick<T, P>> & Pick<T, NP>\n\nexport function resolveId(grid: PblNgridComponent, options?: PblNgridStateOptions): string {\n  const id = options.identResolver.resolveId(createChunkSectionContext(grid, options));\n  if (!id) {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      throw new Error('Could not resolve a unique id for an ngrid instance, state is disabled');\n    }\n  }\n  return id;\n}\n\nexport function serialize(def: PblNgridStateChunkHandlerDefinition<any>, state: any, ctx: PblNgridStateChunkContext<any>): void {\n  const keyPredicate = stateKeyPredicateFactory(def.chunkId, ctx.options);\n  for (const key of def.keys) {\n    if (!keyPredicate || def.rKeys.indexOf(key) > -1 || keyPredicate(key as string)) {\n      state[key] = def.serialize(key, ctx);\n    }\n  }\n}\n\nexport function deserialize(def: PblNgridStateChunkHandlerDefinition<any>, state: any, ctx: PblNgridStateChunkContext<any>): void {\n  const keyPredicate = stateKeyPredicateFactory(def.chunkId, ctx.options);\n  for (const key of def.keys) {\n    if (key in state) {\n      if (!keyPredicate || def.rKeys.indexOf(key) > -1 || keyPredicate(key as string)) {\n        def.deserialize(key, state[key], ctx);\n      }\n    }\n  }\n}\n\nexport function normalizeOptions(mode: 'save', options?: PblNgridStateOptions): PblNgridStateOptions;\nexport function normalizeOptions(mode: 'load', options?: PblNgridStateLoadOptions): PblNgridStateLoadOptions;\nexport function normalizeOptions(mode: 'save' | 'load', options?: PblNgridStateOptions | PblNgridStateLoadOptions): PblNgridStateOptions | PblNgridStateLoadOptions {\n  if (!options) {\n    options = {} as any;\n  }\n\n  if (!options.persistenceAdapter) {\n    options.persistenceAdapter = new PblNgridLocalStoragePersistAdapter();\n  }\n  if (!options.identResolver) {\n    options.identResolver = new PblNgridIdAttributeIdentResolver();\n  }\n\n  if (mode === 'load') {\n    const opt: PblNgridStateLoadOptions = options;\n    if (!opt.strategy) {\n      opt.strategy = 'overwrite'\n    }\n  }\n\n  return options;\n}\n\nexport function getExtApi(grid: PblNgridComponent): PblNgridExtensionApi {\n  const controller = PblNgridPluginController.find(grid);\n  if (controller) {\n    return controller.extApi;\n  }\n}\n\nexport function createChunkSectionContext(grid: PblNgridComponent,\n                                          options: PblNgridStateOptions | PblNgridStateLoadOptions): PblNgridStateChunkSectionContext {\n  return { grid, extApi: getExtApi(grid), options };\n}\n\nexport function createChunkContext<T extends keyof RootStateChunks>(sectionContext: PblNgridStateChunkSectionContext,\n                                                                   chunkConfig: PblNgridStateChunkSectionConfig<T>,\n                                                                   mode: 'serialize' | 'deserialize'): PblNgridStateChunkContext<T> {\n  return {\n    ...sectionContext,\n    source: chunkConfig.sourceMatcher(sectionContext),\n    runChildChunk<TChild extends keyof StateChunks>(childChunkId: TChild, state: StateChunks[TChild]['state'], source: StateChunks[TChild]['value'], data?: StateChunks[TChild]['data']) {\n      const childContext = { ...sectionContext, source, data };\n      const defs = stateVisor.getDefinitionsForSection(childChunkId);\n\n      const action = mode === 'serialize' ? serialize : deserialize;\n      for (const def of defs) {\n        action(def, state, childContext);\n      }\n    }\n  }\n}\n\nexport function stateKeyPredicateFactory(chunkId: keyof StateChunks, options: PblNgridStateOptions, rootPredicate = false): ((key: string) => boolean) | undefined {\n  // TODO: chunkId ans options include/exclude combination does not change\n  // we need to cache it... e.g. each column def will create a new predicate if we don't cache.\n  const filter = options.include || options.exclude;\n  if (filter) {\n    // -1: Exclude, 1: Include\n    const mode: -1 | 1 = filter === options.include ? 1 : -1;\n    const chunkFilter: boolean | string[] = filter[chunkId];\n    if (typeof chunkFilter === 'boolean') {\n      return mode === 1\n        ? (key: string) => chunkFilter\n        : (key: string) => !chunkFilter\n      ;\n    } else if (Array.isArray(chunkFilter)) {\n      if (rootPredicate) {\n        // root predicate is for RootStateChunks and when set to true\n        // the key itself has no impact on the predicate. If the filter is boolean nothing changes\n        // but if it's an array, the array is ignored and considered as true ignoring the key because a key does not existing when checking the root\n        return k => true;\n      } else {\n        return mode === 1\n          ? (key: string) => chunkFilter.indexOf(key) > -1\n          : (key: string) => chunkFilter.indexOf(key) === -1\n        ;\n      }\n    } else if (mode === 1) {\n      return (key: string) => false\n    }\n  }\n}\n\n","import { PblNgridComponent } from '@pebula/ngrid';\nimport { PblNgridGlobalState, PblNgridStateOptions, PblNgridStateSaveOptions, PblNgridStateLoadOptions } from './models/index';\nimport { stateVisor } from './state-visor';\nimport * as U from './utils';\n\nexport function hasState(grid: PblNgridComponent, options?: PblNgridStateOptions): Promise<boolean> {\n  return Promise.resolve()\n    .then( () => {\n      options = U.normalizeOptions('save', options);\n      const id = U.resolveId(grid, options);\n      return options.persistenceAdapter.exists(id);\n    });\n}\n\nexport function saveState(grid: PblNgridComponent, options?: PblNgridStateSaveOptions): Promise<void> {\n  return Promise.resolve()\n    .then( () => {\n      options = U.normalizeOptions('save', options);\n      const id = U.resolveId(grid, options);\n      const state: PblNgridGlobalState = {} as any;\n      const context = U.createChunkSectionContext(grid, options);\n\n      for (const [chunkId, chunkConfig] of stateVisor.getRootSections()) {\n        const keyPredicate = U.stateKeyPredicateFactory(chunkId, options, true);\n\n        if (!keyPredicate || keyPredicate(chunkId)) {\n          const sectionState = chunkConfig.stateMatcher(state);\n          const chunkContext = U.createChunkContext(context, chunkConfig, 'serialize');\n\n          const defs = stateVisor.getDefinitionsForSection(chunkId);\n          for (const def of defs) {\n            U.serialize(def, sectionState, chunkContext);\n          }\n        }\n      }\n      return options.persistenceAdapter.save(id, state);\n    });\n}\n\nexport function loadState(grid: PblNgridComponent, options?: PblNgridStateLoadOptions): Promise<PblNgridGlobalState> {\n  return Promise.resolve()\n    .then( () => {\n      options = U.normalizeOptions('load', options);\n      const id = U.resolveId(grid, options);\n      return options.persistenceAdapter.load(id)\n        .then( state => {\n          const context = U.createChunkSectionContext(grid, options);\n\n          for (const [chunkId, chunkConfig] of stateVisor.getRootSections()) {\n            const keyPredicate = U.stateKeyPredicateFactory(chunkId, options, true);\n\n            if (!keyPredicate || keyPredicate(chunkId)) {\n              const sectionState = chunkConfig.stateMatcher(state);\n              const chunkContext = U.createChunkContext(context, chunkConfig, 'deserialize');\n\n              const defs = stateVisor.getDefinitionsForSection(chunkId);\n              for (const def of defs) {\n                U.deserialize(def, sectionState, chunkContext);\n              }\n            }\n          }\n          return state;\n        });\n    });\n}\n\n","import { PblNgridComponent } from '@pebula/ngrid';\nimport { PickPNP } from '../../utils';\nimport { createStateChunkHandler } from '../../handling';\nimport { stateVisor } from '../../state-visor';\n\nexport interface PblNgridSurfaceState extends\n  PickPNP <\n    PblNgridComponent,\n    'showHeader' | 'showFooter' | 'focusMode' | 'usePagination' | 'minDataViewHeight',\n    never\n  > { }\n\nexport function registerGridHandlers() {\n  stateVisor.registerRootChunkSection(\n    'grid',\n    {\n      sourceMatcher: ctx => ctx.grid,\n      stateMatcher: state => state.grid || (state.grid = {} as any)\n    }\n  );\n\n  createStateChunkHandler('grid')\n    .handleKeys('showHeader', 'showFooter', 'focusMode', 'usePagination', 'minDataViewHeight')\n    .serialize((key, ctx) => {\n      switch (key) {\n        default:\n          return ctx.source[key];\n      }\n    })\n    .deserialize( (key, stateValue, ctx) => {\n      // We must assert the type starting from 3.5 onwards\n      // See \"Fixes to unsound writes to indexed access types\" in https://devblogs.microsoft.com/typescript/announcing-typescript-3-5\n      ctx.source[key as any] = stateValue;\n    })\n    .register();\n}\n","import { PblColumnTypeDefinition } from '@pebula/ngrid/core';\nimport { createStateChunkHandler } from '../../handling';\n\nexport function registerColumnDefChildHandlers() {\n  /* ====================================================================================================================================================== */\n\n  createStateChunkHandler('dataColumn')\n    .requiredKeys('id', 'prop')\n    .handleKeys(\n      'label', 'css', 'type', 'width', 'minWidth', 'maxWidth',          // PblNgridBaseColumnState (all optional)\n      'headerType', 'footerType', 'sort', 'alias', 'editable', 'pin',   // All Optional\n    )\n    .serialize( (key, ctx) => {\n      const c = ctx.data.activeColumn || ctx.data.pblColumn;\n      if (c) {\n        switch (key) {\n          case 'prop':\n            return c.orgProp;\n          default:\n            break;\n        }\n      }\n\n      const value = c ? c[key] : ctx.source[key];\n\n      switch (key) {\n        case 'sort':\n          if (typeof value === 'boolean') {\n            return value;\n          } else {\n            return;\n          }\n        default:\n          break;\n      }\n\n      return value;\n    })\n    .deserialize( (key, stateValue, ctx) => {\n      const { activeColumn } = ctx.data;\n      if (activeColumn) {\n        switch (key) {\n          case 'width':\n            activeColumn.updateWidth(stateValue as any);\n            break;\n        }\n      }\n      if (ctx.source) {\n        switch (key) {\n          case 'prop':\n            return;\n          case 'type':\n          case 'headerType':\n          case 'footerType':\n            const typeValue = ctx.source[key];\n            const stateTypeDef: PblColumnTypeDefinition = stateValue as any;\n            if (stateTypeDef && typeof stateTypeDef !== 'string' && typeValue && typeof typeValue !== 'string') {\n              typeValue.name = stateTypeDef.name;\n              if (stateTypeDef.data) {\n                typeValue.data = Object.assign(typeValue.data || {}, stateTypeDef.data);\n              }\n              return;\n            }\n            break;\n        }\n\n        // We must assert the type starting from 3.5 onwards\n        // See \"Fixes to unsound writes to indexed access types\" in https://devblogs.microsoft.com/typescript/announcing-typescript-3-5\n        ctx.source[key as any] = stateValue;\n      }\n\n    })\n    .register();\n\n  /* ====================================================================================================================================================== */\n\n  createStateChunkHandler('dataMetaRow')\n    .handleKeys('rowClassName', 'type')    // All Optional\n    .serialize( (key, ctx) => {\n      const active = ctx.data.active || ctx.source;\n      if (active) {\n        return active[key];\n      }\n    })\n    .deserialize( (key, stateValue, ctx) => {\n      // We must assert the type starting from 3.5 onwards\n      // See \"Fixes to unsound writes to indexed access types\" in https://devblogs.microsoft.com/typescript/announcing-typescript-3-5\n      ctx.source[key] = stateValue as any;\n    })\n    .register();\n\n\n  /* ====================================================================================================================================================== */\n\n  createStateChunkHandler('metaRow')\n    // Note that we are not handling `cols`, this should be called from the parent, as a different child chunk handling process for each column\n    .handleKeys(\n      'rowClassName', 'type',    // All Optional like dataMetaRow\n      'rowIndex',                // Required\n      )\n    .serialize( (key, ctx) => {\n      return ctx.source[key];\n    })\n    .deserialize( (key, stateValue, ctx) => {\n\n    })\n    .register();\n\n  /* ====================================================================================================================================================== */\n\n  createStateChunkHandler('metaGroupRow')\n    // Note that we are not handling `cols`, this should be called from the parent, as a different child chunk handling process for each column\n    .handleKeys(\n      'rowClassName', 'type',    // All Optional like dataMetaRow\n      'rowIndex',                // Required\n      )\n    .serialize( (key, ctx) => {\n      return ctx.source[key];\n    })\n    .deserialize( (key, stateValue, ctx) => {\n\n    })\n    .register();\n\n  /* ====================================================================================================================================================== */\n\n  createStateChunkHandler('metaColumn')\n    .requiredKeys('kind', 'rowIndex')\n    .handleKeys(\n      'id', 'label', 'css', 'type', 'width', 'minWidth', 'maxWidth',        // PblNgridBaseColumnState (all optional)\n    )\n    .serialize( (key, ctx) => {\n      return ctx.source[key];\n    })\n    .deserialize( (key, stateValue, ctx) => {\n\n    })\n    .register();\n\n  /* ====================================================================================================================================================== */\n\n  createStateChunkHandler('metaGroupColumn')\n    .requiredKeys('columnIds', 'rowIndex')\n    .handleKeys(\n      'id', 'label', 'css', 'type', 'width', 'minWidth', 'maxWidth',        // PblNgridBaseColumnState (all optional)\n    )\n    .serialize( (key, ctx) => {\n      return ctx.source[key];\n    })\n    .deserialize( (key, stateValue, ctx) => {\n\n    })\n    .register();\n}\n","import { utils } from '@pebula/ngrid';\nimport { createStateChunkHandler } from '../../handling';\nimport { stateVisor } from '../../state-visor';\nimport { StateChunks, PblNgridStateChunkContext } from '../../models/index';\nimport { PblNgridMetaRowSetState, PblNgridMetaColumnState, PblNgridGroupColumnState, PblNgridColumnDefinitionSetState } from './model';\nimport { registerColumnDefChildHandlers } from './children';\n\nfunction runChildChunksForRowMetaColumns<TCol, TChild extends keyof StateChunks>(childChunkId: TChild, ctx: PblNgridStateChunkContext<\"columns\">, columns: TCol[]) {\n  const stateColumns = [];\n  for (const col of columns) {\n    const c: StateChunks[TChild]['state'] = {} as any;\n    ctx.runChildChunk(childChunkId, c, col);\n    stateColumns.push(c);\n  }\n  return stateColumns;\n}\n\n/** Runs the process for the `header` and `footer` sections in the `table` section (if they exist) */\nfunction runChildChunkForDataMetaRows(mode: 's' | 'd', state: PblNgridColumnDefinitionSetState['table'], ctx: PblNgridStateChunkContext<\"columns\">) {\n  const { columnStore } = ctx.extApi;\n  const { table } = ctx.source;\n  for (const kind of ['header', 'footer'] as Array<'header' | 'footer'>) {\n    // This is a mapping of the from->to relationship (i.e serializing or deserializing)\n    const src = mode === 's' ? table : state;\n    const dest = src === table ? state : table;\n\n    // we need to have a source\n    if (src[kind]) {\n      const active = kind === 'header' ? columnStore.headerColumnDef : columnStore.footerColumnDef;\n      if (!dest[kind]) { dest[kind] = {}; }\n      ctx.runChildChunk('dataMetaRow', state[kind], table[kind], { kind, active });\n    }\n  }\n}\n\nfunction runChildChunksForRowDataColumns(mode: 's' | 'd', state: PblNgridColumnDefinitionSetState['table'], ctx: PblNgridStateChunkContext<\"columns\">) {\n  const { table } = ctx.source;\n  const src = mode === 's' ? table : state;\n\n  const resolve = src === state\n    ? col => ({ colState: col, pblColumn: table.cols.find( tCol => (utils.isPblColumn(tCol) && tCol.orgProp === col.prop) || (tCol.id === col.id || tCol.prop === col.prop) ) })\n    : col => ({ colState: state.cols[state.cols.push({} as any) - 1] , pblColumn: utils.isPblColumn(col) && col })\n  ;\n\n  if (src.cols && src.cols.length > 0) {\n    for (const col of src.cols) {\n      const { colState, pblColumn } = resolve(col)\n\n      const data = {\n        pblColumn: utils.isPblColumn(pblColumn) && pblColumn,\n        activeColumn: ctx.grid.columnApi.findColumn(col.id || col.prop),\n      }\n      ctx.runChildChunk('dataColumn', colState, pblColumn, data);\n    }\n  }\n}\n\nexport function registerColumnDefHandlers() {\n  stateVisor.registerRootChunkSection(\n    'columns',\n    {\n      sourceMatcher: ctx => ctx.grid.columns,\n      stateMatcher: state => state.columns || (state.columns = {\n        table: {\n          cols: [],\n        },\n        header: [],\n        footer: [],\n        headerGroup: [],\n      })\n    }\n  );\n\n  createStateChunkHandler('columns')\n    .handleKeys('table', 'header', 'headerGroup', 'footer')\n    .serialize( (key, ctx) => {\n      switch (key) {\n        case 'table':\n          const state: PblNgridColumnDefinitionSetState['table'] = { cols: [] };\n          runChildChunkForDataMetaRows('s', state, ctx);\n          runChildChunksForRowDataColumns('s', state, ctx);\n          return state;\n        case 'header':\n        case 'footer':\n          const source = ctx.source[key];\n          if (source && source.length > 0) {\n            const rows = [];\n            for (const row of source) {\n              const r: PblNgridMetaRowSetState<PblNgridMetaColumnState> = {} as any;\n              ctx.runChildChunk('metaRow', r, row);\n              r.cols = runChildChunksForRowMetaColumns('metaColumn', ctx, row.cols);\n              rows.push(r);\n            }\n            return rows;\n          }\n          break;\n        case 'headerGroup':\n          const headerGroupSource = ctx.source.headerGroup;\n          if (headerGroupSource && headerGroupSource.length > 0) {\n            const rows = [];\n            for (const row of headerGroupSource) {\n              const r: PblNgridMetaRowSetState<PblNgridGroupColumnState> = {} as any;\n              ctx.runChildChunk('metaGroupRow', r, row);\n              r.cols = runChildChunksForRowMetaColumns('metaColumn', ctx, row.cols);\n              rows.push(r);\n            }\n            return rows;\n          }\n          break;\n      }\n    })\n    .deserialize( (key, stateValue, ctx) => {\n      switch (key) {\n        case 'table':\n          const state = stateValue as PblNgridColumnDefinitionSetState['table'];\n          runChildChunkForDataMetaRows('d', state, ctx);\n          runChildChunksForRowDataColumns('d', state, ctx);\n          break;\n        case 'header':\n        case 'footer':\n          const source = ctx.source[key];\n          const metaRowsState = stateValue as PblNgridColumnDefinitionSetState['header'];\n          if (metaRowsState && metaRowsState.length > 0) {\n            for (const rowState of metaRowsState) {\n              const row = source.find( r => r.rowIndex === rowState.rowIndex );\n              if (row) {\n                ctx.runChildChunk('metaRow', rowState, row);\n                for (const colState of rowState.cols) {\n                  const col = row.cols.find( r => r.id === colState.id);\n                  if (col) {\n                    const activeColStore = ctx.extApi.columnStore.find(colState.id);\n                    ctx.runChildChunk('metaColumn', colState, col);\n                  }\n                }\n              }\n            }\n          }\n          break;\n        case 'headerGroup':\n          break;\n      }\n    })\n    .register();\n\n    registerColumnDefChildHandlers();\n}\n\nexport {\n  PblNgridMetaColumnState,\n  PblNgridGroupColumnState,\n  PblNgridColumnState,\n  PblNgridMetaRowState,\n  PblNgridMetaRowSetState,\n  PblNgridColumnDefinitionSetState,\n} from './model';\n","import { PblColumn } from '@pebula/ngrid';\nimport { createStateChunkHandler } from '../../handling';\nimport { stateVisor } from '../../state-visor';\nimport { PblNgridStateLoadOptions } from '../../models/index';\n\nexport function registerColumnOrderHandlers() {\n  stateVisor.registerRootChunkSection(\n    'columnOrder',\n    {\n      sourceMatcher: ctx => ctx.grid.columnApi,\n      stateMatcher: state => {\n        if (!state.columnOrder) {\n          state.columnOrder = [];\n        }\n        return state;\n      }\n    }\n  );\n\n  createStateChunkHandler('columnOrder')\n    .handleKeys('columnOrder')\n    .serialize( (key, ctx) => ctx.source.visibleColumnIds.slice() )\n    .deserialize( (key, columnOrder, ctx) => {\n      const { extApi, grid } = ctx;\n      let lastMove: [PblColumn, PblColumn];\n\n      if (columnOrder?.length === grid.columnApi.visibleColumns.length) {\n        for (let i = 0, len = columnOrder.length; i < len; i++) {\n          const anchor = grid.columnApi.visibleColumns[i];\n          if (columnOrder[i] !== anchor.id) {\n            const column = grid.columnApi.findColumn(columnOrder[i]);\n            if (!column) {\n              return;\n            }\n            lastMove = [column, anchor];\n            grid.columnApi.moveColumn(column, anchor);\n          }\n        }\n      }\n      // With this revert/redo of the last move we just trigger a redraw.\n      if (lastMove) {\n        grid.columnApi.moveColumn(lastMove[1], lastMove[0]);\n        grid.columnApi.moveColumn(lastMove[0], lastMove[1]);\n      }\n    })\n    .register();\n  }\n","import { StateChunkKeyFilter } from './core/models/index';\n\n/**\n * Return's the `User Preferences` preset which focuses on saving and restoring state that the user\n * can define and would want to restore between sessions.\n *\n * For example, saving column width's which the user might have changed using the mouse or any other custom way provided to him (through API).\n * Saving the column order, so if the user re-ordered the table the order can be loaded back again...\n */\nexport function userSessionPref(...basedOn: StateChunkKeyFilter[]): StateChunkKeyFilter {\n  const resultFilter: StateChunkKeyFilter = {\n    grid: [\n      'showFooter',\n      'showHeader',\n    ],\n    columnVisibility: true,\n    columnOrder: true,\n    columns: [ 'table' ],\n    dataColumn: [\n      'width',\n    ]\n  }\n\n  if (basedOn.length > 0) {\n    for (const b of basedOn)\n    mergeStateChunkKeyFilter(resultFilter, b);\n  }\n\n  return resultFilter;\n}\n\n\n/**\n * Merge a head and tail chunk filters so keys from tail will be merged into head if:\n *\n * - The key does not exist in head\n * - The key exist in head but the value of it is an Array and the value of tail is an Array as well.\n *   In such case, both array's are merged into a single unique array.\n */\nfunction mergeStateChunkKeyFilter(mergeHead: StateChunkKeyFilter, mergeTail: StateChunkKeyFilter) {\n  for (const k of Object.keys(mergeTail)) {\n    const tailValue = mergeTail[k];\n    if (k in mergeHead) {\n      const tailHead = mergeHead[k];\n      if (Array.isArray(tailHead) && Array.isArray(tailValue)) {\n        const s = new Set<string>([...tailHead, ...tailValue]);\n        mergeHead[k] = Array.from(s.values());\n      }\n    } else {\n      mergeHead[k] = mergeTail[k];\n    }\n  }\n}\n","import { Subject, Observable } from 'rxjs';\nimport { map, mapTo, filter, take, skip, debounceTime } from 'rxjs/operators';\nimport { Directive, OnDestroy, Injector, Input } from '@angular/core';\n\nimport { ON_INVALIDATE_HEADERS, ON_RESIZE_ROW, ON_DESTROY } from '@pebula/ngrid/core';\nimport { PblNgridComponent, PblNgridPluginController } from '@pebula/ngrid';\nimport { hasState, saveState, loadState, PblNgridStateLoadOptions, PblNgridStateSaveOptions } from './core/index';\n\nimport { userSessionPref } from './presets';\n\ndeclare module '@pebula/ngrid/core/lib/configuration/type' {\n  interface PblNgridConfig {\n    state?: {\n      /** When set to true will enable the state plugin on all table instances by default. */\n      autoEnable?: boolean;\n      /**\n       * Options to use when auto-loading the plugin\n       */\n      autoEnableOptions?: {\n        loadOptions?: PblNgridStateLoadOptions;\n        saveOptions?: PblNgridStateSaveOptions;\n      }\n    };\n  }\n}\n\ndeclare module '@pebula/ngrid/lib/ext/types' {\n  interface PblNgridPluginExtension {\n    state?: PblNgridStatePlugin;\n  }\n  interface PblNgridPluginExtensionFactories {\n    state: keyof typeof PblNgridStatePlugin;\n  }\n}\n\ninterface InternalStatePluginEvents {\n  phase: 'load' | 'save';\n  position: 'before' | 'after';\n  error?: Error;\n}\n\nexport const PLUGIN_KEY: 'state' = 'state';\n\nexport class PblNgridStatePlugin {\n\n  loadOptions?: PblNgridStateLoadOptions;\n  saveOptions?: PblNgridStateSaveOptions;\n\n  afterLoadState: Observable<void>;\n  afterSaveState: Observable<void>;\n  onError: Observable<{ phase: 'save' | 'load'; error: Error; }>;\n\n  private _removePlugin: (table: PblNgridComponent<any>) => void;\n  private _events = new Subject<InternalStatePluginEvents>();\n\n  constructor(public grid: PblNgridComponent<any>, protected injector: Injector, protected pluginCtrl: PblNgridPluginController) {\n    this._removePlugin = pluginCtrl.setPlugin(PLUGIN_KEY, this);\n\n    this.afterLoadState = this._events.pipe(filter( e => e.phase === 'load' && e.position === 'after'), mapTo(undefined) );\n    this.afterSaveState = this._events.pipe(filter( e => e.phase === 'save' && e.position === 'after'), mapTo(undefined) );\n    this.onError = this._events.pipe(filter( e => !!e.error ), map( e => ({ phase: e.phase, error: e.error })) );\n\n    pluginCtrl.events\n      .pipe(ON_INVALIDATE_HEADERS, take(1))\n      .subscribe( event => {\n        const initialLoadOptions = { ...(this.loadOptions || {}), avoidRedraw: true };\n        hasState(grid, initialLoadOptions)\n          .then( value => {\n            if (value) {\n              return this._load(initialLoadOptions);\n            }\n          })\n          .then( () => {\n            pluginCtrl.events\n              .pipe(ON_RESIZE_ROW, skip(1), debounceTime(500))\n              .subscribe( event => this.save() );\n          });\n      });\n\n    pluginCtrl.events\n      .pipe(ON_DESTROY)\n      .subscribe( event => {\n        event.wait(this.save());\n        this._events.complete();\n      });\n  }\n\n  static create(table: PblNgridComponent<any>, injector: Injector): PblNgridStatePlugin {\n    const pluginCtrl = PblNgridPluginController.find(table);\n    return new PblNgridStatePlugin(table, injector, pluginCtrl);\n  }\n\n  load(): Promise<void> {\n    return this._load(this.loadOptions);\n  }\n\n  save(): Promise<void> {\n    return saveState(this.grid, this.saveOptions)\n      .then( () => this._events.next({phase: 'save', position: 'after'}) )\n      .catch( error => this._events.next({phase: 'save', position: 'after', error }) );\n  }\n\n  destroy(): void {\n    this._removePlugin(this.grid);\n  }\n\n  private _load(loadOptions: PblNgridStateLoadOptions): Promise<void> {\n    return loadState(this.grid, loadOptions)\n      .then( () => this._events.next({phase: 'load', position: 'after'}) )\n      .catch( error => this._events.next({phase: 'load', position: 'after', error }) );\n  }\n\n}\n\n@Directive({\n  selector: 'pbl-ngrid[persistState]', // tslint:disable-line:directive-selector\n  outputs: ['afterLoadState', 'afterSaveState', 'onError'],\n})\nexport class PblNgridStatePluginDirective extends PblNgridStatePlugin implements OnDestroy {\n\n  @Input() loadOptions: PblNgridStateLoadOptions = { include: userSessionPref() };\n  @Input() saveOptions: PblNgridStateSaveOptions = { include: userSessionPref() };\n\n  constructor(grid: PblNgridComponent<any>, injector: Injector, pluginCtrl: PblNgridPluginController) {\n    super(grid, injector, pluginCtrl);\n  }\n\n  ngOnDestroy() {\n    this.destroy();\n  }\n\n}\n","import { createStateChunkHandler } from '../../handling';\nimport { stateVisor } from '../../state-visor';\n\nexport function registerColumnVisibilityHandlers() {\n  stateVisor.registerRootChunkSection(\n    'columnVisibility',\n    {\n      sourceMatcher: ctx => ctx.grid.columnApi,\n      stateMatcher: state => {\n        if (!state.columnVisibility) {\n          state.columnVisibility = [];\n        }\n        return state;\n      }\n    }\n  );\n\n  createStateChunkHandler('columnVisibility')\n    .handleKeys('columnVisibility')\n    .serialize( (key, ctx) => ctx.source.hiddenColumnIds )\n    .deserialize( (key, columnVisibility, ctx) => {\n      ctx.extApi.columnStore.updateColumnVisibility(columnVisibility);\n    })\n    .register();\n  }\n","import { registerGridHandlers } from './grid-primitives/index';\nimport { registerColumnOrderHandlers } from './column-order/index';\nimport { registerColumnVisibilityHandlers } from './column-visibility/index';\nimport { registerColumnDefHandlers } from './column-def/index';\n\nexport function registerBuiltInHandlers() {\n  registerGridHandlers();\n  registerColumnDefHandlers();\n  registerColumnVisibilityHandlers(); // order is important, we want visibility set before ordering\n  registerColumnOrderHandlers();\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PblNgridConfigService } from '@pebula/ngrid/core';\nimport { PblNgridPluginController, PblNgridModule, ngridPlugin } from '@pebula/ngrid';\n\nimport { registerBuiltInHandlers } from './core/built-in-handlers/_register';\nimport { PblNgridStatePlugin, PblNgridStatePluginDirective, PLUGIN_KEY } from './state-plugin';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    PblNgridModule,\n  ],\n  declarations: [\n    PblNgridStatePluginDirective,\n  ],\n  exports: [\n    PblNgridStatePluginDirective,\n  ],\n  providers: [ ],\n})\nexport class PblNgridStatePluginModule {\n\n  static readonly NGRID_PLUGIN = ngridPlugin({ id: PLUGIN_KEY, factory: 'create', runOnce: registerBuiltInHandlers }, PblNgridStatePlugin);\n\n  constructor(configService: PblNgridConfigService) {\n    PblNgridPluginController.onCreatedSafe(\n      PblNgridStatePluginModule,\n      (grid, controller) => {\n        const targetEventsConfig = configService.get(PLUGIN_KEY);\n        if (targetEventsConfig && targetEventsConfig.autoEnable === true) {\n          controller.onInit()\n            .subscribe(() => {\n              if (!controller.hasPlugin(PLUGIN_KEY)) {\n                const instance = controller.createPlugin(PLUGIN_KEY);\n                if (targetEventsConfig.autoEnableOptions) {\n                  instance.loadOptions = targetEventsConfig.autoEnableOptions.loadOptions;\n                  instance.saveOptions = targetEventsConfig.autoEnableOptions.saveOptions;\n                }\n              }\n            });\n        }\n      },\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["U.normalizeOptions","U.resolveId","U.createChunkSectionContext","U.stateKeyPredicateFactory","U.createChunkContext","U.serialize","U.deserialize","i1"],"mappings":"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"}