@rxap/data-source
Version:
Provides a set of classes and decorators for creating and managing data sources in Angular applications, including base classes, static data sources, observable data sources, and method data sources. It also includes a component for displaying data source
1 lines • 24.6 kB
Source Map (JSON)
{"version":3,"file":"rxap-data-source-table-tree.mjs","sources":["../../../../../packages/angular/data-source/table/tree/src/lib/tree-table.data-source.ts","../../../../../packages/angular/data-source/table/tree/src/index.ts","../../../../../packages/angular/data-source/table/tree/src/rxap-data-source-table-tree.ts"],"sourcesContent":["import { SelectionModel } from '@angular/cdk/collections';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n isDevMode,\n OnDestroy,\n Optional,\n} from '@angular/core';\nimport {\n BaseDataSourceViewer,\n RXAP_DATA_SOURCE_METADATA,\n} from '@rxap/data-source';\nimport { PaginatorLike } from '@rxap/data-source/pagination';\nimport {\n AbstractTableDataSource,\n FilterLike,\n RXAP_TABLE_DATA_SOURCE_FILTER,\n RXAP_TABLE_DATA_SOURCE_PAGINATOR,\n RXAP_TABLE_DATA_SOURCE_PARAMETERS,\n RXAP_TABLE_DATA_SOURCE_SORT,\n SortLike,\n TableDataSourceMetadata,\n TableEvent,\n} from '@rxap/data-source/table';\nimport {\n ExpandNodeFunction,\n Node,\n} from '@rxap/data-structure-tree';\nimport { Method } from '@rxap/pattern';\nimport '@rxap/rxjs';\nimport {\n equals,\n joinPath,\n WithChildren,\n WithIdentifier,\n} from '@rxap/utilities';\nimport {\n BehaviorSubject,\n combineLatest,\n Observable,\n of,\n share,\n Subject,\n Subscription,\n} from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n map,\n skip,\n startWith,\n switchMap,\n tap,\n} from 'rxjs/operators';\nimport { RowDataWithNode } from './row-data-with-node';\n\nexport const RXAP_TREE_TABLE_DATA_SOURCE_ROOT_METHOD =\n new InjectionToken('rxap/tree/data-source/root-method');\nexport const RXAP_TREE_TABLE_DATA_SOURCE_CHILDREN_METHOD =\n new InjectionToken('rxap/tree/data-source/children-method');\n\nexport type TreeTableEvent = Omit<TableEvent, 'start' | 'end'>;\n\nexport interface FilterQuery {\n column: string;\n filter: string;\n}\n\n@Injectable()\nexport class TreeTableDataSource<RowData extends WithIdentifier & WithChildren,\n Parameters = any>\n extends AbstractTableDataSource<RowDataWithNode<RowData>, Parameters>\n implements OnDestroy {\n public tree$ = new BehaviorSubject<Array<Node<RowData>>>([]);\n\n public expanded!: SelectionModel<string>;\n public override _data$ = new Subject<Array<RowDataWithNode<RowData>>>();\n private _expandedLocalStorageSubscription: Subscription | null = null;\n private _subscription?: Subscription;\n\n constructor(\n @Inject(RXAP_TREE_TABLE_DATA_SOURCE_ROOT_METHOD)\n public readonly rootMethod: Method<RowData | RowData[], TreeTableEvent>,\n @Inject(RXAP_TREE_TABLE_DATA_SOURCE_CHILDREN_METHOD)\n public readonly childrenMethod: Method<RowData[], { node: Node<RowData>, event: TreeTableEvent }>,\n @Optional()\n @Inject(RXAP_TABLE_DATA_SOURCE_PAGINATOR)\n paginator: PaginatorLike | null = null,\n @Optional()\n @Inject(RXAP_TABLE_DATA_SOURCE_SORT)\n sort: SortLike | null = null,\n @Optional()\n @Inject(RXAP_TABLE_DATA_SOURCE_FILTER)\n filter: FilterLike | null = null,\n @Optional()\n @Inject(RXAP_TABLE_DATA_SOURCE_PARAMETERS)\n parameters: Observable<Parameters> | null = null,\n @Optional()\n @Inject(RXAP_DATA_SOURCE_METADATA)\n metadata: TableDataSourceMetadata | null = rootMethod.metadata,\n ) {\n super(\n paginator,\n sort,\n filter,\n parameters,\n metadata ?? rootMethod.metadata ?? {id: 'tree-table-data-source'},\n );\n this.tree$\n .pipe(\n debounceTime(100),\n map((tree) =>\n tree\n .map((child) => this.flatTree(child))\n .reduce((acc, nodes) => [ ...acc, ...nodes ], []),\n ),\n map((flatTree) =>\n flatTree.map((node) => ({\n ...node.item,\n __node: node,\n })),\n ),\n )\n .subscribe(this._data$);\n this.initExpanded();\n }\n\n public override init() {\n if (this._initialised) {\n return;\n }\n super.init();\n this.getTreeRoot();\n // TODO : workaround the handle parameters change\n if (this.parameters) {\n this._subscription = this.parameters\n .pipe(\n distinctUntilChanged((a, b) => equals(a, b)),\n skip(1),\n tap(() => this.refresh()),\n )\n .subscribe();\n }\n }\n\n public async getTreeRoot(event: TreeTableEvent = {}): Promise<void> {\n this.loading$.next(true);\n this.hasError$.disable();\n\n const root: RowData | RowData[] = await this.getRoot(event).catch((error) => {\n this.hasError$.enable();\n throw new Error(`Failed to load root nodes: ${ error.message }`);\n });\n\n let rootNode: Array<Node<RowData>> = [];\n\n if (Array.isArray(root)) {\n for (const node of root) {\n rootNode.push(await this._toNode(node));\n }\n } else {\n rootNode = [ await this._toNode(root) ];\n if (!rootNode[0].expanded) {\n await rootNode[0].expand();\n }\n }\n\n this.loading$.next(false);\n\n this.tree$.next(rootNode);\n }\n\n public async getChildren(node: Node<RowData>, event: TreeTableEvent): Promise<RowData[]> {\n return this.childrenMethod.call({node, event});\n }\n\n public async getRoot(event: TreeTableEvent): Promise<RowData | RowData[]> {\n return this.rootMethod.call(event);\n }\n\n public collapseNode(node: Node<RowData>): Promise<void> {\n this.expanded.deselect(node.id);\n this.tree$.next(this.tree$.value);\n return Promise.resolve();\n }\n\n public async _toNode(\n row: RowData,\n depth = 0,\n onExpand: ExpandNodeFunction<RowData> = this.expandNode.bind(this),\n onCollapse: ExpandNodeFunction<RowData> = this.collapseNode.bind(this),\n ): Promise<Node<RowData>> {\n const node = await this.toNode(row, depth, onExpand, onCollapse);\n\n if (this.expanded.isSelected(node.id) && !node.expanded) {\n await node\n .expand()\n .then(() =>\n console.debug(`Restore expand for node '${ node.id }' SUCCESSFULLY`),\n )\n .catch(() =>\n console.debug(`Restore expand for node '${ node.id }' FAILED`),\n );\n }\n\n for (const child of node.children) {\n if (this.expanded.isSelected(child.id) && !child.expanded) {\n await child\n .expand()\n .then(() =>\n console.debug(\n `Restore expand for child node '${ child.id }' SUCCESSFULLY`,\n ),\n )\n .catch(() =>\n console.debug(`Restore expand for child node '${ child.id }' FAILED`),\n );\n }\n }\n\n return node;\n }\n\n public async expandNode(node: Node<RowData>): Promise<void> {\n if (node.item.hasChildren && !node.item.children?.length) {\n // TODO : get treeTableEvent from paginator, sort and filter\n const children: RowData[] = await this.getChildren(node, {}).catch((error) => {\n this.hasError$.enable();\n throw new Error(`Failed to load children nodes for '${ node.id }': ${ error.message }`);\n });\n\n node.item.children = children;\n\n const addChildren: Array<Node<RowData>> = [];\n\n for (const child of children) {\n const addChild = await this._toNode(\n child,\n node.depth +\n 1,\n node.onExpand,\n node.onCollapse,\n );\n addChildren.push(addChild);\n }\n\n node.addChildren(addChildren);\n }\n\n this.expanded.select(node.id);\n\n this.tree$.next(this.tree$.value);\n }\n\n public toNode(\n row: RowData,\n depth = 0,\n onExpand: ExpandNodeFunction<RowData> = this.expandNode.bind(this),\n onCollapse: ExpandNodeFunction<RowData> = this.collapseNode.bind(this),\n ): Node<RowData> | Promise<Node<RowData>> {\n return Node.ToNode(null, row, depth, onExpand, onCollapse);\n }\n\n public override ngOnDestroy() {\n super.ngOnDestroy();\n this._expandedLocalStorageSubscription?.unsubscribe();\n this._subscription?.unsubscribe();\n }\n\n public flatTree(tree: Node<RowData>): Array<Node<RowData>> {\n function flat(acc: any[], list: any[]) {\n return [ ...acc, ...list ];\n }\n\n function flatTree(node: Node<RowData>): Array<Node<RowData>> {\n if (!Array.isArray(node.children)) {\n if (isDevMode()) {\n console.log(node);\n }\n throw new Error('Node has not defined children');\n }\n\n if (node.expanded) {\n return [\n node,\n ...node.children.map((child) => flatTree(child)).reduce(flat, []),\n ];\n } else {\n return [ node ];\n }\n }\n\n return flatTree(tree);\n }\n\n public override retry() {\n return this.getTreeRoot();\n }\n\n public override refresh(): any {\n return this.getTreeRoot();\n }\n\n isMatchingFilter(item: RowDataWithNode<RowData>, filterList: Array<FilterQuery>): boolean {\n for (const filter of filterList) {\n const value = (item as any)[filter.column] as any;\n if (value === filter.filter) {\n return true;\n }\n if (typeof value === 'string' && typeof filter.filter === 'string') {\n return value.toLowerCase().includes(filter.filter.toLowerCase());\n }\n }\n return false;\n }\n\n hasMatchingNodesByFilter(\n nodeList: ReadonlyArray<Node<any>>,\n filterList: Array<FilterQuery>,\n ): boolean {\n\n if (!filterList.length) {\n return true;\n }\n\n return nodeList.some((node) => {\n\n if (this.isMatchingFilter(node.item, filterList)) {\n return true;\n }\n\n if (!node.hasChildren) {\n // If item has no children and doesn't pass the filter, remove it\n return false;\n }\n\n return this.hasMatchingNodesByFilter(node.children ?? [], filterList);\n });\n }\n\n override applyFilterBy(\n data: ReadonlyArray<RowDataWithNode<RowData>>,\n filter: Record<string, any> | string,\n ): RowDataWithNode<RowData>[] {\n const filterList = typeof filter === 'string' ?\n [] :\n Object.entries(filter).map(([ column, filter ]) => ({column, filter}));\n if (!filterList.length ||\n filterList.every((filter) => !filter.filter && filter.filter !== false && filter.filter !== 0)) {\n return data.slice();\n }\n\n return data.filter(item => {\n\n if (this.isMatchingFilter(item, filterList)) {\n return true;\n }\n\n const hasMatch = this.hasMatchingNodesByFilter(item.__node.children, filterList);\n\n if (hasMatch) {\n item.__node.expand();\n }\n\n return hasMatch;\n\n });\n\n }\n\n protected override _connect(\n viewer: BaseDataSourceViewer,\n ): Observable<Array<RowDataWithNode<RowData>>> {\n this.init();\n return this._data$.pipe(\n tap((data) => this.updateTotalLength(data.length)),\n distinctUntilChanged((a, b) => {\n if (a.length !== b.length) {\n return false;\n }\n if (!equals(a.map(item => item.__node.id), b.map(item => item.__node.id))) {\n return false;\n }\n return equals(a.map(item => item.__node.item).map(item => ({ ...item, children: null })), b.map(item => item.__node.item).map(item => ({ ...item, children: null })));\n }),\n switchMap((data) => {\n return combineLatest([\n this.paginator?.page?.pipe(\n startWith({\n pageIndex: this.paginator.pageIndex,\n pageSize: this.paginator.pageSize,\n length: this.paginator.length,\n }),\n ) ?? of(null),\n this.sort?.sortChange?.pipe(\n startWith({\n active: this.sort?.active,\n direction: this.sort?.direction,\n }),\n ) ?? of(null),\n this.filter?.change.pipe(startWith({})) ?? of(null),\n ]).pipe(\n map(([ page, sort, filter ]) => ({\n page,\n sort,\n filter,\n })),\n debounceTime(500),\n distinctUntilChanged((a, b) => equals(a, b)),\n map((event) => {\n const {page, sort, filter} = event;\n let filteredData = data;\n\n if (filter) {\n filteredData = this.applyFilterBy(filteredData, filter);\n }\n\n let sortData = filteredData;\n\n if (sort) {\n sortData = this.applySortBy(\n sortData,\n sort.active,\n sort.direction,\n );\n }\n\n if (page) {\n return this.applyPagination(\n sortData,\n page.pageSize,\n page.pageIndex,\n );\n }\n\n return sortData;\n }),\n );\n }),\n share(),\n );\n }\n\n private initExpanded(): void {\n const key = joinPath('rxap/table-system/tree-table', this.id, 'expanded');\n let expanded = [];\n if (localStorage.getItem(key)) {\n try {\n expanded = JSON.parse(localStorage.getItem(key)!);\n } catch (e: any) {\n console.debug('parse expanded tree table data source nodes failed');\n }\n }\n\n this.expanded = new SelectionModel<string>(true, expanded);\n this._expandedLocalStorageSubscription = this.expanded.changed\n .pipe(\n tap(() =>\n localStorage.setItem(key, JSON.stringify(this.expanded.selected)),\n ),\n )\n .subscribe();\n }\n}\n","// region \nexport * from './lib/row-data-with-node';\nexport * from './lib/tree-table.data-source';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}