igniteui-angular 22.0.0-rc.1 → 22.0.0-rc.2
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.
- package/fesm2022/igniteui-angular-accordion.mjs +1 -1
- package/fesm2022/igniteui-angular-accordion.mjs.map +1 -1
- package/fesm2022/igniteui-angular-action-strip.mjs +1 -1
- package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
- package/fesm2022/igniteui-angular-button-group.mjs +1 -1
- package/fesm2022/igniteui-angular-button-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-calendar.mjs +1 -1
- package/fesm2022/igniteui-angular-calendar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-card.mjs +6 -6
- package/fesm2022/igniteui-angular-card.mjs.map +1 -1
- package/fesm2022/igniteui-angular-carousel.mjs +6 -6
- package/fesm2022/igniteui-angular-carousel.mjs.map +1 -1
- package/fesm2022/igniteui-angular-chips.mjs +34 -34
- package/fesm2022/igniteui-angular-chips.mjs.map +1 -1
- package/fesm2022/igniteui-angular-core.mjs +6 -6
- package/fesm2022/igniteui-angular-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-date-picker.mjs +2 -2
- package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-directives.mjs +12 -12
- package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
- package/fesm2022/igniteui-angular-drop-down.mjs +5 -5
- package/fesm2022/igniteui-angular-drop-down.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-core.mjs +26 -23
- package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +51 -51
- package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +7 -7
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs +5 -5
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-icon.mjs +4 -4
- package/fesm2022/igniteui-angular-icon.mjs.map +1 -1
- package/fesm2022/igniteui-angular-input-group.mjs +18 -18
- package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-list.mjs +5 -5
- package/fesm2022/igniteui-angular-list.mjs.map +1 -1
- package/fesm2022/igniteui-angular-navbar.mjs +5 -5
- package/fesm2022/igniteui-angular-navbar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-paginator.mjs +2 -2
- package/fesm2022/igniteui-angular-paginator.mjs.map +1 -1
- package/fesm2022/igniteui-angular-progressbar.mjs +7 -7
- package/fesm2022/igniteui-angular-progressbar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-query-builder.mjs +2 -2
- package/fesm2022/igniteui-angular-query-builder.mjs.map +1 -1
- package/fesm2022/igniteui-angular-radio.mjs +5 -5
- package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
- package/fesm2022/igniteui-angular-select.mjs +217 -209
- package/fesm2022/igniteui-angular-select.mjs.map +1 -1
- package/fesm2022/igniteui-angular-slider.mjs +17 -17
- package/fesm2022/igniteui-angular-slider.mjs.map +1 -1
- package/fesm2022/igniteui-angular-snackbar.mjs +1 -1
- package/fesm2022/igniteui-angular-snackbar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-splitter.mjs +2 -2
- package/fesm2022/igniteui-angular-splitter.mjs.map +1 -1
- package/fesm2022/igniteui-angular-stepper.mjs +2 -2
- package/fesm2022/igniteui-angular-stepper.mjs.map +1 -1
- package/fesm2022/igniteui-angular-time-picker.mjs +1 -1
- package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-tree.mjs +1 -1
- package/fesm2022/igniteui-angular-tree.mjs.map +1 -1
- package/input-group/README.md +1 -1
- package/migrations/migration-collection.json +5 -0
- package/migrations/update-22_0_0/index.d.ts +3 -0
- package/migrations/update-22_0_0/index.js +86 -0
- package/migrations/update-22_0_0/index.spec.d.ts +1 -0
- package/migrations/update-22_0_0/index.spec.js +116 -0
- package/package.json +1 -1
- package/types/igniteui-angular-accordion.d.ts +3 -3
- package/types/igniteui-angular-action-strip.d.ts +1 -1
- package/types/igniteui-angular-button-group.d.ts +1 -1
- package/types/igniteui-angular-calendar.d.ts +1 -1
- package/types/igniteui-angular-card.d.ts +6 -6
- package/types/igniteui-angular-carousel.d.ts +6 -6
- package/types/igniteui-angular-chips.d.ts +38 -38
- package/types/igniteui-angular-core.d.ts +9 -9
- package/types/igniteui-angular-date-picker.d.ts +4 -4
- package/types/igniteui-angular-directives.d.ts +15 -15
- package/types/igniteui-angular-drop-down.d.ts +6 -6
- package/types/igniteui-angular-grids-core.d.ts +30 -29
- package/types/igniteui-angular-grids-grid.d.ts +51 -51
- package/types/igniteui-angular-grids-hierarchical-grid.d.ts +7 -7
- package/types/igniteui-angular-grids-tree-grid.d.ts +7 -7
- package/types/igniteui-angular-icon.d.ts +4 -4
- package/types/igniteui-angular-input-group.d.ts +17 -17
- package/types/igniteui-angular-list.d.ts +7 -7
- package/types/igniteui-angular-navbar.d.ts +7 -7
- package/types/igniteui-angular-paginator.d.ts +2 -2
- package/types/igniteui-angular-progressbar.d.ts +7 -7
- package/types/igniteui-angular-query-builder.d.ts +3 -3
- package/types/igniteui-angular-radio.d.ts +5 -5
- package/types/igniteui-angular-select.d.ts +91 -7
- package/types/igniteui-angular-slider.d.ts +17 -17
- package/types/igniteui-angular-snackbar.d.ts +1 -1
- package/types/igniteui-angular-splitter.d.ts +3 -3
- package/types/igniteui-angular-stepper.d.ts +2 -2
- package/types/igniteui-angular-time-picker.d.ts +1 -1
- package/types/igniteui-angular-tree.d.ts +2 -2
|
@@ -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/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\n || column.dataType === GridColumnDataType.Currency\n || column.dataType === GridColumnDataType.Percent) && 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 } 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, IgxNumberFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, IgxDateFormatterPipe } 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 IgxNumberFormatterPipe,\n IgxPercentFormatterPipe,\n IgxCurrencyFormatterPipe,\n IgxDateFormatterPipe,\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 }\n</ng-template>\n<ng-template #defaultCell>\n @if (\n (column.dataType !== 'boolean' && column.dataType !== 'image') ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\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' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : grid.locale)\n : column.dataType === 'percent'\n ? (value | percent: column.pipeArgs.digitsInfo : grid.locale)\n : value\n }}\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 >\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 (\n column.dataType !== 'boolean' ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\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' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{ !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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [weekStart]=\"column.pipeArgs.weekStart\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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>\n {{ editValue | percent: column.pipeArgs.digitsInfo : grid.locale }}\n </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]=\"{\n 'padding-inline-start':\n 'calc(var(--ig-tree-indent-size) *' + level + ')',\n }\"\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 (mouseover)=\"errorShowing = true\"\n (mouseout)=\"errorShowing = false\"\n >\n </igx-icon>\n <div [id]=\"ariaErrorMessage\" igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container\n *ngTemplateOutlet=\"\n cellValidationErrorTemplate || defaultError;\n context: context\n \"\n ></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 (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['required']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_required_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'minlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.minlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'maxlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.maxlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['min']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.min.min\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['max']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.max.max\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['email']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['pattern']\n ) {\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\n *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"\n></ng-container>\n\n<ng-template #addTemp>\n <div\n class=\"igx-grid__tr--inner\"\n [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\"\n (animationend)=\"animationEndHandler()\"\n >\n <ng-container *ngTemplateOutlet=\"defaultTemp\"></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div\n [class]=\"resolveDragIndicatorClasses\"\n role=\"gridcell\"\n [igxRowDrag]=\"this\"\n (click)=\"$event.stopPropagation()\"\n [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n this.grid.dragIndicatorIconTemplate\n ? this.grid.dragIndicatorIconTemplate\n : this.grid.dragIndicatorIconBase\n \"\n ></ng-container>\n </div>\n }\n @if (showRowSelectors) {\n <div\n class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n role=\"gridcell\"\n (click)=\"onRowSelectorClick($event)\"\n (pointerdown)=\"$event.preventDefault()\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate\n ? this.grid.rowSelectorTemplate\n : rowSelectorBaseTemplate;\n context: {\n $implicit: {\n index: viewIndex,\n rowID: key,\n key,\n selected: selected,\n },\n }\n \"\n >\n </ng-template>\n </div>\n }\n @if (pinnedStartColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n pinnedCellsTemplate;\n context: { $implicit: this, columns: pinnedStartColumns }\n \"\n ></ng-container>\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n let-colIndex=\"index\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n pinnedCellsTemplate;\n context: { $implicit: this, columns: pinnedEndColumns }\n \"\n ></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 >\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\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></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]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\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]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\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]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\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 >\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]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [level]=\"treeRow.level\"\n [expanded]=\"expanded\"\n [showIndicator]=\"showIndicator\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\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]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\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 >\n </igx-tree-grid-cell>\n</ng-template>\n","import { AfterContentInit, Component, Input, IterableDiffer, IterableDiffers, OnDestroy, booleanAttribute, inject, ChangeDetectionStrategy } 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 changeDetection: ChangeDetectionStrategy.Eager,\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/* wcAlternateName: TreeGridBase */\n/* blazorIndirectRender\n blazorComponent\n omitModule\n wcSkipComponentSuffix */\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\n select=\"igx-tree-grid-group-by-area,igc-tree-grid-group-by-area\"\n></ng-content>\n<igx-grid-header-row\n class=\"igx-grid-thead\"\n 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\n igxGridBody\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n class=\"igx-grid__tbody\"\n role=\"presentation\"\n>\n <div\n class=\"igx-grid__tbody-content\"\n tabindex=\"0\"\n (focus)=\"navigation.focusTbody($event)\"\n (keydown)=\"navigation.handleNavigation($event)\"\n (dragStop)=\"selectionService.dragMode = $event\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.role]=\"dataView.length ? 'rowgroup' : 'row'\"\n (dragScroll)=\"dragScroll($event)\"\n [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]=\"totalHeight\"\n [style.width.px]=\"totalCalcWidth\"\n [style.width]=\"!platform.isBrowser ? '100%' : undefined\"\n #tbody\n (scroll)=\"preventContainerScroll($event)\"\n >\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\"\n [attr.droppable]=\"true\"\n id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"\n ></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\"\n [attr.droppable]=\"true\"\n id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\"\n [style.left.px]=\"pinnedStartWidth\"\n ></span>\n }\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div\n igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"\n this.verticalScrollContainer.dc.instance.scrollContainer\n \"\n [IgxScrollInertiaDirection]=\"\n this.verticalScrollContainer.dc.instance.scrollDirection\n \"\n >\n @for (rowData of mergedDataInView; track rowData.record) {\n <igx-tree-grid-row\n class=\"igx-grid__tr--merged-top\"\n [gridID]=\"id\"\n [index]=\"rowData.index\"\n [treeRow]=\"rowData.record.recordRef\"\n [metaData]=\"rowData.record\"\n [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"\n rowClasses\n | igxGridRowClasses\n : row\n : row.inEditMode\n : row.selected\n : row.dirty\n : row.deleted\n : row.dragging\n : rowData.index\n : hasColumnLayouts\n : hasCellsToMerge\n : row.treeRow.isFilteredOutParent\n : rowData\n : pipeTrigger\n \"\n [ngStyle]=\"\n rowStyles\n | igxGridRowStyles: rowData : rowData.index : pipeTrigger\n \"\n #row\n >\n </igx-tree-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (\n data\n | treeGridTransaction: pipeTrigger\n | visibleColumns: hasVisibleColumns\n | treeGridNormalizeRecord: pipeTrigger\n | treeGridAddRow: true : pipeTrigger\n | gridRowPinning: id : true : pipeTrigger\n | treeGridFiltering\n : filteringExpressionsTree\n : filterStrategy\n : advancedFilteringExpressionsTree\n : pipeTrigger\n : filteringPipeTrigger\n : true\n | treeGridSorting\n : sortingExpressions\n : $safeNavigationMigration(treeGroupArea?.expressions)\n : sortStrategy\n : pipeTrigger\n : true\n | gridCellMerge\n : columnsToMerge\n : cellMergeMode\n : mergeStrategy\n : pipeTrigger\n | gridUnmergeActive\n : columnsToMerge\n : activeRowIndexes\n : true\n : pipeTrigger;\n as pinnedData\n ) {\n @if (pinnedData.length > 0) {\n <div\n #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop,\n }\"\n class=\"igx-grid__tr--pinned\"\n [style.width.px]=\"calcWidth\"\n >\n @for (\n rowData of pinnedData;\n track trackPinnedRowData(rowData);\n let rowIndex = $index\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n pinned_record_template;\n context: getContext(rowData, rowIndex, true)\n \"\n >\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\n \"\n ></ng-container>\n <ng-template\n igxGridFor\n let-rowData\n [igxGridForOf]=\"\n renderData\n | treeGridTransaction: pipeTrigger\n | visibleColumns: hasVisibleColumns\n | treeGridHierarchizing\n : primaryKey\n : foreignKey\n : childDataKey\n : pipeTrigger\n | treeGridFiltering\n : filteringExpressionsTree\n : filterStrategy\n : advancedFilteringExpressionsTree\n : pipeTrigger\n : filteringPipeTrigger\n | treeGridSorting\n : sortingExpressions\n : $safeNavigationMigration(treeGroupArea?.expressions)\n : sortStrategy\n : pipeTrigger\n | treeGridFlattening: expansionDepth : expansionStates : pipeTrigger\n | treeGridPaging: !!paginator : page : perPage : pipeTrigger\n | treeGridSummary\n : hasSummarizedColumns\n : summaryCalculationMode\n : summaryPosition\n : showSummaryOnCollapse\n : pipeTrigger\n : summaryPipeTrigger\n | treeGridAddRow: false : pipeTrigger\n | gridRowPinning: id : false : pipeTrigger\n | gridCellMerge\n : columnsToMerge\n : cellMergeMode\n : mergeStrategy\n : pipeTrigger\n | gridUnmergeActive\n : columnsToMerge\n : activeRowIndexes\n : false\n : pipeTrigger\n \"\n let-rowIndex=\"index\"\n [igxForScrollOrientation]=\"'vertical'\"\n [igxForScrollContainer]=\"verticalScroll\"\n [igxForContainerSize]=\"calcHeight\"\n [igxForItemSize]=\"renderedRowHeight\"\n #verticalScrollContainer\n (dataChanging)=\"dataRebinding($event)\"\n (dataChanged)=\"dataRebound($event)\"\n >\n <div [attr.data-index]=\"rowIndex\">\n <ng-template\n [igxTemplateOutlet]=\"\n isSummaryRow(rowData) ? summary_template : record_template\n \"\n [igxTemplateOutletContext]=\"getContext(rowData, rowIndex, false)\"\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n >\n </ng-template>\n </div>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\n \"\n ></ng-container>\n <ng-template\n #record_template\n let-rowIndex=\"index\"\n let-disabledRow=\"disabled\"\n let-rowData\n let-metaData=\"metaData\"\n >\n <igx-tree-grid-row\n [gridID]=\"id\"\n [index]=\"rowIndex\"\n [treeRow]=\"rowData\"\n [disabled]=\"disabledRow\"\n [metaData]=\"metaData\"\n [ngClass]=\"\n rowClasses\n | igxGridRowClasses\n : row\n : row.inEditMode\n : row.selected\n : row.dirty\n : row.deleted\n : row.dragging\n : rowIndex\n : hasColumnLayouts\n : hasCellsToMerge\n : row.treeRow.isFilteredOutParent\n : rowData\n : pipeTrigger\n \"\n [ngStyle]=\"\n rowStyles | igxGridRowStyles: rowData : rowIndex : pipeTrigger\n \"\n #row\n >\n </igx-tree-grid-row>\n </ng-template>\n <ng-template\n #pinned_record_template\n let-rowIndex=\"index\"\n let-rowData\n let-metaData=\"metaData\"\n >\n <igx-tree-grid-row\n [gridID]=\"id\"\n [index]=\"rowIndex\"\n [treeRow]=\"rowData\"\n [metaData]=\"metaData\"\n [ngClass]=\"\n rowClasses\n | igxGridRowClasses\n : row\n : row.inEditMode\n : row.selected\n : row.dirty\n : row.deleted\n : row.dragging\n : rowIndex\n : hasColumnLayouts\n : hasCellsToMerge\n : row.treeRow.isFilteredOutParent\n : rowData\n : pipeTrigger\n \"\n [ngStyle]=\"\n rowStyles | igxGridRowStyles: rowData : rowIndex : pipeTrigger\n \"\n #row\n #pinnedRow\n >\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row\n [gridID]=\"id\"\n [summaries]=\"rowData.summaries\"\n [firstCellIndentation]=\"rowData.cellIndentation\"\n [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\"\n role=\"row\"\n #summaryRow\n >\n </igx-grid-summary-row>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"template; context: { $implicit: this }\"\n ></ng-container>\n <ng-container #bodyViewContainerRef></ng-container>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\"></igx-circular-bar>\n }\n </div>\n @if (moving && columnInDrag) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\"\n [attr.droppable]=\"true\"\n id=\"right\"\n class=\"igx-grid__scroll-on-drag-right\"\n ></span>\n }\n <div\n [hidden]=\"!hasVerticalScroll()\"\n class=\"igx-grid__tbody-scrollbar\"\n [style.width.px]=\"scrollSize\"\n (pointerdown)=\"$event.preventDefault()\"\n [style.height.px]=\"calcHeight\"\n >\n <div\n class=\"igx-grid__tbody-scrollbar-start\"\n [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"\n ></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n <ng-template\n igxGridFor\n [igxGridForOf]=\"[]\"\n #verticalScrollHolder\n ></ng-template>\n </div>\n <div\n class=\"igx-grid__tbody-scrollbar-end\"\n [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"\n ></div>\n </div>\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar\n #addRowSnackbar\n [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\"\n [displayTime]=\"snackbarDisplayTime\"\n >{{ resourceStrings.igx_grid_snackbar_addrow_label }}</igx-snackbar\n >\n </div>\n</div>\n\n<div\n class=\"igx-grid__tfoot\"\n role=\"presentation\"\n [style.height.px]=\"summaryRowHeight\"\n #tfoot\n>\n <div\n tabindex=\"0\"\n role=\"rowgroup\"\n (focus)=\"navigation.focusFirstCell(false)\"\n (keydown)=\"navigation.summaryNav($event)\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n >\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row\n [style.width.px]=\"calcWidth\"\n [style.height.px]=\"summaryRowHeight\"\n [gridID]=\"id\"\n role=\"row\"\n [summaries]=\"\n id | igxGridSummaryDataPipe: summaryService.retriggerRootPipe\n \"\n [index]=\"dataView.length\"\n class=\"igx-grid__summaries\"\n #summaryRow\n >\n </igx-grid-summary-row>\n }\n <div\n class=\"igx-grid__tfoot-thumb\"\n [hidden]=\"!hasVerticalScroll()\"\n [style.height.px]=\"summaryRowHeight\"\n [style.width.px]=\"scrollSize\"\n ></div>\n </div>\n</div>\n\n<div\n class=\"igx-grid__scroll\"\n role=\"presentation\"\n [style.height.px]=\"scrollSize\"\n #scr\n [hidden]=\"isHorizontalScrollHidden\"\n (pointerdown)=\"$event.preventDefault()\"\n>\n <div\n class=\"igx-grid__scroll-start\"\n [style.width.px]=\"pinnedStartWidth\"\n [style.min-width.px]=\"pinnedStartWidth\"\n ></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n <ng-template igxGridFor [igxGridForOf]=\"[]\" #scrollContainer> </ng-template>\n </div>\n <div\n class=\"igx-grid__scroll-end\"\n [style.width.px]=\"pinnedEndWidth\"\n [style.min-width.px]=\"pinnedEndWidth\"\n [hidden]=\"pinnedEndWidth === 0\"\n ></div>\n</div>\n\n<div class=\"igx-grid__footer\" role=\"presentation\" #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\n *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"\n ></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\n *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"\n ></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button\n type=\"button\"\n igxButton=\"contained\"\n igxRipple\n (click)=\"this.crudService.enterAddRowMode(null, false, $event)\"\n >\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\"> </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=\"\n rowEditContainer;\n context: {\n rowChangesCount: rowChangesCount,\n endEdit: this.crudService.endEdit.bind(this),\n $implicit: this\n }\n \"\n >\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{\n this.resourceStrings.igx_grid_row_edit_text\n | igxStringReplace: '{0}' : rowChangesCount.toString()\n | igxStringReplace: '{1}' : hiddenColumnsCount.toString()\n }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button\n type=\"button\"\n igxButton\n igxRowEditTabStop\n (click)=\"this.endRowEditTabStop(false, $event)\"\n >\n {{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}\n </button>\n <button\n type=\"button\"\n igxButton\n igxRowEditTabStop\n (click)=\"this.endRowEditTabStop(true, $event)\"\n >\n {{ this.resourceStrings.igx_grid_row_edit_btn_done }}\n </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=\"\n this.crudService.row?.isAddRow\n ? rowAddTextTemplate\n : rowEditTextTemplate\n ? rowEditTextTemplate\n : defaultRowEditText;\n context: {\n $implicit: !this.crudService.row?.isAddRow ? rowChangesCount : null,\n }\n \"\n >\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"\n rowEditActionsTemplate\n ? rowEditActionsTemplate\n : defaultRowEditActions;\n context: { $implicit: this.endEdit.bind(this) }\n \"\n >\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__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\n select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip\"\n ></ng-content>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\nimport { 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 ? this.grid.i18nFormatter.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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"}
|
|
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\n || column.dataType === GridColumnDataType.Currency\n || column.dataType === GridColumnDataType.Percent) && 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 } 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, IgxNumberFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, IgxDateFormatterPipe } 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 IgxNumberFormatterPipe,\n IgxPercentFormatterPipe,\n IgxCurrencyFormatterPipe,\n IgxDateFormatterPipe,\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 }\n</ng-template>\n<ng-template #defaultCell>\n @if (\n (column.dataType !== 'boolean' && column.dataType !== 'image') ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\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' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : grid.locale)\n : column.dataType === 'percent'\n ? (value | percent: column.pipeArgs.digitsInfo : grid.locale)\n : value\n }}\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 >\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 (\n column.dataType !== 'boolean' ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\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' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{ !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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [weekStart]=\"column.pipeArgs.weekStart\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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>\n {{ editValue | percent: column.pipeArgs.digitsInfo : grid.locale }}\n </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]=\"{\n 'padding-inline-start':\n 'calc(var(--ig-tree-indent-size) *' + level + ')',\n }\"\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 (mouseover)=\"errorShowing = true\"\n (mouseout)=\"errorShowing = false\"\n >\n </igx-icon>\n <div [id]=\"ariaErrorMessage\" igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container\n *ngTemplateOutlet=\"\n cellValidationErrorTemplate || defaultError;\n context: context\n \"\n ></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 (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['required']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_required_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'minlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.minlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'maxlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.maxlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['min']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.min.min\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['max']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.max.max\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['email']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['pattern']\n ) {\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\n *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"\n></ng-container>\n\n<ng-template #addTemp>\n <div\n class=\"igx-grid__tr--inner\"\n [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\"\n (animationend)=\"animationEndHandler()\"\n >\n <ng-container *ngTemplateOutlet=\"defaultTemp\"></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div\n [class]=\"resolveDragIndicatorClasses\"\n role=\"gridcell\"\n [igxRowDrag]=\"this\"\n (click)=\"$event.stopPropagation()\"\n [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n this.grid.dragIndicatorIconTemplate\n ? this.grid.dragIndicatorIconTemplate\n : this.grid.dragIndicatorIconBase\n \"\n ></ng-container>\n </div>\n }\n @if (showRowSelectors) {\n <div\n class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n role=\"gridcell\"\n (click)=\"onRowSelectorClick($event)\"\n (pointerdown)=\"$event.preventDefault()\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate\n ? this.grid.rowSelectorTemplate\n : rowSelectorBaseTemplate;\n context: {\n $implicit: {\n index: viewIndex,\n rowID: key,\n key,\n selected: selected,\n },\n }\n \"\n >\n </ng-template>\n </div>\n }\n @if (pinnedStartColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n pinnedCellsTemplate;\n context: { $implicit: this, columns: pinnedStartColumns }\n \"\n ></ng-container>\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n let-colIndex=\"index\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n pinnedCellsTemplate;\n context: { $implicit: this, columns: pinnedEndColumns }\n \"\n ></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 >\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\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 ? treeCellTemplate : cellTemplate;\n context: { $implicit: this, column: col }\n \"\n ></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]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\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]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\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]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\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 >\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]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [level]=\"treeRow.level\"\n [expanded]=\"expanded\"\n [showIndicator]=\"showIndicator\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\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]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\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 >\n </igx-tree-grid-cell>\n</ng-template>\n","import { AfterContentInit, Component, Input, IterableDiffer, IterableDiffers, OnDestroy, booleanAttribute, inject, ChangeDetectionStrategy } 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 changeDetection: ChangeDetectionStrategy.Eager,\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/* wcAlternateName: TreeGridBase */\n/* blazorIndirectRender\n blazorComponent\n omitModule\n wcSkipComponentSuffix */\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 tree grid.\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 tree grid.\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 tree grid. 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 tree grid row 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 tree grid row 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 tree grid rows 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 grid cells.\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\n select=\"igx-tree-grid-group-by-area,igc-tree-grid-group-by-area\"\n></ng-content>\n<igx-grid-header-row\n class=\"igx-grid-thead\"\n 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\n igxGridBody\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n class=\"igx-grid__tbody\"\n role=\"presentation\"\n>\n <div\n class=\"igx-grid__tbody-content\"\n tabindex=\"0\"\n (focus)=\"navigation.focusTbody($event)\"\n (keydown)=\"navigation.handleNavigation($event)\"\n (dragStop)=\"selectionService.dragMode = $event\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.role]=\"dataView.length ? 'rowgroup' : 'row'\"\n (dragScroll)=\"dragScroll($event)\"\n [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]=\"totalHeight\"\n [style.width.px]=\"totalCalcWidth\"\n [style.width]=\"!platform.isBrowser ? '100%' : undefined\"\n #tbody\n (scroll)=\"preventContainerScroll($event)\"\n >\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\"\n [attr.droppable]=\"true\"\n id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"\n ></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\"\n [attr.droppable]=\"true\"\n id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\"\n [style.left.px]=\"pinnedStartWidth\"\n ></span>\n }\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div\n igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"\n this.verticalScrollContainer.dc.instance.scrollContainer\n \"\n [IgxScrollInertiaDirection]=\"\n this.verticalScrollContainer.dc.instance.scrollDirection\n \"\n >\n @for (rowData of mergedDataInView; track rowData.record) {\n <igx-tree-grid-row\n class=\"igx-grid__tr--merged-top\"\n [gridID]=\"id\"\n [index]=\"rowData.index\"\n [treeRow]=\"rowData.record.recordRef\"\n [metaData]=\"rowData.record\"\n [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"\n rowClasses\n | igxGridRowClasses\n : row\n : row.inEditMode\n : row.selected\n : row.dirty\n : row.deleted\n : row.dragging\n : rowData.index\n : hasColumnLayouts\n : hasCellsToMerge\n : row.treeRow.isFilteredOutParent\n : rowData\n : pipeTrigger\n \"\n [ngStyle]=\"\n rowStyles\n | igxGridRowStyles: rowData : rowData.index : pipeTrigger\n \"\n #row\n >\n </igx-tree-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (\n data\n | treeGridTransaction: pipeTrigger\n | visibleColumns: hasVisibleColumns\n | treeGridNormalizeRecord: pipeTrigger\n | treeGridAddRow: true : pipeTrigger\n | gridRowPinning: id : true : pipeTrigger\n | treeGridFiltering\n : filteringExpressionsTree\n : filterStrategy\n : advancedFilteringExpressionsTree\n : pipeTrigger\n : filteringPipeTrigger\n : true\n | treeGridSorting\n : sortingExpressions\n : $safeNavigationMigration(treeGroupArea?.expressions)\n : sortStrategy\n : pipeTrigger\n : true\n | gridCellMerge\n : columnsToMerge\n : cellMergeMode\n : mergeStrategy\n : pipeTrigger\n | gridUnmergeActive\n : columnsToMerge\n : activeRowIndexes\n : true\n : pipeTrigger;\n as pinnedData\n ) {\n @if (pinnedData.length > 0) {\n <div\n #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop,\n }\"\n class=\"igx-grid__tr--pinned\"\n [style.width.px]=\"calcWidth\"\n >\n @for (\n rowData of pinnedData;\n track trackPinnedRowData(rowData);\n let rowIndex = $index\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n pinned_record_template;\n context: getContext(rowData, rowIndex, true)\n \"\n >\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\n \"\n ></ng-container>\n <ng-template\n igxGridFor\n let-rowData\n [igxGridForOf]=\"\n renderData\n | treeGridTransaction: pipeTrigger\n | visibleColumns: hasVisibleColumns\n | treeGridHierarchizing\n : primaryKey\n : foreignKey\n : childDataKey\n : pipeTrigger\n | treeGridFiltering\n : filteringExpressionsTree\n : filterStrategy\n : advancedFilteringExpressionsTree\n : pipeTrigger\n : filteringPipeTrigger\n | treeGridSorting\n : sortingExpressions\n : $safeNavigationMigration(treeGroupArea?.expressions)\n : sortStrategy\n : pipeTrigger\n | treeGridFlattening: expansionDepth : expansionStates : pipeTrigger\n | treeGridPaging: !!paginator : page : perPage : pipeTrigger\n | treeGridSummary\n : hasSummarizedColumns\n : summaryCalculationMode\n : summaryPosition\n : showSummaryOnCollapse\n : pipeTrigger\n : summaryPipeTrigger\n | treeGridAddRow: false : pipeTrigger\n | gridRowPinning: id : false : pipeTrigger\n | gridCellMerge\n : columnsToMerge\n : cellMergeMode\n : mergeStrategy\n : pipeTrigger\n | gridUnmergeActive\n : columnsToMerge\n : activeRowIndexes\n : false\n : pipeTrigger\n \"\n let-rowIndex=\"index\"\n [igxForScrollOrientation]=\"'vertical'\"\n [igxForScrollContainer]=\"verticalScroll\"\n [igxForContainerSize]=\"calcHeight\"\n [igxForItemSize]=\"renderedRowHeight\"\n #verticalScrollContainer\n (dataChanging)=\"dataRebinding($event)\"\n (dataChanged)=\"dataRebound($event)\"\n >\n <div [attr.data-index]=\"rowIndex\">\n <ng-template\n [igxTemplateOutlet]=\"\n isSummaryRow(rowData) ? summary_template : record_template\n \"\n [igxTemplateOutletContext]=\"getContext(rowData, rowIndex, false)\"\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n >\n </ng-template>\n </div>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\n \"\n ></ng-container>\n <ng-template\n #record_template\n let-rowIndex=\"index\"\n let-disabledRow=\"disabled\"\n let-rowData\n let-metaData=\"metaData\"\n >\n <igx-tree-grid-row\n [gridID]=\"id\"\n [index]=\"rowIndex\"\n [treeRow]=\"rowData\"\n [disabled]=\"disabledRow\"\n [metaData]=\"metaData\"\n [ngClass]=\"\n rowClasses\n | igxGridRowClasses\n : row\n : row.inEditMode\n : row.selected\n : row.dirty\n : row.deleted\n : row.dragging\n : rowIndex\n : hasColumnLayouts\n : hasCellsToMerge\n : row.treeRow.isFilteredOutParent\n : rowData\n : pipeTrigger\n \"\n [ngStyle]=\"\n rowStyles | igxGridRowStyles: rowData : rowIndex : pipeTrigger\n \"\n #row\n >\n </igx-tree-grid-row>\n </ng-template>\n <ng-template\n #pinned_record_template\n let-rowIndex=\"index\"\n let-rowData\n let-metaData=\"metaData\"\n >\n <igx-tree-grid-row\n [gridID]=\"id\"\n [index]=\"rowIndex\"\n [treeRow]=\"rowData\"\n [metaData]=\"metaData\"\n [ngClass]=\"\n rowClasses\n | igxGridRowClasses\n : row\n : row.inEditMode\n : row.selected\n : row.dirty\n : row.deleted\n : row.dragging\n : rowIndex\n : hasColumnLayouts\n : hasCellsToMerge\n : row.treeRow.isFilteredOutParent\n : rowData\n : pipeTrigger\n \"\n [ngStyle]=\"\n rowStyles | igxGridRowStyles: rowData : rowIndex : pipeTrigger\n \"\n #row\n #pinnedRow\n >\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row\n [gridID]=\"id\"\n [summaries]=\"rowData.summaries\"\n [firstCellIndentation]=\"rowData.cellIndentation\"\n [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\"\n role=\"row\"\n #summaryRow\n >\n </igx-grid-summary-row>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"template; context: { $implicit: this }\"\n ></ng-container>\n <ng-container #bodyViewContainerRef></ng-container>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\"></igx-circular-bar>\n }\n </div>\n @if (moving && columnInDrag) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\"\n [attr.droppable]=\"true\"\n id=\"right\"\n class=\"igx-grid__scroll-on-drag-right\"\n ></span>\n }\n <div\n [hidden]=\"!hasVerticalScroll()\"\n class=\"igx-grid__tbody-scrollbar\"\n [style.width.px]=\"scrollSize\"\n (pointerdown)=\"$event.preventDefault()\"\n [style.height.px]=\"calcHeight\"\n >\n <div\n class=\"igx-grid__tbody-scrollbar-start\"\n [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"\n ></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n <ng-template\n igxGridFor\n [igxGridForOf]=\"[]\"\n #verticalScrollHolder\n ></ng-template>\n </div>\n <div\n class=\"igx-grid__tbody-scrollbar-end\"\n [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"\n ></div>\n </div>\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar\n #addRowSnackbar\n [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\"\n [displayTime]=\"snackbarDisplayTime\"\n >{{ resourceStrings.igx_grid_snackbar_addrow_label }}</igx-snackbar\n >\n </div>\n</div>\n\n<div\n class=\"igx-grid__tfoot\"\n role=\"presentation\"\n [style.height.px]=\"summaryRowHeight\"\n #tfoot\n>\n <div\n tabindex=\"0\"\n role=\"rowgroup\"\n (focus)=\"navigation.focusFirstCell(false)\"\n (keydown)=\"navigation.summaryNav($event)\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n >\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row\n [style.width.px]=\"calcWidth\"\n [style.height.px]=\"summaryRowHeight\"\n [gridID]=\"id\"\n role=\"row\"\n [summaries]=\"\n id | igxGridSummaryDataPipe: summaryService.retriggerRootPipe\n \"\n [index]=\"dataView.length\"\n class=\"igx-grid__summaries\"\n #summaryRow\n >\n </igx-grid-summary-row>\n }\n <div\n class=\"igx-grid__tfoot-thumb\"\n [hidden]=\"!hasVerticalScroll()\"\n [style.height.px]=\"summaryRowHeight\"\n [style.width.px]=\"scrollSize\"\n ></div>\n </div>\n</div>\n\n<div\n class=\"igx-grid__scroll\"\n role=\"presentation\"\n [style.height.px]=\"scrollSize\"\n #scr\n [hidden]=\"isHorizontalScrollHidden\"\n (pointerdown)=\"$event.preventDefault()\"\n>\n <div\n class=\"igx-grid__scroll-start\"\n [style.width.px]=\"pinnedStartWidth\"\n [style.min-width.px]=\"pinnedStartWidth\"\n ></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n <ng-template igxGridFor [igxGridForOf]=\"[]\" #scrollContainer> </ng-template>\n </div>\n <div\n class=\"igx-grid__scroll-end\"\n [style.width.px]=\"pinnedEndWidth\"\n [style.min-width.px]=\"pinnedEndWidth\"\n [hidden]=\"pinnedEndWidth === 0\"\n ></div>\n</div>\n\n<div class=\"igx-grid__footer\" role=\"presentation\" #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\n *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"\n ></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\n *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"\n ></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button\n type=\"button\"\n igxButton=\"contained\"\n igxRipple\n (click)=\"this.crudService.enterAddRowMode(null, false, $event)\"\n >\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\"> </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=\"\n rowEditContainer;\n context: {\n rowChangesCount: rowChangesCount,\n endEdit: this.crudService.endEdit.bind(this),\n $implicit: this\n }\n \"\n >\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{\n this.resourceStrings.igx_grid_row_edit_text\n | igxStringReplace: '{0}' : rowChangesCount.toString()\n | igxStringReplace: '{1}' : hiddenColumnsCount.toString()\n }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button\n type=\"button\"\n igxButton\n igxRowEditTabStop\n (click)=\"this.endRowEditTabStop(false, $event)\"\n >\n {{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}\n </button>\n <button\n type=\"button\"\n igxButton\n igxRowEditTabStop\n (click)=\"this.endRowEditTabStop(true, $event)\"\n >\n {{ this.resourceStrings.igx_grid_row_edit_btn_done }}\n </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=\"\n this.crudService.row?.isAddRow\n ? rowAddTextTemplate\n : rowEditTextTemplate\n ? rowEditTextTemplate\n : defaultRowEditText;\n context: {\n $implicit: !this.crudService.row?.isAddRow ? rowChangesCount : null,\n }\n \"\n >\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"\n rowEditActionsTemplate\n ? rowEditActionsTemplate\n : defaultRowEditActions;\n context: { $implicit: this.endEdit.bind(this) }\n \"\n >\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__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\n select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip\"\n ></ng-content>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\nimport { 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 ? this.grid.i18nFormatter.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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"}
|