@tapsellorg/angular-material-library
Version:
Angular library for Tapsell
1 lines • 34.4 kB
Source Map (JSON)
{"version":3,"file":"tapsellorg-angular-material-library-src-lib-tree.mjs","sources":["../../projects/pegah-library/src/lib/tree/tree.constants.ts","../../projects/pegah-library/src/lib/tree/tree.service.ts","../../projects/pegah-library/src/lib/tree/tree.utils.ts","../../projects/pegah-library/src/lib/tree/tree-node-id.pipe.ts","../../projects/pegah-library/src/lib/tree/tree.component.ts","../../projects/pegah-library/src/lib/tree/tree.component.html","../../projects/pegah-library/src/lib/tree/tree.module.ts","../../projects/pegah-library/src/lib/tree/tapsellorg-angular-material-library-src-lib-tree.ts"],"sourcesContent":["export interface PghTreeNode {\n children?: PghTreeNode[];\n item: string;\n parents?: PghTreeNode[];\n label?: string;\n}\n\nexport interface PghTreeFlatNode {\n item: string;\n level: number;\n expandable: boolean;\n}\n\nexport interface PghTreeData {\n [key: string]: PghTreeData | null | string[];\n}\n\nexport type PghTreeLabel = Record<string, string>;\n\nexport const getLevel = (node: PghTreeFlatNode) => node.level;\n\nexport const isExpandable = (node: PghTreeFlatNode) => node.expandable;\n\nexport const getChildren = (node: PghTreeNode): PghTreeNode[] | undefined => node.children;\n\nexport const hasChild = (_: number, _nodeData: PghTreeFlatNode) => _nodeData.expandable;\n\nexport const hasNoContent = (_: number, _nodeData: PghTreeFlatNode) => _nodeData.item === '';\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { PghTreeNode } from './tree.constants';\n\n@Injectable()\nexport class PghTreeService {\n dataChange = new BehaviorSubject<PghTreeNode[]>([]);\n TREE_DATA: Record<string, any> = {};\n\n get data(): PghTreeNode[] {\n return this.dataChange.value;\n }\n\n constructor() {\n this.initialize();\n }\n\n initialize() {\n const data = this.buildFileTree(this.TREE_DATA, 0);\n this.dataChange.next(data);\n }\n\n buildFileTree(obj: Record<string, any>, level: number): PghTreeNode[] {\n return Object.keys(obj).reduce<PghTreeNode[]>((accumulator, key) => {\n const value = obj[key];\n const node: PghTreeNode = { item: key };\n node.item = key;\n\n if (value != null) {\n if (typeof value === 'object') {\n node.children = this.buildFileTree(value, level + 1);\n } else {\n node.item = value;\n }\n }\n\n return accumulator.concat(node);\n }, []);\n }\n\n insertItem(parent: PghTreeNode, name: string) {\n parent.children?.push({ item: name } as PghTreeNode);\n this.dataChange.next(this.data);\n }\n\n updateItem(node: PghTreeNode, name: string) {\n node.item = name;\n this.dataChange.next(this.data);\n }\n\n setTreeData(data: Record<string, any>) {\n this.TREE_DATA = data;\n this.initialize();\n }\n}\n","import { getLevel, PghTreeData, PghTreeFlatNode, PghTreeNode } from './tree.constants';\nimport { MatTreeFlattener } from '@angular/material/tree';\nimport { FlatTreeControl } from '@angular/cdk/tree';\n\nexport const TreeUtils = {\n treeControl: undefined as FlatTreeControl<PghTreeFlatNode> | undefined,\n\n setTreeControl(treeControl?: FlatTreeControl<PghTreeFlatNode>) {\n this.treeControl = treeControl;\n },\n\n removeEstimateCount(str: string): string {\n return str.includes(',') ? str.substring(0, str.indexOf(',')) : str;\n },\n\n getFullPathWithoutEstimateCount(node: PghTreeFlatNode): string[] {\n const parentItems = [...this.getParentNodes(node, true)]\n .reverse()\n .map(parent => this.removeEstimateCount(parent.item));\n\n const currentItem = this.removeEstimateCount(node.item);\n return [...parentItems, currentItem];\n },\n\n cutTreeDataUpToLevel(tree: PghTreeData | string[], depth: number): PghTreeData {\n if (depth <= 0) {\n return {};\n }\n\n const result: PghTreeData = {};\n for (const [key, value] of Object.entries(tree)) {\n if (typeof value === 'object' && value) {\n result[key] = this.cutTreeDataUpToLevel(value as PghTreeData, depth - 1);\n } else {\n result[key] = value as string[];\n }\n }\n return result;\n },\n\n createTreeFlattener(\n flatNodeMap: Map<PghTreeFlatNode, PghTreeNode>,\n nestedNodeMap: Map<PghTreeNode, PghTreeFlatNode>,\n ): MatTreeFlattener<PghTreeNode, PghTreeFlatNode> {\n return new MatTreeFlattener<PghTreeNode, PghTreeFlatNode>(\n (node, level) => {\n const existing = nestedNodeMap.get(node);\n const flatNode =\n existing?.item === node.item ? existing : { item: '', level: 0, expandable: false };\n flatNode.item = node.item;\n flatNode.level = level;\n flatNode.expandable = !!node.children?.length;\n flatNodeMap.set(flatNode, node);\n nestedNodeMap.set(node, flatNode);\n return flatNode;\n },\n node => node.level,\n node => node.expandable,\n node => node.children,\n );\n },\n\n getParentNodes(node: PghTreeFlatNode, shouldReturnAllNodes: boolean = false) {\n const allNodes = this.treeControl?.dataNodes;\n if (!allNodes) return [];\n const parentNodes: PghTreeFlatNode[] = [];\n let currentLevel = getLevel(node);\n\n if (currentLevel < 1) {\n return parentNodes;\n }\n\n const startIndex = allNodes.indexOf(node) - 1;\n\n for (let i = startIndex; i >= 0; i--) {\n const currentNode = allNodes[i];\n\n if (getLevel(currentNode) < currentLevel) {\n parentNodes.push(currentNode);\n currentLevel--;\n\n if (!shouldReturnAllNodes) {\n break;\n }\n }\n }\n return parentNodes;\n },\n\n getChildrenNodes(node: PghTreeFlatNode) {\n if (!this.treeControl) return [];\n\n const descendants: PghTreeFlatNode[] = this.treeControl!.getDescendants(node);\n return descendants.filter(\n child => this.treeControl!.getLevel(child) === this.treeControl!.getLevel(node) + 1,\n );\n },\n\n getSelectedNodes(selectedPaths: string[][]) {\n const allNodes = this.treeControl?.dataNodes;\n\n if (!allNodes?.length || !selectedPaths?.length) return;\n\n const allNodesWithPath = allNodes.map(node => {\n const fullPath = TreeUtils.getFullPathWithoutEstimateCount(node);\n return {\n node,\n path: fullPath,\n };\n });\n\n return selectedPaths\n .map(path => allNodesWithPath.find(n => JSON.stringify(n.path) === JSON.stringify(path)))\n .filter(match => !!match)\n .map(match => match.node);\n },\n\n handleTreeExpansion(shouldExpandTree: boolean) {\n if (this.treeControl) {\n this.treeControl[shouldExpandTree ? 'expandAll' : 'collapseAll']();\n }\n },\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PghTreeFlatNode } from './tree.constants';\nimport { TreeUtils } from './tree.utils';\n\n@Pipe({\n name: 'pghTreeNodeId',\n pure: true,\n standalone: false,\n})\nexport class PghTreeNodeIdPipe implements PipeTransform {\n transform(node: PghTreeFlatNode): string {\n return 'tree-node-' + TreeUtils.getFullPathWithoutEstimateCount(node).join('-');\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n input,\n OnChanges,\n OnInit,\n output,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport {\n getChildren,\n getLevel,\n hasChild,\n hasNoContent,\n isExpandable,\n PghTreeData,\n PghTreeFlatNode,\n PghTreeLabel,\n PghTreeNode,\n} from './tree.constants';\nimport { PghTreeService } from './tree.service';\nimport { TreeUtils } from './tree.utils';\n\n@Component({\n selector: 'pgh-tree',\n templateUrl: './tree.component.html',\n styleUrls: ['./tree.component.scss'],\n providers: [PghTreeService],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PghTreeComponent implements OnInit, OnChanges, AfterViewInit {\n protected readonly hasChild = hasChild;\n protected readonly hasNoContent = hasNoContent;\n protected readonly treeUtils = TreeUtils;\n\n treeDataSource = input<PghTreeData | undefined>(undefined);\n treeLabels = input<PghTreeLabel>();\n treeDataSourceDepth = input<number>(100);\n selectable = input<boolean>(true);\n shouldExpandTree = input<boolean>(false);\n canAddChildNode = input<boolean>(true);\n selectedPaths = input<string[][]>([]);\n\n selectedItemsChanged = output<PghTreeNode[]>();\n\n treeControl = signal<FlatTreeControl<PghTreeFlatNode> | undefined>(undefined);\n dataSource = signal<MatTreeFlatDataSource<PghTreeNode, PghTreeFlatNode> | undefined>(undefined);\n checklistSelection = signal(new SelectionModel<PghTreeFlatNode>(true));\n\n flatNodeMap = new Map<PghTreeFlatNode, PghTreeNode>();\n nestedNodeMap = new Map<PghTreeNode, PghTreeFlatNode>();\n treeFlattener: MatTreeFlattener<PghTreeNode, PghTreeFlatNode>;\n\n @ContentChild('customNodeItemTemplate') customNodeItemTemplate?: TemplateRef<any>;\n @ContentChild('customElementTemplate') customElementTemplate?: TemplateRef<any>;\n\n constructor(private pghTreeService: PghTreeService) {\n this.treeFlattener = TreeUtils.createTreeFlattener(this.flatNodeMap, this.nestedNodeMap);\n }\n\n ngOnInit() {\n this.initializeTree();\n this.onChangeTree();\n this.patchSelectedNodes();\n }\n\n ngAfterViewInit() {\n TreeUtils.handleTreeExpansion(this.shouldExpandTree());\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if ((changes.treeDataSource || changes.treeDataSourceDepth) && this.treeDataSource()) {\n this.pghTreeService.setTreeData(\n TreeUtils.cutTreeDataUpToLevel(this.treeDataSource()!, this.treeDataSourceDepth()),\n );\n }\n if (changes.shouldExpandTree || changes.treeDataSource) {\n TreeUtils.handleTreeExpansion(this.shouldExpandTree());\n }\n }\n\n initializeTree() {\n this.treeControl.set(new FlatTreeControl<PghTreeFlatNode>(getLevel, isExpandable));\n this.dataSource.set(new MatTreeFlatDataSource(this.treeControl()!, this.treeFlattener));\n TreeUtils.setTreeControl(this.treeControl());\n }\n\n onChangeTree() {\n this.pghTreeService.dataChange.subscribe(data => {\n if (!this.dataSource()) return;\n this.dataSource()!.data = data;\n });\n }\n\n patchSelectedNodes() {\n const selectedNodes = TreeUtils.getSelectedNodes(this.selectedPaths());\n if (!selectedNodes?.length) return;\n\n this.checklistSelection().clear();\n for (const node of selectedNodes) {\n const descendants = this.treeControl()!.getDescendants(node);\n this.checklistSelection().select(node, ...descendants);\n }\n this.storeSelectedNodes();\n }\n\n leafItemSelectionToggle(node: PghTreeFlatNode) {\n this.checklistSelection().toggle(node);\n this.checkAllParentsSelection(node);\n }\n\n addNewItem(node: PghTreeFlatNode) {\n const parentNode = this.flatNodeMap.get(node);\n if (\n parentNode &&\n this.treeControl() &&\n getChildren(parentNode)?.filter(n => n.item === '').length === 0\n ) {\n this.pghTreeService.insertItem(parentNode, '');\n this.treeControl()!.expand(node);\n }\n }\n\n saveNode(node: PghTreeFlatNode, itemValue: string) {\n const nestedNode = this.flatNodeMap.get(node);\n if (nestedNode) {\n this.pghTreeService.updateItem(nestedNode, itemValue);\n }\n }\n\n descendantsAllSelected(node: PghTreeFlatNode) {\n if (!this.treeControl()) return;\n const descendants = this.treeControl()!.getDescendants(node);\n return (\n descendants.length > 0 &&\n descendants.every(child => this.checklistSelection().isSelected(child))\n );\n }\n\n descendantsPartiallySelected(node: PghTreeFlatNode) {\n if (!this.treeControl()) return;\n const descendants = this.treeControl()!.getDescendants(node);\n const result = descendants.some(child => this.checklistSelection().isSelected(child));\n return result && !this.descendantsAllSelected(node);\n }\n\n parentItemSelectionToggle(node: PghTreeFlatNode) {\n if (!this.treeControl()) return;\n this.checklistSelection().toggle(node);\n const descendants = this.treeControl()!.getDescendants(node);\n this.checklistSelection().isSelected(node)\n ? this.checklistSelection().select(...descendants)\n : this.checklistSelection().deselect(...descendants);\n\n descendants.forEach(child => this.checklistSelection().isSelected(child));\n this.checkAllParentsSelection(node);\n }\n\n checkAllParentsSelection(node: PghTreeFlatNode) {\n let parent: PghTreeFlatNode | null = TreeUtils.getParentNodes(node, false)[0];\n while (parent) {\n this.checkRootNodeSelection(parent);\n parent = TreeUtils.getParentNodes(parent, false)[0];\n }\n }\n\n checkRootNodeSelection(node: PghTreeFlatNode) {\n if (!this.treeControl()) return;\n const nodeSelected = this.checklistSelection().isSelected(node);\n const descAllSelected = this.descendantsAllSelected(node);\n if (nodeSelected && !descAllSelected) {\n this.checklistSelection().deselect(node);\n } else if (!nodeSelected && descAllSelected) {\n this.checklistSelection().select(node);\n }\n }\n\n flatNodeToNestedNode(selectedOption: PghTreeFlatNode): PghTreeNode {\n return {\n item: selectedOption.item,\n parents: TreeUtils.getParentNodes(selectedOption, true)?.reverse(),\n children: TreeUtils.getChildrenNodes(selectedOption),\n label: this.treeLabels() ? this.treeLabels()![selectedOption.item] : undefined,\n };\n }\n\n storeSelectedNodes() {\n const selectedFlatNodes = this.checklistSelection().selected;\n const selectedNestedNodes = selectedFlatNodes.map(v => this.flatNodeToNestedNode(v));\n\n // remove node if its parent is selected\n const selectedNodes = new Set(selectedNestedNodes.map(node => node.item));\n const filteredSelectedNodes = selectedNestedNodes.filter(node => {\n const parentItems = node.parents?.map(parent => parent.item) ?? [];\n return !parentItems.some(parent => selectedNodes.has(parent));\n });\n this.selectedItemsChanged.emit(filteredSelectedNodes);\n }\n}\n","<mat-tree [dataSource]=\"dataSource()!\" [treeControl]=\"treeControl()!\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding>\n <button mat-icon-button disabled></button>\n <ng-container\n *ngTemplateOutlet=\"nodeTemplate; context: { node: node, isParent: false }\"\n ></ng-container>\n </mat-tree-node>\n\n @if (canAddChildNode()) {\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasNoContent\" matTreeNodePadding>\n <button mat-icon-button disabled></button>\n <mat-form-field appearance=\"fill\">\n <mat-label>نام دسته جدید</mat-label>\n <input matInput #itemValue />\n </mat-form-field>\n <div class=\"pb-3 ms-2\">\n <button\n mat-icon-button\n (click)=\"saveNode(node, itemValue.value)\"\n class=\"pgh-tree-save-button\"\n >\n <mat-icon svgIcon=\"done\" color=\"primary\"></mat-icon>\n </button>\n </div>\n </mat-tree-node>\n }\n\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding>\n <button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.item\">\n <mat-icon\n class=\"mat-icon-rtl-mirror\"\n [svgIcon]=\"treeControl()!.isExpanded(node) ? 'expand_more' : 'chevron_right'\"\n ></mat-icon>\n </button>\n <ng-container\n *ngTemplateOutlet=\"nodeTemplate; context: { node: node, isParent: true }\"\n ></ng-container>\n @if (canAddChildNode()) {\n <button mat-icon-button (click)=\"addNewItem(node)\">\n <mat-icon svgIcon=\"add\"></mat-icon>\n </button>\n }\n </mat-tree-node>\n\n <ng-template #contentTemplate let-node>\n <div class=\"d-flex align-items-center\" [id]=\"node | pghTreeNodeId\">\n <div>\n @if (customNodeItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"customNodeItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: flatNodeToNestedNode(node) }\"\n ></ng-template>\n } @else {\n {{ node.item }}\n }\n </div>\n <div>\n @if (customElementTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"customElementTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: flatNodeToNestedNode(node) }\"\n ></ng-template>\n }\n </div>\n </div>\n </ng-template>\n\n <ng-template #nodeTemplate let-node=\"node\" let-isParent=\"isParent\">\n @if (selectable()) {\n <mat-checkbox\n [checked]=\"isParent ? descendantsAllSelected(node) : checklistSelection().isSelected(node)\"\n [indeterminate]=\"isParent ? descendantsPartiallySelected(node) : null\"\n (change)=\"\n isParent ? parentItemSelectionToggle(node) : leafItemSelectionToggle(node);\n storeSelectedNodes()\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: node }\"\n ></ng-container>\n </mat-checkbox>\n } @else {\n <ng-container *ngTemplateOutlet=\"contentTemplate; context: { $implicit: node }\"></ng-container>\n }\n </ng-template>\n</mat-tree>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghTreeComponent } from './tree.component';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PghTreeNodeIdPipe } from './tree-node-id.pipe';\n\n@NgModule({\n declarations: [PghTreeComponent, PghTreeNodeIdPipe],\n imports: [\n CommonModule,\n MatCheckboxModule,\n MatTreeModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n ],\n exports: [PghTreeComponent],\n})\nexport class PghTreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PghTreeService","i9.PghTreeNodeIdPipe"],"mappings":"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"}