igniteui-angular 21.0.2 → 21.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"igniteui-angular-grids-tree-grid.mjs","sources":["../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-api.service.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.directives.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-selection.service.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.summary.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.filtering.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.pipes.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-cell.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-cell.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-row.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-row.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-group-by-area.component.ts","../../../projects/igniteui-angular/grids/core/src/grouping/group-by-area.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.grouping.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/public_api.ts","../../../projects/igniteui-angular/grids/tree-grid/src/igniteui-angular-grids-tree-grid.ts"],"sourcesContent":["import { GridBaseAPIService } from 'igniteui-angular/grids/core';\nimport {\n HierarchicalTransaction,\n TransactionType,\n State,\n IgxDataRecordSorting,\n TreeGridFilteringStrategy,\n cloneArray,\n DataUtil,\n FilterUtil,\n GridColumnDataType,\n IFilteringExpressionsTree,\n ISortingExpression,\n mergeObjects,\n ColumnType,\n ITreeGridRecord\n} from 'igniteui-angular/core';\nimport { Injectable } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\n\n@Injectable()\nexport class IgxTreeGridAPIService extends GridBaseAPIService<GridType> {\n\n public override get_all_data(transactions?: boolean): any[] {\n const grid = this.grid;\n let data = grid && grid.flatData ? grid.flatData : [];\n data = transactions ? grid.dataWithAddedInTransactionRows : data;\n return data;\n }\n\n public override get_summary_data(): any[] | null {\n const grid = this.grid;\n const data = grid.processedRootRecords?.filter(row => row.isFilteredOutParent === undefined || row.isFilteredOutParent === false)\n .map(rec => rec.data);\n if (data && grid.transactions.enabled) {\n const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);\n deletedRows.forEach(rowID => {\n const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n const index = tempData.indexOf(rowID);\n if (index !== -1) {\n data.splice(index, 1);\n }\n });\n }\n return data;\n }\n\n public override allow_expansion_state_change(rowID, expanded): boolean {\n const grid = this.grid;\n const row = grid.records.get(rowID);\n if (row.expanded === expanded ||\n ((!row.children || !row.children.length) && (!grid.loadChildrenOnDemand ||\n (grid.hasChildrenKey && !row.data[grid.hasChildrenKey])))) {\n return false;\n }\n return true;\n }\n\n public expand_path_to_record(record: ITreeGridRecord) {\n const grid = this.grid;\n const expandedStates = grid.expansionStates;\n\n while (record.parent) {\n record = record.parent;\n const expanded = this.get_row_expansion_state(record);\n\n if (!expanded) {\n expandedStates.set(record.key, true);\n }\n }\n grid.expansionStates = expandedStates;\n\n if (grid.rowEditable) {\n grid.gridAPI.crudService.endEdit(false);\n }\n }\n\n public override get_row_expansion_state(record: ITreeGridRecord): boolean {\n const grid = this.grid;\n const states = grid.expansionStates;\n const expanded = states.get(record.key);\n\n if (expanded !== undefined) {\n return expanded;\n } else {\n return record.children && record.children.length && record.level < grid.expansionDepth;\n }\n }\n\n public override should_apply_number_style(column: ColumnType): boolean {\n return column.dataType === GridColumnDataType.Number && column.visibleIndex !== 0;\n }\n\n public override deleteRowById(rowID: any): any {\n const treeGrid = this.grid;\n const flatDataWithCascadeOnDeleteAndTransactions =\n treeGrid.primaryKey &&\n treeGrid.foreignKey &&\n treeGrid.cascadeOnDelete &&\n treeGrid.transactions.enabled;\n\n if (flatDataWithCascadeOnDeleteAndTransactions) {\n treeGrid.transactions.startPending();\n }\n\n const record = super.deleteRowById(rowID);\n\n if (flatDataWithCascadeOnDeleteAndTransactions) {\n treeGrid.transactions.endPending(true);\n }\n\n return record;\n }\n\n public override deleteRowFromData(rowID: any, index: number) {\n const treeGrid = this.grid;\n const record = treeGrid.records.get(rowID);\n\n if (treeGrid.primaryKey && treeGrid.foreignKey) {\n index = treeGrid.primaryKey ?\n treeGrid.data.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n treeGrid.data.indexOf(rowID);\n super.deleteRowFromData(rowID, index);\n\n if (treeGrid.cascadeOnDelete) {\n if (record && record.children) {\n for (const child of record.children) {\n super.deleteRowById(child.key);\n }\n }\n }\n } else {\n const collection = record.parent ? record.parent.data[treeGrid.childDataKey] : treeGrid.data;\n index = treeGrid.primaryKey ?\n collection.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n collection.indexOf(rowID);\n\n const selectedChildren = [];\n this.get_selected_children(record, selectedChildren);\n if (selectedChildren.length > 0) {\n treeGrid.deselectRows(selectedChildren);\n }\n\n if (treeGrid.transactions.enabled) {\n const path = treeGrid.generateRowPath(rowID);\n treeGrid.transactions.add({\n id: rowID,\n type: TransactionType.DELETE,\n newValue: null,\n path\n } as HierarchicalTransaction,\n collection[index]\n );\n } else {\n collection.splice(index, 1);\n }\n this.grid.validation.clear(rowID);\n }\n }\n\n public get_selected_children(record: ITreeGridRecord, selectedRowIDs: any[]) {\n const grid = this.grid;\n if (!record.children || record.children.length === 0) {\n return;\n }\n for (const child of record.children) {\n if (grid.selectionService.isRowSelected(child.key)) {\n selectedRowIDs.push(child.key);\n }\n this.get_selected_children(child, selectedRowIDs);\n }\n }\n\n public override row_deleted_transaction(rowID: any): boolean {\n return this.row_deleted_parent(rowID) || super.row_deleted_transaction(rowID);\n }\n\n public override get_rec_by_id(rowID) {\n return this.grid.records.get(rowID);\n }\n\n /**\n * Returns the index of the record in the data view by pk or -1 if not found or primaryKey is not set.\n *\n * @param pk\n * @param dataCollection\n */\n public override get_rec_index_by_id(pk: string | number, dataCollection?: any[]): number {\n dataCollection = dataCollection || this.grid.data;\n return this.grid.primaryKey ? dataCollection.findIndex(rec => rec.data[this.grid.primaryKey] === pk) : -1;\n }\n\n public override addRowToData(data: any, parentRowID?: any) {\n if (parentRowID !== undefined && parentRowID !== null) {\n\n const state = this.grid.transactions.getState(parentRowID);\n // we should not allow adding of rows as child of deleted row\n if (state && state.type === TransactionType.DELETE) {\n throw Error(`Cannot add child row to deleted parent row`);\n }\n\n const parentRecord = this.grid.records.get(parentRowID);\n\n if (!parentRecord) {\n throw Error('Invalid parent row ID!');\n }\n this.grid.summaryService.clearSummaryCache({ rowID: parentRecord.key });\n if (this.grid.primaryKey && this.grid.foreignKey) {\n data[this.grid.foreignKey] = parentRowID;\n super.addRowToData(data);\n } else {\n const parentData = parentRecord.data;\n const childKey = this.grid.childDataKey;\n if (this.grid.transactions.enabled) {\n const rowId = this.grid.primaryKey ? data[this.grid.primaryKey] : data;\n const path: any[] = [];\n path.push(...this.grid.generateRowPath(parentRowID));\n path.push(parentRowID);\n this.grid.transactions.add({\n id: rowId,\n path,\n newValue: data,\n type: TransactionType.ADD\n } as HierarchicalTransaction,\n null);\n } else {\n if (!parentData[childKey]) {\n parentData[childKey] = [];\n }\n parentData[childKey].push(data);\n }\n }\n } else {\n super.addRowToData(data);\n }\n }\n\n public override filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[] {\n const records = this.filterTreeDataByExpressions(expressionsTree);\n const data = [];\n\n this.getFlatDataFromFilteredRecords(records, data);\n\n return data;\n }\n\n public override sortDataByExpressions(data: ITreeGridRecord[], expressions: ISortingExpression[]) {\n const records: ITreeGridRecord[] = DataUtil.sort(\n cloneArray(data),\n expressions,\n this.grid.sortStrategy ?? new IgxDataRecordSorting(),\n this.grid);\n return records.map(r => r.data);\n }\n\n public filterTreeDataByExpressions(expressionsTree: IFilteringExpressionsTree): ITreeGridRecord[] {\n let records = this.grid.rootRecords;\n\n if (expressionsTree.filteringOperands.length) {\n const state = {\n expressionsTree,\n strategy: this.grid.filterStrategy ?? new TreeGridFilteringStrategy()\n };\n records = FilterUtil.filter(cloneArray(records), state, this.grid);\n }\n\n return records;\n }\n\n protected override update_row_in_array(value: any, rowID: any, index: number) {\n const grid = this.grid;\n if (grid.primaryKey && grid.foreignKey) {\n super.update_row_in_array(value, rowID, index);\n } else {\n const record = grid.records.get(rowID);\n const childData = record.parent ? record.parent.data[grid.childDataKey] : grid.data;\n index = grid.primaryKey ? childData.map(c => c[grid.primaryKey]).indexOf(rowID) :\n childData.indexOf(rowID);\n childData[index] = value;\n }\n }\n\n /**\n * Updates related row of provided grid's data source with provided new row value\n *\n * @param grid Grid to update data for\n * @param rowID ID of the row to update\n * @param rowValueInDataSource Initial value of the row as it is in data source\n * @param rowCurrentValue Current value of the row as it is with applied previous transactions\n * @param rowNewValue New value of the row\n */\n protected override updateData(\n grid: GridType,\n rowID: any,\n rowValueInDataSource: any,\n rowCurrentValue: any,\n rowNewValue: { [x: string]: any }) {\n if (grid.transactions.enabled) {\n const path = grid.generateRowPath(rowID);\n const transaction: HierarchicalTransaction = {\n id: rowID,\n type: TransactionType.UPDATE,\n newValue: rowNewValue,\n path\n };\n grid.transactions.add(transaction, rowCurrentValue);\n } else {\n mergeObjects(rowValueInDataSource, rowNewValue);\n }\n }\n\n private row_deleted_parent(rowID: any): boolean {\n const grid = this.grid;\n if (!grid) {\n return false;\n }\n if ((grid.cascadeOnDelete && grid.foreignKey) || grid.childDataKey) {\n let node = grid.records.get(rowID);\n while (node) {\n const state: State = grid.transactions.getState(node.key);\n if (state && state.type === TransactionType.DELETE) {\n return true;\n }\n node = node.parent;\n }\n }\n return false;\n }\n\n private getFlatDataFromFilteredRecords(records: ITreeGridRecord[], data: any[]) {\n if (!records || records.length === 0) {\n return;\n }\n\n for (const record of records) {\n if (!record.isFilteredOutParent) {\n data.push(record);\n }\n this.getFlatDataFromFilteredRecords(record.children, data);\n }\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n selector: '[igxRowLoadingIndicator]',\n standalone: true\n})\nexport class IgxRowLoadingIndicatorTemplateDirective {\n public template = inject<TemplateRef<any>>(TemplateRef);\n}\n","import { Injectable } from '@angular/core';\nimport { GridSelectionMode } from 'igniteui-angular/grids/core';\nimport { IgxGridSelectionService } from 'igniteui-angular/grids/core';\nimport { ITreeGridRecord } from 'igniteui-angular/core';\n\n@Injectable()\nexport class IgxTreeGridSelectionService extends IgxGridSelectionService {\n private rowsToBeSelected: Set<any>;\n private rowsToBeIndeterminate: Set<any>;\n\n /** Select specified rows. No event is emitted. */\n public override selectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?): void {\n if (this.grid && this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.cascadeSelectRowsWithNoEvent(rowIDs, clearPrevSelection);\n return;\n }\n super.selectRowsWithNoEvent(rowIDs, clearPrevSelection);\n }\n\n /** Deselect specified rows. No event is emitted. */\n public override deselectRowsWithNoEvent(rowIDs: any[]): void {\n if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.cascadeDeselectRowsWithNoEvent(rowIDs);\n return;\n }\n super.deselectRowsWithNoEvent(rowIDs);\n }\n\n public override emitRowSelectionEvent(newSelection, added, removed, event?): boolean {\n if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.emitCascadeRowSelectionEvent(newSelection, added, removed, event);\n return;\n }\n\n super.emitRowSelectionEvent(newSelection, added, removed, event);\n }\n\n public updateCascadeSelectionOnFilterAndCRUD(\n parents: Set<any>,\n crudRowID?: any,\n visibleRowIDs: Set<any> = null) {\n if (visibleRowIDs === null) {\n // if the tree grid has flat structure\n // do not explicitly handle the selection state of the rows\n if (!parents.size) {\n return;\n }\n visibleRowIDs = new Set(this.getRowIDs(this.allData));\n this.rowsToBeSelected = new Set(this.rowSelection);\n this.rowsToBeIndeterminate = new Set(this.indeterminateRows);\n if (crudRowID) {\n this.rowSelection.delete(crudRowID);\n }\n }\n if (!parents.size) {\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n // TODO: emit selectionChangeD event, calculate its args through the handleAddedAndRemovedArgs method\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n return;\n }\n const newParents = new Set<any>();\n parents.forEach(parent => {\n this.handleRowSelectionState(parent, visibleRowIDs);\n if (parent && parent.parent) {\n newParents.add(parent.parent);\n }\n });\n this.updateCascadeSelectionOnFilterAndCRUD(newParents, null, visibleRowIDs);\n }\n\n private cascadeSelectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?: boolean): void {\n if (clearPrevSelection) {\n this.indeterminateRows.clear();\n this.rowSelection.clear();\n this.calculateRowsNewSelectionState({ added: rowIDs, removed: [] });\n } else {\n const oldSelection = this.getSelectedRows();\n const newSelection = [...oldSelection, ...rowIDs];\n const args = { oldSelection, newSelection };\n\n // retrieve only the rows without their parents/children which has to be added to the selection\n this.handleAddedAndRemovedArgs(args);\n\n this.calculateRowsNewSelectionState(args);\n }\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n }\n\n private cascadeDeselectRowsWithNoEvent(rowIDs: any[]): void {\n const args = { added: [], removed: rowIDs };\n this.calculateRowsNewSelectionState(args);\n\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n }\n\n public get selectionService(): IgxGridSelectionService {\n return this.grid.selectionService;\n }\n\n private emitCascadeRowSelectionEvent(newSelection, added, removed, event?): boolean {\n const currSelection = this.getSelectedRows();\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n\n const args = {\n owner: this.grid, oldSelection: this.getSelectedRowsData(), newSelection,\n added, removed, event, cancel: false\n };\n\n this.calculateRowsNewSelectionState(args, !!this.grid.primaryKey);\n args.newSelection = Array.from(this.grid.gridAPI.get_all_data().filter(r => this.rowsToBeSelected.has(this.grid.primaryKey ? r[this.grid.primaryKey] : r)));\n\n // retrieve rows/parents/children which has been added/removed from the selection\n this.handleAddedAndRemovedArgs(args);\n\n this.grid.rowSelectionChanging.emit(args);\n\n if (args.cancel) {\n return;\n }\n const newSelectionIDs = args.newSelection.map(r => this.grid.primaryKey? r[this.grid.primaryKey] : r)\n // if args.newSelection hasn't been modified\n if (this.areEqualCollections(Array.from(this.rowsToBeSelected), newSelectionIDs)) {\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n } else {\n // select the rows within the modified args.newSelection with no event\n this.cascadeSelectRowsWithNoEvent(newSelectionIDs, true);\n }\n }\n\n\n /**\n * retrieve the rows which should be added/removed to/from the old selection\n */\n private handleAddedAndRemovedArgs(args: any) {\n const newSelectionSet = new Set(args.newSelection);\n const oldSelectionSet = new Set(args.oldSelection);\n args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));\n args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));\n }\n\n /**\n * adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set\n *\n * @param rowsToBeProcessed set of the rows (without their parents/children) to be selected/deselected\n * @param visibleRowIDs list of all visible rowIds\n * @returns a new set with all direct parents of the rows within rowsToBeProcessed set\n */\n private collectRowsChildrenAndDirectParents(rowsToBeProcessed: Set<any>, visibleRowIDs: Set<any>, adding: boolean, shouldConvert: boolean): Set<any> {\n const processedRowsParents = new Set<any>();\n Array.from(rowsToBeProcessed).forEach((row) => {\n const rowID = shouldConvert ? row[this.grid.primaryKey] : row;\n this.selectDeselectRow(rowID, adding);\n const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);\n const rowAndAllChildren = this.get_all_children(rowTreeRecord);\n rowAndAllChildren.forEach(r => {\n if (visibleRowIDs.has(r.key)) {\n this.selectDeselectRow(r.key, adding);\n }\n });\n if (rowTreeRecord && rowTreeRecord.parent) {\n processedRowsParents.add(rowTreeRecord.parent);\n }\n });\n return processedRowsParents;\n }\n\n\n /**\n * populates the rowsToBeSelected and rowsToBeIndeterminate sets\n * with the rows which will be eventually in selected/indeterminate state\n */\n private calculateRowsNewSelectionState(args: any, shouldConvert = false) {\n this.rowsToBeSelected = new Set<any>(args.oldSelection ? shouldConvert ? args.oldSelection.map(r => r[this.grid.primaryKey]) : args.oldSelection : this.getSelectedRows());\n this.rowsToBeIndeterminate = new Set<any>(this.getIndeterminateRows());\n\n const visibleRowIDs = new Set(this.getRowIDs(this.allData));\n\n const removed = new Set(args.removed);\n const added = new Set(args.added);\n\n if (removed && removed.size) {\n let removedRowsParents = new Set<any>();\n\n removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false, shouldConvert);\n\n Array.from(removedRowsParents).forEach((parent) => {\n this.handleParentSelectionState(parent, visibleRowIDs);\n });\n }\n\n if (added && added.size) {\n let addedRowsParents = new Set<any>();\n\n addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true, shouldConvert);\n\n Array.from(addedRowsParents).forEach((parent) => {\n this.handleParentSelectionState(parent, visibleRowIDs);\n });\n }\n }\n\n /**\n * recursively handle the selection state of the direct and indirect parents\n */\n private handleParentSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n if (!treeRow) {\n return;\n }\n this.handleRowSelectionState(treeRow, visibleRowIDs);\n if (treeRow.parent) {\n this.handleParentSelectionState(treeRow.parent, visibleRowIDs);\n }\n }\n\n /**\n * Handle the selection state of a given row based the selection states of its direct children\n */\n private handleRowSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n let visibleChildren = [];\n if (treeRow && treeRow.children) {\n visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.key));\n }\n if (visibleChildren.length) {\n if (visibleChildren.every(row => this.rowsToBeSelected.has(row.key))) {\n this.selectDeselectRow(treeRow.key, true);\n } else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.key) || this.rowsToBeIndeterminate.has(row.key))) {\n this.rowsToBeIndeterminate.add(treeRow.key);\n this.rowsToBeSelected.delete(treeRow.key);\n } else {\n this.selectDeselectRow(treeRow.key, false);\n }\n } else {\n // if the children of the row has been deleted and the row was selected do not change its state\n if (this.isRowSelected(treeRow.key)) {\n this.selectDeselectRow(treeRow.key, true);\n } else {\n this.selectDeselectRow(treeRow.key, false);\n }\n }\n }\n\n private get_all_children(record: ITreeGridRecord): any[] {\n const children = [];\n if (record && record.children && record.children.length) {\n for (const child of record.children) {\n children.push(...this.get_all_children(child));\n children.push(child);\n }\n }\n return children;\n\n }\n\n private selectDeselectRow(rowID: any, select: boolean) {\n if (select) {\n this.rowsToBeSelected.add(rowID);\n this.rowsToBeIndeterminate.delete(rowID);\n } else {\n this.rowsToBeSelected.delete(rowID);\n this.rowsToBeIndeterminate.delete(rowID);\n }\n }\n\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE, GridSummaryPosition } from 'igniteui-angular/grids/core';\nimport { GridSummaryCalculationMode, ISummaryRecord, ITreeGridRecord } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n name: 'treeGridSummary',\n standalone: true\n})\nexport class IgxTreeGridSummaryPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(flatData: ITreeGridRecord[],\n hasSummary: boolean,\n summaryCalculationMode: GridSummaryCalculationMode,\n summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean, _: number, __: number): any[] {\n\n if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {\n return flatData;\n }\n\n return this.addSummaryRows(this.grid, flatData, summaryPosition, showSummaryOnCollapse);\n }\n\n private addSummaryRows(grid: GridType, collection: ITreeGridRecord[],\n summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean): any[] {\n const recordsWithSummary = [];\n const maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight();\n\n for (const record of collection) {\n recordsWithSummary.push(record);\n\n const isCollapsed = !record.expanded && record.children && record.children.length > 0 && showSummaryOnCollapse;\n if (isCollapsed) {\n let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, record.key, childData);\n const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n const summaryRecord: ISummaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: record.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n }\n const isExpanded = record.children && record.children.length > 0 && record.expanded;\n if (summaryPosition === GridSummaryPosition.bottom && !isExpanded) {\n let childRecord = record;\n let parent = record.parent;\n\n while (parent) {\n const children = parent.children;\n\n if (children[children.length - 1] === childRecord ) {\n let childData = children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, parent.key, childData);\n const summaries = grid.summaryService.calculateSummaries(parent.key, childData);\n const summaryRecord: ISummaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: parent.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n\n childRecord = parent;\n parent = childRecord.parent;\n } else {\n break;\n }\n }\n } else if (summaryPosition === GridSummaryPosition.top && isExpanded) {\n let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, record.key, childData);\n const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n const summaryRecord: ISummaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: record.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n }\n }\n return recordsWithSummary;\n }\n\n private removeDeletedRecord(grid, rowId, data) {\n if (!grid.transactions.enabled || !grid.cascadeOnDelete) {\n return data;\n }\n const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);\n let row = grid.records.get(rowId);\n if (!row && deletedRows.lenght === 0) {\n return [];\n }\n row = row.children ? row : row.parent;\n while (row) {\n rowId = row.key;\n if (deletedRows.indexOf(rowId) !== -1) {\n return [];\n }\n row = row.parent;\n }\n deletedRows.forEach(rowID => {\n const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n const index = tempData.indexOf(rowID);\n if (index !== -1) {\n data.splice(index, 1);\n }\n });\n return data;\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree, IFilteringState, IFilteringStrategy, ITreeGridRecord, TreeGridFilteringStrategy } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n name: 'treeGridFiltering',\n standalone: true\n})\nexport class IgxTreeGridFilteringPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(hierarchyData: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n filterStrategy: IFilteringStrategy,\n advancedFilteringExpressionsTree: IFilteringExpressionsTree,\n _: number, __: number, pinned?): ITreeGridRecord[] {\n const state: IFilteringState = {\n expressionsTree,\n advancedExpressionsTree: advancedFilteringExpressionsTree,\n strategy: new TreeGridFilteringStrategy()\n };\n\n if (filterStrategy) {\n state.strategy = filterStrategy;\n }\n\n if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n this.grid.setFilteredData(null, pinned);\n return hierarchyData;\n }\n\n const result = this.filter(hierarchyData, state, this.grid);\n const filteredData: any[] = [];\n this.expandAllRecursive(this.grid, result, this.grid.expansionStates, filteredData);\n this.grid.setFilteredData(filteredData, pinned);\n\n return result;\n }\n\n private expandAllRecursive(grid: GridType, data: ITreeGridRecord[],\n expandedStates: Map<any, boolean>, filteredData: any[]) {\n for (const rec of data) {\n filteredData.push(rec.data);\n\n if (rec.children && rec.children.length > 0) {\n expandedStates.set(rec.key, true);\n this.expandAllRecursive(grid, rec.children, expandedStates, filteredData);\n }\n }\n }\n\n private filter(data: ITreeGridRecord[], state: IFilteringState, grid?: GridType): ITreeGridRecord[] {\n return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\nimport { cloneArray, cloneHierarchicalArray, DataUtil, IGroupingExpression, ISortingExpression, TransactionType, IGridSortingStrategy, ITreeGridRecord } from 'igniteui-angular/core';\nimport { IgxAddRow } from 'igniteui-angular/grids/core';\n\n/**\n * @hidden\n */\n@Pipe({\n name: 'treeGridHierarchizing',\n standalone: true\n})\nexport class IgxTreeGridHierarchizingPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: any[], primaryKey: string, foreignKey: string, childDataKey: string, _: number): ITreeGridRecord[] {\n let hierarchicalRecords: ITreeGridRecord[] = [];\n const treeGridRecordsMap = new Map<any, ITreeGridRecord>();\n const flatData: any[] = [];\n\n if (!collection || !collection.length) {\n this.grid.flatData = collection;\n this.grid.records = treeGridRecordsMap;\n this.grid.rootRecords = collection;\n return collection;\n }\n\n if (childDataKey) {\n hierarchicalRecords = this.hierarchizeRecursive(collection, primaryKey, childDataKey, undefined,\n flatData, 0, treeGridRecordsMap);\n } else if (primaryKey) {\n hierarchicalRecords = this.hierarchizeFlatData(collection, primaryKey, foreignKey, treeGridRecordsMap, flatData);\n }\n\n this.grid.flatData = this.grid.transactions.enabled ?\n flatData.filter(rec => {\n const state = this.grid.transactions.getState(this.getRowID(primaryKey, rec));\n return !state || state.type !== TransactionType.ADD;\n }) : flatData;\n this.grid.records = treeGridRecordsMap;\n this.grid.rootRecords = hierarchicalRecords;\n return hierarchicalRecords;\n }\n\n private getRowID(primaryKey: any, rowData: any) {\n return primaryKey ? rowData[primaryKey] : rowData;\n }\n\n /**\n * Converts a flat array of data into a hierarchical (tree) structure,\n * preserving the original order of the records among siblings.\n *\n * It uses a two-pass approach:\n * 1. Creates all ITreeGridRecord objects and populates the Map for quick lookup.\n * 2. Links the records by iterating again, ensuring children are added to\n * their parent's children array in the order they appeared in the\n * original collection.\n *\n * @param collection The flat array of data to be hierarchized. This is the array whose order should be preserved.\n * @param primaryKey The name of the property in the data objects that serves as the unique identifier (e.g., 'id').\n * @param foreignKey The name of the property in the data objects that links to the parent's primary key (e.g., 'parentId').\n * @param map A pre-existing Map object (key: primaryKey value, value: ITreeGridRecord) used to store and quickly look up all created records.\n * @param flatData The original flat data array. Used for passing to the setIndentationLevels method (not directly used for hierarchy building).\n * @returns An array of ITreeGridRecord objects representing the root nodes of the hierarchy, ordered as they appeared in the original collection.\n */\n private hierarchizeFlatData(\n collection: any[],\n primaryKey: string,\n foreignKey: string,\n map: Map<any, ITreeGridRecord>,\n flatData: any[]\n ): ITreeGridRecord[] {\n collection.forEach(row => {\n const record: ITreeGridRecord = {\n key: this.getRowID(primaryKey, row),\n data: row,\n children: []\n };\n map.set(row[primaryKey], record);\n });\n\n const result: ITreeGridRecord[] = [];\n collection.forEach(row => {\n const record: ITreeGridRecord = map.get(row[primaryKey])!;\n const parent = map.get(row[foreignKey]);\n\n if (parent) {\n record.parent = parent;\n parent.children.push(record);\n } else {\n result.push(record);\n }\n });\n\n this.setIndentationLevels(result, 0, flatData);\n\n return result;\n }\n\n private setIndentationLevels(collection: ITreeGridRecord[], indentationLevel: number, flatData: any[]) {\n for (const record of collection) {\n record.level = indentationLevel;\n record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n flatData.push(record.data);\n\n if (record.children && record.children.length > 0) {\n this.setIndentationLevels(record.children, indentationLevel + 1, flatData);\n }\n }\n }\n\n private hierarchizeRecursive(collection: any[], primaryKey: string, childDataKey: string,\n parent: ITreeGridRecord, flatData: any[], indentationLevel: number, map: Map<any, ITreeGridRecord>): ITreeGridRecord[] {\n const result: ITreeGridRecord[] = [];\n\n for (const item of collection) {\n const record: ITreeGridRecord = {\n key: this.getRowID(primaryKey, item),\n data: item,\n parent,\n level: indentationLevel\n };\n record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n flatData.push(item);\n map.set(record.key, record);\n record.children = item[childDataKey] ?\n this.hierarchizeRecursive(item[childDataKey], primaryKey, childDataKey, record, flatData, indentationLevel + 1, map) :\n undefined;\n result.push(record);\n }\n\n return result;\n }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n name: 'treeGridFlattening',\n standalone: true\n})\nexport class IgxTreeGridFlatteningPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: ITreeGridRecord[],\n expandedLevels: number, expandedStates: Map<any, boolean>, _: number): any[] {\n\n const data: ITreeGridRecord[] = [];\n\n this.grid.processedRootRecords = collection;\n this.grid.processedRecords = new Map<any, ITreeGridRecord>();\n\n this.getFlatDataRecursive(collection, data, expandedLevels, expandedStates, true);\n\n this.grid.processedExpandedFlatData = data.map(r => r.data);\n\n return data;\n }\n\n private getFlatDataRecursive(collection: ITreeGridRecord[], data: ITreeGridRecord[],\n expandedLevels: number, expandedStates: Map<any, boolean>, parentExpanded: boolean) {\n if (!collection || !collection.length) {\n return;\n }\n\n for (const hierarchicalRecord of collection) {\n if (parentExpanded) {\n data.push(hierarchicalRecord);\n }\n\n hierarchicalRecord.expanded = this.grid.gridAPI.get_row_expansion_state(hierarchicalRecord);\n\n this.updateNonProcessedRecordExpansion(this.grid, hierarchicalRecord);\n\n this.grid.processedRecords.set(hierarchicalRecord.key, hierarchicalRecord);\n\n this.getFlatDataRecursive(hierarchicalRecord.children, data, expandedLevels,\n expandedStates, parentExpanded && hierarchicalRecord.expanded);\n }\n }\n\n private updateNonProcessedRecordExpansion(grid: GridType, record: ITreeGridRecord) {\n const rec = grid.records.get(record.key);\n rec.expanded = record.expanded;\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'treeGridSorting',\n standalone: true\n})\nexport class IgxTreeGridSortingPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(\n hierarchicalData: ITreeGridRecord[],\n sortExpressions: ISortingExpression[],\n groupExpressions: IGroupingExpression[],\n sorting: IGridSortingStrategy,\n _: number,\n pinned?: boolean): ITreeGridRecord[] {\n\n const expressions = groupExpressions ? groupExpressions.concat(sortExpressions) : sortExpressions;\n let result: ITreeGridRecord[];\n if (!expressions.length) {\n result = hierarchicalData;\n } else {\n result = DataUtil.treeGridSort(hierarchicalData, expressions, sorting, this.grid);\n }\n\n const filteredSortedData = [];\n this.flattenTreeGridRecords(result, filteredSortedData);\n this.grid.setFilteredSortedData(filteredSortedData, pinned);\n\n return result;\n }\n\n private flattenTreeGridRecords(records: ITreeGridRecord[], flatData: any[]) {\n if (records && records.length) {\n for (const record of records) {\n flatData.push(record.data);\n this.flattenTreeGridRecords(record.children, flatData);\n }\n }\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'treeGridPaging',\n standalone: true\n})\nexport class IgxTreeGridPagingPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: ITreeGridRecord[], enabled: boolean, page = 0, perPage = 15, _: number): ITreeGridRecord[] {\n if (!enabled || this.grid.pagingMode !== 'local') {\n return collection;\n }\n\n const len = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.length;\n const totalPages = Math.ceil(len / perPage);\n\n const state = {\n index: (totalPages > 0 && page >= totalPages) ? totalPages - 1 : page,\n recordsPerPage: perPage\n };\n\n const result: ITreeGridRecord[] = DataUtil.page(cloneArray(collection), state, len);\n this.grid.pagingState = state;\n this.grid.page = state.index;\n\n return result;\n }\n}\n/** @hidden */\n@Pipe({\n name: 'treeGridTransaction',\n standalone: true\n})\nexport class IgxTreeGridTransactionPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: any[], _: number): any[] {\n\n if (this.grid.transactions.enabled) {\n const aggregatedChanges = this.grid.transactions.getAggregatedChanges(true);\n if (aggregatedChanges.length > 0) {\n const primaryKey = this.grid.primaryKey;\n if (!primaryKey) {\n return collection;\n }\n\n const childDataKey = this.grid.childDataKey;\n\n if (childDataKey) {\n const hierarchicalDataClone = cloneHierarchicalArray(collection, childDataKey);\n return DataUtil.mergeHierarchicalTransactions(\n hierarchicalDataClone,\n aggregatedChanges,\n childDataKey,\n this.grid.primaryKey,\n this.grid.dataCloneStrategy\n );\n } else {\n const flatDataClone = cloneArray(collection);\n return DataUtil.mergeTransactions(\n flatDataClone,\n aggregatedChanges,\n this.grid.primaryKey,\n this.grid.dataCloneStrategy);\n }\n }\n }\n return collection;\n }\n}\n\n/**\n * This pipe maps the original record to ITreeGridRecord format used in TreeGrid.\n */\n@Pipe({\n name: 'treeGridNormalizeRecord',\n standalone: true\n})\nexport class IgxTreeGridNormalizeRecordsPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(_: any[], __: number): any[] {\n const primaryKey = this.grid.primaryKey;\n // using flattened data because origin data may be hierarchical.\n const flatData = this.grid.flatData;\n const res = flatData ? flatData.map(rec =>\n ({\n rowID: this.grid.primaryKey ? rec[primaryKey] : rec,\n data: rec,\n level: 0,\n children: []\n })) : [];\n return res;\n }\n}\n\n@Pipe({\n name: 'treeGridAddRow',\n standalone: true\n})\nexport class IgxTreeGridAddRowPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: any, isPinned = false, _pipeTrigger: number) {\n if (!this.grid.rowEditable || !this.grid.crudService.row || !this.grid.crudService.row.isAddRow ||\n !this.grid.gridAPI.crudService.addRowParent || isPinned !== this.grid.gridAPI.crudService.addRowParent.isPinned) {\n return collection;\n }\n const copy = collection.slice(0);\n const rec = (this.grid.crudService.row as IgxAddRow).recordRef;\n if (this.grid.crudService.addRowParent.isPinned) {\n const parentRowIndex = copy.findIndex(record => record.rowID === this.grid.crudService.addRowParent.rowID);\n copy.splice(parentRowIndex + 1, 0, rec);\n } else {\n copy.splice(this.grid.crudService.row.index, 0, rec);\n }\n this.grid.records.set(rec.key, rec);\n return copy;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input\n} from '@angular/core';\nimport { NgClass, NgStyle, NgTemplateOutlet, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe } from '@angular/common';\n\nimport { IgxTreeGridRow } from 'igniteui-angular/grids/core';\nimport { RowType } from 'igniteui-angular/grids/core';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from 'igniteui-angular/grids/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { HammerGesturesManager } from 'igniteui-angular/core';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport { IgxDateTimeEditorDirective, IgxFocusDirective, IgxTextHighlightDirective, IgxTextSelectionDirective, IgxTooltipDirective, IgxTooltipTargetDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { IgxGridExpandableCellComponent } from 'igniteui-angular/grids/grid';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-tree-grid-cell',\n templateUrl: 'tree-cell.component.html',\n providers: [HammerGesturesManager],\n imports: [\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n DecimalPipe,\n PercentPipe,\n CurrencyPipe,\n DatePipe,\n IgxChipComponent,\n IgxTextHighlightDirective,\n IgxIconComponent,\n ReactiveFormsModule,\n IgxInputGroupComponent,\n IgxInputDirective,\n IgxFocusDirective,\n IgxCheckboxComponent,\n IgxDatePickerComponent,\n IgxTimePickerComponent,\n IgxDateTimeEditorDirective,\n IgxPrefixDirective,\n IgxSuffixDirective,\n IgxCircularProgressBarComponent,\n IgxTooltipTargetDirective,\n IgxTooltipDirective,\n IgxGridCellImageAltPipe,\n IgxStringReplacePipe,\n IgxColumnFormatterPipe,\n IgxTextSelectionDirective\n ]\n})\nexport class IgxTreeGridCellComponent extends IgxGridExpandableCellComponent {\n\n /**\n * @hidden\n */\n @Input()\n public level = 0;\n\n /**\n * @hidden\n */\n @Input()\n public showIndicator = false;\n\n /**\n * @hidden\n */\n @Input()\n public isLoading: boolean;\n\n /**\n * Gets the row of the cell.\n * ```typescript\n * let cellRow = this.cell.row;\n * ```\n *\n * @memberof IgxGridCellComponent\n */\n @Input()\n public override get row(): RowType {\n // TODO: Fix types\n return new IgxTreeGridRow(this.grid as any, this.intRow.index, this.intRow.data);\n }\n\n /**\n * @hidden\n */\n public override toggle(event: Event) {\n event.stopPropagation();\n this.grid.gridAPI.set_row_expansion_state(this.intRow.key, !this.intRow.expanded, event);\n }\n\n /**\n * @hidden\n */\n public onLoadingDblClick(event: Event) {\n event.stopPropagation();\n }\n}\n","<ng-template #defaultPinnedIndicator>\n @if (displayPinnedChip) {\n <igx-chip\n class=\"igx-grid__td--pinned-chip\"\n [disabled]=\"true\"\n [style.--ig-size]=\"1\"\n >{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n }\n</ng-template>\n<ng-template #defaultCell>\n @if (column.dataType !== 'boolean' && column.dataType !== 'image' || (column.dataType === 'boolean' && this.formatter)) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter:formatter:rowData)\n : column.dataType === 'number'\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\n \"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\"\n >{{\n formatter\n ? (value | columnFormatter:formatter:rowData)\n : column.dataType === \"number\"\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\n }}</div>\n }\n @if (column.dataType === 'boolean' && !this.formatter) {\n <igx-icon\n family=\"default\"\n [name]=\"value ? 'confirm' : 'close'\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\">\n </igx-icon>\n }\n @if (column.dataType === 'image') {\n <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n @if (column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)) {\n <div\n igxTextHighlight class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{\n !isEmptyAddRowCell ? value : (column.header || column.field)\n }}</div>\n }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n @if (column.dataType === 'string' || column.dataType === 'image') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-input-group [style.--ig-size]=\"1\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n />\n </igx-input-group>\n </ng-container>\n }\n @if (column.dataType === 'number') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'boolean') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-checkbox\n [checked]=\"editValue\"\n [igxFocus]=\"true\"\n [disableRipple]=\"true\"\n [formControl]=\"formControl\"\n ></igx-checkbox>\n </ng-container>\n }\n @if (column.dataType === 'date') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-date-picker\n [style.width.%]=\"100\"\n [outlet]=\"grid.outlet\"\n mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [weekStart]=\"column.pipeArgs.weekStart\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n [displayFormat]=\"column.pipeArgs.format\"\n >\n </igx-date-picker>\n </ng-container>\n }\n @if (column.dataType === 'time') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-time-picker\n [style.width.%]=\"100\"\n [outlet]=\"grid.outlet\"\n mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n [displayFormat]=\"column.pipeArgs.format\"\n ></igx-time-picker>\n </ng-container>\n }\n @if (column.dataType === 'dateTime') {\n <igx-input-group [formGroup]=\"formGroup\">\n <input\n type=\"text\"\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [formControl]=\"formControl\"\n igxInput\n [locale]=\"grid.locale\"\n [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n [defaultFormatType]=\"column.dataType\"\n [displayFormat]=\"column.pipeArgs.format\"\n [igxFocus]=\"true\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'currency') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n @if (grid.currencyPositionLeft) {\n <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n }\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n />\n @if (!grid.currencyPositionLeft) {\n <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n }\n </igx-input-group>\n }\n @if (column.dataType === 'percent') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n />\n <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n </igx-input-group>\n }\n</ng-template>\n@if (!editMode) {\n @if (level > 0) {\n <div\n #indentationDiv\n class=\"igx-grid__tree-cell--padding-level-{{level}}\"\n [ngStyle]=\"{'padding-inline-start': 'calc(var(--igx-tree-indent-size) *' + level + ')'}\"\n ></div>\n }\n @if (!isLoading) {\n <div\n #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n [ngStyle]=\"{ visibility: showIndicator ? 'visible' : 'hidden' }\"\n (click)=\"toggle($event)\"\n (focus)=\"onIndicatorFocus()\"\n >\n <ng-container\n *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\"\n >\n </ng-container>\n <ng-container\n *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\"\n >\n </ng-container>\n </div>\n }\n @if (isLoading) {\n <div\n (dblclick)=\"onLoadingDblClick($event)\"\n class=\"igx-grid__tree-loading-indicator\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n grid.rowLoadingIndicatorTemplate\n ? grid.rowLoadingIndicatorTemplate\n : defaultLoadingIndicatorTemplate\n \"\n >\n </ng-container>\n </div>\n }\n <ng-template #defaultLoadingIndicatorTemplate>\n <igx-circular-bar [indeterminate]=\"true\"> </igx-circular-bar>\n </ng-template>\n}\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </ng-container>\n@if (isInvalid) {\n <igx-icon\n family=\"default\"\n name=\"error\"\n #errorIcon\n [igxTooltipTarget]=\"tooltipRef\"\n [igxToggleOutlet]=\"grid.outlet\"\n (mouseover)='errorShowing = true'\n (mouseout)='errorShowing = false'>\n </igx-icon>\n <div [id]=\"ariaErrorMessage\"\n igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container *ngTemplateOutlet=\"cellValidationErrorTemplate || defaultError; context: context\"></ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n<ng-template #defaultError>\n @if (formGroup?.get(column?.field).errors?.['required']) {\n <div>\n {{grid.resourceStrings.igx_grid_required_validation_error}}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['minlength']) {\n <div>\n {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['maxlength']) {\n <div>\n {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['min']) {\n <div>\n {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['max']) {\n <div>\n {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['email']) {\n <div>\n {{grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['pattern']) {\n <div>\n {{grid.resourceStrings.igx_grid_pattern_validation_error}}\n </div>\n }\n</ng-template>\n","import { Component, forwardRef, Input, ViewChildren, QueryList, HostBinding, DoCheck, ChangeDetectionStrategy } from '@angular/core';\nimport { IgxRowDirective } from 'igniteui-angular/grids/core';\nimport { IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe } from 'igniteui-angular/grids/core';\nimport { IgxTreeGridCellComponent } from './tree-cell.component';\nimport { IgxGridCellComponent } from 'igniteui-angular/grids/core';\nimport { IgxRowDragDirective } from 'igniteui-angular/grids/core';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\nimport { IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { ITreeGridRecord } from 'igniteui-angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-tree-grid-row',\n templateUrl: 'tree-grid-row.component.html',\n providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxTreeGridRowComponent) }],\n imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, IgxGridCellComponent, NgClass, NgStyle, IgxTreeGridCellComponent, IgxCheckboxComponent, IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe]\n})\nexport class IgxTreeGridRowComponent extends IgxRowDirective implements DoCheck {\n @ViewChildren('treeCell')\n protected override _cells: QueryList<any>;\n\n /**\n * @hidden\n */\n public isLoading: boolean;\n\n private _treeRow: ITreeGridRecord;\n\n /**\n * The `ITreeGridRecord` passed to the row component.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * const treeRow = row.treeRow;\n * ```\n */\n @Input()\n public get treeRow(): ITreeGridRecord {\n return this._treeRow;\n }\n\n public set treeRow(value: ITreeGridRecord) {\n if (this._treeRow !== value) {\n this._treeRow = value;\n this.data = this._treeRow.data;\n }\n }\n\n /**\n * Sets whether the row is pinned.\n * Default value is `false`.\n * ```typescript\n * this.grid.selectedRows[0].pinned = true;\n * ```\n */\n public override set pinned(value: boolean) {\n if (value) {\n this.grid.pinRow(this.key);\n } else {\n this.grid.unpinRow(this.key);\n }\n }\n\n /**\n * Gets whether the row is pinned.\n * ```typescript\n * let isPinned = row.pinned;\n * ```\n */\n public override get pinned() {\n return this.grid.isRecordPinned(this._treeRow);\n }\n\n /**\n * @hidden\n */\n public override get isRoot(): boolean {\n let treeRec = this.treeRow;\n const isPinnedArea = this.pinned && !this.disabled;\n if (isPinnedArea) {\n treeRec = this.grid.unpinnedRecords.find(x => x.data === this.data);\n }\n return treeRec?.level === 0;\n }\n\n /**\n * @hidden\n */\n public override get hasChildren(): boolean {\n return true;\n }\n\n /**\n * Returns a value indicating whether the row component is expanded.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * const expanded = row.expanded;\n * ```\n */\n @HostBinding('attr.aria-expanded')\n public override get expanded(): boolean {\n return this._treeRow.expanded;\n }\n\n /**\n * Sets a value indicating whether the row component is expanded.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * row.expanded = true;\n * ```\n */\n public override set expanded(value: boolean) {\n this.grid.gridAPI.set_row_expansion_state(this._treeRow.key, value);\n }\n\n /**\n * @hidden\n * @internal\n */\n public override get viewIndex(): number {\n return this.index + this.grid.page * this.grid.perPage;\n }\n\n /**\n * @hidden\n */\n public get showIndicator() {\n return this.grid.loadChildrenOnDemand ?\n this.grid.expansionStates.has(this.key) ?\n this.treeRow.children && this.treeRow.children.length :\n this.grid.hasChildrenKey ?\n this.data[this.grid.hasChildrenKey] :\n true :\n this.treeRow.children && this.treeRow.children.length;\n }\n\n /**\n * @hidden\n */\n public get indeterminate(): boolean {\n return this.selectionService.isRowInIndeterminateState(this.key);\n }\n\n /**\n * @hidden\n */\n public override ngDoCheck() {\n this.isLoading = this.grid.loadChildrenOnDemand ? this.grid.loadingRows.has(this.key) : false;\n super.ngDoCheck();\n }\n\n /**\n * Spawns the add child row UI for the specific row.\n *\n * @example\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * row.beginAddChild();\n * ```\n * @param rowID\n */\n public beginAddChild() {\n this.grid.crudService.enterAddRowMode(this, true);\n }\n}\n","<ng-container *ngTemplateOutlet='addRowUI ? addTemp : defaultTemp'></ng-container>\n\n<ng-template #addTemp>\n <div class='igx-grid__tr--inner' [class.igx-grid__tr--add-animate]='triggerAddAnimationClass' (animationend)='animationEndHandler()'>\n <ng-container *ngTemplateOutlet='defaultTemp'></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n </div>\n }\n @if (showRowSelectors) {\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (click)=\"onRowSelectorClick($event)\" (pointerdown)=\"$event.preventDefault()\">\n <ng-template *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n context: { $implicit: { index: viewIndex, rowID: key, key, selected: selected }}\">\n </ng-template>\n </div>\n }\n @if (pinnedStartColumns.length > 0) {\n <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: { $implicit: this, columns: pinnedStartColumns }\"></ng-container>\n }\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n @if (this.hasMergedCells) {\n <div [style.height.px]=\" this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? getRowHeight() : null\"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"this.metaData?.cellMergeMeta.get(col.field)?.root ? 'hidden' : 'visible'\"\n [ngStyle]=\"{\n 'grid-template-rows': this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? this.getMergeCellSpan(col) : null\n }\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n </div>\n }\n @else {\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: { $implicit: this, columns: pinnedEndColumns }\"></ng-container>\n }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [readonly]=\"true\"\n [checked]=\"selected\"\n [indeterminate]=\"indeterminate\"\n [disabled]=\"deleted\"\n [disableRipple]=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col let-columns=\"columns\">\n @for (col of columns | igxNotGrouped; track trackPinnedColumn(col)) {\n @if (this.hasMergedCells) {\n <div [style.height.px]=\" this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? getRowHeight() : null\"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"this.metaData?.cellMergeMeta.get(col.field)?.root ? 'hidden' : 'visible'\"\n [ngStyle]=\"{\n 'grid-template-rows': this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? this.getMergeCellSpan(col) : null\n }\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n </div>\n }\n @else {\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #cellTemplate let-col=\"column\">\n <igx-grid-cell\n [class.igx-grid__td--merged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [isMerged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [firstPinned]=\"col.isFirstPinned\"\n [lastPinned]=\"col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #treeCell>\n </igx-grid-cell>\n</ng-template>\n<ng-template #treeCellTemplate let-col=\"column\">\n <igx-tree-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--merged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [level]=\"treeRow.level\"\n [expanded]=\"expanded\"\n [showIndicator]=\"showIndicator\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [isLoading]=\"isLoading\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #treeCell>\n </igx-tree-grid-cell>\n</ng-template>\n\n","import { AfterContentInit, Component, Input, IterableDiffer, IterableDiffers, OnDestroy, booleanAttribute, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IChipsAreaReorderEventArgs, IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxDropDirective } from 'igniteui-angular/directives';\nimport { IGroupingExpression, ISortingExpression } from 'igniteui-angular/core';\nimport { IgxGroupAreaDropDirective, IgxGroupByAreaDirective, IgxGroupByMetaPipe } from 'igniteui-angular/grids/core';\n\n/**\n * An internal component representing the group-by drop area for the igx-grid component.\n *\n * @hidden @internal\n */\n@Component({\n selector: 'igx-tree-grid-group-by-area',\n templateUrl: '../../core/src/grouping/group-by-area.component.html',\n providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxTreeGridGroupByAreaComponent }],\n imports: [IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent, IgxSuffixDirective, IgxGroupAreaDropDirective, IgxDropDirective, NgTemplateOutlet, IgxGroupByMetaPipe]\n})\nexport class IgxTreeGridGroupByAreaComponent extends IgxGroupByAreaDirective implements AfterContentInit, OnDestroy {\n private differs = inject(IterableDiffers);\n\n @Input({ transform: booleanAttribute })\n public get hideGroupedColumns() {\n return this._hideGroupedColumns;\n }\n\n public set hideGroupedColumns(value: boolean) {\n if (this.grid?.columns && this.expressions) {\n this.setColumnsVisibility(value);\n }\n\n this._hideGroupedColumns = value;\n }\n\n private _hideGroupedColumns = false;\n private groupingDiffer: IterableDiffer<IGroupingExpression>;\n private destroy$ = new Subject<any>();\n\n public ngAfterContentInit(): void {\n if (this.grid.columns && this.expressions) {\n this.groupingDiffer = this.differs.find(this.expressions).create();\n this.updateColumnsVisibility();\n }\n\n this.grid.sortingExpressionsChange.pipe(takeUntil(this.destroy$)).subscribe((sortingExpressions: ISortingExpression[]) => {\n if (!this.expressions || !this.expressions.length) {\n return;\n }\n\n let changed = false;\n\n sortingExpressions.forEach((sortExpr: ISortingExpression) => {\n const fieldName = sortExpr.fieldName;\n const groupingExpr = this.expressions.find(ex => ex.fieldName === fieldName);\n if (groupingExpr && groupingExpr.dir !== sortExpr.dir) {\n groupingExpr.dir = sortExpr.dir;\n changed = true;\n }\n });\n\n if (changed) {\n this.expressions = [...this.expressions];\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public handleReorder(event: IChipsAreaReorderEventArgs) {\n const { chipsArray, originalEvent } = event;\n const newExpressions = this.getReorderedExpressions(chipsArray);\n\n this.chipExpressions = newExpressions;\n\n // When reordered using keyboard navigation, we don't have `onMoveEnd` event.\n if (originalEvent instanceof KeyboardEvent) {\n this.expressions = newExpressions;\n }\n }\n\n public handleMoveEnd() {\n this.expressions = this.chipExpressions;\n }\n\n public groupBy(expression: IGroupingExpression) {\n this.expressions.push(expression);\n this.expressions = [...this.expressions];\n }\n\n public clearGrouping(name: string) {\n this.expressions = this.expressions.filter(item => item.fieldName !== name);\n this.grid.sortingExpressions = this.grid.sortingExpressions.filter(item => item.fieldName !== name);\n this.grid.notifyChanges(true);\n }\n\n protected override expressionsChanged() {\n this.updateColumnsVisibility();\n }\n\n private updateColumnsVisibility() {\n if (this.groupingDiffer && this.grid.columns && !this.grid.hasColumnLayouts) {\n const changes = this.groupingDiffer.diff(this.expressions);\n if (changes && this.grid.columns.length > 0) {\n changes.forEachAddedItem((rec) => {\n const col = this.grid.getColumnByName(rec.item.fieldName);\n col.hidden = this.hideGroupedColumns;\n });\n changes.forEachRemovedItem((rec) => {\n const col = this.grid.getColumnByName(rec.item.fieldName);\n col.hidden = false;\n });\n }\n }\n }\n\n private setColumnsVisibility(value) {\n if (this.grid.columns.length > 0 && !this.grid.hasColumnLayouts) {\n this.expressions.forEach((expr) => {\n const col = this.grid.getColumnByName(expr.fieldName);\n col.hidden = value;\n });\n }\n }\n}\n\n","<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n @for (expression of chipExpressions; track expression.fieldName; let last = $last) {\n <igx-chip\n [id]=\"expression.fieldName\"\n [title]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title\"\n [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n (remove)=\"clearGrouping($event.owner.id)\"\n (chipClick)=\"handleClick(expression.fieldName)\"\n >\n <span>{{ (expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title }}</span>\n <igx-icon\n family=\"default\"\n [name]=\"expression.dir === 1 ? 'sort_asc' : 'sort_desc'\"\n igxSuffix>\n </igx-icon>\n </igx-chip>\n\n <span class=\"igx-grid-grouparea__connector\">\n <igx-icon\n family=\"default\"\n name=\"arrow_forward\"\n [hidden]=\"(last && !dropAreaVisible)\">\n </igx-icon>\n </span>\n }\n <div igxGroupAreaDrop\n class=\"igx-drop-area\"\n [attr.gridId]=\"grid.id\"\n [hidden]=\"!dropAreaVisible\"\n (igxDrop)=\"onDragDrop($event)\"\n >\n <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n </div>\n</igx-chips-area>\n\n<ng-template #default>\n <igx-icon\n family=\"default\"\n name=\"group_work\"\n class=\"igx-drop-area__icon\">\n </igx-icon>\n <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnInit, TemplateRef, ContentChild, AfterContentInit, ViewChild, DoCheck, AfterViewInit, CUSTOM_ELEMENTS_SCHEMA, booleanAttribute, inject } from '@angular/core';\nimport { NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';\nimport { IgxTreeGridAPIService } from './tree-grid-api.service';\nimport { IgxGridBaseDirective, IgxGridCellMergePipe, IgxGridUnmergeActivePipe } from 'igniteui-angular/grids/grid';\nimport {\n CellType,\n GridSelectionMode,\n GridType,\n IGX_GRID_BASE,\n IGX_GRID_SERVICE_BASE,\n IgxColumnComponent,\n IgxColumnMovingDropDirective,\n IgxColumnResizingService,\n IgxFilteringService,\n IgxGridBodyDirective,\n IgxGridCell,\n IgxGridColumnResizerComponent,\n IgxGridCRUDService,\n IgxGridDragSelectDirective,\n IgxGridHeaderRowComponent,\n IgxGridNavigationService,\n IgxGridRowClassesPipe,\n IgxGridRowPinningPipe,\n IgxGridRowStylesPipe,\n IgxGridSelectionService,\n IgxGridSummaryService,\n IgxGridTransaction,\n IgxGridValidationService,\n IgxHasVisibleColumnsPipe,\n IgxRowEditTabStopDirective,\n IgxStringReplacePipe,\n IgxSummaryDataPipe,\n IgxSummaryRow,\n IgxSummaryRowComponent,\n IgxTreeGridRow,\n IRowDataCancelableEventArgs,\n IRowDataEventArgs,\n IRowToggleEventArgs,\n RowType\n} from 'igniteui-angular/grids/core';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { IgxRowLoadingIndicatorTemplateDirective } from './tree-grid.directives';\nimport { IgxTreeGridSelectionService } from './tree-grid-selection.service';\nimport { DefaultTreeGridMergeStrategy, HierarchicalState, HierarchicalTransaction, HierarchicalTransactionService, IGridMergeStrategy, IgxHierarchicalTransactionFactory, IgxOverlayOutletDirective, ITreeGridRecord, mergeObjects, StateUpdateEvent, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy } from 'igniteui-angular/core';\nimport { IgxTreeGridSummaryPipe } from './tree-grid.summary.pipe';\nimport { IgxTreeGridFilteringPipe } from './tree-grid.filtering.pipe';\nimport { IgxTreeGridHierarchizingPipe, IgxTreeGridFlatteningPipe, IgxTreeGridSortingPipe, IgxTreeGridPagingPipe, IgxTreeGridTransactionPipe, IgxTreeGridNormalizeRecordsPipe, IgxTreeGridAddRowPipe } from './tree-grid.pipes';\nimport { IgxTreeGridRowComponent } from './tree-grid-row.component';\nimport { IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { IgxSnackbarComponent } from 'igniteui-angular/snackbar';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxTreeGridGroupByAreaComponent } from './tree-grid-group-by-area.component';\n\nlet NEXT_ID = 0;\n\n/* blazorAdditionalDependency: Column */\n/* blazorAdditionalDependency: ColumnGroup */\n/* blazorAdditionalDependency: ColumnLayout */\n/* blazorAdditionalDependency: GridToolbar */\n/* blazorAdditionalDependency: GridToolbarActions */\n/* blazorAdditionalDependency: GridToolbarTitle */\n/* blazorAdditionalDependency: GridToolbarAdvancedFiltering */\n/* blazorAdditionalDependency: GridToolbarExporter */\n/* blazorAdditionalDependency: GridToolbarHiding */\n/* blazorAdditionalDependency: GridToolbarPinning */\n/* blazorAdditionalDependency: ActionStrip */\n/* blazorAdditionalDependency: GridActionsBaseDirective */\n/* blazorAdditionalDependency: GridEditingActions */\n/* blazorAdditionalDependency: GridPinningActions */\n/* blazorIndirectRender */\n/**\n * **Ignite UI for Angular Tree Grid** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid)\n *\n * The Ignite UI Tree Grid displays and manipulates hierarchical data with consistent schema formatted as a table and\n * provides features such as sorting, filtering, editing, column pinning, paging, column moving and hiding.\n *\n * Example:\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" primaryKey=\"employeeID\" foreignKey=\"PID\" [autoGenerate]=\"false\">\n * <igx-column field=\"first\" header=\"First Name\"></igx-column>\n * <igx-column field=\"last\" header=\"Last Name\"></igx-column>\n * <igx-column field=\"role\" header=\"Role\"></igx-column>\n * </igx-tree-grid>\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-tree-grid',\n templateUrl: 'tree-grid.component.html',\n providers: [\n IgxGridCRUDService,\n IgxGridValidationService,\n IgxGridSummaryService,\n IgxGridNavigationService,\n { provide: IgxGridSelectionService, useClass: IgxTreeGridSelectionService },\n { provide: IGX_GRID_SERVICE_BASE, useClass: IgxTreeGridAPIService },\n { provide: IGX_GRID_BASE, useExisting: IgxTreeGridComponent },\n IgxFilteringService,\n IgxColumnResizingService,\n IgxForOfSyncService,\n IgxForOfScrollSyncService\n ],\n imports: [\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n IgxGridHeaderRowComponent,\n IgxGridBodyDirective,\n IgxGridDragSelectDirective,\n IgxColumnMovingDropDirective,\n IgxGridForOfDirective,\n IgxTemplateOutletDirective,\n IgxTreeGridRowComponent,\n IgxSummaryRowComponent,\n IgxOverlayOutletDirective,\n IgxToggleDirective,\n IgxCircularProgressBarComponent,\n IgxSnackbarComponent,\n IgxButtonDirective,\n IgxRippleDirective,\n IgxRowEditTabStopDirective,\n IgxIconComponent,\n IgxGridColumnResizerComponent,\n IgxHasVisibleColumnsPipe,\n IgxGridRowPinningPipe,\n IgxGridRowClassesPipe,\n IgxGridRowStylesPipe,\n IgxSummaryDataPipe,\n IgxTreeGridHierarchizingPipe,\n IgxTreeGridFlatteningPipe,\n IgxTreeGridSortingPipe,\n IgxTreeGridFilteringPipe,\n IgxTreeGridPagingPipe,\n IgxTreeGridTransactionPipe,\n IgxTreeGridSummaryPipe,\n IgxTreeGridNormalizeRecordsPipe,\n IgxTreeGridAddRowPipe,\n IgxStringReplacePipe,\n IgxGridCellMergePipe,\n IgxScrollInertiaDirective,\n IgxGridUnmergeActivePipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxTreeGridComponent extends IgxGridBaseDirective implements GridType, OnInit, AfterViewInit, DoCheck, AfterContentInit {\n protected override _diTransactions = inject<HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>>(IgxGridTransaction, { optional: true, });\n protected override transactionFactory = inject(IgxHierarchicalTransactionFactory);\n\n /**\n * Sets the child data key of the `IgxTreeGridComponent`.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" [autoGenerate]=\"true\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public childDataKey: string;\n\n /**\n * Sets the foreign key of the `IgxTreeGridComponent`.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [autoGenerate]=\"true\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public foreignKey: string;\n\n /**\n * Sets the key indicating whether a row has children.\n * This property is only used for load on demand scenarios.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\"\n * [loadChildrenOnDemand]=\"loadChildren\"\n * [hasChildrenKey]=\"'hasEmployees'\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public hasChildrenKey: string;\n\n /**\n * Sets whether child records should be deleted when their parent gets deleted.\n * By default it is set to true and deletes all children along with the parent.\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" cascadeOnDelete=\"false\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input({ transform: booleanAttribute })\n public cascadeOnDelete = true;\n\n /* csSuppress */\n /**\n * Sets a callback for loading child rows on demand.\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [loadChildrenOnDemand]=\"loadChildren\">\n * </igx-tree-grid>\n * ```\n * ```typescript\n * public loadChildren = (parentID: any, done: (children: any[]) => void) => {\n * this.dataService.getData(parentID, children => done(children));\n * }\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public loadChildrenOnDemand: (parentID: any, done: (children: any[]) => void) => void;\n\n /**\n * @hidden @internal\n */\n @HostBinding('attr.role')\n public role = 'treegrid';\n\n /**\n * Sets the value of the `id` attribute. If not provided it will be automatically generated.\n * ```html\n * <igx-tree-grid [id]=\"'igx-tree-grid-1'\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @HostBinding('attr.id')\n @Input()\n public id = `igx-tree-grid-${NEXT_ID++}`;\n\n /**\n * @hidden\n * @internal\n */\n @ContentChild(IgxTreeGridGroupByAreaComponent, { read: IgxTreeGridGroupByAreaComponent })\n public treeGroupArea: IgxTreeGridGroupByAreaComponent;\n\n /**\n * @hidden @internal\n */\n @ViewChild('record_template', { read: TemplateRef, static: true })\n protected recordTemplate: TemplateRef<any>;\n\n /**\n * @hidden @internal\n */\n @ViewChild('summary_template', { read: TemplateRef, static: true })\n protected summaryTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n */\n @ContentChild(IgxRowLoadingIndicatorTemplateDirective, { read: IgxRowLoadingIndicatorTemplateDirective })\n protected rowLoadingTemplate: IgxRowLoadingIndicatorTemplateDirective;\n\n /**\n * @hidden\n */\n public flatData: any[] | null;\n\n /**\n * @hidden\n */\n public processedExpandedFlatData: any[] | null;\n\n /**\n * Returns an array of the root level `ITreeGridRecord`s.\n * ```typescript\n * // gets the root record with index=2\n * const states = this.grid.rootRecords[2];\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public rootRecords: ITreeGridRecord[];\n\n /* blazorSuppress */\n /**\n * Returns a map of all `ITreeGridRecord`s.\n * ```typescript\n * // gets the record with primaryKey=2\n * const states = this.grid.records.get(2);\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public records: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n /**\n * Returns an array of processed (filtered and sorted) root `ITreeGridRecord`s.\n * ```typescript\n * // gets the processed root record with index=2\n * const states = this.grid.processedRootRecords[2];\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public processedRootRecords: ITreeGridRecord[];\n\n /* blazorSuppress */\n /**\n * Returns a map of all processed (filtered and sorted) `ITreeGridRecord`s.\n * ```typescript\n * // gets the processed record with primaryKey=2\n * const states = this.grid.processedRecords.get(2);\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public processedRecords: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n /**\n * @hidden\n */\n public loadingRows = new Set<any>();\n\n protected override _filterStrategy = new TreeGridFilteringStrategy();\n protected override _transactions: HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>;\n protected override _mergeStrategy: IGridMergeStrategy = new DefaultTreeGridMergeStrategy();\n private _data;\n private _rowLoadingIndicatorTemplate: TemplateRef<void>;\n private _expansionDepth = Infinity;\n\n /* treatAsRef */\n /**\n * Gets/Sets the array of data that populates the component.\n * ```html\n * <igx-tree-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public get data(): any[] | null {\n return this._data;\n }\n\n /* treatAsRef */\n public set data(value: any[] | null) {\n const oldData = this._data;\n this._data = value || [];\n this.summaryService.clearSummaryCache();\n if (!this._init) {\n this.validation.updateAll(this._data);\n }\n if (this.autoGenerate && this._data.length > 0 && this.shouldRecreateColumns(oldData, this._data)) {\n this.setupColumns();\n }\n this.checkPrimaryKeyField();\n this.cdr.markForCheck();\n }\n\n /** @hidden @internal */\n public override get type(): GridType[\"type\"] {\n return 'tree';\n }\n\n /**\n * Get transactions service for the grid.\n *\n * @experimental @hidden\n */\n public override get transactions() {\n if (this._diTransactions && !this.batchEditing) {\n return this._diTransactions;\n }\n return this._transactions;\n }\n\n /**\n * Sets the count of levels to be expanded in the `IgxTreeGridComponent`. By default it is\n * set to `Infinity` which means all levels would be expanded.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" expansionDepth=\"1\" [autoGenerate]=\"true\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public get expansionDepth(): number {\n return this._expansionDepth;\n }\n\n public set expansionDepth(value: number) {\n this._expansionDepth = value;\n this.notifyChanges();\n }\n\n /**\n * Template for the row loading indicator when load on demand is enabled.\n * ```html\n * <ng-template #rowLoadingTemplate>\n * <igx-icon>loop</igx-icon>\n * </ng-template>\n *\n * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'ID'\" [foreignKey]=\"'parentID'\"\n * [loadChildrenOnDemand]=\"loadChildren\"\n * [rowLoadingIndicatorTemplate]=\"rowLoadingTemplate\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public get rowLoadingIndicatorTemplate(): TemplateRef<void> {\n return this._rowLoadingIndicatorTemplate;\n }\n\n public set rowLoadingIndicatorTemplate(value: TemplateRef<void>) {\n this._rowLoadingIndicatorTemplate = value;\n this.notifyChanges();\n }\n\n // Kind of stupid\n // private get _gridAPI(): IgxTreeGridAPIService {\n // return this.gridAPI as IgxTreeGridAPIService;\n // }\n\n /**\n * @hidden\n */\n public override ngOnInit() {\n super.ngOnInit();\n\n this.rowToggle.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n this.loadChildrenOnRowExpansion(args);\n });\n\n // TODO: cascade selection logic should be refactor to be handled in the already existing subs\n this.rowAddedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n let rec = this.gridAPI.get_rec_by_id(this.primaryKey ? args.data[this.primaryKey] : args.data);\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n new Set([rec.parent]), rec.parent.key);\n } else {\n // The record is still not available\n // Wait for the change detection to update records through pipes\n requestAnimationFrame(() => {\n rec = this.gridAPI.get_rec_by_id(this.primaryKey ?\n args.data[this.primaryKey] : args.data);\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n new Set([rec.parent]), rec.parent.key);\n }\n this.notifyChanges();\n });\n }\n }\n });\n\n this.rowDeletedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n if (args.data) {\n const rec = this.gridAPI.get_rec_by_id(\n this.primaryKey ? args.data[this.primaryKey] : args.data);\n this.handleCascadeSelection(args, rec);\n } else {\n // if a row has been added and before commiting the transaction deleted\n const leafRowsDirectParents = new Set<any>();\n this.records.forEach(record => {\n if (record && (!record.children || record.children.length === 0) && record.parent) {\n leafRowsDirectParents.add(record.parent);\n }\n });\n // Wait for the change detection to update records through pipes\n requestAnimationFrame(() => {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n this.notifyChanges();\n });\n }\n }\n });\n\n this.filteringDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n const leafRowsDirectParents = new Set<any>();\n this.records.forEach(record => {\n if (record && (!record.children || record.children.length === 0) && record.parent) {\n leafRowsDirectParents.add(record.parent);\n }\n });\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n this.notifyChanges();\n }\n });\n }\n\n /**\n * @hidden\n */\n public override ngAfterViewInit() {\n super.ngAfterViewInit();\n // TODO: pipesExectured event\n // run after change detection in super triggers pipes for records structure\n if (this.rowSelection === GridSelectionMode.multipleCascade && this.selectedRows.length) {\n const selRows = this.selectedRows;\n this.selectionService.clearRowSelection();\n this.selectRows(selRows, true);\n this.cdr.detectChanges();\n }\n }\n\n /**\n * @hidden\n */\n public override ngAfterContentInit() {\n if (this.rowLoadingTemplate) {\n this._rowLoadingIndicatorTemplate = this.rowLoadingTemplate.template;\n }\n super.ngAfterContentInit();\n }\n\n public override getDefaultExpandState(record: ITreeGridRecord): boolean {\n return record.children && record.children.length && record.level < this.expansionDepth;\n }\n\n /**\n * Expands all rows.\n * ```typescript\n * this.grid.expandAll();\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public override expandAll() {\n this._expansionDepth = Infinity;\n this.expansionStates = new Map<any, boolean>();\n }\n\n /**\n * Collapses all rows.\n *\n * ```typescript\n * this.grid.collapseAll();\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public override collapseAll() {\n this._expansionDepth = 0;\n this.expansionStates = new Map<any, boolean>();\n }\n\n /**\n * @hidden\n */\n public override refreshGridState(args?: IRowDataEventArgs) {\n super.refreshGridState();\n if (this.primaryKey && this.foreignKey && args) {\n const rowID = args.data[this.foreignKey];\n this.summaryService.clearSummaryCache({ rowID });\n this.pipeTrigger++;\n this.cdr.detectChanges();\n }\n }\n\n /* blazorCSSuppress */\n /**\n * Creates a new `IgxTreeGridRowComponent` with the given data. If a parentRowID is not specified, the newly created\n * row would be added at the root level. Otherwise, it would be added as a child of the row whose primaryKey matches\n * the specified parentRowID. If the parentRowID does not exist, an error would be thrown.\n * ```typescript\n * const record = {\n * ID: this.grid.data[this.grid1.data.length - 1].ID + 1,\n * Name: this.newRecord\n * };\n * this.grid.addRow(record, 1); // Adds a new child row to the row with ID=1.\n * ```\n *\n * @param data\n * @param parentRowID\n * @memberof IgxTreeGridComponent\n */\n // TODO: remove evt emission\n public override addRow(data: any, parentRowID?: any) {\n this.crudService.endEdit(true);\n this.gridAPI.addRowToData(data, parentRowID);\n\n this.rowAddedNotifier.next({\n data: data,\n rowData: data, owner: this,\n primaryKey: data[this.primaryKey],\n rowKey: data[this.primaryKey]\n });\n this.pipeTrigger++;\n this.notifyChanges();\n }\n\n /**\n * Enters add mode by spawning the UI with the context of the specified row by index.\n *\n * @remarks\n * Accepted values for index are integers from 0 to this.grid.dataView.length\n * @remarks\n * When adding the row as a child, the parent row is the specified row.\n * @remarks\n * To spawn the UI on top, call the function with index = null or a negative number.\n * In this case trying to add this row as a child will result in error.\n * @example\n * ```typescript\n * this.grid.beginAddRowByIndex(10);\n * this.grid.beginAddRowByIndex(10, true);\n * this.grid.beginAddRowByIndex(null);\n * ```\n * @param index - The index to spawn the UI at. Accepts integers from 0 to this.grid.dataView.length\n * @param asChild - Whether the record should be added as a child. Only applicable to igxTreeGrid.\n */\n public override beginAddRowByIndex(index: number, asChild?: boolean): void {\n if (index === null || index < 0) {\n return this.beginAddRowById(null, asChild);\n }\n return this._addRowForIndex(index - 1, asChild);\n }\n\n /**\n * @hidden\n */\n public getContext(rowData: any, rowIndex: number, pinned?: boolean): any {\n return {\n $implicit: this.isGhostRecord(rowData) || this.isRecordMerged(rowData) ? rowData.recordRef : rowData,\n index: this.getDataViewIndex(rowIndex, pinned),\n templateID: {\n type: this.isSummaryRow(rowData) ? 'summaryRow' : 'dataRow',\n id: null\n },\n disabled: this.isGhostRecord(rowData) ? rowData.recordRef.isFilteredOutParent === undefined : false,\n metaData: this.isRecordMerged(rowData) ? rowData : null\n };\n }\n\n /**\n * @hidden\n * @internal\n */\n public override getInitialPinnedIndex(rec) {\n const id = this.gridAPI.get_row_id(rec);\n return this._pinnedRecordIDs.indexOf(id);\n }\n\n /**\n * @hidden\n * @internal\n */\n public override isRecordPinned(rec) {\n return this.getInitialPinnedIndex(rec.data) !== -1;\n }\n\n /**\n *\n * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n *\n * @remarks\n * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n */\n public override getSelectedData(formatters = false, headers = false): any[] {\n let source = [];\n\n const process = (record) => {\n if (record.summaries) {\n source.push(null);\n return;\n }\n source.push(record.data);\n };\n\n this.unpinnedDataView.forEach(process);\n source = this.isRowPinningToTop ? [...this.pinnedDataView, ...source] : [...source, ...this.pinnedDataView];\n return this.extractDataFromSelection(source, formatters, headers);\n }\n\n /**\n * @hidden @internal\n */\n public override getEmptyRecordObjectFor(inTreeRow: RowType) {\n const treeRowRec = inTreeRow?.treeRow || null;\n const row = { ...treeRowRec };\n const data = treeRowRec?.data || {};\n row.data = { ...data };\n Object.keys(row.data).forEach(key => {\n // persist foreign key if one is set.\n if (this.foreignKey && key === this.foreignKey) {\n row.data[key] = treeRowRec.data[this.crudService.addRowParent?.asChild ? this.primaryKey : key];\n } else {\n row.data[key] = undefined;\n }\n });\n let id = this.generateRowID();\n const rootRecPK = this.foreignKey && this.rootRecords && this.rootRecords.length > 0 ?\n this.rootRecords[0].data[this.foreignKey] : null;\n if (id === rootRecPK) {\n // safeguard in case generated id matches the root foreign key.\n id = this.generateRowID();\n }\n row.key = id;\n row.data[this.primaryKey] = id;\n return { rowID: id, data: row.data, recordRef: row };\n }\n\n /** @hidden */\n public override deleteRowById(rowId: any): any {\n // if this is flat self-referencing data, and CascadeOnDelete is set to true\n // and if we have transactions we should start pending transaction. This allows\n // us in case of delete action to delete all child rows as single undo action\n const args: IRowDataCancelableEventArgs = {\n rowID: rowId,\n primaryKey: rowId,\n rowKey: rowId,\n cancel: false,\n rowData: this.getRowData(rowId),\n data: this.getRowData(rowId),\n oldValue: null,\n owner: this\n };\n this.rowDelete.emit(args);\n if (args.cancel) {\n return;\n }\n\n const record = this.gridAPI.deleteRowById(rowId);\n const key = record[this.primaryKey];\n if (record !== null && record !== undefined) {\n const rowDeletedEventArgs: IRowDataEventArgs = {\n data: record,\n rowData: record,\n owner: this,\n primaryKey: key,\n rowKey: key\n };\n this.rowDeleted.emit(rowDeletedEventArgs);\n }\n return record;\n }\n\n /**\n * Returns the `IgxTreeGridRow` by index.\n *\n * @example\n * ```typescript\n * const myRow = treeGrid.getRowByIndex(1);\n * ```\n * @param index\n */\n public getRowByIndex(index: number): RowType {\n if (index < 0 || index >= this.dataView.length) {\n return undefined;\n }\n return this.createRow(index);\n }\n\n /**\n * Returns the `RowType` object by the specified primary key.\n *\n * @example\n * ```typescript\n * const myRow = this.treeGrid.getRowByIndex(1);\n * ```\n * @param index\n */\n public getRowByKey(key: any): RowType {\n const rec = this.filteredSortedData ? this.primaryKey ? this.filteredSortedData.find(r => r[this.primaryKey] === key) :\n this.filteredSortedData.find(r => r === key) : undefined;\n const index = this.dataView.findIndex(r => r.data && r.data === rec);\n if (index < 0 || index >= this.filteredSortedData.length) {\n return undefined;\n }\n return new IgxTreeGridRow(this as any, index, rec);\n }\n\n /**\n * Returns the collection of all RowType for current page.\n *\n * @hidden @internal\n */\n public allRows(): RowType[] {\n return this.dataView.map((rec, index) => this.createRow(index));\n }\n\n /**\n * Returns the collection of `IgxTreeGridRow`s for current page.\n *\n * @hidden @internal\n */\n public dataRows(): RowType[] {\n return this.allRows().filter(row => row instanceof IgxTreeGridRow);\n }\n\n /**\n * Returns an array of the selected `IgxGridCell`s.\n *\n * @example\n * ```typescript\n * const selectedCells = this.grid.selectedCells;\n * ```\n */\n public get selectedCells(): CellType[] {\n return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n .reduce((a, b) => a.concat(b), []);\n }\n\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @example\n * ```typescript\n * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n * ```\n * @param rowIndex\n * @param columnField\n */\n public getCellByColumn(rowIndex: number, columnField: string): CellType {\n const row = this.getRowByIndex(rowIndex);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && row instanceof IgxTreeGridRow && column) {\n return new IgxGridCell(this as any, rowIndex, column);\n }\n }\n\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @remarks\n * Requires that the primaryKey property is set.\n * @example\n * ```typescript\n * grid.getCellByKey(1, 'index');\n * ```\n * @param rowSelector match any rowID\n * @param columnField\n */\n public getCellByKey(rowSelector: any, columnField: string): CellType {\n const row = this.getRowByKey(rowSelector);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && column) {\n return new IgxGridCell(this as any, row.index, column);\n }\n }\n\n public override pinRow(rowID: any, index?: number): boolean {\n const row = this.getRowByKey(rowID);\n return super.pinRow(rowID, index, row);\n }\n\n public override unpinRow(rowID: any): boolean {\n const row = this.getRowByKey(rowID);\n return super.unpinRow(rowID, row);\n }\n\n /** @hidden */\n public generateRowPath(rowId: any): any[] {\n const path: any[] = [];\n let record = this.records.get(rowId);\n\n while (record.parent) {\n path.push(record.parent.key);\n record = record.parent;\n }\n\n return path.reverse();\n }\n\n /** @hidden */\n public isTreeRow(record: any): boolean {\n return record.key !== undefined && record.data;\n }\n\n /** @hidden */\n public override getUnpinnedIndexById(id) {\n return this.unpinnedRecords.findIndex(x => x.data[this.primaryKey] === id);\n }\n\n /**\n * @hidden\n */\n public createRow(index: number, data?: any): RowType {\n let row: RowType;\n const dataIndex = this._getDataViewIndex(index);\n const rec: any = data ?? this.dataView[dataIndex];\n\n if (this.isSummaryRow(rec)) {\n row = new IgxSummaryRow(this as any, index, rec.summaries);\n }\n\n if (!row && rec) {\n const isTreeRow = this.isTreeRow(rec);\n const dataRec = isTreeRow ? rec.data : rec;\n const treeRow = isTreeRow ? rec : undefined;\n row = new IgxTreeGridRow(this as any, index, dataRec, treeRow);\n }\n\n return row;\n }\n\n protected override generateDataFields(data: any[]): string[] {\n return super.generateDataFields(data).filter(field => field !== this.childDataKey);\n }\n\n protected override transactionStatusUpdate(event: StateUpdateEvent) {\n let actions = [];\n if (event.origin === TransactionEventOrigin.REDO) {\n actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.DELETE) : [];\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n this.handleCascadeSelection(event);\n }\n } else if (event.origin === TransactionEventOrigin.UNDO) {\n actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.ADD) : [];\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n if (event.actions[0].transaction.type === 'add') {\n const rec = this.gridAPI.get_rec_by_id(event.actions[0].transaction.id);\n this.handleCascadeSelection(event, rec);\n } else {\n this.handleCascadeSelection(event);\n }\n }\n }\n if (actions.length) {\n for (const action of actions) {\n this.deselectChildren(action.transaction.id);\n }\n }\n super.transactionStatusUpdate(event);\n }\n\n protected findRecordIndexInView(rec) {\n return this.dataView.findIndex(x => x.data[this.primaryKey] === rec[this.primaryKey]);\n }\n\n /**\n * @hidden @internal\n */\n protected override getDataBasedBodyHeight(): number {\n return !this.flatData || (this.flatData.length < this._defaultTargetRecordNumber) ?\n 0 : this.defaultTargetBodyHeight;\n }\n\n /**\n * @hidden\n */\n protected override scrollTo(row: any | number, column: any | number): void {\n let delayScrolling = false;\n let record: ITreeGridRecord;\n\n if (typeof (row) !== 'number') {\n const rowData = row;\n const rowID = this.gridAPI.get_row_id(rowData);\n record = this.processedRecords.get(rowID);\n this.gridAPI.expand_path_to_record(record);\n\n if (this.paginator) {\n const rowIndex = this.processedExpandedFlatData.indexOf(rowData);\n const page = Math.floor(rowIndex / this.perPage);\n\n if (this.page !== page) {\n delayScrolling = true;\n this.page = page;\n }\n }\n }\n\n if (delayScrolling) {\n this.verticalScrollContainer.dataChanged.pipe(first()).subscribe(() => {\n this.scrollDirective(this.verticalScrollContainer,\n typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n });\n } else {\n this.scrollDirective(this.verticalScrollContainer,\n typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n }\n\n this.scrollToHorizontally(column);\n }\n\n protected override writeToData(rowIndex: number, value: any) {\n mergeObjects(this.flatData[rowIndex], value);\n }\n\n /**\n * @hidden\n */\n protected override initColumns(collection: IgxColumnComponent[], cb: (args: any) => void = null) {\n if (this.hasColumnLayouts) {\n // invalid configuration - tree grid should not allow column layouts\n // remove column layouts\n const nonColumnLayoutColumns = this.columns.filter((col) => !col.columnLayout && !col.columnLayoutChild);\n this.updateColumns(nonColumnLayoutColumns);\n }\n super.initColumns(collection, cb);\n }\n\n /**\n * @hidden @internal\n */\n protected override getGroupAreaHeight(): number {\n return this.treeGroupArea ? this.getComputedHeight(this.treeGroupArea.nativeElement) : 0;\n }\n\n /** {@link triggerPipes} will re-create pinnedData on CRUD operations */\n protected trackPinnedRowData(record: ITreeGridRecord) {\n // TODO FIX: pipeline data doesn't match end interface (¬_¬ )\n // return record.key || (record as any).rowID;\n return record;\n }\n\n /**\n * @description A recursive way to deselect all selected children of a given record\n * @param recordID ID of the record whose children to deselect\n * @hidden\n * @internal\n */\n private deselectChildren(recordID): void {\n const selectedChildren = [];\n // G.E. Apr 28, 2021 #9465 Records which are not in view can also be selected so we need to\n // deselect them as well, hence using 'records' map instead of getRowByKey() method which will\n // return only row components (i.e. records in view).\n const rowToDeselect = this.records.get(recordID);\n this.selectionService.deselectRowsWithNoEvent([recordID]);\n this.gridAPI.get_selected_children(rowToDeselect, selectedChildren);\n if (selectedChildren.length > 0) {\n selectedChildren.forEach(x => this.deselectChildren(x));\n }\n }\n\n private addChildRows(children: any[], parentID: any) {\n if (this.primaryKey && this.foreignKey) {\n for (const child of children) {\n child[this.foreignKey] = parentID;\n }\n this.data.push(...children);\n } else if (this.childDataKey) {\n let parent = this.records.get(parentID);\n let parentData = parent.data;\n\n if (this.transactions.enabled && this.transactions.getAggregatedChanges(true).length) {\n const path = [];\n while (parent) {\n path.push(parent.key);\n parent = parent.parent;\n }\n\n let collection = this.data;\n let record: any;\n for (let i = path.length - 1; i >= 0; i--) {\n const pid = path[i];\n record = collection.find(r => r[this.primaryKey] === pid);\n\n if (!record) {\n break;\n }\n collection = record[this.childDataKey];\n }\n if (record) {\n parentData = record;\n }\n }\n\n parentData[this.childDataKey] = children;\n }\n this.selectionService.clearHeaderCBState();\n this.pipeTrigger++;\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n // Force pipe triggering for building the data structure\n this.cdr.detectChanges();\n if (this.selectionService.isRowSelected(parentID)) {\n this.selectionService.rowSelection.delete(parentID);\n this.selectionService.selectRowsWithNoEvent([parentID]);\n }\n }\n }\n\n private loadChildrenOnRowExpansion(args: IRowToggleEventArgs) {\n if (this.loadChildrenOnDemand) {\n const parentID = args.rowID;\n\n if (args.expanded && !this._expansionStates.has(parentID)) {\n this.loadingRows.add(parentID);\n\n this.loadChildrenOnDemand(parentID, children => {\n this.loadingRows.delete(parentID);\n this.addChildRows(children, parentID);\n this.notifyChanges();\n });\n }\n }\n }\n\n private handleCascadeSelection(event: IRowDataEventArgs | StateUpdateEvent, rec: ITreeGridRecord = null) {\n // Wait for the change detection to update records through the pipes\n requestAnimationFrame(() => {\n if (rec === null) {\n rec = this.gridAPI.get_rec_by_id((event as StateUpdateEvent).actions[0].transaction.id);\n }\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n new Set([rec.parent]), rec.parent.key\n );\n this.notifyChanges();\n }\n });\n }\n}\n","<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n<ng-content select=\"igx-tree-grid-group-by-area,igc-tree-grid-group-by-area\"></ng-content>\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [width]=\"calcWidth\"\n [pinnedStartColumnCollection]=\"pinnedStartColumns\"\n [pinnedEndColumnCollection]=\"pinnedEndColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($event)\"\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" [attr.aria-activedescendant]=\"activeDescendant\" [attr.role]=\"dataView.length ? null : 'row'\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]='totalHeight' [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody (scroll)='preventContainerScroll($event)'>\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedStartWidth\"></span>\n }\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"this.verticalScrollContainer.dc.instance.scrollContainer\"\n [IgxScrollInertiaDirection]=\"this.verticalScrollContainer.dc.instance.scrollDirection\">\n @for (rowData of mergedDataInView; track rowData.record;) {\n <igx-tree-grid-row class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [treeRow]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:isRecordMerged(rowData):row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowData.index:pipeTrigger\" #row>\n </igx-tree-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (data\n | treeGridTransaction:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | treeGridNormalizeRecord:pipeTrigger\n | treeGridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger:true\n | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger:true\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData\n ) {\n @if (pinnedData.length > 0) {\n <div #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n @for (rowData of pinnedData; track trackPinnedRowData(rowData); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData\n | treeGridTransaction:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | treeGridHierarchizing:primaryKey:foreignKey:childDataKey:pipeTrigger\n | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger\n | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger\n | treeGridFlattening:expansionDepth:expansionStates:pipeTrigger\n | treeGridPaging:!!paginator:page:perPage:pipeTrigger\n | treeGridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | treeGridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]='verticalScroll'\n [igxForContainerSize]='calcHeight' [igxForItemSize]=\"renderedRowHeight\" #verticalScrollContainer\n (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n <ng-template [igxTemplateOutlet]='isSummaryRow(rowData) ? summary_template : record_template'\n [igxTemplateOutletContext]='getContext(rowData, rowIndex, false)'\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (cachedViewLoaded)='cachedViewLoaded($event)'>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-disabledRow=\"disabled\" let-rowData let-metaData=\"metaData\">\n <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:isRecordMerged(metaData):row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:isRecordMerged(metaData):row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row [gridID]=\"id\" [summaries]=\"rowData.summaries\"\n [firstCellIndentation]=\"rowData.cellIndentation\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" role=\"row\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n }\n </div>\n @if (moving && columnInDrag) {\n <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n }\n <div [hidden]='!hasVerticalScroll()' class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\"\n [style.height.px]='calcHeight'>\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=' isRowPinningToTop ? pinnedRowHeight : 0'></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]='calcHeight'>\n <ng-template igxGridFor [igxGridForOf]='[]' #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]='!isRowPinningToTop ? pinnedRowHeight : 0'></div>\n </div>\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]='snackbarDisplayTime'>{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div igxOverlayOutlet #igxBodyOverlayOutlet=\"overlay-outlet\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]='summaryRowHeight' #tfoot>\n <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\"\n (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row [style.width.px]='calcWidth' [style.height.px]='summaryRowHeight'\n [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n }\n <div class=\"igx-grid__tfoot-thumb\" [hidden]='!hasVerticalScroll()' [style.height.px]='summaryRowHeight'\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\" [style.width.px]='pinnedStartWidth' [style.min-width.px]='pinnedStartWidth'></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]='unpinnedWidth'>\n <ng-template igxGridFor [igxGridForOf]='[]' #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.width.px]='pinnedEndWidth' [style.min-width.px]='pinnedEndWidth' [hidden]=\"pinnedEndWidth === 0\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n@if (rowEditable) {\n <div igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.crudService.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{ this.resourceStrings.igx_grid_row_edit_text | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.isAddRow ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n context: { $implicit: !this.crudService.row?.isAddRow? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n <div #sink style=\"display: none;\"></div>\n <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip\"></ng-content>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\nimport { formatDate, GridColumnDataType, IGroupingExpression, IgxSorting } from 'igniteui-angular/core';\n\nconst HIDDEN_FIELD_NAME = '_Igx_Hidden_Data_';\n\n/**\n * @hidden\n * @internal\n */\nclass GroupByRecord {\n public key: string;\n public value: any;\n public groups: GroupByRecord[];\n public records: any[];\n}\n\nexport class ITreeGridAggregation {\n public field: string;\n public aggregate: (parent: any, children: any[]) => any;\n}\n\nexport class IgxGroupedTreeGridSorting extends IgxSorting {\n private static _instance: IgxGroupedTreeGridSorting = null;\n\n public static instance() {\n return this._instance || (this._instance = new IgxGroupedTreeGridSorting());\n }\n\n protected override getFieldValue(obj: any, key: string, isDate = false, isTime = false): any {\n const data = obj.data[HIDDEN_FIELD_NAME] ?\n obj.data.hasOwnProperty(key) ?\n obj.data :\n obj.data[HIDDEN_FIELD_NAME] :\n obj.data;\n\n return super.getFieldValue(data, key, isDate, isTime);\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'treeGridGrouping',\n standalone: true\n})\nexport class IgxTreeGridGroupingPipe implements PipeTransform {\n private grid: GridType;\n\n public transform(collection: any[],\n groupingExpressions: IGroupingExpression[],\n groupKey: string,\n childDataKey: string,\n grid: GridType,\n aggregations?: ITreeGridAggregation[]\n ): any[] {\n if (groupingExpressions.length === 0) {\n return collection;\n }\n\n if (groupKey?.toLowerCase() === childDataKey?.toLowerCase()) {\n throw new Error('Group key and child data key cannot be the same.');\n }\n\n this.grid = grid;\n\n const result = [];\n const groupedRecords = this.groupByMultiple(collection, groupingExpressions);\n this.flattenGrouping(groupedRecords, groupKey,\n childDataKey, result, aggregations);\n\n return result;\n }\n\n private flattenGrouping(groupRecords: GroupByRecord[],\n groupKey: string,\n childDataKey: string,\n data: any[],\n aggregations: ITreeGridAggregation[] = []) {\n for (const groupRecord of groupRecords) {\n const parent = {};\n const children = groupRecord.records;\n\n parent[childDataKey] = [];\n\n for (const aggregation of aggregations) {\n parent[aggregation.field] = aggregation.aggregate(parent, children);\n }\n\n parent[groupKey] = groupRecord.value + ` (${groupRecord.records.length})`;\n parent[HIDDEN_FIELD_NAME] = { [groupRecord.key]: groupRecord.value };\n data.push(parent);\n\n if (groupRecord.groups) {\n this.flattenGrouping(groupRecord.groups, groupKey, childDataKey,\n parent[childDataKey], aggregations);\n } else {\n parent[childDataKey] = children;\n }\n }\n }\n\n private groupByMultiple(array: any[], groupingExpressions: IGroupingExpression[], index = 0): GroupByRecord[] {\n const res = this.groupBy(array, groupingExpressions[index]);\n\n if (index + 1 < groupingExpressions.length) {\n for (const groupByRecord of res) {\n groupByRecord.groups = this.groupByMultiple(groupByRecord.records, groupingExpressions, index + 1);\n }\n }\n\n return res;\n }\n\n private groupBy(array: any[], groupingExpression: IGroupingExpression): GroupByRecord[] {\n const key = groupingExpression.fieldName;\n const column = this.grid?.getColumnByName(key);\n const isDateTime = column?.dataType === GridColumnDataType.Date ||\n column?.dataType === GridColumnDataType.DateTime ||\n column?.dataType === GridColumnDataType.Time;\n const map: Map<any, GroupByRecord> = new Map<any, GroupByRecord>();\n for (const record of array) {\n const value = isDateTime\n ? formatDate(record[key], column.pipeArgs.format, this.grid.locale)\n : record[key];\n\n let valueCase = value;\n let groupByRecord: GroupByRecord;\n\n if (groupingExpression.ignoreCase) {\n valueCase = value?.toString().toLowerCase();\n }\n if (map.has(valueCase)) {\n groupByRecord = map.get(valueCase);\n } else {\n groupByRecord = new GroupByRecord();\n groupByRecord.key = key;\n groupByRecord.value = value;\n groupByRecord.records = [];\n map.set(valueCase, groupByRecord);\n }\n\n groupByRecord.records.push(record);\n }\n\n return Array.from(map.values());\n }\n}\n","import { IgxTreeGridComponent } from './tree-grid.component';\nimport { IgxTreeGridGroupByAreaComponent } from './tree-grid-group-by-area.component';\nimport { IgxTreeGridGroupingPipe } from './tree-grid.grouping.pipe';\n\nexport * from './tree-grid.component';\nexport * from './tree-grid.grouping.pipe';\nexport * from './tree-grid-group-by-area.component';\nexport * from './tree-grid.grouping.pipe';\n\n/* Imports that cannot be resolved from IGX_GRID_COMMON_DIRECTIVES spread\n NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\n\nimport {\n IgxRowDirective,\n IgxRowEditTextDirective,\n IgxRowAddTextDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTabStopDirective,\n IgxGridFooterComponent,\n IgxAdvancedFilteringDialogComponent,\n IgxHeaderCollapsedIndicatorDirective,\n IgxHeaderExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxRowExpandedIndicatorDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxDragIndicatorIconDirective,\n IgxRowDragGhostDirective,\n IgxGridStateDirective,\n IgxGridHeaderComponent,\n IgxGridHeaderGroupComponent,\n IgxGridHeaderRowComponent,\n IgxFilterCellTemplateDirective,\n IgxSummaryTemplateDirective,\n IgxCellTemplateDirective,\n IgxCellValidationErrorDirective,\n IgxCellHeaderTemplateDirective,\n IgxCellFooterTemplateDirective,\n IgxCellEditorTemplateDirective,\n IgxCollapsibleIndicatorTemplateDirective,\n IgxColumnComponent,\n IgxColumnGroupComponent,\n IgxColumnLayoutComponent,\n IgxColumnRequiredValidatorDirective,\n IgxColumnMinValidatorDirective,\n IgxColumnMaxValidatorDirective,\n IgxColumnEmailValidatorDirective,\n IgxColumnMinLengthValidatorDirective,\n IgxColumnMaxLengthValidatorDirective,\n IgxColumnPatternValidatorDirective,\n IgxColumnActionsComponent,\n IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n IgxRowSelectorDirective,\n IgxGroupByRowSelectorDirective,\n IgxHeadSelectorDirective,\n IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective,\n IgxGridExcelStyleFilteringComponent,\n IgxExcelStyleHeaderComponent,\n IgxExcelStyleSortingComponent,\n IgxExcelStylePinningComponent,\n IgxExcelStyleHidingComponent,\n IgxExcelStyleSelectingComponent,\n IgxExcelStyleClearFiltersComponent,\n IgxExcelStyleConditionalFilterComponent,\n IgxExcelStyleMovingComponent,\n IgxExcelStyleSearchComponent,\n IgxExcelStyleColumnOperationsTemplateDirective,\n IgxExcelStyleFilterOperationsTemplateDirective,\n IgxExcelStyleLoadingValuesTemplateDirective,\n IgxGridActionButtonComponent,\n IgxGridActionsBaseDirective,\n IgxGridEditingActionsComponent,\n IgxGridPinningActionsComponent\n} from \"igniteui-angular/grids/core\";\nimport {\n IgxPaginatorComponent,\n IgxPageNavigationComponent,\n IgxPageSizeSelectorComponent,\n IgxPaginatorContentDirective,\n IgxPaginatorDirective\n} from 'igniteui-angular/paginator';\n\n/* NOTE: Tree grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TREE_GRID_DIRECTIVES = [\n IgxTreeGridComponent,\n IgxTreeGridGroupByAreaComponent,\n IgxTreeGridGroupingPipe,\n IgxRowAddTextDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTextDirective,\n IgxRowEditTabStopDirective,\n // IGX_GRID_COMMON_DIRECTIVES:\n IgxRowDirective,\n IgxGridFooterComponent,\n IgxAdvancedFilteringDialogComponent,\n IgxRowExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxHeaderExpandedIndicatorDirective,\n IgxHeaderCollapsedIndicatorDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxDragIndicatorIconDirective,\n IgxRowDragGhostDirective,\n IgxGridStateDirective,\n // IGX_GRID_ACTIONS\n IgxGridPinningActionsComponent,\n IgxGridEditingActionsComponent,\n IgxGridActionsBaseDirective,\n IgxGridActionButtonComponent,\n // IGX_GRID_HEADERS_DIRECTIVES:\n IgxGridHeaderComponent,\n IgxGridHeaderGroupComponent,\n IgxGridHeaderRowComponent,\n // IGX_GRID_COLUMN_DIRECTIVES:\n IgxFilterCellTemplateDirective,\n IgxSummaryTemplateDirective,\n IgxCellTemplateDirective,\n IgxCellValidationErrorDirective,\n IgxCellHeaderTemplateDirective,\n IgxCellFooterTemplateDirective,\n IgxCellEditorTemplateDirective,\n IgxCollapsibleIndicatorTemplateDirective,\n IgxColumnComponent,\n IgxColumnGroupComponent,\n IgxColumnLayoutComponent,\n // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n IgxColumnActionsComponent,\n IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n // IGX_GRID_SELECTION_DIRECTIVES:\n IgxRowSelectorDirective,\n IgxGroupByRowSelectorDirective,\n IgxHeadSelectorDirective,\n // IGX_GRID_TOOLBAR_DIRECTIVES:\n IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective,\n // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n IgxGridExcelStyleFilteringComponent,\n IgxExcelStyleHeaderComponent,\n IgxExcelStyleSortingComponent,\n IgxExcelStylePinningComponent,\n IgxExcelStyleHidingComponent,\n IgxExcelStyleSelectingComponent,\n IgxExcelStyleClearFiltersComponent,\n IgxExcelStyleConditionalFilterComponent,\n IgxExcelStyleMovingComponent,\n IgxExcelStyleSearchComponent,\n IgxExcelStyleColumnOperationsTemplateDirective,\n IgxExcelStyleFilterOperationsTemplateDirective,\n IgxExcelStyleLoadingValuesTemplateDirective,\n // IGX_PAGINATOR_DIRECTIVES:\n IgxColumnRequiredValidatorDirective,\n IgxColumnMinValidatorDirective,\n IgxColumnMaxValidatorDirective,\n IgxColumnEmailValidatorDirective,\n IgxColumnMinLengthValidatorDirective,\n IgxColumnMaxLengthValidatorDirective,\n IgxColumnPatternValidatorDirective,\n // IGX_PAGINATOR_DIRECTIVES:\n IgxPaginatorComponent,\n IgxPageNavigationComponent,\n IgxPageSizeSelectorComponent,\n IgxPaginatorContentDirective,\n IgxPaginatorDirective\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igniteui-angular-grids-tree-grid.mjs","sources":["../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-api.service.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.directives.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-selection.service.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.summary.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.filtering.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.pipes.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-cell.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-cell.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-row.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-row.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-group-by-area.component.ts","../../../projects/igniteui-angular/grids/core/src/grouping/group-by-area.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.grouping.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.module.ts","../../../projects/igniteui-angular/grids/tree-grid/src/igniteui-angular-grids-tree-grid.ts"],"sourcesContent":["import { GridBaseAPIService } from 'igniteui-angular/grids/core';\nimport {\n HierarchicalTransaction,\n TransactionType,\n State,\n IgxDataRecordSorting,\n TreeGridFilteringStrategy,\n cloneArray,\n DataUtil,\n FilterUtil,\n GridColumnDataType,\n IFilteringExpressionsTree,\n ISortingExpression,\n mergeObjects,\n ColumnType,\n ITreeGridRecord\n} from 'igniteui-angular/core';\nimport { Injectable } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\n\n@Injectable()\nexport class IgxTreeGridAPIService extends GridBaseAPIService<GridType> {\n\n public override get_all_data(transactions?: boolean): any[] {\n const grid = this.grid;\n let data = grid && grid.flatData ? grid.flatData : [];\n data = transactions ? grid.dataWithAddedInTransactionRows : data;\n return data;\n }\n\n public override get_summary_data(): any[] | null {\n const grid = this.grid;\n const data = grid.processedRootRecords?.filter(row => row.isFilteredOutParent === undefined || row.isFilteredOutParent === false)\n .map(rec => rec.data);\n if (data && grid.transactions.enabled) {\n const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);\n deletedRows.forEach(rowID => {\n const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n const index = tempData.indexOf(rowID);\n if (index !== -1) {\n data.splice(index, 1);\n }\n });\n }\n return data;\n }\n\n public override allow_expansion_state_change(rowID, expanded): boolean {\n const grid = this.grid;\n const row = grid.records.get(rowID);\n if (row.expanded === expanded ||\n ((!row.children || !row.children.length) && (!grid.loadChildrenOnDemand ||\n (grid.hasChildrenKey && !row.data[grid.hasChildrenKey])))) {\n return false;\n }\n return true;\n }\n\n public expand_path_to_record(record: ITreeGridRecord) {\n const grid = this.grid;\n const expandedStates = grid.expansionStates;\n\n while (record.parent) {\n record = record.parent;\n const expanded = this.get_row_expansion_state(record);\n\n if (!expanded) {\n expandedStates.set(record.key, true);\n }\n }\n grid.expansionStates = expandedStates;\n\n if (grid.rowEditable) {\n grid.gridAPI.crudService.endEdit(false);\n }\n }\n\n public override get_row_expansion_state(record: ITreeGridRecord): boolean {\n const grid = this.grid;\n const states = grid.expansionStates;\n const expanded = states.get(record.key);\n\n if (expanded !== undefined) {\n return expanded;\n } else {\n return record.children && record.children.length && record.level < grid.expansionDepth;\n }\n }\n\n public override should_apply_number_style(column: ColumnType): boolean {\n return column.dataType === GridColumnDataType.Number && column.visibleIndex !== 0;\n }\n\n public override deleteRowById(rowID: any): any {\n const treeGrid = this.grid;\n const flatDataWithCascadeOnDeleteAndTransactions =\n treeGrid.primaryKey &&\n treeGrid.foreignKey &&\n treeGrid.cascadeOnDelete &&\n treeGrid.transactions.enabled;\n\n if (flatDataWithCascadeOnDeleteAndTransactions) {\n treeGrid.transactions.startPending();\n }\n\n const record = super.deleteRowById(rowID);\n\n if (flatDataWithCascadeOnDeleteAndTransactions) {\n treeGrid.transactions.endPending(true);\n }\n\n return record;\n }\n\n public override deleteRowFromData(rowID: any, index: number) {\n const treeGrid = this.grid;\n const record = treeGrid.records.get(rowID);\n\n if (treeGrid.primaryKey && treeGrid.foreignKey) {\n index = treeGrid.primaryKey ?\n treeGrid.data.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n treeGrid.data.indexOf(rowID);\n super.deleteRowFromData(rowID, index);\n\n if (treeGrid.cascadeOnDelete) {\n if (record && record.children) {\n for (const child of record.children) {\n super.deleteRowById(child.key);\n }\n }\n }\n } else {\n const collection = record.parent ? record.parent.data[treeGrid.childDataKey] : treeGrid.data;\n index = treeGrid.primaryKey ?\n collection.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n collection.indexOf(rowID);\n\n const selectedChildren = [];\n this.get_selected_children(record, selectedChildren);\n if (selectedChildren.length > 0) {\n treeGrid.deselectRows(selectedChildren);\n }\n\n if (treeGrid.transactions.enabled) {\n const path = treeGrid.generateRowPath(rowID);\n treeGrid.transactions.add({\n id: rowID,\n type: TransactionType.DELETE,\n newValue: null,\n path\n } as HierarchicalTransaction,\n collection[index]\n );\n } else {\n collection.splice(index, 1);\n }\n this.grid.validation.clear(rowID);\n }\n }\n\n public get_selected_children(record: ITreeGridRecord, selectedRowIDs: any[]) {\n const grid = this.grid;\n if (!record.children || record.children.length === 0) {\n return;\n }\n for (const child of record.children) {\n if (grid.selectionService.isRowSelected(child.key)) {\n selectedRowIDs.push(child.key);\n }\n this.get_selected_children(child, selectedRowIDs);\n }\n }\n\n public override row_deleted_transaction(rowID: any): boolean {\n return this.row_deleted_parent(rowID) || super.row_deleted_transaction(rowID);\n }\n\n public override get_rec_by_id(rowID) {\n return this.grid.records.get(rowID);\n }\n\n /**\n * Returns the index of the record in the data view by pk or -1 if not found or primaryKey is not set.\n *\n * @param pk\n * @param dataCollection\n */\n public override get_rec_index_by_id(pk: string | number, dataCollection?: any[]): number {\n dataCollection = dataCollection || this.grid.data;\n return this.grid.primaryKey ? dataCollection.findIndex(rec => rec.data[this.grid.primaryKey] === pk) : -1;\n }\n\n public override addRowToData(data: any, parentRowID?: any) {\n if (parentRowID !== undefined && parentRowID !== null) {\n\n const state = this.grid.transactions.getState(parentRowID);\n // we should not allow adding of rows as child of deleted row\n if (state && state.type === TransactionType.DELETE) {\n throw Error(`Cannot add child row to deleted parent row`);\n }\n\n const parentRecord = this.grid.records.get(parentRowID);\n\n if (!parentRecord) {\n throw Error('Invalid parent row ID!');\n }\n this.grid.summaryService.clearSummaryCache({ rowID: parentRecord.key });\n if (this.grid.primaryKey && this.grid.foreignKey) {\n data[this.grid.foreignKey] = parentRowID;\n super.addRowToData(data);\n } else {\n const parentData = parentRecord.data;\n const childKey = this.grid.childDataKey;\n if (this.grid.transactions.enabled) {\n const rowId = this.grid.primaryKey ? data[this.grid.primaryKey] : data;\n const path: any[] = [];\n path.push(...this.grid.generateRowPath(parentRowID));\n path.push(parentRowID);\n this.grid.transactions.add({\n id: rowId,\n path,\n newValue: data,\n type: TransactionType.ADD\n } as HierarchicalTransaction,\n null);\n } else {\n if (!parentData[childKey]) {\n parentData[childKey] = [];\n }\n parentData[childKey].push(data);\n }\n }\n } else {\n super.addRowToData(data);\n }\n }\n\n public override filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[] {\n const records = this.filterTreeDataByExpressions(expressionsTree);\n const data = [];\n\n this.getFlatDataFromFilteredRecords(records, data);\n\n return data;\n }\n\n public override sortDataByExpressions(data: ITreeGridRecord[], expressions: ISortingExpression[]) {\n const records: ITreeGridRecord[] = DataUtil.sort(\n cloneArray(data),\n expressions,\n this.grid.sortStrategy ?? new IgxDataRecordSorting(),\n this.grid);\n return records.map(r => r.data);\n }\n\n public filterTreeDataByExpressions(expressionsTree: IFilteringExpressionsTree): ITreeGridRecord[] {\n let records = this.grid.rootRecords;\n\n if (expressionsTree.filteringOperands.length) {\n const state = {\n expressionsTree,\n strategy: this.grid.filterStrategy ?? new TreeGridFilteringStrategy()\n };\n records = FilterUtil.filter(cloneArray(records), state, this.grid);\n }\n\n return records;\n }\n\n protected override update_row_in_array(value: any, rowID: any, index: number) {\n const grid = this.grid;\n if (grid.primaryKey && grid.foreignKey) {\n super.update_row_in_array(value, rowID, index);\n } else {\n const record = grid.records.get(rowID);\n const childData = record.parent ? record.parent.data[grid.childDataKey] : grid.data;\n index = grid.primaryKey ? childData.map(c => c[grid.primaryKey]).indexOf(rowID) :\n childData.indexOf(rowID);\n childData[index] = value;\n }\n }\n\n /**\n * Updates related row of provided grid's data source with provided new row value\n *\n * @param grid Grid to update data for\n * @param rowID ID of the row to update\n * @param rowValueInDataSource Initial value of the row as it is in data source\n * @param rowCurrentValue Current value of the row as it is with applied previous transactions\n * @param rowNewValue New value of the row\n */\n protected override updateData(\n grid: GridType,\n rowID: any,\n rowValueInDataSource: any,\n rowCurrentValue: any,\n rowNewValue: { [x: string]: any }) {\n if (grid.transactions.enabled) {\n const path = grid.generateRowPath(rowID);\n const transaction: HierarchicalTransaction = {\n id: rowID,\n type: TransactionType.UPDATE,\n newValue: rowNewValue,\n path\n };\n grid.transactions.add(transaction, rowCurrentValue);\n } else {\n mergeObjects(rowValueInDataSource, rowNewValue);\n }\n }\n\n private row_deleted_parent(rowID: any): boolean {\n const grid = this.grid;\n if (!grid) {\n return false;\n }\n if ((grid.cascadeOnDelete && grid.foreignKey) || grid.childDataKey) {\n let node = grid.records.get(rowID);\n while (node) {\n const state: State = grid.transactions.getState(node.key);\n if (state && state.type === TransactionType.DELETE) {\n return true;\n }\n node = node.parent;\n }\n }\n return false;\n }\n\n private getFlatDataFromFilteredRecords(records: ITreeGridRecord[], data: any[]) {\n if (!records || records.length === 0) {\n return;\n }\n\n for (const record of records) {\n if (!record.isFilteredOutParent) {\n data.push(record);\n }\n this.getFlatDataFromFilteredRecords(record.children, data);\n }\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n selector: '[igxRowLoadingIndicator]',\n standalone: true\n})\nexport class IgxRowLoadingIndicatorTemplateDirective {\n public template = inject<TemplateRef<any>>(TemplateRef);\n}\n","import { Injectable } from '@angular/core';\nimport { GridSelectionMode } from 'igniteui-angular/grids/core';\nimport { IgxGridSelectionService } from 'igniteui-angular/grids/core';\nimport { ITreeGridRecord } from 'igniteui-angular/core';\n\n@Injectable()\nexport class IgxTreeGridSelectionService extends IgxGridSelectionService {\n private rowsToBeSelected: Set<any>;\n private rowsToBeIndeterminate: Set<any>;\n\n /** Select specified rows. No event is emitted. */\n public override selectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?): void {\n if (this.grid && this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.cascadeSelectRowsWithNoEvent(rowIDs, clearPrevSelection);\n return;\n }\n super.selectRowsWithNoEvent(rowIDs, clearPrevSelection);\n }\n\n /** Deselect specified rows. No event is emitted. */\n public override deselectRowsWithNoEvent(rowIDs: any[]): void {\n if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.cascadeDeselectRowsWithNoEvent(rowIDs);\n return;\n }\n super.deselectRowsWithNoEvent(rowIDs);\n }\n\n public override emitRowSelectionEvent(newSelection, added, removed, event?): boolean {\n if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.emitCascadeRowSelectionEvent(newSelection, added, removed, event);\n return;\n }\n\n super.emitRowSelectionEvent(newSelection, added, removed, event);\n }\n\n public updateCascadeSelectionOnFilterAndCRUD(\n parents: Set<any>,\n crudRowID?: any,\n visibleRowIDs: Set<any> = null) {\n if (visibleRowIDs === null) {\n // if the tree grid has flat structure\n // do not explicitly handle the selection state of the rows\n if (!parents.size) {\n return;\n }\n visibleRowIDs = new Set(this.getRowIDs(this.allData));\n this.rowsToBeSelected = new Set(this.rowSelection);\n this.rowsToBeIndeterminate = new Set(this.indeterminateRows);\n if (crudRowID) {\n this.rowSelection.delete(crudRowID);\n }\n }\n if (!parents.size) {\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n // TODO: emit selectionChangeD event, calculate its args through the handleAddedAndRemovedArgs method\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n return;\n }\n const newParents = new Set<any>();\n parents.forEach(parent => {\n this.handleRowSelectionState(parent, visibleRowIDs);\n if (parent && parent.parent) {\n newParents.add(parent.parent);\n }\n });\n this.updateCascadeSelectionOnFilterAndCRUD(newParents, null, visibleRowIDs);\n }\n\n private cascadeSelectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?: boolean): void {\n if (clearPrevSelection) {\n this.indeterminateRows.clear();\n this.rowSelection.clear();\n this.calculateRowsNewSelectionState({ added: rowIDs, removed: [] });\n } else {\n const oldSelection = this.getSelectedRows();\n const newSelection = [...oldSelection, ...rowIDs];\n const args = { oldSelection, newSelection };\n\n // retrieve only the rows without their parents/children which has to be added to the selection\n this.handleAddedAndRemovedArgs(args);\n\n this.calculateRowsNewSelectionState(args);\n }\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n }\n\n private cascadeDeselectRowsWithNoEvent(rowIDs: any[]): void {\n const args = { added: [], removed: rowIDs };\n this.calculateRowsNewSelectionState(args);\n\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n }\n\n public get selectionService(): IgxGridSelectionService {\n return this.grid.selectionService;\n }\n\n private emitCascadeRowSelectionEvent(newSelection, added, removed, event?): boolean {\n const currSelection = this.getSelectedRows();\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n\n const args = {\n owner: this.grid, oldSelection: this.getSelectedRowsData(), newSelection,\n added, removed, event, cancel: false\n };\n\n this.calculateRowsNewSelectionState(args, !!this.grid.primaryKey);\n args.newSelection = Array.from(this.grid.gridAPI.get_all_data().filter(r => this.rowsToBeSelected.has(this.grid.primaryKey ? r[this.grid.primaryKey] : r)));\n\n // retrieve rows/parents/children which has been added/removed from the selection\n this.handleAddedAndRemovedArgs(args);\n\n this.grid.rowSelectionChanging.emit(args);\n\n if (args.cancel) {\n return;\n }\n const newSelectionIDs = args.newSelection.map(r => this.grid.primaryKey? r[this.grid.primaryKey] : r)\n // if args.newSelection hasn't been modified\n if (this.areEqualCollections(Array.from(this.rowsToBeSelected), newSelectionIDs)) {\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next(this.getSelectedRows());\n } else {\n // select the rows within the modified args.newSelection with no event\n this.cascadeSelectRowsWithNoEvent(newSelectionIDs, true);\n }\n }\n\n\n /**\n * retrieve the rows which should be added/removed to/from the old selection\n */\n private handleAddedAndRemovedArgs(args: any) {\n const newSelectionSet = new Set(args.newSelection);\n const oldSelectionSet = new Set(args.oldSelection);\n args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));\n args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));\n }\n\n /**\n * adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set\n *\n * @param rowsToBeProcessed set of the rows (without their parents/children) to be selected/deselected\n * @param visibleRowIDs list of all visible rowIds\n * @returns a new set with all direct parents of the rows within rowsToBeProcessed set\n */\n private collectRowsChildrenAndDirectParents(rowsToBeProcessed: Set<any>, visibleRowIDs: Set<any>, adding: boolean, shouldConvert: boolean): Set<any> {\n const processedRowsParents = new Set<any>();\n Array.from(rowsToBeProcessed).forEach((row) => {\n const rowID = shouldConvert ? row[this.grid.primaryKey] : row;\n this.selectDeselectRow(rowID, adding);\n const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);\n const rowAndAllChildren = this.get_all_children(rowTreeRecord);\n rowAndAllChildren.forEach(r => {\n if (visibleRowIDs.has(r.key)) {\n this.selectDeselectRow(r.key, adding);\n }\n });\n if (rowTreeRecord && rowTreeRecord.parent) {\n processedRowsParents.add(rowTreeRecord.parent);\n }\n });\n return processedRowsParents;\n }\n\n\n /**\n * populates the rowsToBeSelected and rowsToBeIndeterminate sets\n * with the rows which will be eventually in selected/indeterminate state\n */\n private calculateRowsNewSelectionState(args: any, shouldConvert = false) {\n this.rowsToBeSelected = new Set<any>(args.oldSelection ? shouldConvert ? args.oldSelection.map(r => r[this.grid.primaryKey]) : args.oldSelection : this.getSelectedRows());\n this.rowsToBeIndeterminate = new Set<any>(this.getIndeterminateRows());\n\n const visibleRowIDs = new Set(this.getRowIDs(this.allData));\n\n const removed = new Set(args.removed);\n const added = new Set(args.added);\n\n if (removed && removed.size) {\n let removedRowsParents = new Set<any>();\n\n removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false, shouldConvert);\n\n Array.from(removedRowsParents).forEach((parent) => {\n this.handleParentSelectionState(parent, visibleRowIDs);\n });\n }\n\n if (added && added.size) {\n let addedRowsParents = new Set<any>();\n\n addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true, shouldConvert);\n\n Array.from(addedRowsParents).forEach((parent) => {\n this.handleParentSelectionState(parent, visibleRowIDs);\n });\n }\n }\n\n /**\n * recursively handle the selection state of the direct and indirect parents\n */\n private handleParentSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n if (!treeRow) {\n return;\n }\n this.handleRowSelectionState(treeRow, visibleRowIDs);\n if (treeRow.parent) {\n this.handleParentSelectionState(treeRow.parent, visibleRowIDs);\n }\n }\n\n /**\n * Handle the selection state of a given row based the selection states of its direct children\n */\n private handleRowSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n let visibleChildren = [];\n if (treeRow && treeRow.children) {\n visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.key));\n }\n if (visibleChildren.length) {\n if (visibleChildren.every(row => this.rowsToBeSelected.has(row.key))) {\n this.selectDeselectRow(treeRow.key, true);\n } else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.key) || this.rowsToBeIndeterminate.has(row.key))) {\n this.rowsToBeIndeterminate.add(treeRow.key);\n this.rowsToBeSelected.delete(treeRow.key);\n } else {\n this.selectDeselectRow(treeRow.key, false);\n }\n } else {\n // if the children of the row has been deleted and the row was selected do not change its state\n if (this.isRowSelected(treeRow.key)) {\n this.selectDeselectRow(treeRow.key, true);\n } else {\n this.selectDeselectRow(treeRow.key, false);\n }\n }\n }\n\n private get_all_children(record: ITreeGridRecord): any[] {\n const children = [];\n if (record && record.children && record.children.length) {\n for (const child of record.children) {\n children.push(...this.get_all_children(child));\n children.push(child);\n }\n }\n return children;\n\n }\n\n private selectDeselectRow(rowID: any, select: boolean) {\n if (select) {\n this.rowsToBeSelected.add(rowID);\n this.rowsToBeIndeterminate.delete(rowID);\n } else {\n this.rowsToBeSelected.delete(rowID);\n this.rowsToBeIndeterminate.delete(rowID);\n }\n }\n\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE, GridSummaryPosition } from 'igniteui-angular/grids/core';\nimport { GridSummaryCalculationMode, ISummaryRecord, ITreeGridRecord } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n name: 'treeGridSummary',\n standalone: true\n})\nexport class IgxTreeGridSummaryPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(flatData: ITreeGridRecord[],\n hasSummary: boolean,\n summaryCalculationMode: GridSummaryCalculationMode,\n summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean, _: number, __: number): any[] {\n\n if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {\n return flatData;\n }\n\n return this.addSummaryRows(this.grid, flatData, summaryPosition, showSummaryOnCollapse);\n }\n\n private addSummaryRows(grid: GridType, collection: ITreeGridRecord[],\n summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean): any[] {\n const recordsWithSummary = [];\n const maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight();\n\n for (const record of collection) {\n recordsWithSummary.push(record);\n\n const isCollapsed = !record.expanded && record.children && record.children.length > 0 && showSummaryOnCollapse;\n if (isCollapsed) {\n let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, record.key, childData);\n const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n const summaryRecord: ISummaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: record.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n }\n const isExpanded = record.children && record.children.length > 0 && record.expanded;\n if (summaryPosition === GridSummaryPosition.bottom && !isExpanded) {\n let childRecord = record;\n let parent = record.parent;\n\n while (parent) {\n const children = parent.children;\n\n if (children[children.length - 1] === childRecord ) {\n let childData = children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, parent.key, childData);\n const summaries = grid.summaryService.calculateSummaries(parent.key, childData);\n const summaryRecord: ISummaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: parent.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n\n childRecord = parent;\n parent = childRecord.parent;\n } else {\n break;\n }\n }\n } else if (summaryPosition === GridSummaryPosition.top && isExpanded) {\n let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, record.key, childData);\n const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n const summaryRecord: ISummaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: record.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n }\n }\n return recordsWithSummary;\n }\n\n private removeDeletedRecord(grid, rowId, data) {\n if (!grid.transactions.enabled || !grid.cascadeOnDelete) {\n return data;\n }\n const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);\n let row = grid.records.get(rowId);\n if (!row && deletedRows.lenght === 0) {\n return [];\n }\n row = row.children ? row : row.parent;\n while (row) {\n rowId = row.key;\n if (deletedRows.indexOf(rowId) !== -1) {\n return [];\n }\n row = row.parent;\n }\n deletedRows.forEach(rowID => {\n const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n const index = tempData.indexOf(rowID);\n if (index !== -1) {\n data.splice(index, 1);\n }\n });\n return data;\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree, IFilteringState, IFilteringStrategy, ITreeGridRecord, TreeGridFilteringStrategy } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n name: 'treeGridFiltering',\n standalone: true\n})\nexport class IgxTreeGridFilteringPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(hierarchyData: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n filterStrategy: IFilteringStrategy,\n advancedFilteringExpressionsTree: IFilteringExpressionsTree,\n _: number, __: number, pinned?): ITreeGridRecord[] {\n const state: IFilteringState = {\n expressionsTree,\n advancedExpressionsTree: advancedFilteringExpressionsTree,\n strategy: new TreeGridFilteringStrategy()\n };\n\n if (filterStrategy) {\n state.strategy = filterStrategy;\n }\n\n if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n this.grid.setFilteredData(null, pinned);\n return hierarchyData;\n }\n\n const result = this.filter(hierarchyData, state, this.grid);\n const filteredData: any[] = [];\n this.expandAllRecursive(this.grid, result, this.grid.expansionStates, filteredData);\n this.grid.setFilteredData(filteredData, pinned);\n\n return result;\n }\n\n private expandAllRecursive(grid: GridType, data: ITreeGridRecord[],\n expandedStates: Map<any, boolean>, filteredData: any[]) {\n for (const rec of data) {\n filteredData.push(rec.data);\n\n if (rec.children && rec.children.length > 0) {\n expandedStates.set(rec.key, true);\n this.expandAllRecursive(grid, rec.children, expandedStates, filteredData);\n }\n }\n }\n\n private filter(data: ITreeGridRecord[], state: IFilteringState, grid?: GridType): ITreeGridRecord[] {\n return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\nimport { cloneArray, cloneHierarchicalArray, DataUtil, IGroupingExpression, ISortingExpression, TransactionType, IGridSortingStrategy, ITreeGridRecord } from 'igniteui-angular/core';\nimport { IgxAddRow } from 'igniteui-angular/grids/core';\n\n/**\n * @hidden\n */\n@Pipe({\n name: 'treeGridHierarchizing',\n standalone: true\n})\nexport class IgxTreeGridHierarchizingPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: any[], primaryKey: string, foreignKey: string, childDataKey: string, _: number): ITreeGridRecord[] {\n let hierarchicalRecords: ITreeGridRecord[] = [];\n const treeGridRecordsMap = new Map<any, ITreeGridRecord>();\n const flatData: any[] = [];\n\n if (!collection || !collection.length) {\n this.grid.flatData = collection;\n this.grid.records = treeGridRecordsMap;\n this.grid.rootRecords = collection;\n return collection;\n }\n\n if (childDataKey) {\n hierarchicalRecords = this.hierarchizeRecursive(collection, primaryKey, childDataKey, undefined,\n flatData, 0, treeGridRecordsMap);\n } else if (primaryKey) {\n hierarchicalRecords = this.hierarchizeFlatData(collection, primaryKey, foreignKey, treeGridRecordsMap, flatData);\n }\n\n this.grid.flatData = this.grid.transactions.enabled ?\n flatData.filter(rec => {\n const state = this.grid.transactions.getState(this.getRowID(primaryKey, rec));\n return !state || state.type !== TransactionType.ADD;\n }) : flatData;\n this.grid.records = treeGridRecordsMap;\n this.grid.rootRecords = hierarchicalRecords;\n return hierarchicalRecords;\n }\n\n private getRowID(primaryKey: any, rowData: any) {\n return primaryKey ? rowData[primaryKey] : rowData;\n }\n\n /**\n * Converts a flat array of data into a hierarchical (tree) structure,\n * preserving the original order of the records among siblings.\n *\n * It uses a two-pass approach:\n * 1. Creates all ITreeGridRecord objects and populates the Map for quick lookup.\n * 2. Links the records by iterating again, ensuring children are added to\n * their parent's children array in the order they appeared in the\n * original collection.\n *\n * @param collection The flat array of data to be hierarchized. This is the array whose order should be preserved.\n * @param primaryKey The name of the property in the data objects that serves as the unique identifier (e.g., 'id').\n * @param foreignKey The name of the property in the data objects that links to the parent's primary key (e.g., 'parentId').\n * @param map A pre-existing Map object (key: primaryKey value, value: ITreeGridRecord) used to store and quickly look up all created records.\n * @param flatData The original flat data array. Used for passing to the setIndentationLevels method (not directly used for hierarchy building).\n * @returns An array of ITreeGridRecord objects representing the root nodes of the hierarchy, ordered as they appeared in the original collection.\n */\n private hierarchizeFlatData(\n collection: any[],\n primaryKey: string,\n foreignKey: string,\n map: Map<any, ITreeGridRecord>,\n flatData: any[]\n ): ITreeGridRecord[] {\n collection.forEach(row => {\n const record: ITreeGridRecord = {\n key: this.getRowID(primaryKey, row),\n data: row,\n children: []\n };\n map.set(row[primaryKey], record);\n });\n\n const result: ITreeGridRecord[] = [];\n collection.forEach(row => {\n const record: ITreeGridRecord = map.get(row[primaryKey])!;\n const parent = map.get(row[foreignKey]);\n\n if (parent) {\n record.parent = parent;\n parent.children.push(record);\n } else {\n result.push(record);\n }\n });\n\n this.setIndentationLevels(result, 0, flatData);\n\n return result;\n }\n\n private setIndentationLevels(collection: ITreeGridRecord[], indentationLevel: number, flatData: any[]) {\n for (const record of collection) {\n record.level = indentationLevel;\n record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n flatData.push(record.data);\n\n if (record.children && record.children.length > 0) {\n this.setIndentationLevels(record.children, indentationLevel + 1, flatData);\n }\n }\n }\n\n private hierarchizeRecursive(collection: any[], primaryKey: string, childDataKey: string,\n parent: ITreeGridRecord, flatData: any[], indentationLevel: number, map: Map<any, ITreeGridRecord>): ITreeGridRecord[] {\n const result: ITreeGridRecord[] = [];\n\n for (const item of collection) {\n const record: ITreeGridRecord = {\n key: this.getRowID(primaryKey, item),\n data: item,\n parent,\n level: indentationLevel\n };\n record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n flatData.push(item);\n map.set(record.key, record);\n record.children = item[childDataKey] ?\n this.hierarchizeRecursive(item[childDataKey], primaryKey, childDataKey, record, flatData, indentationLevel + 1, map) :\n undefined;\n result.push(record);\n }\n\n return result;\n }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n name: 'treeGridFlattening',\n standalone: true\n})\nexport class IgxTreeGridFlatteningPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: ITreeGridRecord[],\n expandedLevels: number, expandedStates: Map<any, boolean>, _: number): any[] {\n\n const data: ITreeGridRecord[] = [];\n\n this.grid.processedRootRecords = collection;\n this.grid.processedRecords = new Map<any, ITreeGridRecord>();\n\n this.getFlatDataRecursive(collection, data, expandedLevels, expandedStates, true);\n\n this.grid.processedExpandedFlatData = data.map(r => r.data);\n\n return data;\n }\n\n private getFlatDataRecursive(collection: ITreeGridRecord[], data: ITreeGridRecord[],\n expandedLevels: number, expandedStates: Map<any, boolean>, parentExpanded: boolean) {\n if (!collection || !collection.length) {\n return;\n }\n\n for (const hierarchicalRecord of collection) {\n if (parentExpanded) {\n data.push(hierarchicalRecord);\n }\n\n hierarchicalRecord.expanded = this.grid.gridAPI.get_row_expansion_state(hierarchicalRecord);\n\n this.updateNonProcessedRecordExpansion(this.grid, hierarchicalRecord);\n\n this.grid.processedRecords.set(hierarchicalRecord.key, hierarchicalRecord);\n\n this.getFlatDataRecursive(hierarchicalRecord.children, data, expandedLevels,\n expandedStates, parentExpanded && hierarchicalRecord.expanded);\n }\n }\n\n private updateNonProcessedRecordExpansion(grid: GridType, record: ITreeGridRecord) {\n const rec = grid.records.get(record.key);\n rec.expanded = record.expanded;\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'treeGridSorting',\n standalone: true\n})\nexport class IgxTreeGridSortingPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(\n hierarchicalData: ITreeGridRecord[],\n sortExpressions: ISortingExpression[],\n groupExpressions: IGroupingExpression[],\n sorting: IGridSortingStrategy,\n _: number,\n pinned?: boolean): ITreeGridRecord[] {\n\n const expressions = groupExpressions ? groupExpressions.concat(sortExpressions) : sortExpressions;\n let result: ITreeGridRecord[];\n if (!expressions.length) {\n result = hierarchicalData;\n } else {\n result = DataUtil.treeGridSort(hierarchicalData, expressions, sorting, this.grid);\n }\n\n const filteredSortedData = [];\n this.flattenTreeGridRecords(result, filteredSortedData);\n this.grid.setFilteredSortedData(filteredSortedData, pinned);\n\n return result;\n }\n\n private flattenTreeGridRecords(records: ITreeGridRecord[], flatData: any[]) {\n if (records && records.length) {\n for (const record of records) {\n flatData.push(record.data);\n this.flattenTreeGridRecords(record.children, flatData);\n }\n }\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'treeGridPaging',\n standalone: true\n})\nexport class IgxTreeGridPagingPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: ITreeGridRecord[], enabled: boolean, page = 0, perPage = 15, _: number): ITreeGridRecord[] {\n if (!enabled || this.grid.pagingMode !== 'local') {\n return collection;\n }\n\n const len = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.length;\n const totalPages = Math.ceil(len / perPage);\n\n const state = {\n index: (totalPages > 0 && page >= totalPages) ? totalPages - 1 : page,\n recordsPerPage: perPage\n };\n\n const result: ITreeGridRecord[] = DataUtil.page(cloneArray(collection), state, len);\n this.grid.pagingState = state;\n this.grid.page = state.index;\n\n return result;\n }\n}\n/** @hidden */\n@Pipe({\n name: 'treeGridTransaction',\n standalone: true\n})\nexport class IgxTreeGridTransactionPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: any[], _: number): any[] {\n\n if (this.grid.transactions.enabled) {\n const aggregatedChanges = this.grid.transactions.getAggregatedChanges(true);\n if (aggregatedChanges.length > 0) {\n const primaryKey = this.grid.primaryKey;\n if (!primaryKey) {\n return collection;\n }\n\n const childDataKey = this.grid.childDataKey;\n\n if (childDataKey) {\n const hierarchicalDataClone = cloneHierarchicalArray(collection, childDataKey);\n return DataUtil.mergeHierarchicalTransactions(\n hierarchicalDataClone,\n aggregatedChanges,\n childDataKey,\n this.grid.primaryKey,\n this.grid.dataCloneStrategy\n );\n } else {\n const flatDataClone = cloneArray(collection);\n return DataUtil.mergeTransactions(\n flatDataClone,\n aggregatedChanges,\n this.grid.primaryKey,\n this.grid.dataCloneStrategy);\n }\n }\n }\n return collection;\n }\n}\n\n/**\n * This pipe maps the original record to ITreeGridRecord format used in TreeGrid.\n */\n@Pipe({\n name: 'treeGridNormalizeRecord',\n standalone: true\n})\nexport class IgxTreeGridNormalizeRecordsPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(_: any[], __: number): any[] {\n const primaryKey = this.grid.primaryKey;\n // using flattened data because origin data may be hierarchical.\n const flatData = this.grid.flatData;\n const res = flatData ? flatData.map(rec =>\n ({\n rowID: this.grid.primaryKey ? rec[primaryKey] : rec,\n data: rec,\n level: 0,\n children: []\n })) : [];\n return res;\n }\n}\n\n@Pipe({\n name: 'treeGridAddRow',\n standalone: true\n})\nexport class IgxTreeGridAddRowPipe implements PipeTransform {\n private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n public transform(collection: any, isPinned = false, _pipeTrigger: number) {\n if (!this.grid.rowEditable || !this.grid.crudService.row || !this.grid.crudService.row.isAddRow ||\n !this.grid.gridAPI.crudService.addRowParent || isPinned !== this.grid.gridAPI.crudService.addRowParent.isPinned) {\n return collection;\n }\n const copy = collection.slice(0);\n const rec = (this.grid.crudService.row as IgxAddRow).recordRef;\n if (this.grid.crudService.addRowParent.isPinned) {\n const parentRowIndex = copy.findIndex(record => record.rowID === this.grid.crudService.addRowParent.rowID);\n copy.splice(parentRowIndex + 1, 0, rec);\n } else {\n copy.splice(this.grid.crudService.row.index, 0, rec);\n }\n this.grid.records.set(rec.key, rec);\n return copy;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input\n} from '@angular/core';\nimport { NgClass, NgStyle, NgTemplateOutlet, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe } from '@angular/common';\n\nimport { IgxTreeGridRow } from 'igniteui-angular/grids/core';\nimport { RowType } from 'igniteui-angular/grids/core';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from 'igniteui-angular/grids/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { HammerGesturesManager } from 'igniteui-angular/core';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport { IgxDateTimeEditorDirective, IgxFocusDirective, IgxTextHighlightDirective, IgxTextSelectionDirective, IgxTooltipDirective, IgxTooltipTargetDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { IgxGridExpandableCellComponent } from 'igniteui-angular/grids/grid';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-tree-grid-cell',\n templateUrl: 'tree-cell.component.html',\n providers: [HammerGesturesManager],\n imports: [\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n DecimalPipe,\n PercentPipe,\n CurrencyPipe,\n DatePipe,\n IgxChipComponent,\n IgxTextHighlightDirective,\n IgxIconComponent,\n ReactiveFormsModule,\n IgxInputGroupComponent,\n IgxInputDirective,\n IgxFocusDirective,\n IgxCheckboxComponent,\n IgxDatePickerComponent,\n IgxTimePickerComponent,\n IgxDateTimeEditorDirective,\n IgxPrefixDirective,\n IgxSuffixDirective,\n IgxCircularProgressBarComponent,\n IgxTooltipTargetDirective,\n IgxTooltipDirective,\n IgxGridCellImageAltPipe,\n IgxStringReplacePipe,\n IgxColumnFormatterPipe,\n IgxTextSelectionDirective\n ]\n})\nexport class IgxTreeGridCellComponent extends IgxGridExpandableCellComponent {\n\n /**\n * @hidden\n */\n @Input()\n public level = 0;\n\n /**\n * @hidden\n */\n @Input()\n public showIndicator = false;\n\n /**\n * @hidden\n */\n @Input()\n public isLoading: boolean;\n\n /**\n * Gets the row of the cell.\n * ```typescript\n * let cellRow = this.cell.row;\n * ```\n *\n * @memberof IgxGridCellComponent\n */\n @Input()\n public override get row(): RowType {\n // TODO: Fix types\n return new IgxTreeGridRow(this.grid as any, this.intRow.index, this.intRow.data);\n }\n\n /**\n * @hidden\n */\n public override toggle(event: Event) {\n event.stopPropagation();\n this.grid.gridAPI.set_row_expansion_state(this.intRow.key, !this.intRow.expanded, event);\n }\n\n /**\n * @hidden\n */\n public onLoadingDblClick(event: Event) {\n event.stopPropagation();\n }\n}\n","<ng-template #defaultPinnedIndicator>\n @if (displayPinnedChip) {\n <igx-chip\n class=\"igx-grid__td--pinned-chip\"\n [disabled]=\"true\"\n [style.--ig-size]=\"1\"\n >{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n }\n</ng-template>\n<ng-template #defaultCell>\n @if (column.dataType !== 'boolean' && column.dataType !== 'image' || (column.dataType === 'boolean' && this.formatter)) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter:formatter:rowData)\n : column.dataType === 'number'\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\n \"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\"\n >{{\n formatter\n ? (value | columnFormatter:formatter:rowData)\n : column.dataType === \"number\"\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\n }}</div>\n }\n @if (column.dataType === 'boolean' && !this.formatter) {\n <igx-icon\n family=\"default\"\n [name]=\"value ? 'confirm' : 'close'\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\">\n </igx-icon>\n }\n @if (column.dataType === 'image') {\n <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n @if (column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)) {\n <div\n igxTextHighlight class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{\n !isEmptyAddRowCell ? value : (column.header || column.field)\n }}</div>\n }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n @if (column.dataType === 'string' || column.dataType === 'image') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-input-group [style.--ig-size]=\"1\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n />\n </igx-input-group>\n </ng-container>\n }\n @if (column.dataType === 'number') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'boolean') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-checkbox\n [checked]=\"editValue\"\n [igxFocus]=\"true\"\n [disableRipple]=\"true\"\n [formControl]=\"formControl\"\n ></igx-checkbox>\n </ng-container>\n }\n @if (column.dataType === 'date') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-date-picker\n [style.width.%]=\"100\"\n [outlet]=\"grid.outlet\"\n mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [weekStart]=\"column.pipeArgs.weekStart\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n [displayFormat]=\"column.pipeArgs.format\"\n >\n </igx-date-picker>\n </ng-container>\n }\n @if (column.dataType === 'time') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-time-picker\n [style.width.%]=\"100\"\n [outlet]=\"grid.outlet\"\n mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n [displayFormat]=\"column.pipeArgs.format\"\n ></igx-time-picker>\n </ng-container>\n }\n @if (column.dataType === 'dateTime') {\n <igx-input-group [formGroup]=\"formGroup\">\n <input\n type=\"text\"\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [formControl]=\"formControl\"\n igxInput\n [locale]=\"grid.locale\"\n [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n [defaultFormatType]=\"column.dataType\"\n [displayFormat]=\"column.pipeArgs.format\"\n [igxFocus]=\"true\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'currency') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n @if (grid.currencyPositionLeft) {\n <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n }\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n />\n @if (!grid.currencyPositionLeft) {\n <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n }\n </igx-input-group>\n }\n @if (column.dataType === 'percent') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [igxTextSelection]=\"true\"\n [formControl]=\"formControl\"\n />\n <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n </igx-input-group>\n }\n</ng-template>\n@if (!editMode) {\n @if (level > 0) {\n <div\n #indentationDiv\n class=\"igx-grid__tree-cell--padding-level-{{level}}\"\n [ngStyle]=\"{'padding-inline-start': 'calc(var(--igx-tree-indent-size) *' + level + ')'}\"\n ></div>\n }\n @if (!isLoading) {\n <div\n #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n [ngStyle]=\"{ visibility: showIndicator ? 'visible' : 'hidden' }\"\n (click)=\"toggle($event)\"\n (focus)=\"onIndicatorFocus()\"\n >\n <ng-container\n *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\"\n >\n </ng-container>\n <ng-container\n *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\"\n >\n </ng-container>\n </div>\n }\n @if (isLoading) {\n <div\n (dblclick)=\"onLoadingDblClick($event)\"\n class=\"igx-grid__tree-loading-indicator\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n grid.rowLoadingIndicatorTemplate\n ? grid.rowLoadingIndicatorTemplate\n : defaultLoadingIndicatorTemplate\n \"\n >\n </ng-container>\n </div>\n }\n <ng-template #defaultLoadingIndicatorTemplate>\n <igx-circular-bar [indeterminate]=\"true\"> </igx-circular-bar>\n </ng-template>\n}\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </ng-container>\n@if (isInvalid) {\n <igx-icon\n family=\"default\"\n name=\"error\"\n #errorIcon\n [igxTooltipTarget]=\"tooltipRef\"\n [igxToggleOutlet]=\"grid.outlet\"\n (mouseover)='errorShowing = true'\n (mouseout)='errorShowing = false'>\n </igx-icon>\n <div [id]=\"ariaErrorMessage\"\n igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container *ngTemplateOutlet=\"cellValidationErrorTemplate || defaultError; context: context\"></ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n<ng-template #defaultError>\n @if (formGroup?.get(column?.field).errors?.['required']) {\n <div>\n {{grid.resourceStrings.igx_grid_required_validation_error}}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['minlength']) {\n <div>\n {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['maxlength']) {\n <div>\n {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['min']) {\n <div>\n {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['max']) {\n <div>\n {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['email']) {\n <div>\n {{grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (formGroup?.get(column?.field).errors?.['pattern']) {\n <div>\n {{grid.resourceStrings.igx_grid_pattern_validation_error}}\n </div>\n }\n</ng-template>\n","import { Component, forwardRef, Input, ViewChildren, QueryList, HostBinding, DoCheck, ChangeDetectionStrategy } from '@angular/core';\nimport { IgxRowDirective } from 'igniteui-angular/grids/core';\nimport { IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe } from 'igniteui-angular/grids/core';\nimport { IgxTreeGridCellComponent } from './tree-cell.component';\nimport { IgxGridCellComponent } from 'igniteui-angular/grids/core';\nimport { IgxRowDragDirective } from 'igniteui-angular/grids/core';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\nimport { IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { ITreeGridRecord } from 'igniteui-angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-tree-grid-row',\n templateUrl: 'tree-grid-row.component.html',\n providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxTreeGridRowComponent) }],\n imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, IgxGridCellComponent, NgClass, NgStyle, IgxTreeGridCellComponent, IgxCheckboxComponent, IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe]\n})\nexport class IgxTreeGridRowComponent extends IgxRowDirective implements DoCheck {\n @ViewChildren('treeCell')\n protected override _cells: QueryList<any>;\n\n /**\n * @hidden\n */\n public isLoading: boolean;\n\n private _treeRow: ITreeGridRecord;\n\n /**\n * The `ITreeGridRecord` passed to the row component.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * const treeRow = row.treeRow;\n * ```\n */\n @Input()\n public get treeRow(): ITreeGridRecord {\n return this._treeRow;\n }\n\n public set treeRow(value: ITreeGridRecord) {\n if (this._treeRow !== value) {\n this._treeRow = value;\n this.data = this._treeRow.data;\n }\n }\n\n /**\n * Sets whether the row is pinned.\n * Default value is `false`.\n * ```typescript\n * this.grid.selectedRows[0].pinned = true;\n * ```\n */\n public override set pinned(value: boolean) {\n if (value) {\n this.grid.pinRow(this.key);\n } else {\n this.grid.unpinRow(this.key);\n }\n }\n\n /**\n * Gets whether the row is pinned.\n * ```typescript\n * let isPinned = row.pinned;\n * ```\n */\n public override get pinned() {\n return this.grid.isRecordPinned(this._treeRow);\n }\n\n /**\n * @hidden\n */\n public override get isRoot(): boolean {\n let treeRec = this.treeRow;\n const isPinnedArea = this.pinned && !this.disabled;\n if (isPinnedArea) {\n treeRec = this.grid.unpinnedRecords.find(x => x.data === this.data);\n }\n return treeRec?.level === 0;\n }\n\n /**\n * @hidden\n */\n public override get hasChildren(): boolean {\n return true;\n }\n\n /**\n * Returns a value indicating whether the row component is expanded.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * const expanded = row.expanded;\n * ```\n */\n @HostBinding('attr.aria-expanded')\n public override get expanded(): boolean {\n return this._treeRow.expanded;\n }\n\n /**\n * Sets a value indicating whether the row component is expanded.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * row.expanded = true;\n * ```\n */\n public override set expanded(value: boolean) {\n this.grid.gridAPI.set_row_expansion_state(this._treeRow.key, value);\n }\n\n /**\n * @hidden\n * @internal\n */\n public override get viewIndex(): number {\n return this.index + this.grid.page * this.grid.perPage;\n }\n\n /**\n * @hidden\n */\n public get showIndicator() {\n return this.grid.loadChildrenOnDemand ?\n this.grid.expansionStates.has(this.key) ?\n this.treeRow.children && this.treeRow.children.length :\n this.grid.hasChildrenKey ?\n this.data[this.grid.hasChildrenKey] :\n true :\n this.treeRow.children && this.treeRow.children.length;\n }\n\n /**\n * @hidden\n */\n public get indeterminate(): boolean {\n return this.selectionService.isRowInIndeterminateState(this.key);\n }\n\n /**\n * @hidden\n */\n public override ngDoCheck() {\n this.isLoading = this.grid.loadChildrenOnDemand ? this.grid.loadingRows.has(this.key) : false;\n super.ngDoCheck();\n }\n\n /**\n * Spawns the add child row UI for the specific row.\n *\n * @example\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * row.beginAddChild();\n * ```\n * @param rowID\n */\n public beginAddChild() {\n this.grid.crudService.enterAddRowMode(this, true);\n }\n}\n","<ng-container *ngTemplateOutlet='addRowUI ? addTemp : defaultTemp'></ng-container>\n\n<ng-template #addTemp>\n <div class='igx-grid__tr--inner' [class.igx-grid__tr--add-animate]='triggerAddAnimationClass' (animationend)='animationEndHandler()'>\n <ng-container *ngTemplateOutlet='defaultTemp'></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n </div>\n }\n @if (showRowSelectors) {\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (click)=\"onRowSelectorClick($event)\" (pointerdown)=\"$event.preventDefault()\">\n <ng-template *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n context: { $implicit: { index: viewIndex, rowID: key, key, selected: selected }}\">\n </ng-template>\n </div>\n }\n @if (pinnedStartColumns.length > 0) {\n <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: { $implicit: this, columns: pinnedStartColumns }\"></ng-container>\n }\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n @if (this.hasMergedCells) {\n <div [style.height.px]=\" this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? getRowHeight() : null\"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"this.metaData?.cellMergeMeta.get(col.field)?.root ? 'hidden' : 'visible'\"\n [ngStyle]=\"{\n 'grid-template-rows': this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? this.getMergeCellSpan(col) : null\n }\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n </div>\n }\n @else {\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: { $implicit: this, columns: pinnedEndColumns }\"></ng-container>\n }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [readonly]=\"true\"\n [checked]=\"selected\"\n [indeterminate]=\"indeterminate\"\n [disabled]=\"deleted\"\n [disableRipple]=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col let-columns=\"columns\">\n @for (col of columns | igxNotGrouped; track trackPinnedColumn(col)) {\n @if (this.hasMergedCells) {\n <div [style.height.px]=\" this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? getRowHeight() : null\"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"this.metaData?.cellMergeMeta.get(col.field)?.root ? 'hidden' : 'visible'\"\n [ngStyle]=\"{\n 'grid-template-rows': this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? this.getMergeCellSpan(col) : null\n }\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n </div>\n }\n @else {\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #cellTemplate let-col=\"column\">\n <igx-grid-cell\n [class.igx-grid__td--merged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [isMerged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [firstPinned]=\"col.isFirstPinned\"\n [lastPinned]=\"col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #treeCell>\n </igx-grid-cell>\n</ng-template>\n<ng-template #treeCellTemplate let-col=\"column\">\n <igx-tree-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--merged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [level]=\"treeRow.level\"\n [expanded]=\"expanded\"\n [showIndicator]=\"showIndicator\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [isLoading]=\"isLoading\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #treeCell>\n </igx-tree-grid-cell>\n</ng-template>\n\n","import { AfterContentInit, Component, Input, IterableDiffer, IterableDiffers, OnDestroy, booleanAttribute, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IChipsAreaReorderEventArgs, IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxDropDirective } from 'igniteui-angular/directives';\nimport { IGroupingExpression, ISortingExpression } from 'igniteui-angular/core';\nimport { IgxGroupAreaDropDirective, IgxGroupByAreaDirective, IgxGroupByMetaPipe } from 'igniteui-angular/grids/core';\n\n/**\n * An internal component representing the group-by drop area for the igx-grid component.\n *\n * @hidden @internal\n */\n@Component({\n selector: 'igx-tree-grid-group-by-area',\n templateUrl: '../../core/src/grouping/group-by-area.component.html',\n providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxTreeGridGroupByAreaComponent }],\n imports: [IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent, IgxSuffixDirective, IgxGroupAreaDropDirective, IgxDropDirective, NgTemplateOutlet, IgxGroupByMetaPipe]\n})\nexport class IgxTreeGridGroupByAreaComponent extends IgxGroupByAreaDirective implements AfterContentInit, OnDestroy {\n private differs = inject(IterableDiffers);\n\n @Input({ transform: booleanAttribute })\n public get hideGroupedColumns() {\n return this._hideGroupedColumns;\n }\n\n public set hideGroupedColumns(value: boolean) {\n if (this.grid?.columns && this.expressions) {\n this.setColumnsVisibility(value);\n }\n\n this._hideGroupedColumns = value;\n }\n\n private _hideGroupedColumns = false;\n private groupingDiffer: IterableDiffer<IGroupingExpression>;\n private destroy$ = new Subject<any>();\n\n public ngAfterContentInit(): void {\n if (this.grid.columns && this.expressions) {\n this.groupingDiffer = this.differs.find(this.expressions).create();\n this.updateColumnsVisibility();\n }\n\n this.grid.sortingExpressionsChange.pipe(takeUntil(this.destroy$)).subscribe((sortingExpressions: ISortingExpression[]) => {\n if (!this.expressions || !this.expressions.length) {\n return;\n }\n\n let changed = false;\n\n sortingExpressions.forEach((sortExpr: ISortingExpression) => {\n const fieldName = sortExpr.fieldName;\n const groupingExpr = this.expressions.find(ex => ex.fieldName === fieldName);\n if (groupingExpr && groupingExpr.dir !== sortExpr.dir) {\n groupingExpr.dir = sortExpr.dir;\n changed = true;\n }\n });\n\n if (changed) {\n this.expressions = [...this.expressions];\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public handleReorder(event: IChipsAreaReorderEventArgs) {\n const { chipsArray, originalEvent } = event;\n const newExpressions = this.getReorderedExpressions(chipsArray);\n\n this.chipExpressions = newExpressions;\n\n // When reordered using keyboard navigation, we don't have `onMoveEnd` event.\n if (originalEvent instanceof KeyboardEvent) {\n this.expressions = newExpressions;\n }\n }\n\n public handleMoveEnd() {\n this.expressions = this.chipExpressions;\n }\n\n public groupBy(expression: IGroupingExpression) {\n this.expressions.push(expression);\n this.expressions = [...this.expressions];\n }\n\n public clearGrouping(name: string) {\n this.expressions = this.expressions.filter(item => item.fieldName !== name);\n this.grid.sortingExpressions = this.grid.sortingExpressions.filter(item => item.fieldName !== name);\n this.grid.notifyChanges(true);\n }\n\n protected override expressionsChanged() {\n this.updateColumnsVisibility();\n }\n\n private updateColumnsVisibility() {\n if (this.groupingDiffer && this.grid.columns && !this.grid.hasColumnLayouts) {\n const changes = this.groupingDiffer.diff(this.expressions);\n if (changes && this.grid.columns.length > 0) {\n changes.forEachAddedItem((rec) => {\n const col = this.grid.getColumnByName(rec.item.fieldName);\n col.hidden = this.hideGroupedColumns;\n });\n changes.forEachRemovedItem((rec) => {\n const col = this.grid.getColumnByName(rec.item.fieldName);\n col.hidden = false;\n });\n }\n }\n }\n\n private setColumnsVisibility(value) {\n if (this.grid.columns.length > 0 && !this.grid.hasColumnLayouts) {\n this.expressions.forEach((expr) => {\n const col = this.grid.getColumnByName(expr.fieldName);\n col.hidden = value;\n });\n }\n }\n}\n\n","<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n @for (expression of chipExpressions; track expression.fieldName; let last = $last) {\n <igx-chip\n [id]=\"expression.fieldName\"\n [title]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title\"\n [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n (remove)=\"clearGrouping($event.owner.id)\"\n (chipClick)=\"handleClick(expression.fieldName)\"\n >\n <span>{{ (expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title }}</span>\n <igx-icon\n family=\"default\"\n [name]=\"expression.dir === 1 ? 'sort_asc' : 'sort_desc'\"\n igxSuffix>\n </igx-icon>\n </igx-chip>\n\n <span class=\"igx-grid-grouparea__connector\">\n <igx-icon\n family=\"default\"\n name=\"arrow_forward\"\n [hidden]=\"(last && !dropAreaVisible)\">\n </igx-icon>\n </span>\n }\n <div igxGroupAreaDrop\n class=\"igx-drop-area\"\n [attr.gridId]=\"grid.id\"\n [hidden]=\"!dropAreaVisible\"\n (igxDrop)=\"onDragDrop($event)\"\n >\n <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n </div>\n</igx-chips-area>\n\n<ng-template #default>\n <igx-icon\n family=\"default\"\n name=\"group_work\"\n class=\"igx-drop-area__icon\">\n </igx-icon>\n <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnInit, TemplateRef, ContentChild, AfterContentInit, ViewChild, DoCheck, AfterViewInit, CUSTOM_ELEMENTS_SCHEMA, booleanAttribute, inject } from '@angular/core';\nimport { NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';\nimport { IgxTreeGridAPIService } from './tree-grid-api.service';\nimport { IgxGridBaseDirective, IgxGridCellMergePipe, IgxGridUnmergeActivePipe } from 'igniteui-angular/grids/grid';\nimport {\n CellType,\n GridSelectionMode,\n GridType,\n IGX_GRID_BASE,\n IGX_GRID_SERVICE_BASE,\n IgxColumnComponent,\n IgxColumnMovingDropDirective,\n IgxColumnResizingService,\n IgxFilteringService,\n IgxGridBodyDirective,\n IgxGridCell,\n IgxGridColumnResizerComponent,\n IgxGridCRUDService,\n IgxGridDragSelectDirective,\n IgxGridHeaderRowComponent,\n IgxGridNavigationService,\n IgxGridRowClassesPipe,\n IgxGridRowPinningPipe,\n IgxGridRowStylesPipe,\n IgxGridSelectionService,\n IgxGridSummaryService,\n IgxGridTransaction,\n IgxGridValidationService,\n IgxHasVisibleColumnsPipe,\n IgxRowEditTabStopDirective,\n IgxStringReplacePipe,\n IgxSummaryDataPipe,\n IgxSummaryRow,\n IgxSummaryRowComponent,\n IgxTreeGridRow,\n IRowDataCancelableEventArgs,\n IRowDataEventArgs,\n IRowToggleEventArgs,\n RowType\n} from 'igniteui-angular/grids/core';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { IgxRowLoadingIndicatorTemplateDirective } from './tree-grid.directives';\nimport { IgxTreeGridSelectionService } from './tree-grid-selection.service';\nimport { DefaultTreeGridMergeStrategy, HierarchicalState, HierarchicalTransaction, HierarchicalTransactionService, IGridMergeStrategy, IgxHierarchicalTransactionFactory, IgxOverlayOutletDirective, ITreeGridRecord, mergeObjects, StateUpdateEvent, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy } from 'igniteui-angular/core';\nimport { IgxTreeGridSummaryPipe } from './tree-grid.summary.pipe';\nimport { IgxTreeGridFilteringPipe } from './tree-grid.filtering.pipe';\nimport { IgxTreeGridHierarchizingPipe, IgxTreeGridFlatteningPipe, IgxTreeGridSortingPipe, IgxTreeGridPagingPipe, IgxTreeGridTransactionPipe, IgxTreeGridNormalizeRecordsPipe, IgxTreeGridAddRowPipe } from './tree-grid.pipes';\nimport { IgxTreeGridRowComponent } from './tree-grid-row.component';\nimport { IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { IgxSnackbarComponent } from 'igniteui-angular/snackbar';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxTreeGridGroupByAreaComponent } from './tree-grid-group-by-area.component';\n\nlet NEXT_ID = 0;\n\n/* blazorAdditionalDependency: Column */\n/* blazorAdditionalDependency: ColumnGroup */\n/* blazorAdditionalDependency: ColumnLayout */\n/* blazorAdditionalDependency: GridToolbar */\n/* blazorAdditionalDependency: GridToolbarActions */\n/* blazorAdditionalDependency: GridToolbarTitle */\n/* blazorAdditionalDependency: GridToolbarAdvancedFiltering */\n/* blazorAdditionalDependency: GridToolbarExporter */\n/* blazorAdditionalDependency: GridToolbarHiding */\n/* blazorAdditionalDependency: GridToolbarPinning */\n/* blazorAdditionalDependency: ActionStrip */\n/* blazorAdditionalDependency: GridActionsBaseDirective */\n/* blazorAdditionalDependency: GridEditingActions */\n/* blazorAdditionalDependency: GridPinningActions */\n/* blazorIndirectRender */\n/**\n * **Ignite UI for Angular Tree Grid** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid)\n *\n * The Ignite UI Tree Grid displays and manipulates hierarchical data with consistent schema formatted as a table and\n * provides features such as sorting, filtering, editing, column pinning, paging, column moving and hiding.\n *\n * Example:\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" primaryKey=\"employeeID\" foreignKey=\"PID\" [autoGenerate]=\"false\">\n * <igx-column field=\"first\" header=\"First Name\"></igx-column>\n * <igx-column field=\"last\" header=\"Last Name\"></igx-column>\n * <igx-column field=\"role\" header=\"Role\"></igx-column>\n * </igx-tree-grid>\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-tree-grid',\n templateUrl: 'tree-grid.component.html',\n providers: [\n IgxGridCRUDService,\n IgxGridValidationService,\n IgxGridSummaryService,\n IgxGridNavigationService,\n { provide: IgxGridSelectionService, useClass: IgxTreeGridSelectionService },\n { provide: IGX_GRID_SERVICE_BASE, useClass: IgxTreeGridAPIService },\n { provide: IGX_GRID_BASE, useExisting: IgxTreeGridComponent },\n IgxFilteringService,\n IgxColumnResizingService,\n IgxForOfSyncService,\n IgxForOfScrollSyncService\n ],\n imports: [\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n IgxGridHeaderRowComponent,\n IgxGridBodyDirective,\n IgxGridDragSelectDirective,\n IgxColumnMovingDropDirective,\n IgxGridForOfDirective,\n IgxTemplateOutletDirective,\n IgxTreeGridRowComponent,\n IgxSummaryRowComponent,\n IgxOverlayOutletDirective,\n IgxToggleDirective,\n IgxCircularProgressBarComponent,\n IgxSnackbarComponent,\n IgxButtonDirective,\n IgxRippleDirective,\n IgxRowEditTabStopDirective,\n IgxIconComponent,\n IgxGridColumnResizerComponent,\n IgxHasVisibleColumnsPipe,\n IgxGridRowPinningPipe,\n IgxGridRowClassesPipe,\n IgxGridRowStylesPipe,\n IgxSummaryDataPipe,\n IgxTreeGridHierarchizingPipe,\n IgxTreeGridFlatteningPipe,\n IgxTreeGridSortingPipe,\n IgxTreeGridFilteringPipe,\n IgxTreeGridPagingPipe,\n IgxTreeGridTransactionPipe,\n IgxTreeGridSummaryPipe,\n IgxTreeGridNormalizeRecordsPipe,\n IgxTreeGridAddRowPipe,\n IgxStringReplacePipe,\n IgxGridCellMergePipe,\n IgxScrollInertiaDirective,\n IgxGridUnmergeActivePipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxTreeGridComponent extends IgxGridBaseDirective implements GridType, OnInit, AfterViewInit, DoCheck, AfterContentInit {\n protected override _diTransactions = inject<HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>>(IgxGridTransaction, { optional: true, });\n protected override transactionFactory = inject(IgxHierarchicalTransactionFactory);\n\n /**\n * Sets the child data key of the `IgxTreeGridComponent`.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" [autoGenerate]=\"true\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public childDataKey: string;\n\n /**\n * Sets the foreign key of the `IgxTreeGridComponent`.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [autoGenerate]=\"true\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public foreignKey: string;\n\n /**\n * Sets the key indicating whether a row has children.\n * This property is only used for load on demand scenarios.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\"\n * [loadChildrenOnDemand]=\"loadChildren\"\n * [hasChildrenKey]=\"'hasEmployees'\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public hasChildrenKey: string;\n\n /**\n * Sets whether child records should be deleted when their parent gets deleted.\n * By default it is set to true and deletes all children along with the parent.\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" cascadeOnDelete=\"false\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input({ transform: booleanAttribute })\n public cascadeOnDelete = true;\n\n /* csSuppress */\n /**\n * Sets a callback for loading child rows on demand.\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [loadChildrenOnDemand]=\"loadChildren\">\n * </igx-tree-grid>\n * ```\n * ```typescript\n * public loadChildren = (parentID: any, done: (children: any[]) => void) => {\n * this.dataService.getData(parentID, children => done(children));\n * }\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public loadChildrenOnDemand: (parentID: any, done: (children: any[]) => void) => void;\n\n /**\n * @hidden @internal\n */\n @HostBinding('attr.role')\n public role = 'treegrid';\n\n /**\n * Sets the value of the `id` attribute. If not provided it will be automatically generated.\n * ```html\n * <igx-tree-grid [id]=\"'igx-tree-grid-1'\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @HostBinding('attr.id')\n @Input()\n public id = `igx-tree-grid-${NEXT_ID++}`;\n\n /**\n * @hidden\n * @internal\n */\n @ContentChild(IgxTreeGridGroupByAreaComponent, { read: IgxTreeGridGroupByAreaComponent })\n public treeGroupArea: IgxTreeGridGroupByAreaComponent;\n\n /**\n * @hidden @internal\n */\n @ViewChild('record_template', { read: TemplateRef, static: true })\n protected recordTemplate: TemplateRef<any>;\n\n /**\n * @hidden @internal\n */\n @ViewChild('summary_template', { read: TemplateRef, static: true })\n protected summaryTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n */\n @ContentChild(IgxRowLoadingIndicatorTemplateDirective, { read: IgxRowLoadingIndicatorTemplateDirective })\n protected rowLoadingTemplate: IgxRowLoadingIndicatorTemplateDirective;\n\n /**\n * @hidden\n */\n public flatData: any[] | null;\n\n /**\n * @hidden\n */\n public processedExpandedFlatData: any[] | null;\n\n /**\n * Returns an array of the root level `ITreeGridRecord`s.\n * ```typescript\n * // gets the root record with index=2\n * const states = this.grid.rootRecords[2];\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public rootRecords: ITreeGridRecord[];\n\n /* blazorSuppress */\n /**\n * Returns a map of all `ITreeGridRecord`s.\n * ```typescript\n * // gets the record with primaryKey=2\n * const states = this.grid.records.get(2);\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public records: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n /**\n * Returns an array of processed (filtered and sorted) root `ITreeGridRecord`s.\n * ```typescript\n * // gets the processed root record with index=2\n * const states = this.grid.processedRootRecords[2];\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public processedRootRecords: ITreeGridRecord[];\n\n /* blazorSuppress */\n /**\n * Returns a map of all processed (filtered and sorted) `ITreeGridRecord`s.\n * ```typescript\n * // gets the processed record with primaryKey=2\n * const states = this.grid.processedRecords.get(2);\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public processedRecords: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n /**\n * @hidden\n */\n public loadingRows = new Set<any>();\n\n protected override _filterStrategy = new TreeGridFilteringStrategy();\n protected override _transactions: HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>;\n protected override _mergeStrategy: IGridMergeStrategy = new DefaultTreeGridMergeStrategy();\n private _data;\n private _rowLoadingIndicatorTemplate: TemplateRef<void>;\n private _expansionDepth = Infinity;\n\n /* treatAsRef */\n /**\n * Gets/Sets the array of data that populates the component.\n * ```html\n * <igx-tree-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public get data(): any[] | null {\n return this._data;\n }\n\n /* treatAsRef */\n public set data(value: any[] | null) {\n const oldData = this._data;\n this._data = value || [];\n this.summaryService.clearSummaryCache();\n if (!this._init) {\n this.validation.updateAll(this._data);\n }\n if (this.autoGenerate && this._data.length > 0 && this.shouldRecreateColumns(oldData, this._data)) {\n this.setupColumns();\n }\n this.checkPrimaryKeyField();\n this.cdr.markForCheck();\n }\n\n /** @hidden @internal */\n public override get type(): GridType[\"type\"] {\n return 'tree';\n }\n\n /**\n * Get transactions service for the grid.\n *\n * @experimental @hidden\n */\n public override get transactions() {\n if (this._diTransactions && !this.batchEditing) {\n return this._diTransactions;\n }\n return this._transactions;\n }\n\n /**\n * Sets the count of levels to be expanded in the `IgxTreeGridComponent`. By default it is\n * set to `Infinity` which means all levels would be expanded.\n * ```html\n * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" expansionDepth=\"1\" [autoGenerate]=\"true\"></igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public get expansionDepth(): number {\n return this._expansionDepth;\n }\n\n public set expansionDepth(value: number) {\n this._expansionDepth = value;\n this.notifyChanges();\n }\n\n /**\n * Template for the row loading indicator when load on demand is enabled.\n * ```html\n * <ng-template #rowLoadingTemplate>\n * <igx-icon>loop</igx-icon>\n * </ng-template>\n *\n * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'ID'\" [foreignKey]=\"'parentID'\"\n * [loadChildrenOnDemand]=\"loadChildren\"\n * [rowLoadingIndicatorTemplate]=\"rowLoadingTemplate\">\n * </igx-tree-grid>\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n @Input()\n public get rowLoadingIndicatorTemplate(): TemplateRef<void> {\n return this._rowLoadingIndicatorTemplate;\n }\n\n public set rowLoadingIndicatorTemplate(value: TemplateRef<void>) {\n this._rowLoadingIndicatorTemplate = value;\n this.notifyChanges();\n }\n\n // Kind of stupid\n // private get _gridAPI(): IgxTreeGridAPIService {\n // return this.gridAPI as IgxTreeGridAPIService;\n // }\n\n /**\n * @hidden\n */\n public override ngOnInit() {\n super.ngOnInit();\n\n this.rowToggle.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n this.loadChildrenOnRowExpansion(args);\n });\n\n // TODO: cascade selection logic should be refactor to be handled in the already existing subs\n this.rowAddedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n let rec = this.gridAPI.get_rec_by_id(this.primaryKey ? args.data[this.primaryKey] : args.data);\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n new Set([rec.parent]), rec.parent.key);\n } else {\n // The record is still not available\n // Wait for the change detection to update records through pipes\n requestAnimationFrame(() => {\n rec = this.gridAPI.get_rec_by_id(this.primaryKey ?\n args.data[this.primaryKey] : args.data);\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n new Set([rec.parent]), rec.parent.key);\n }\n this.notifyChanges();\n });\n }\n }\n });\n\n this.rowDeletedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n if (args.data) {\n const rec = this.gridAPI.get_rec_by_id(\n this.primaryKey ? args.data[this.primaryKey] : args.data);\n this.handleCascadeSelection(args, rec);\n } else {\n // if a row has been added and before commiting the transaction deleted\n const leafRowsDirectParents = new Set<any>();\n this.records.forEach(record => {\n if (record && (!record.children || record.children.length === 0) && record.parent) {\n leafRowsDirectParents.add(record.parent);\n }\n });\n // Wait for the change detection to update records through pipes\n requestAnimationFrame(() => {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n this.notifyChanges();\n });\n }\n }\n });\n\n this.filteringDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n const leafRowsDirectParents = new Set<any>();\n this.records.forEach(record => {\n if (record && (!record.children || record.children.length === 0) && record.parent) {\n leafRowsDirectParents.add(record.parent);\n }\n });\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n this.notifyChanges();\n }\n });\n }\n\n /**\n * @hidden\n */\n public override ngAfterViewInit() {\n super.ngAfterViewInit();\n // TODO: pipesExectured event\n // run after change detection in super triggers pipes for records structure\n if (this.rowSelection === GridSelectionMode.multipleCascade && this.selectedRows.length) {\n const selRows = this.selectedRows;\n this.selectionService.clearRowSelection();\n this.selectRows(selRows, true);\n this.cdr.detectChanges();\n }\n }\n\n /**\n * @hidden\n */\n public override ngAfterContentInit() {\n if (this.rowLoadingTemplate) {\n this._rowLoadingIndicatorTemplate = this.rowLoadingTemplate.template;\n }\n super.ngAfterContentInit();\n }\n\n public override getDefaultExpandState(record: ITreeGridRecord): boolean {\n return record.children && record.children.length && record.level < this.expansionDepth;\n }\n\n /**\n * Expands all rows.\n * ```typescript\n * this.grid.expandAll();\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public override expandAll() {\n this._expansionDepth = Infinity;\n this.expansionStates = new Map<any, boolean>();\n }\n\n /**\n * Collapses all rows.\n *\n * ```typescript\n * this.grid.collapseAll();\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n public override collapseAll() {\n this._expansionDepth = 0;\n this.expansionStates = new Map<any, boolean>();\n }\n\n /**\n * @hidden\n */\n public override refreshGridState(args?: IRowDataEventArgs) {\n super.refreshGridState();\n if (this.primaryKey && this.foreignKey && args) {\n const rowID = args.data[this.foreignKey];\n this.summaryService.clearSummaryCache({ rowID });\n this.pipeTrigger++;\n this.cdr.detectChanges();\n }\n }\n\n /* blazorCSSuppress */\n /**\n * Creates a new `IgxTreeGridRowComponent` with the given data. If a parentRowID is not specified, the newly created\n * row would be added at the root level. Otherwise, it would be added as a child of the row whose primaryKey matches\n * the specified parentRowID. If the parentRowID does not exist, an error would be thrown.\n * ```typescript\n * const record = {\n * ID: this.grid.data[this.grid1.data.length - 1].ID + 1,\n * Name: this.newRecord\n * };\n * this.grid.addRow(record, 1); // Adds a new child row to the row with ID=1.\n * ```\n *\n * @param data\n * @param parentRowID\n * @memberof IgxTreeGridComponent\n */\n // TODO: remove evt emission\n public override addRow(data: any, parentRowID?: any) {\n this.crudService.endEdit(true);\n this.gridAPI.addRowToData(data, parentRowID);\n\n this.rowAddedNotifier.next({\n data: data,\n rowData: data, owner: this,\n primaryKey: data[this.primaryKey],\n rowKey: data[this.primaryKey]\n });\n this.pipeTrigger++;\n this.notifyChanges();\n }\n\n /**\n * Enters add mode by spawning the UI with the context of the specified row by index.\n *\n * @remarks\n * Accepted values for index are integers from 0 to this.grid.dataView.length\n * @remarks\n * When adding the row as a child, the parent row is the specified row.\n * @remarks\n * To spawn the UI on top, call the function with index = null or a negative number.\n * In this case trying to add this row as a child will result in error.\n * @example\n * ```typescript\n * this.grid.beginAddRowByIndex(10);\n * this.grid.beginAddRowByIndex(10, true);\n * this.grid.beginAddRowByIndex(null);\n * ```\n * @param index - The index to spawn the UI at. Accepts integers from 0 to this.grid.dataView.length\n * @param asChild - Whether the record should be added as a child. Only applicable to igxTreeGrid.\n */\n public override beginAddRowByIndex(index: number, asChild?: boolean): void {\n if (index === null || index < 0) {\n return this.beginAddRowById(null, asChild);\n }\n return this._addRowForIndex(index - 1, asChild);\n }\n\n /**\n * @hidden\n */\n public getContext(rowData: any, rowIndex: number, pinned?: boolean): any {\n return {\n $implicit: this.isGhostRecord(rowData) || this.isRecordMerged(rowData) ? rowData.recordRef : rowData,\n index: this.getDataViewIndex(rowIndex, pinned),\n templateID: {\n type: this.isSummaryRow(rowData) ? 'summaryRow' : 'dataRow',\n id: null\n },\n disabled: this.isGhostRecord(rowData) ? rowData.recordRef.isFilteredOutParent === undefined : false,\n metaData: this.isRecordMerged(rowData) ? rowData : null\n };\n }\n\n /**\n * @hidden\n * @internal\n */\n public override getInitialPinnedIndex(rec) {\n const id = this.gridAPI.get_row_id(rec);\n return this._pinnedRecordIDs.indexOf(id);\n }\n\n /**\n * @hidden\n * @internal\n */\n public override isRecordPinned(rec) {\n return this.getInitialPinnedIndex(rec.data) !== -1;\n }\n\n /**\n *\n * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n *\n * @remarks\n * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n */\n public override getSelectedData(formatters = false, headers = false): any[] {\n let source = [];\n\n const process = (record) => {\n if (record.summaries) {\n source.push(null);\n return;\n }\n source.push(record.data);\n };\n\n this.unpinnedDataView.forEach(process);\n source = this.isRowPinningToTop ? [...this.pinnedDataView, ...source] : [...source, ...this.pinnedDataView];\n return this.extractDataFromSelection(source, formatters, headers);\n }\n\n /**\n * @hidden @internal\n */\n public override getEmptyRecordObjectFor(inTreeRow: RowType) {\n const treeRowRec = inTreeRow?.treeRow || null;\n const row = { ...treeRowRec };\n const data = treeRowRec?.data || {};\n row.data = { ...data };\n Object.keys(row.data).forEach(key => {\n // persist foreign key if one is set.\n if (this.foreignKey && key === this.foreignKey) {\n row.data[key] = treeRowRec.data[this.crudService.addRowParent?.asChild ? this.primaryKey : key];\n } else {\n row.data[key] = undefined;\n }\n });\n let id = this.generateRowID();\n const rootRecPK = this.foreignKey && this.rootRecords && this.rootRecords.length > 0 ?\n this.rootRecords[0].data[this.foreignKey] : null;\n if (id === rootRecPK) {\n // safeguard in case generated id matches the root foreign key.\n id = this.generateRowID();\n }\n row.key = id;\n row.data[this.primaryKey] = id;\n return { rowID: id, data: row.data, recordRef: row };\n }\n\n /** @hidden */\n public override deleteRowById(rowId: any): any {\n // if this is flat self-referencing data, and CascadeOnDelete is set to true\n // and if we have transactions we should start pending transaction. This allows\n // us in case of delete action to delete all child rows as single undo action\n const args: IRowDataCancelableEventArgs = {\n rowID: rowId,\n primaryKey: rowId,\n rowKey: rowId,\n cancel: false,\n rowData: this.getRowData(rowId),\n data: this.getRowData(rowId),\n oldValue: null,\n owner: this\n };\n this.rowDelete.emit(args);\n if (args.cancel) {\n return;\n }\n\n const record = this.gridAPI.deleteRowById(rowId);\n const key = record[this.primaryKey];\n if (record !== null && record !== undefined) {\n const rowDeletedEventArgs: IRowDataEventArgs = {\n data: record,\n rowData: record,\n owner: this,\n primaryKey: key,\n rowKey: key\n };\n this.rowDeleted.emit(rowDeletedEventArgs);\n }\n return record;\n }\n\n /**\n * Returns the `IgxTreeGridRow` by index.\n *\n * @example\n * ```typescript\n * const myRow = treeGrid.getRowByIndex(1);\n * ```\n * @param index\n */\n public getRowByIndex(index: number): RowType {\n if (index < 0 || index >= this.dataView.length) {\n return undefined;\n }\n return this.createRow(index);\n }\n\n /**\n * Returns the `RowType` object by the specified primary key.\n *\n * @example\n * ```typescript\n * const myRow = this.treeGrid.getRowByIndex(1);\n * ```\n * @param index\n */\n public getRowByKey(key: any): RowType {\n const rec = this.filteredSortedData ? this.primaryKey ? this.filteredSortedData.find(r => r[this.primaryKey] === key) :\n this.filteredSortedData.find(r => r === key) : undefined;\n const index = this.dataView.findIndex(r => r.data && r.data === rec);\n if (index < 0 || index >= this.filteredSortedData.length) {\n return undefined;\n }\n return new IgxTreeGridRow(this as any, index, rec);\n }\n\n /**\n * Returns the collection of all RowType for current page.\n *\n * @hidden @internal\n */\n public allRows(): RowType[] {\n return this.dataView.map((rec, index) => this.createRow(index));\n }\n\n /**\n * Returns the collection of `IgxTreeGridRow`s for current page.\n *\n * @hidden @internal\n */\n public dataRows(): RowType[] {\n return this.allRows().filter(row => row instanceof IgxTreeGridRow);\n }\n\n /**\n * Returns an array of the selected `IgxGridCell`s.\n *\n * @example\n * ```typescript\n * const selectedCells = this.grid.selectedCells;\n * ```\n */\n public get selectedCells(): CellType[] {\n return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n .reduce((a, b) => a.concat(b), []);\n }\n\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @example\n * ```typescript\n * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n * ```\n * @param rowIndex\n * @param columnField\n */\n public getCellByColumn(rowIndex: number, columnField: string): CellType {\n const row = this.getRowByIndex(rowIndex);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && row instanceof IgxTreeGridRow && column) {\n return new IgxGridCell(this as any, rowIndex, column);\n }\n }\n\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @remarks\n * Requires that the primaryKey property is set.\n * @example\n * ```typescript\n * grid.getCellByKey(1, 'index');\n * ```\n * @param rowSelector match any rowID\n * @param columnField\n */\n public getCellByKey(rowSelector: any, columnField: string): CellType {\n const row = this.getRowByKey(rowSelector);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && column) {\n return new IgxGridCell(this as any, row.index, column);\n }\n }\n\n public override pinRow(rowID: any, index?: number): boolean {\n const row = this.getRowByKey(rowID);\n return super.pinRow(rowID, index, row);\n }\n\n public override unpinRow(rowID: any): boolean {\n const row = this.getRowByKey(rowID);\n return super.unpinRow(rowID, row);\n }\n\n /** @hidden */\n public generateRowPath(rowId: any): any[] {\n const path: any[] = [];\n let record = this.records.get(rowId);\n\n while (record.parent) {\n path.push(record.parent.key);\n record = record.parent;\n }\n\n return path.reverse();\n }\n\n /** @hidden */\n public isTreeRow(record: any): boolean {\n return record.key !== undefined && record.data;\n }\n\n /** @hidden */\n public override getUnpinnedIndexById(id) {\n return this.unpinnedRecords.findIndex(x => x.data[this.primaryKey] === id);\n }\n\n /**\n * @hidden\n */\n public createRow(index: number, data?: any): RowType {\n let row: RowType;\n const dataIndex = this._getDataViewIndex(index);\n const rec: any = data ?? this.dataView[dataIndex];\n\n if (this.isSummaryRow(rec)) {\n row = new IgxSummaryRow(this as any, index, rec.summaries);\n }\n\n if (!row && rec) {\n const isTreeRow = this.isTreeRow(rec);\n const dataRec = isTreeRow ? rec.data : rec;\n const treeRow = isTreeRow ? rec : undefined;\n row = new IgxTreeGridRow(this as any, index, dataRec, treeRow);\n }\n\n return row;\n }\n\n protected override generateDataFields(data: any[]): string[] {\n return super.generateDataFields(data).filter(field => field !== this.childDataKey);\n }\n\n protected override transactionStatusUpdate(event: StateUpdateEvent) {\n let actions = [];\n if (event.origin === TransactionEventOrigin.REDO) {\n actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.DELETE) : [];\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n this.handleCascadeSelection(event);\n }\n } else if (event.origin === TransactionEventOrigin.UNDO) {\n actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.ADD) : [];\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n if (event.actions[0].transaction.type === 'add') {\n const rec = this.gridAPI.get_rec_by_id(event.actions[0].transaction.id);\n this.handleCascadeSelection(event, rec);\n } else {\n this.handleCascadeSelection(event);\n }\n }\n }\n if (actions.length) {\n for (const action of actions) {\n this.deselectChildren(action.transaction.id);\n }\n }\n super.transactionStatusUpdate(event);\n }\n\n protected findRecordIndexInView(rec) {\n return this.dataView.findIndex(x => x.data[this.primaryKey] === rec[this.primaryKey]);\n }\n\n /**\n * @hidden @internal\n */\n protected override getDataBasedBodyHeight(): number {\n return !this.flatData || (this.flatData.length < this._defaultTargetRecordNumber) ?\n 0 : this.defaultTargetBodyHeight;\n }\n\n /**\n * @hidden\n */\n protected override scrollTo(row: any | number, column: any | number): void {\n let delayScrolling = false;\n let record: ITreeGridRecord;\n\n if (typeof (row) !== 'number') {\n const rowData = row;\n const rowID = this.gridAPI.get_row_id(rowData);\n record = this.processedRecords.get(rowID);\n this.gridAPI.expand_path_to_record(record);\n\n if (this.paginator) {\n const rowIndex = this.processedExpandedFlatData.indexOf(rowData);\n const page = Math.floor(rowIndex / this.perPage);\n\n if (this.page !== page) {\n delayScrolling = true;\n this.page = page;\n }\n }\n }\n\n if (delayScrolling) {\n this.verticalScrollContainer.dataChanged.pipe(first()).subscribe(() => {\n this.scrollDirective(this.verticalScrollContainer,\n typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n });\n } else {\n this.scrollDirective(this.verticalScrollContainer,\n typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n }\n\n this.scrollToHorizontally(column);\n }\n\n protected override writeToData(rowIndex: number, value: any) {\n mergeObjects(this.flatData[rowIndex], value);\n }\n\n /**\n * @hidden\n */\n protected override initColumns(collection: IgxColumnComponent[], cb: (args: any) => void = null) {\n if (this.hasColumnLayouts) {\n // invalid configuration - tree grid should not allow column layouts\n // remove column layouts\n const nonColumnLayoutColumns = this.columns.filter((col) => !col.columnLayout && !col.columnLayoutChild);\n this.updateColumns(nonColumnLayoutColumns);\n }\n super.initColumns(collection, cb);\n }\n\n /**\n * @hidden @internal\n */\n protected override getGroupAreaHeight(): number {\n return this.treeGroupArea ? this.getComputedHeight(this.treeGroupArea.nativeElement) : 0;\n }\n\n /** {@link triggerPipes} will re-create pinnedData on CRUD operations */\n protected trackPinnedRowData(record: ITreeGridRecord) {\n // TODO FIX: pipeline data doesn't match end interface (¬_¬ )\n // return record.key || (record as any).rowID;\n return record;\n }\n\n /**\n * @description A recursive way to deselect all selected children of a given record\n * @param recordID ID of the record whose children to deselect\n * @hidden\n * @internal\n */\n private deselectChildren(recordID): void {\n const selectedChildren = [];\n // G.E. Apr 28, 2021 #9465 Records which are not in view can also be selected so we need to\n // deselect them as well, hence using 'records' map instead of getRowByKey() method which will\n // return only row components (i.e. records in view).\n const rowToDeselect = this.records.get(recordID);\n this.selectionService.deselectRowsWithNoEvent([recordID]);\n this.gridAPI.get_selected_children(rowToDeselect, selectedChildren);\n if (selectedChildren.length > 0) {\n selectedChildren.forEach(x => this.deselectChildren(x));\n }\n }\n\n private addChildRows(children: any[], parentID: any) {\n if (this.primaryKey && this.foreignKey) {\n for (const child of children) {\n child[this.foreignKey] = parentID;\n }\n this.data.push(...children);\n } else if (this.childDataKey) {\n let parent = this.records.get(parentID);\n let parentData = parent.data;\n\n if (this.transactions.enabled && this.transactions.getAggregatedChanges(true).length) {\n const path = [];\n while (parent) {\n path.push(parent.key);\n parent = parent.parent;\n }\n\n let collection = this.data;\n let record: any;\n for (let i = path.length - 1; i >= 0; i--) {\n const pid = path[i];\n record = collection.find(r => r[this.primaryKey] === pid);\n\n if (!record) {\n break;\n }\n collection = record[this.childDataKey];\n }\n if (record) {\n parentData = record;\n }\n }\n\n parentData[this.childDataKey] = children;\n }\n this.selectionService.clearHeaderCBState();\n this.pipeTrigger++;\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n // Force pipe triggering for building the data structure\n this.cdr.detectChanges();\n if (this.selectionService.isRowSelected(parentID)) {\n this.selectionService.rowSelection.delete(parentID);\n this.selectionService.selectRowsWithNoEvent([parentID]);\n }\n }\n }\n\n private loadChildrenOnRowExpansion(args: IRowToggleEventArgs) {\n if (this.loadChildrenOnDemand) {\n const parentID = args.rowID;\n\n if (args.expanded && !this._expansionStates.has(parentID)) {\n this.loadingRows.add(parentID);\n\n this.loadChildrenOnDemand(parentID, children => {\n this.loadingRows.delete(parentID);\n this.addChildRows(children, parentID);\n this.notifyChanges();\n });\n }\n }\n }\n\n private handleCascadeSelection(event: IRowDataEventArgs | StateUpdateEvent, rec: ITreeGridRecord = null) {\n // Wait for the change detection to update records through the pipes\n requestAnimationFrame(() => {\n if (rec === null) {\n rec = this.gridAPI.get_rec_by_id((event as StateUpdateEvent).actions[0].transaction.id);\n }\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n new Set([rec.parent]), rec.parent.key\n );\n this.notifyChanges();\n }\n });\n }\n}\n","<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n<ng-content select=\"igx-tree-grid-group-by-area,igc-tree-grid-group-by-area\"></ng-content>\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [width]=\"calcWidth\"\n [pinnedStartColumnCollection]=\"pinnedStartColumns\"\n [pinnedEndColumnCollection]=\"pinnedEndColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($event)\"\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" [attr.aria-activedescendant]=\"activeDescendant\" [attr.role]=\"dataView.length ? null : 'row'\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]='totalHeight' [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody (scroll)='preventContainerScroll($event)'>\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedStartWidth\"></span>\n }\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"this.verticalScrollContainer.dc.instance.scrollContainer\"\n [IgxScrollInertiaDirection]=\"this.verticalScrollContainer.dc.instance.scrollDirection\">\n @for (rowData of mergedDataInView; track rowData.record;) {\n <igx-tree-grid-row class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [treeRow]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:isRecordMerged(rowData):row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowData.index:pipeTrigger\" #row>\n </igx-tree-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (data\n | treeGridTransaction:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | treeGridNormalizeRecord:pipeTrigger\n | treeGridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger:true\n | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger:true\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData\n ) {\n @if (pinnedData.length > 0) {\n <div #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n @for (rowData of pinnedData; track trackPinnedRowData(rowData); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData\n | treeGridTransaction:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | treeGridHierarchizing:primaryKey:foreignKey:childDataKey:pipeTrigger\n | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger\n | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger\n | treeGridFlattening:expansionDepth:expansionStates:pipeTrigger\n | treeGridPaging:!!paginator:page:perPage:pipeTrigger\n | treeGridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | treeGridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]='verticalScroll'\n [igxForContainerSize]='calcHeight' [igxForItemSize]=\"renderedRowHeight\" #verticalScrollContainer\n (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n <ng-template [igxTemplateOutlet]='isSummaryRow(rowData) ? summary_template : record_template'\n [igxTemplateOutletContext]='getContext(rowData, rowIndex, false)'\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (cachedViewLoaded)='cachedViewLoaded($event)'>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-disabledRow=\"disabled\" let-rowData let-metaData=\"metaData\">\n <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:isRecordMerged(metaData):row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:isRecordMerged(metaData):row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row [gridID]=\"id\" [summaries]=\"rowData.summaries\"\n [firstCellIndentation]=\"rowData.cellIndentation\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" role=\"row\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n }\n </div>\n @if (moving && columnInDrag) {\n <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n }\n <div [hidden]='!hasVerticalScroll()' class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\"\n [style.height.px]='calcHeight'>\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=' isRowPinningToTop ? pinnedRowHeight : 0'></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]='calcHeight'>\n <ng-template igxGridFor [igxGridForOf]='[]' #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]='!isRowPinningToTop ? pinnedRowHeight : 0'></div>\n </div>\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]='snackbarDisplayTime'>{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div igxOverlayOutlet #igxBodyOverlayOutlet=\"overlay-outlet\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]='summaryRowHeight' #tfoot>\n <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\"\n (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row [style.width.px]='calcWidth' [style.height.px]='summaryRowHeight'\n [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n }\n <div class=\"igx-grid__tfoot-thumb\" [hidden]='!hasVerticalScroll()' [style.height.px]='summaryRowHeight'\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\" [style.width.px]='pinnedStartWidth' [style.min-width.px]='pinnedStartWidth'></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]='unpinnedWidth'>\n <ng-template igxGridFor [igxGridForOf]='[]' #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.width.px]='pinnedEndWidth' [style.min-width.px]='pinnedEndWidth' [hidden]=\"pinnedEndWidth === 0\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n@if (rowEditable) {\n <div igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.crudService.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{ this.resourceStrings.igx_grid_row_edit_text | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.isAddRow ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n context: { $implicit: !this.crudService.row?.isAddRow? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n <div #sink style=\"display: none;\"></div>\n <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip\"></ng-content>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\nimport { formatDate, GridColumnDataType, IGroupingExpression, IgxSorting } from 'igniteui-angular/core';\n\nconst HIDDEN_FIELD_NAME = '_Igx_Hidden_Data_';\n\n/**\n * @hidden\n * @internal\n */\nclass GroupByRecord {\n public key: string;\n public value: any;\n public groups: GroupByRecord[];\n public records: any[];\n}\n\nexport class ITreeGridAggregation {\n public field: string;\n public aggregate: (parent: any, children: any[]) => any;\n}\n\nexport class IgxGroupedTreeGridSorting extends IgxSorting {\n private static _instance: IgxGroupedTreeGridSorting = null;\n\n public static instance() {\n return this._instance || (this._instance = new IgxGroupedTreeGridSorting());\n }\n\n protected override getFieldValue(obj: any, key: string, isDate = false, isTime = false): any {\n const data = obj.data[HIDDEN_FIELD_NAME] ?\n obj.data.hasOwnProperty(key) ?\n obj.data :\n obj.data[HIDDEN_FIELD_NAME] :\n obj.data;\n\n return super.getFieldValue(data, key, isDate, isTime);\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'treeGridGrouping',\n standalone: true\n})\nexport class IgxTreeGridGroupingPipe implements PipeTransform {\n private grid: GridType;\n\n public transform(collection: any[],\n groupingExpressions: IGroupingExpression[],\n groupKey: string,\n childDataKey: string,\n grid: GridType,\n aggregations?: ITreeGridAggregation[]\n ): any[] {\n if (groupingExpressions.length === 0) {\n return collection;\n }\n\n if (groupKey?.toLowerCase() === childDataKey?.toLowerCase()) {\n throw new Error('Group key and child data key cannot be the same.');\n }\n\n this.grid = grid;\n\n const result = [];\n const groupedRecords = this.groupByMultiple(collection, groupingExpressions);\n this.flattenGrouping(groupedRecords, groupKey,\n childDataKey, result, aggregations);\n\n return result;\n }\n\n private flattenGrouping(groupRecords: GroupByRecord[],\n groupKey: string,\n childDataKey: string,\n data: any[],\n aggregations: ITreeGridAggregation[] = []) {\n for (const groupRecord of groupRecords) {\n const parent = {};\n const children = groupRecord.records;\n\n parent[childDataKey] = [];\n\n for (const aggregation of aggregations) {\n parent[aggregation.field] = aggregation.aggregate(parent, children);\n }\n\n parent[groupKey] = groupRecord.value + ` (${groupRecord.records.length})`;\n parent[HIDDEN_FIELD_NAME] = { [groupRecord.key]: groupRecord.value };\n data.push(parent);\n\n if (groupRecord.groups) {\n this.flattenGrouping(groupRecord.groups, groupKey, childDataKey,\n parent[childDataKey], aggregations);\n } else {\n parent[childDataKey] = children;\n }\n }\n }\n\n private groupByMultiple(array: any[], groupingExpressions: IGroupingExpression[], index = 0): GroupByRecord[] {\n const res = this.groupBy(array, groupingExpressions[index]);\n\n if (index + 1 < groupingExpressions.length) {\n for (const groupByRecord of res) {\n groupByRecord.groups = this.groupByMultiple(groupByRecord.records, groupingExpressions, index + 1);\n }\n }\n\n return res;\n }\n\n private groupBy(array: any[], groupingExpression: IGroupingExpression): GroupByRecord[] {\n const key = groupingExpression.fieldName;\n const column = this.grid?.getColumnByName(key);\n const isDateTime = column?.dataType === GridColumnDataType.Date ||\n column?.dataType === GridColumnDataType.DateTime ||\n column?.dataType === GridColumnDataType.Time;\n const map: Map<any, GroupByRecord> = new Map<any, GroupByRecord>();\n for (const record of array) {\n const value = isDateTime\n ? formatDate(record[key], column.pipeArgs.format, this.grid.locale)\n : record[key];\n\n let valueCase = value;\n let groupByRecord: GroupByRecord;\n\n if (groupingExpression.ignoreCase) {\n valueCase = value?.toString().toLowerCase();\n }\n if (map.has(valueCase)) {\n groupByRecord = map.get(valueCase);\n } else {\n groupByRecord = new GroupByRecord();\n groupByRecord.key = key;\n groupByRecord.value = value;\n groupByRecord.records = [];\n map.set(valueCase, groupByRecord);\n }\n\n groupByRecord.records.push(record);\n }\n\n return Array.from(map.values());\n }\n}\n","import { NgModule } from '@angular/core';\nimport { IgxTreeGridComponent } from './tree-grid.component';\nimport { IgxTreeGridGroupByAreaComponent } from './tree-grid-group-by-area.component';\nimport { IgxTreeGridGroupingPipe } from './tree-grid.grouping.pipe';\n\n/* Imports that cannot be resolved from IGX_GRID_COMMON_DIRECTIVES spread\n NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\nimport {\n IgxRowDirective,\n IgxRowEditTextDirective,\n IgxRowAddTextDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTabStopDirective,\n IgxGridFooterComponent,\n IgxAdvancedFilteringDialogComponent,\n IgxHeaderCollapsedIndicatorDirective,\n IgxHeaderExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxRowExpandedIndicatorDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxDragIndicatorIconDirective,\n IgxRowDragGhostDirective,\n IgxGridStateDirective,\n IgxGridHeaderComponent,\n IgxGridHeaderGroupComponent,\n IgxGridHeaderRowComponent,\n IgxFilterCellTemplateDirective,\n IgxSummaryTemplateDirective,\n IgxCellTemplateDirective,\n IgxCellValidationErrorDirective,\n IgxCellHeaderTemplateDirective,\n IgxCellFooterTemplateDirective,\n IgxCellEditorTemplateDirective,\n IgxCollapsibleIndicatorTemplateDirective,\n IgxColumnComponent,\n IgxColumnGroupComponent,\n IgxColumnLayoutComponent,\n IgxColumnRequiredValidatorDirective,\n IgxColumnMinValidatorDirective,\n IgxColumnMaxValidatorDirective,\n IgxColumnEmailValidatorDirective,\n IgxColumnMinLengthValidatorDirective,\n IgxColumnMaxLengthValidatorDirective,\n IgxColumnPatternValidatorDirective,\n IgxColumnActionsComponent,\n IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n IgxRowSelectorDirective,\n IgxGroupByRowSelectorDirective,\n IgxHeadSelectorDirective,\n IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective,\n IgxGridExcelStyleFilteringComponent,\n IgxExcelStyleHeaderComponent,\n IgxExcelStyleSortingComponent,\n IgxExcelStylePinningComponent,\n IgxExcelStyleHidingComponent,\n IgxExcelStyleSelectingComponent,\n IgxExcelStyleClearFiltersComponent,\n IgxExcelStyleConditionalFilterComponent,\n IgxExcelStyleMovingComponent,\n IgxExcelStyleSearchComponent,\n IgxExcelStyleColumnOperationsTemplateDirective,\n IgxExcelStyleFilterOperationsTemplateDirective,\n IgxExcelStyleLoadingValuesTemplateDirective,\n IgxGridActionButtonComponent,\n IgxGridActionsBaseDirective,\n IgxGridEditingActionsComponent,\n IgxGridPinningActionsComponent\n} from \"igniteui-angular/grids/core\";\nimport {\n IgxPaginatorComponent,\n IgxPageNavigationComponent,\n IgxPageSizeSelectorComponent,\n IgxPaginatorContentDirective,\n IgxPaginatorDirective\n} from 'igniteui-angular/paginator';\n\n/* NOTE: Tree grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TREE_GRID_DIRECTIVES = [\n IgxTreeGridComponent,\n IgxTreeGridGroupByAreaComponent,\n IgxTreeGridGroupingPipe,\n IgxRowAddTextDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTextDirective,\n IgxRowEditTabStopDirective,\n // IGX_GRID_COMMON_DIRECTIVES:\n IgxRowDirective,\n IgxGridFooterComponent,\n IgxAdvancedFilteringDialogComponent,\n IgxRowExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxHeaderExpandedIndicatorDirective,\n IgxHeaderCollapsedIndicatorDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxDragIndicatorIconDirective,\n IgxRowDragGhostDirective,\n IgxGridStateDirective,\n // IGX_GRID_ACTIONS\n IgxGridPinningActionsComponent,\n IgxGridEditingActionsComponent,\n IgxGridActionsBaseDirective,\n IgxGridActionButtonComponent,\n // IGX_GRID_HEADERS_DIRECTIVES:\n IgxGridHeaderComponent,\n IgxGridHeaderGroupComponent,\n IgxGridHeaderRowComponent,\n // IGX_GRID_COLUMN_DIRECTIVES:\n IgxFilterCellTemplateDirective,\n IgxSummaryTemplateDirective,\n IgxCellTemplateDirective,\n IgxCellValidationErrorDirective,\n IgxCellHeaderTemplateDirective,\n IgxCellFooterTemplateDirective,\n IgxCellEditorTemplateDirective,\n IgxCollapsibleIndicatorTemplateDirective,\n IgxColumnComponent,\n IgxColumnGroupComponent,\n IgxColumnLayoutComponent,\n // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n IgxColumnActionsComponent,\n IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n // IGX_GRID_SELECTION_DIRECTIVES:\n IgxRowSelectorDirective,\n IgxGroupByRowSelectorDirective,\n IgxHeadSelectorDirective,\n // IGX_GRID_TOOLBAR_DIRECTIVES:\n IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective,\n // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n IgxGridExcelStyleFilteringComponent,\n IgxExcelStyleHeaderComponent,\n IgxExcelStyleSortingComponent,\n IgxExcelStylePinningComponent,\n IgxExcelStyleHidingComponent,\n IgxExcelStyleSelectingComponent,\n IgxExcelStyleClearFiltersComponent,\n IgxExcelStyleConditionalFilterComponent,\n IgxExcelStyleMovingComponent,\n IgxExcelStyleSearchComponent,\n IgxExcelStyleColumnOperationsTemplateDirective,\n IgxExcelStyleFilterOperationsTemplateDirective,\n IgxExcelStyleLoadingValuesTemplateDirective,\n // IGX_PAGINATOR_DIRECTIVES:\n IgxColumnRequiredValidatorDirective,\n IgxColumnMinValidatorDirective,\n IgxColumnMaxValidatorDirective,\n IgxColumnEmailValidatorDirective,\n IgxColumnMinLengthValidatorDirective,\n IgxColumnMaxLengthValidatorDirective,\n IgxColumnPatternValidatorDirective,\n // IGX_PAGINATOR_DIRECTIVES:\n IgxPaginatorComponent,\n IgxPageNavigationComponent,\n IgxPageSizeSelectorComponent,\n IgxPaginatorContentDirective,\n IgxPaginatorDirective\n] as const;\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n ...IGX_TREE_GRID_DIRECTIVES\n ],\n exports: [\n ...IGX_TREE_GRID_DIRECTIVES\n ]\n})\nexport class IgxTreeGridModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}