@lucasheight/kendo-grid-state
Version:
A helper library that implements a directive to manage grid state during session or between sessions for Progress Kendo UI for Angular Grid.
1 lines • 15.2 kB
Source Map (JSON)
{"version":3,"file":"lucasheight-kendo-grid-state.mjs","sources":["../../../projects/kendo-grid-state/src/lib/Column.ts","../../../projects/kendo-grid-state/src/lib/AppStorage.ts","../../../projects/kendo-grid-state/src/lib/StorageService.ts","../../../projects/kendo-grid-state/src/lib/GridStateDirective.ts","../../../projects/kendo-grid-state/src/lib/GridStateModule.ts","../../../projects/kendo-grid-state/src/public-api.ts","../../../projects/kendo-grid-state/src/lucasheight-kendo-grid-state.ts"],"sourcesContent":["export class Column {\n origIdx?: number = 0;\n orderIndex?: number;\n leafIndex?: number;\n hidden? = false;\n width?: number;\n expanded?: boolean = false;\n title?: string;\n field?: string = undefined;\n}\n","import { Inject, Injectable, InjectionToken } from \"@angular/core\";\n\nexport const APP_STORAGE = new InjectionToken<Storage>(\"App Storage\", {\n providedIn: \"root\",\n factory: () => sessionStorage,\n});\n","import { Injectable, inject } from \"@angular/core\";\nimport { APP_STORAGE } from \"./AppStorage\";\n\n@Injectable({ providedIn: \"root\" })\nexport class StorageService {\n private store = inject<Storage>(APP_STORAGE);\n clear(): void {\n this.store.clear();\n }\n getItem(key: string): string {\n return this.store.getItem(key);\n }\n key(index: number): string {\n return this.store.key(index);\n }\n removeItem(key: string): void {\n this.store.removeItem(key);\n }\n setItem(key: string, value: string): void {\n this.store.setItem(key, value);\n }\n}\n","import {\n Directive,\n OnInit,\n Input,\n Output,\n EventEmitter,\n OnDestroy,\n AfterContentInit,\n HostListener,\n inject,\n} from \"@angular/core\";\nimport {\n GridComponent,\n RowArgs,\n DetailExpandEvent,\n DetailCollapseEvent,\n DataStateChangeEvent,\n ColumnBase,\n} from \"@progress/kendo-angular-grid\";\nimport {\n CompositeFilterDescriptor,\n SortDescriptor,\n GroupDescriptor,\n} from \"@progress/kendo-data-query\";\nimport { Subscription } from \"rxjs\";\nimport { Column } from \"./Column\";\nimport { IGridState } from \"./GridState\";\nimport { StorageService } from \"./StorageService\";\n\n@Directive({\n selector: \"kendo-grid[gridState]\",\n standalone: true,\n})\nexport class GridStateDirective implements OnInit, OnDestroy, AfterContentInit {\n private grid = inject(GridComponent);\n private storageService = inject(StorageService);\n\n private subs: Subscription = new Subscription();\n private _expandedRows: any[] = [];\n\n @Input() get expandedRows(): any[] {\n return this._expandedRows;\n }\n set expandedRows(val: any[]) {\n const _combine = [];\n const existing = (this.state && this.state.expandedRows) || [];\n existing.forEach((el, idx) => {\n _combine[idx] = el;\n });\n val.forEach((el, idx) => {\n _combine[idx] = el;\n });\n this.state = Object.assign(this.state || {}, {\n expandedRows: _combine,\n } as IGridState);\n this._expandedRows = _combine;\n }\n @Output() expandedRowsChange: EventEmitter<any[]> = new EventEmitter();\n @Output() stateReady: EventEmitter<DataStateChangeEvent> = new EventEmitter();\n @Input() filter: CompositeFilterDescriptor;\n @Output()\n filterChange: EventEmitter<CompositeFilterDescriptor> = new EventEmitter();\n @Input() gridState: string;\n @Input() sort: Array<SortDescriptor>;\n @Output() sortChange: EventEmitter<Array<SortDescriptor>> =\n new EventEmitter();\n @Input() skip?: number = 0;\n @Output() skipChange: EventEmitter<number> = new EventEmitter();\n @Input() group?: Array<GroupDescriptor>;\n @Output() groupChange: EventEmitter<Array<GroupDescriptor>> =\n new EventEmitter();\n @Input() take?: number = 10;\n @Output() takeChange: EventEmitter<number> = new EventEmitter();\n\n constructor() {\n this.grid.isDetailExpanded = this.expander.bind(this);\n }\n\n private expander(args: RowArgs): boolean {\n return this._expandedRows[args.index];\n }\n\n private get key(): string {\n return this.gridState;\n }\n\n public get state(): IGridState {\n const raw: string = this.storageService.getItem(this.key);\n const parsed = raw ? JSON.parse(raw) : raw;\n return parsed;\n }\n\n public set state(val: IGridState) {\n this.storageService.setItem(this.key, JSON.stringify(val));\n }\n\n public get initState(): DataStateChangeEvent {\n return {\n group: this.group,\n skip: this.skip,\n sort: this.sort,\n filter: this.filter,\n take: this.take,\n };\n }\n\n ngOnInit(): void {\n if (this.gridState == undefined || this.gridState == \"\") {\n throw \"gridState has not been set, this is required to be unique for each grid as it is used as the storage key\";\n }\n\n this._expandedRows = (this.state && this.state.expandedRows) || [];\n this.expandedRowsChange.emit(this._expandedRows);\n const merged: DataStateChangeEvent = Object.assign(\n this.initState,\n this.state && this.state.state,\n );\n this.state = Object.assign(this.state || {}, {\n state: merged,\n } as IGridState);\n setTimeout(() => {\n this.skipChange.emit(merged.skip);\n this.sortChange.emit(merged.sort);\n this.takeChange.emit(merged.take);\n this.groupChange.emit(merged.group);\n this.filterChange.emit(merged.filter);\n this.stateReady.emit(merged);\n });\n this.subs.add(\n this.grid.dataStateChange.subscribe((s) => {\n this.state = Object.assign(this.state, { state: s } as IGridState);\n }),\n );\n this.subs.add(\n this.grid.detailExpand.subscribe((e: DetailExpandEvent) => {\n this.expandedRows[e.index] = true;\n this.expandedRows = this._expandedRows;\n this.expandedRowsChange.emit(this._expandedRows);\n }),\n );\n this.subs.add(\n this.grid.detailCollapse.subscribe((e: DetailCollapseEvent) => {\n this._expandedRows[e.index] = false;\n this.expandedRows = this._expandedRows;\n this.expandedRowsChange.emit(this._expandedRows);\n }),\n );\n }\n\n private colMapper = (cols: ColumnBase[]): Column[] =>\n cols.map(\n (m, idx) =>\n ({\n origIdx: idx,\n orderIndex: m.orderIndex,\n leafIndex: m.leafIndex,\n hidden: m.hidden,\n width: m.width,\n title: m.title,\n field: (m as any).field,\n }) as Column,\n );\n\n ngAfterContentInit(): void {\n const existing = this.state.columns;\n if (existing) {\n const cols = this.grid.columns.toArray();\n existing.forEach((e, i) => {\n cols[i].hidden = e.hidden;\n cols[i].orderIndex = e.orderIndex;\n cols[i].leafIndex = e.leafIndex;\n cols[i].width = e.width;\n });\n this.grid.columns.reset(cols);\n }\n }\n\n @HostListener(\"window:beforeunload\", [\"$event\"])\n unload(e: BeforeUnloadEvent): void {\n this.saveState();\n }\n\n private saveState(): void {\n this.state = Object.assign(\n this.state || { state: this.initState, columns: [] },\n {\n columns: this.colMapper(this.grid.columns.toArray()),\n },\n );\n }\n\n ngOnDestroy(): void {\n this.saveState();\n this.subs.unsubscribe();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { GridStateDirective } from \"./GridStateDirective\";\n\n@NgModule({\n imports: [GridStateDirective],\n exports: [GridStateDirective],\n})\nexport class GridStateModule {}\n","/*\n * Public API Surface of kendo-grid-state\n */\n\nexport * from \"./lib/Column\";\nexport * from \"./lib/GridState\";\nexport * from \"./lib/GridStateModule\";\nexport * from \"./lib/GridStateDirective\";\nexport * from \"./lib/AppStorage\";\nexport * from \"./lib/StorageService\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}