@syncfusion/ej2-treegrid 32.2.7 → 32.2.9-1987473
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/.eslintrc.json +243 -262
- package/README.md +92 -92
- package/dist/ej2-treegrid.umd.min.js +1 -10
- package/dist/ej2-treegrid.umd.min.js.map +1 -1
- package/dist/es6/ej2-treegrid.es2015.js +127 -96
- package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
- package/dist/es6/ej2-treegrid.es5.js +424 -392
- package/dist/es6/ej2-treegrid.es5.js.map +1 -1
- package/license +9 -9
- package/package.json +44 -44
- package/src/treegrid/actions/clipboard.js +13 -13
- package/src/treegrid/actions/excel-export.js +35 -5
- package/src/treegrid/actions/logger.js +13 -13
- package/src/treegrid/actions/pdf-export.js +1 -1
- package/src/treegrid/actions/virtual-scroll.js +18 -14
- package/src/treegrid/base/treegrid-model.d.ts +950 -950
- package/src/treegrid/base/treegrid.d.ts +18 -18
- package/src/treegrid/base/treegrid.js +30 -35
- package/src/treegrid/models/column-chooser-settings-model.d.ts +41 -41
- package/src/treegrid/models/column-chooser-settings.js +19 -19
- package/src/treegrid/models/column-model.d.ts +6 -6
- package/src/treegrid/models/column.js +19 -19
- package/src/treegrid/models/edit-settings-model.d.ts +71 -71
- package/src/treegrid/models/edit-settings.js +19 -19
- package/src/treegrid/models/filter-settings-model.d.ts +198 -198
- package/src/treegrid/models/filter-settings.js +19 -19
- package/src/treegrid/models/infinite-scroll-settings-model.d.ts +16 -16
- package/src/treegrid/models/infinite-scroll-settings.js +19 -19
- package/src/treegrid/models/loading-indicator.js +19 -19
- package/src/treegrid/models/page-settings-model.d.ts +43 -43
- package/src/treegrid/models/page-settings.js +19 -19
- package/src/treegrid/models/rowdrop-settings-model.d.ts +6 -6
- package/src/treegrid/models/rowdrop-settings.js +19 -19
- package/src/treegrid/models/search-settings-model.d.ts +62 -62
- package/src/treegrid/models/search-settings.js +19 -19
- package/src/treegrid/models/selection-settings-model.d.ts +55 -55
- package/src/treegrid/models/selection-settings.js +19 -19
- package/src/treegrid/models/sort-settings-model.d.ts +27 -27
- package/src/treegrid/models/sort-settings.js +19 -19
- package/src/treegrid/models/summary-model.d.ts +63 -63
- package/src/treegrid/models/summary.js +19 -19
- package/src/treegrid/models/textwrap-settings-model.d.ts +12 -12
- package/src/treegrid/models/textwrap-settings.js +19 -19
- package/src/treegrid/renderer/virtual-row-model-generator.js +13 -13
- package/src/treegrid/renderer/virtual-tree-content-render.js +16 -13
- package/styles/treegrid/_all.bds.scss +2 -2
- package/styles/treegrid/_all.bootstrap-dark.scss +2 -2
- package/styles/treegrid/_all.bootstrap.scss +2 -2
- package/styles/treegrid/_all.bootstrap4.scss +2 -2
- package/styles/treegrid/_all.bootstrap5-dark.scss +2 -2
- package/styles/treegrid/_all.bootstrap5.3.scss +2 -2
- package/styles/treegrid/_all.bootstrap5.scss +2 -2
- package/styles/treegrid/_all.fabric-dark.scss +2 -2
- package/styles/treegrid/_all.fabric.scss +2 -2
- package/styles/treegrid/_all.fluent-dark.scss +2 -2
- package/styles/treegrid/_all.fluent.scss +2 -2
- package/styles/treegrid/_all.fluent2.scss +2 -2
- package/styles/treegrid/_all.highcontrast-light.scss +2 -2
- package/styles/treegrid/_all.highcontrast.scss +2 -2
- package/styles/treegrid/_all.material-dark.scss +2 -2
- package/styles/treegrid/_all.material.scss +2 -2
- package/styles/treegrid/_all.material3-dark.scss +2 -2
- package/styles/treegrid/_all.material3.scss +2 -2
- package/styles/treegrid/_all.scss +2 -2
- package/styles/treegrid/_all.tailwind-dark.scss +2 -2
- package/styles/treegrid/_all.tailwind.scss +2 -2
- package/styles/treegrid/_all.tailwind3.scss +2 -2
- package/styles/treegrid/_bds-definition.scss +26 -26
- package/styles/treegrid/_bigger.bds.scss +3 -3
- package/styles/treegrid/_bigger.bootstrap-dark.scss +3 -3
- package/styles/treegrid/_bigger.bootstrap.scss +3 -3
- package/styles/treegrid/_bigger.bootstrap4.scss +3 -3
- package/styles/treegrid/_bigger.bootstrap5-dark.scss +3 -3
- package/styles/treegrid/_bigger.bootstrap5.3.scss +3 -3
- package/styles/treegrid/_bigger.bootstrap5.scss +3 -3
- package/styles/treegrid/_bigger.fabric-dark.scss +3 -3
- package/styles/treegrid/_bigger.fabric.scss +3 -3
- package/styles/treegrid/_bigger.fluent-dark.scss +3 -3
- package/styles/treegrid/_bigger.fluent.scss +3 -3
- package/styles/treegrid/_bigger.fluent2.scss +3 -3
- package/styles/treegrid/_bigger.highcontrast-light.scss +3 -3
- package/styles/treegrid/_bigger.highcontrast.scss +3 -3
- package/styles/treegrid/_bigger.material-dark.scss +3 -3
- package/styles/treegrid/_bigger.material.scss +3 -3
- package/styles/treegrid/_bigger.material3-dark.scss +3 -3
- package/styles/treegrid/_bigger.material3.scss +3 -3
- package/styles/treegrid/_bigger.scss +67 -67
- package/styles/treegrid/_bigger.tailwind-dark.scss +3 -3
- package/styles/treegrid/_bigger.tailwind.scss +3 -3
- package/styles/treegrid/_bigger.tailwind3.scss +3 -3
- package/styles/treegrid/_bootstrap-dark-definition.scss +31 -31
- package/styles/treegrid/_bootstrap-definition.scss +31 -31
- package/styles/treegrid/_bootstrap4-definition.scss +31 -31
- package/styles/treegrid/_bootstrap5-dark-definition.scss +26 -26
- package/styles/treegrid/_bootstrap5-definition.scss +26 -26
- package/styles/treegrid/_bootstrap5.3-definition.scss +26 -26
- package/styles/treegrid/_fabric-dark-definition.scss +31 -31
- package/styles/treegrid/_fabric-definition.scss +31 -31
- package/styles/treegrid/_fluent-dark-definition.scss +27 -27
- package/styles/treegrid/_fluent-definition.scss +27 -27
- package/styles/treegrid/_fluent2-definition.scss +26 -26
- package/styles/treegrid/_fusionnew-definition.scss +24 -24
- package/styles/treegrid/_highcontrast-definition.scss +31 -31
- package/styles/treegrid/_highcontrast-light-definition.scss +31 -31
- package/styles/treegrid/_icons.scss +47 -47
- package/styles/treegrid/_layout.bds.scss +4 -4
- package/styles/treegrid/_layout.bootstrap-dark.scss +4 -4
- package/styles/treegrid/_layout.bootstrap.scss +4 -4
- package/styles/treegrid/_layout.bootstrap4.scss +4 -4
- package/styles/treegrid/_layout.bootstrap5-dark.scss +4 -4
- package/styles/treegrid/_layout.bootstrap5.3.scss +4 -4
- package/styles/treegrid/_layout.bootstrap5.scss +4 -4
- package/styles/treegrid/_layout.fabric-dark.scss +4 -4
- package/styles/treegrid/_layout.fabric.scss +4 -4
- package/styles/treegrid/_layout.fluent-dark.scss +4 -4
- package/styles/treegrid/_layout.fluent.scss +4 -4
- package/styles/treegrid/_layout.fluent2.scss +4 -4
- package/styles/treegrid/_layout.highcontrast-light.scss +4 -4
- package/styles/treegrid/_layout.highcontrast.scss +4 -4
- package/styles/treegrid/_layout.material-dark.scss +4 -4
- package/styles/treegrid/_layout.material.scss +4 -4
- package/styles/treegrid/_layout.material3-dark.scss +4 -4
- package/styles/treegrid/_layout.material3.scss +4 -4
- package/styles/treegrid/_layout.scss +531 -531
- package/styles/treegrid/_layout.tailwind-dark.scss +4 -4
- package/styles/treegrid/_layout.tailwind.scss +4 -4
- package/styles/treegrid/_layout.tailwind3.scss +4 -4
- package/styles/treegrid/_material-dark-definition.scss +31 -31
- package/styles/treegrid/_material-definition.scss +31 -31
- package/styles/treegrid/_material3-dark-definition.scss +26 -26
- package/styles/treegrid/_material3-definition.scss +26 -26
- package/styles/treegrid/_tailwind-dark-definition.scss +26 -26
- package/styles/treegrid/_tailwind-definition.scss +26 -26
- package/styles/treegrid/_tailwind3-definition.scss +26 -26
- package/styles/treegrid/_theme-variables.bds.scss +1 -1
- package/styles/treegrid/_theme-variables.bootstrap-dark.scss +1 -1
- package/styles/treegrid/_theme-variables.bootstrap.scss +1 -1
- package/styles/treegrid/_theme-variables.bootstrap4.scss +1 -1
- package/styles/treegrid/_theme-variables.bootstrap5-dark.scss +1 -1
- package/styles/treegrid/_theme-variables.bootstrap5.3.scss +1 -1
- package/styles/treegrid/_theme-variables.bootstrap5.scss +1 -1
- package/styles/treegrid/_theme-variables.fabric-dark.scss +1 -1
- package/styles/treegrid/_theme-variables.fabric.scss +1 -1
- package/styles/treegrid/_theme-variables.fluent-dark.scss +1 -1
- package/styles/treegrid/_theme-variables.fluent.scss +1 -1
- package/styles/treegrid/_theme-variables.fluent2.scss +1 -1
- package/styles/treegrid/_theme-variables.highcontrast-light.scss +1 -1
- package/styles/treegrid/_theme-variables.highcontrast.scss +1 -1
- package/styles/treegrid/_theme-variables.material-dark.scss +1 -1
- package/styles/treegrid/_theme-variables.material.scss +1 -1
- package/styles/treegrid/_theme-variables.material3-dark.scss +1 -1
- package/styles/treegrid/_theme-variables.material3.scss +1 -1
- package/styles/treegrid/_theme-variables.tailwind-dark.scss +1 -1
- package/styles/treegrid/_theme-variables.tailwind.scss +1 -1
- package/styles/treegrid/_theme-variables.tailwind3.scss +1 -1
- package/styles/treegrid/_theme.bds.scss +1 -1
- package/styles/treegrid/_theme.bootstrap-dark.scss +1 -1
- package/styles/treegrid/_theme.bootstrap.scss +1 -1
- package/styles/treegrid/_theme.bootstrap4.scss +1 -1
- package/styles/treegrid/_theme.bootstrap5-dark.scss +1 -1
- package/styles/treegrid/_theme.bootstrap5.3.scss +1 -1
- package/styles/treegrid/_theme.bootstrap5.scss +1 -1
- package/styles/treegrid/_theme.fabric-dark.scss +1 -1
- package/styles/treegrid/_theme.fabric.scss +1 -1
- package/styles/treegrid/_theme.fluent-dark.scss +1 -1
- package/styles/treegrid/_theme.fluent.scss +1 -1
- package/styles/treegrid/_theme.fluent2.scss +1 -1
- package/styles/treegrid/_theme.highcontrast-light.scss +1 -1
- package/styles/treegrid/_theme.highcontrast.scss +1 -1
- package/styles/treegrid/_theme.material-dark.scss +1 -1
- package/styles/treegrid/_theme.material.scss +1 -1
- package/styles/treegrid/_theme.material3-dark.scss +1 -1
- package/styles/treegrid/_theme.material3.scss +1 -1
- package/styles/treegrid/_theme.scss +1 -1
- package/styles/treegrid/_theme.tailwind-dark.scss +1 -1
- package/styles/treegrid/_theme.tailwind.scss +1 -1
- package/styles/treegrid/_theme.tailwind3.scss +1 -1
- package/styles/treegrid/icons/_bds.scss +38 -38
- package/styles/treegrid/icons/_bootstrap-dark.scss +48 -48
- package/styles/treegrid/icons/_bootstrap.scss +48 -48
- package/styles/treegrid/icons/_bootstrap4.scss +48 -48
- package/styles/treegrid/icons/_bootstrap5.3.scss +48 -48
- package/styles/treegrid/icons/_bootstrap5.scss +48 -48
- package/styles/treegrid/icons/_fabric-dark.scss +48 -48
- package/styles/treegrid/icons/_fabric.scss +48 -48
- package/styles/treegrid/icons/_fluent.scss +48 -48
- package/styles/treegrid/icons/_fluent2.scss +48 -48
- package/styles/treegrid/icons/_fusionnew.scss +31 -31
- package/styles/treegrid/icons/_highcontrast-light.scss +48 -48
- package/styles/treegrid/icons/_highcontrast.scss +48 -48
- package/styles/treegrid/icons/_material-dark.scss +48 -48
- package/styles/treegrid/icons/_material.scss +48 -48
- package/styles/treegrid/icons/_material3.scss +48 -48
- package/styles/treegrid/icons/_tailwind-dark.scss +48 -48
- package/styles/treegrid/icons/_tailwind.scss +48 -48
- package/styles/treegrid/icons/_tailwind3.scss +48 -48
- package/aceconfig.js +0 -17
- package/dist/ej2-treegrid.min.js +0 -10
- package/dist/global/ej2-treegrid.min.js +0 -11
- package/dist/global/ej2-treegrid.min.js.map +0 -1
- package/dist/global/index.d.ts +0 -14
- package/helpers/e2e/index.d.ts +0 -1
- package/helpers/e2e/index.js +0 -8
- package/helpers/e2e/treegridhelper.d.ts +0 -21
- package/helpers/e2e/treegridhelper.js +0 -83
- package/tslint.json +0 -111
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.js","../../src/treegrid/models/loading-indicator.js","../../src/treegrid/models/filter-settings.js","../../src/treegrid/models/textwrap-settings.js","../../src/treegrid/actions/logger.js","../../src/treegrid/actions/clipboard.js","../../src/treegrid/base/constant.js","../../src/treegrid/actions/selection.js","../../src/treegrid/actions/print.js","../../src/treegrid/models/search-settings.js","../../src/treegrid/models/selection-settings.js","../../src/treegrid/renderer/render.js","../../src/treegrid/base/data.js","../../src/treegrid/enum.js","../../src/treegrid/models/page-settings.js","../../src/treegrid/models/summary.js","../../src/treegrid/models/edit-settings.js","../../src/treegrid/models/sort-settings.js","../../src/treegrid/models/infinite-scroll-settings.js","../../src/treegrid/models/column-chooser-settings.js","../../src/treegrid/base/treegrid.js","../../src/treegrid/actions/reorder.js","../../src/treegrid/actions/resize.js","../../src/treegrid/actions/rowdragdrop.js","../../src/treegrid/models/rowdrop-settings.js","../../src/treegrid/renderer/virtual-row-model-generator.js","../../src/treegrid/actions/filter.js","../../src/treegrid/actions/excel-export.js","../../src/treegrid/actions/pdf-export.js","../../src/treegrid/actions/page.js","../../src/treegrid/actions/toolbar.js","../../src/treegrid/actions/summary.js","../../src/treegrid/actions/sort.js","../../src/treegrid/actions/column-menu.js","../../src/treegrid/actions/context-menu.js","../../src/treegrid/actions/batch-edit.js","../../src/treegrid/actions/edit.js","../../src/treegrid/actions/command-column.js","../../src/treegrid/actions/detail-row.js","../../src/treegrid/renderer/virtual-tree-content-render.js","../../src/treegrid/actions/virtual-scroll.js","../../src/treegrid/actions/freeze-column.js","../../src/treegrid/actions/column-chooser.js","../../src/treegrid/actions/infinite-scroll.js","../../src/global.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent['treeGrid'] && parent['treeGrid']['isGantt']) {\n if (parent['taskFields'].hasChildMapping) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n }\n else {\n return false;\n }\n }\n else {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n }\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[parseInt(i.toString(), 10)].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[parseInt(i.toString(), 10)]);\n if (hasChild) {\n datas.push(records[parseInt(i.toString(), 10)]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords.filter(function (item) { return !item.isSummaryRow; });\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[parseInt(i.toString(), 10)]);\n if (childRecords[parseInt(i.toString(), 10)].hasChildRecords ||\n (!isNullOrUndefined(childRecords[parseInt(i.toString(), 10)].childRecords) &&\n childRecords[parseInt(i.toString(), 10)].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[parseInt(i.toString(), 10)]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[parseInt(i.toString(), 10)]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[parseInt(j.toString(), 10)]] = array[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[\"\" + idFilter][\"\" + value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[\"\" + id][\"\" + value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var gridData = control.grid.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[\"\" + addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[parseInt(k.toString(), 10)][\"\" + key]) === 'object') {\n modifiedData[parseInt(k.toString(), 10)] = modifiedData[parseInt(k.toString(), 10)][\"\" + key];\n }\n var keys = modifiedData[parseInt(k.toString(), 10)].taskData ?\n Object.keys(modifiedData[parseInt(k.toString(), 10)].taskData) :\n Object.keys(modifiedData[parseInt(k.toString(), 10)]);\n i = treeData.length === 0 && gridData.length === 1 ? gridData.length : treeData.length;\n var _loop_1 = function () {\n if ((treeData.length === 0 && gridData.length === 1 && gridData[parseInt(i.toString(), 10)][\"\" + key] === modifiedData[parseInt(k.toString(), 10)][\"\" + key]) || treeData[parseInt(i.toString(), 10)][\"\" + key] === modifiedData[parseInt(k.toString(), 10)][\"\" + key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[parseInt(i.toString(), 10)];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[\"\" + control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[\"\" + control.idMapping] === currentData_1[\"\" + control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[\"\" + control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[parseInt(p.toString(), 10)][\"\" + control.idMapping] === currentData_1[\"\" + control.idMapping]) {\n if (!control.enableImmutableMode && parentData.childRecords.length === parentData['Children'].length) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[parseInt(i.toString(), 10)], keys[parseInt(j.toString(), 10)]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[\"\" + changedRecords].length === 0))\n || keys[parseInt(j.toString(), 10)] === columnName)) {\n var editedData = getParentData(control, modifiedData[parseInt(k.toString(), 10)].uniqueID);\n treeData[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]] =\n modifiedData[parseInt(k.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[parseInt(j.toString(), 10)]] = editedData[keys[parseInt(j.toString(), 10)]]\n = treeData[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (treeData.length === 0 && gridData.length === 1) {\n treeData.push(originalData.taskData);\n }\n else if (isSelfReference) {\n originalData.taskData[\"\" + control.parentIdMapping] = treeData[parseInt(i.toString(), 10)][\"\" + control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[parseInt(i.toString(), 10)], control.childMapping)) {\n treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping] = [];\n }\n treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[parseInt(i.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[parseInt(i.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping])) {\n if (removeChildRecords(treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping], modifiedData[parseInt(k.toString(), 10)], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[parseInt(i.toString(), 10)], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else if (currentViewRecords.length === 0) {\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords.length > 0 ? currentViewRecords[parseInt(addRowIndex.toString(), 10)] : [];\n if (!isNullOrUndefined(currentdata) && currentdata[\"\" + primaryKeys] === details.value[\"\" + primaryKeys] || selectedIndex !== -1 && treeData.length !== 0) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[\"\" + internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[parseInt(j.toString(), 10)][\"\" + key] === modifiedData[\"\" + key] ||\n (isSelfReference && childRecords[parseInt(j.toString(), 10)][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[parseInt(j.toString(), 10)], keys[parseInt(i.toString(), 10)]) &&\n (control.editSettings.mode !== 'Cell' || keys[parseInt(i.toString(), 10)] === columnName)) {\n editedData[keys[parseInt(i.toString(), 10)]] =\n editedData.taskData[keys[parseInt(i.toString(), 10)]] =\n childRecords[parseInt(j.toString(), 10)][keys[parseInt(i.toString(), 10)]] =\n modifiedData[keys[parseInt(i.toString(), 10)]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell' && !isNullOrUndefined(control.grid.editModule)) {\n var editModule = 'editModule';\n control.grid.editModule[\"\" + editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[\"\" + editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[\"\" + control.parentIdMapping] = childRecords[parseInt(j.toString(), 10)][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[parseInt(j.toString(), 10)], control.childMapping)) {\n childRecords[parseInt(j.toString(), 10)][control.childMapping] = [];\n }\n childRecords[parseInt(j.toString(), 10)][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[parseInt(j.toString(), 10)][control.childMapping])) {\n if (removeChildRecords(childRecords[parseInt(j.toString(), 10)][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[\"\" + key] === record[\"\" + key]) {\n index_1 = i;\n return;\n } });\n if (control.enableVirtualization && isNullOrUndefined(index_1)) {\n var updatedParent = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n record = updatedParent;\n }\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[parseInt(index_1.toString(), 10)];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[\"\" + key] !== child[\"\" + key]) {\n if (!record.childRecords.some(function (records) { return records.uniqueID === child.uniqueID; })) {\n record.childRecords.push(child);\n }\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[\"\" + key] !== child[\"\" + key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[\"\" + control.childMapping].indexOf(childRecords) === -1 && record[\"\" + key] !== child[\"\" + key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[parseInt(i.toString(), 10)][\"\" + primaryKeys] === record[\"\" + primaryKeys]) {\n data[parseInt(i.toString(), 10)] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[\"\" + key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[parseInt(index_2.toString(), 10)] ? row.cells[parseInt(index_2.toString(), 10)]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, Property } from '@syncfusion/ej2-base';\n/**\n * Represents the \"Column\" model class for TreeGrid, defining essential properties and functionalities of a column.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * Allows or disallows editing of the column. Set to `false` to make a column non-editable.\n * By default, all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Customization options for the edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * When set to `true`, encodes HTML content in headers and cells to prevent HTML injection.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * Disables column reordering if set to `false`. By default, columns can be reordered.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * Disables column menu for the column if set to `false`. By default, column menus are enabled for all columns.\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * Disables filtering for the column if set to `false`. By default, columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * Disables sorting for the column if set to `false`. By default, columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * Disables resizing for the column if set to `false`. By default, columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * Customize default filter options for a specific column, providing types and UI definitions for custom components.\n *\n * @default null\n */\n this.filter = {};\n /**\n * Allows treegrid to perform row spanning on the specified column.\n *\n * @default true\n */\n this.enableRowSpan = true;\n /**\n * Allows treegrid to perform column spanning on the specified column.\n *\n * @default true\n */\n this.enableColumnSpan = true;\n merge(this, options);\n }\n /**\n * Reflects state changes for TreeGrid column directives, particularly in React.\n *\n * @param {Column} column - The column to update.\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[parseInt(i.toString(), 10)]] = column[keys[parseInt(i.toString(), 10)]];\n if (this.parent && this.parent['isReact'] && keys[parseInt(i.toString(), 10)] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[\"\" + refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n/**\n * Defines TreeGrid column\n */\nvar TreeGridColumn = /** @class */ (function (_super) {\n __extends(TreeGridColumn, _super);\n function TreeGridColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TreeGridColumn.prototype, \"columns\", void 0);\n return TreeGridColumn;\n}(Column));\nexport { TreeGridColumn };\n/**\n * Defines stacked tree grid column\n */\nvar StackedColumn = /** @class */ (function (_super) {\n __extends(StackedColumn, _super);\n function StackedColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return StackedColumn;\n}(TreeGridColumn));\nexport { StackedColumn };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the loading indicator for the Tree Grid, allowing you to display a visual indicator during data loading operations to enhance user experience.\n */\nvar LoadingIndicator = /** @class */ (function (_super) {\n __extends(LoadingIndicator, _super);\n function LoadingIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Spinner')\n ], LoadingIndicator.prototype, \"indicatorType\", void 0);\n return LoadingIndicator;\n}(ChildProperty));\nexport { LoadingIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the filter configuration for a column in the TreeGrid.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid, enabling complex data filtering capabilities.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the text wrapping behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[parseInt(i.toString(), 10)]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[parseInt(i.toString(), 10)] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[parseInt(i.toString(), 10)] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[parseInt(i.toString(), 10)] === 'primary_column_missing' || type[parseInt(i.toString(), 10)] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[parseInt(i.toString(), 10)] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[parseInt(i.toString(), 10)] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[parseInt(i.toString(), 10)] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[parseInt(i.toString(), 10)] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[parseInt(i.toString(), 10)] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[parseInt(i.toString(), 10)]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent, serviceLocator) {\n var _this = _super.call(this, parent.grid, serviceLocator) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n _this.serviceLocator = serviceLocator;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[\"\" + copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n var selectedRowIndex = selectedIndexes[parseInt(i.toString(), 10)];\n if (!rows[selectedRowIndex].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedRowIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[parseInt(i.toString(), 10)][\"\" + uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedRowIndex, rows, withHeader, i);\n }\n this[\"\" + getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[\"\" + copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[\"\" + copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[parseInt(i.toString(), 10)], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = this.treeGridParent.getVisibleColumns().map(function (col) { return col.headerText; });\n this[\"\" + getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[\"\" + copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[\"\" + copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[\"\" + isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem])) {\n var treeLevel = currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem][\"\" + level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem]) &&\n currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID] === currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem][\"\" + uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[parseInt(selectedIndex.toString(), 10)].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[\"\" + getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[\"\" + copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[\"\" + copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[\"\" + copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + hasChildRecords]) {\n var childData = currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[parseInt(i.toString(), 10)][\"\" + uniqueID]) && currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID] === childData[parseInt(i.toString(), 10)][\"\" + uniqueID]) {\n if ((!isNullOrUndefined(rows[parseInt(j.toString(), 10)])) && !rows[parseInt(j.toString(), 10)].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[parseInt(j.toString(), 10)].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[\"\" + getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[\"\" + copyContent]);\n this[\"\" + copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var headerContent = 'e-headercontent';\n/** @hidden */\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\nexport var content = 'e-content';\n/** @hidden */\nexport var table = 'e-table';\n/** @hidden */\nexport var leftRight = 'Left-Right';\n/** @hidden */\nexport var frozenRight = 'frozen-right';\n/** @hidden */\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\nexport var ariaRowIndex = 'aria-rowindex';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var collapseActionComplete = 'collapseActionComplete';\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Creates an instance of Selection.\n *\n * @param {TreeGrid} parent - The TreeGrid instance this selection module is associated with.\n */\n function Selection(parent) {\n this.headerCheckboxFrameEl = null;\n this.checkboxColIndexCache = -2;\n this.parentSelectionCounters = {};\n this.selectedUidMap = new Map(); // Quick lookup for whether an item is selected\n this.totalSelectableCount = 0;\n this.headerSelectionState = 'uncheck';\n this.checkedItemCount = 0;\n this.visibleUidIndex = {};\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = []; // Initialize here\n this.filteredList = [];\n this.searchingRecords = [];\n this.addEventListener();\n }\n /**\n * Gets the module name.\n *\n * @returns {string} The name of the module ('selection').\n */\n Selection.prototype.getModuleName = function () { return 'selection'; };\n /**\n * Builds a map from visible record uniqueID to its visible index.\n * This map is crucial for finding the *current visible index* of a record.\n *\n * @returns {void}\n */\n Selection.prototype.buildVisibleUidMap = function () {\n this.visibleUidIndex = {};\n var view = this.parent.grid.currentViewData;\n if (!view) {\n return;\n }\n for (var i = 0, len = view.length; i < len; i++) {\n var rec = view[parseInt(i.toString(), 10)];\n if (rec && rec.uniqueID) {\n this.visibleUidIndex[rec.uniqueID] = i; // Map uid -> visible row index\n }\n }\n };\n /**\n * Adds required event listeners for selection handling.\n *\n * @returns {void}\n */\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n /**\n * Removes previously added event listeners.\n *\n * @returns {void}\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * Destroys the selection module and clears internal caches.\n *\n * @returns {void}\n */\n Selection.prototype.destroy = function () {\n this.resetSelectionCaches();\n this.removeEventListener();\n };\n /**\n * Handles checkbox click events from the DOM and dispatches selection logic.\n *\n * @param {Object} args - Event args containing the click target.\n * @returns {void}\n */\n Selection.prototype.checkboxSelection = function (args) {\n var _a;\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n if (this.parent.frozenRows) {\n rowIndex.push(parseInt(target.closest('tr').getAttribute('aria-rowindex'), 10) - 1);\n }\n else {\n rowIndex.push(target.closest('tr').rowIndex);\n }\n this.selectCheckboxes(rowIndex);\n var newCheckState = checkBox.nextElementSibling.classList.contains('e-check');\n this.triggerChkChangeEvent(checkBox, newCheckState, target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var frame = checkWrap.querySelector('.e-frame');\n var currentStateIsUncheck = !frame.classList.contains('e-check') && !frame.classList.contains('e-stop');\n var targetState = currentStateIsUncheck; // If currently uncheck, target state is to check all.\n this.headerSelection(targetState);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, targetState, target.closest('tr'));\n }\n if (!isNullOrUndefined(this.parent['parentQuery']) && this.parent.selectionSettings.persistSelection\n && this.parent['columnModel'].filter(function (col) { return col.type === 'checkbox'; }).length > 0\n && isRemoteData(this.parent)) {\n if (this.parent['parentQuery'].length > 0) {\n (_a = this.parent.query.queries).push.apply(_a, this.parent['parentQuery']);\n this.parent['parentQuery'] = [];\n }\n }\n };\n /**\n * Triggers the checkboxChange event with the appropriate arguments.\n *\n * @param {HTMLInputElement} checkBox - The checkbox input element that changed.\n * @param {boolean} checkState - The new checked state.\n * @param {HTMLTableRowElement} rowElement - The row element where the change occurred.\n * @returns {void}\n */\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = {\n checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data\n };\n this.parent.trigger(events.checkboxChange, args);\n };\n /**\n * Determines the index of the checkbox column in the header.\n *\n * @returns {number} The index of the checkbox column, or -1 if not found.\n */\n Selection.prototype.getCheckboxcolumnIndex = function () {\n if (this.checkboxColIndexCache !== -2) {\n return this.checkboxColIndexCache;\n }\n var mappingUid;\n var columnIndex = -1;\n var stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[\"\" + stackedHeader] ? this.parent[\"\" + columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[parseInt(col.toString(), 10)].showCheckbox) {\n mappingUid = columns[parseInt(col.toString(), 10)].uid;\n break;\n }\n }\n var headerDivs = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv');\n for (var j = 0; j < headerDivs.length; j++) {\n var headercell = headerDivs[parseInt(j.toString(), 10)];\n if (headercell.getAttribute('data-mappinguid') === mappingUid) {\n columnIndex = j;\n break;\n }\n }\n this.checkboxColIndexCache = isNullOrUndefined(columnIndex) ? -1 : columnIndex;\n return this.checkboxColIndexCache;\n };\n /**\n * Renders and initializes the header checkbox element.\n *\n * @returns {void}\n */\n Selection.prototype.headerCheckbox = function () {\n this.buildVisibleUidMap();\n this.totalSelectableCount = this.countSelectableRecords(this.resolveHeaderSelectionList(true)); // Use all flatData for initial count\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n if (headerElement && headerElement.querySelectorAll('.e-treeselectall').length === 0) {\n var value = false; // Initial state can be false.\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n this.headerCheckboxFrameEl = checkWrap.querySelector('.e-frame'); // Assign the frame element\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n } // Update header state based on data\n }\n else if (headerElement && headerElement.querySelectorAll('.e-treeselectall').length > 0) {\n this.headerCheckboxFrameEl = headerElement.querySelector('.e-frame');\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n } // Update status based on current selections\n }\n }\n };\n /**\n * Renders a checkbox element for a column cell.\n *\n * @param {QueryCellInfoEventArgs} args - The QueryCellInfoEventArgs for the cell.\n * @returns {Element} The rendered checkbox wrapper element.\n */\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox', 'aria-label': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (data.checkboxState === 'check');\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n else if (data.checkboxState === 'uncheck') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-uncheck');\n }\n else if (data.checkboxState === 'check') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-check');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n /**\n * Injects the checkbox into a column cell during QueryCellInfo.\n *\n * @param {QueryCellInfoEventArgs} container - The cell event args.\n * @returns {void}\n */\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n /**\n * Selects or toggles checkboxes for the provided row indexes.\n *\n * @param {number[]} rowIndexes - Array of row indexes to toggle selection for.\n * @returns {void}\n */\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var viewRec = this.parent.getCurrentViewRecords()[rowIndexes[parseInt(i.toString(), 10)]];\n var flatRec = getParentData(this.parent, viewRec.uniqueID);\n var nextState = (flatRec.checkboxState === 'check') ? 'uncheck' : 'check';\n flatRec.checkboxState = nextState;\n this.traverSelection(flatRec, nextState, false);\n }\n };\n /**\n * Traverses selection for a record and cascades selections to children/parents as necessary.\n *\n * @param {ITreeData} record - The record to process.\n * @param {string} checkboxState - The desired checkbox state ('check'|'uncheck'|'indeterminate').\n * @param {boolean} isChildItem - True if this invocation is for a child during recursion.\n * @returns {void}\n */\n Selection.prototype.traverSelection = function (record, checkboxState, isChildItem) {\n var previousState = record.checkboxState;\n if (!isChildItem) {\n this.buildVisibleUidMap();\n }\n var effectiveChildren = Array.isArray(record.childRecords) ? record.childRecords : [];\n if ((!effectiveChildren || effectiveChildren.length === 0) && this.parent.autoCheckHierarchy) {\n effectiveChildren = this.getChildrenFromFlat(record);\n }\n if (this.parent.filterModule && this.parent.filterModule.filteredResult.length > 0\n && effectiveChildren && effectiveChildren.length) {\n effectiveChildren = this.getFilteredChildRecords(effectiveChildren);\n }\n if (!this.parent.autoCheckHierarchy || !effectiveChildren || effectiveChildren.length === 0) {\n this.updateSelectedItems(record, checkboxState);\n if (!isChildItem) {\n if (record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n this.updateSelectedCollectionsAfterBulk(this.resolveHeaderSelectionList(), '');\n this.refreshVisibleCheckboxes();\n if (this.parent.autoCheckHierarchy) {\n this.updateHeaderCheckboxState();\n }\n }\n return;\n }\n var childCount = 0;\n var checkedCount = 0;\n var indeterminateCount = 0;\n for (var i = 0; i < effectiveChildren.length; i++) {\n var child = effectiveChildren[parseInt(i.toString(), 10)];\n if (!child || child.isSummaryRow) {\n continue;\n }\n childCount++;\n this.updateSelectedItems(child, checkboxState, true);\n if (child.hasChildRecords) {\n this.traverSelection(child, checkboxState, true);\n }\n if (child.checkboxState === 'check') {\n checkedCount++;\n }\n else if (child.checkboxState === 'indeterminate') {\n indeterminateCount++;\n }\n }\n if (record.uniqueID) {\n this.parentSelectionCounters[record.uniqueID] = {\n total: childCount,\n checked: checkedCount,\n indeterminate: indeterminateCount\n };\n }\n var summary = this.parentSelectionCounters[record.uniqueID];\n var finalState = this.deriveParentState(record, summary);\n if (checkboxState === 'check' && summary.total > 0 && summary.checked === summary.total && summary.indeterminate === 0) {\n finalState = 'check';\n }\n this.updateSelectedItems(record, finalState);\n if (!isChildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem, previousState, finalState);\n }\n if (!isChildItem) {\n var bulkList = this.resolveHeaderSelectionList();\n this.updateSelectedCollectionsAfterBulk(bulkList, ''); // This will rebuild selectedItems & selectedIndexes based on total state\n this.refreshVisibleCheckboxes();\n this.updateHeaderCheckboxState();\n }\n };\n /**\n * Filters provided child records against the current filter result.\n *\n * @param {ITreeData[]} childRecords - The array of child records to filter.\n * @returns {ITreeData[]} The filtered child records array.\n */\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n /**\n * Derives children for a record from flatData using the parentItem link.\n * Used when childRecords is missing or empty.\n *\n * @param {ITreeData} record - The record for which to find child elements.\n * @returns {ITreeData[]} An array of child records derived from flatData.\n */\n Selection.prototype.getChildrenFromFlat = function (record) {\n var all = (this.parent.flatData);\n if (!all || !record) {\n return [];\n }\n var pid = record.uniqueID;\n var out = [];\n for (var i = 0; i < all.length; i++) {\n var r = all[parseInt(i.toString(), 10)];\n if (!r || r.isSummaryRow) {\n continue;\n }\n var p = r.parentItem;\n if (p && p.uniqueID === pid) {\n out.push(r);\n }\n }\n return out;\n };\n /**\n * Updates parent selection by rebuilding summary and applying deltas, then bubbling up if required.\n *\n * @param {ITreeData} parentRecord - The parent record reference.\n * @param {string} [previousChildState] - Previous state of the child that changed.\n * @param {string} [nextChildState] - Next state of the child that changed.\n * @returns {void}\n */\n Selection.prototype.updateParentSelection = function (parentRecord, previousChildState, nextChildState) {\n var parent = getParentData(this.parent, parentRecord.uniqueID);\n if (!parent) {\n return;\n }\n var summary = this.buildSelectionSummary(parent);\n if (previousChildState) {\n this.applySummaryDelta(summary, previousChildState, -1);\n }\n if (nextChildState) {\n this.applySummaryDelta(summary, nextChildState, 1);\n }\n if (parent.uniqueID) {\n this.parentSelectionCounters[parent.uniqueID] = summary;\n }\n var desiredState = this.deriveParentState(parent, summary);\n if (parent.checkboxState === desiredState) {\n return;\n }\n var parentPrev = parent.checkboxState;\n parent.checkboxState = desiredState;\n this.updateSelectedItems(parent, desiredState);\n if (parent.parentItem) {\n this.updateParentSelection(parent.parentItem, parentPrev, desiredState);\n }\n };\n /**\n * Builds a selection summary for a record's children.\n *\n * @param {Object} record - The record whose children should be summarized.\n * @param {boolean} [ignoreFilter] - If true, ignore current filter when computing summary.\n * @returns {{ total: number, checked: number, indeterminate: number }} The computed summary.\n */\n Selection.prototype.buildSelectionSummary = function (record, ignoreFilter) {\n var summary = { total: 0, checked: 0, indeterminate: 0 };\n var children = [];\n if (record && Array.isArray(record.childRecords) && record.childRecords.length) {\n children = record.childRecords;\n }\n else {\n children = this.getChildrenFromFlat(record);\n }\n if (!ignoreFilter && this.parent.filterModule && this.parent.filterModule.filteredResult.length > 0) {\n children = this.getFilteredChildRecords(children);\n }\n for (var i = 0; i < children.length; i++) {\n var child = children[parseInt(i.toString(), 10)];\n if (!child || child.isSummaryRow) {\n continue;\n }\n summary.total++;\n if (child.checkboxState === 'check') {\n summary.checked++;\n }\n else if (child.checkboxState === 'indeterminate') {\n summary.indeterminate++;\n }\n }\n return summary;\n };\n /**\n * Applies a delta to a selection summary based on a state change.\n *\n * @param {Object} summary - The summary to modify. Object with numeric properties: total, checked, indeterminate.\n * @param {string} state - The state that changed ('check' | 'indeterminate').\n * @param {number} delta - The delta to apply (e.g. +1 or -1).\n * @returns {void}\n */\n Selection.prototype.applySummaryDelta = function (summary, state, delta) {\n if (state === 'check') {\n summary.checked = Math.max(0, summary.checked + delta);\n }\n else if (state === 'indeterminate') {\n summary.indeterminate = Math.max(0, summary.indeterminate + delta);\n }\n };\n /**\n * Derives the parent's checkbox state based on children summary counts.\n *\n * @param {ITreeData} record The parent record.\n * @param {{ total: number, checked: number, indeterminate: number }} summary The children summary.\n * @returns {'check'|'indeterminate'|'uncheck'} The derived checkbox state.\n */\n Selection.prototype.deriveParentState = function (record, summary) {\n var total = summary.total;\n var checked = summary.checked;\n var indeterminate = summary.indeterminate;\n if (indeterminate > 0 || (checked > 0 && checked !== total)) {\n return 'indeterminate';\n }\n if (checked === total && total > 0) {\n return 'check';\n }\n return 'uncheck';\n };\n /**\n * Handles header checkbox (select all / clear all) behavior.\n *\n * @param {boolean} [checkAll] - Optional explicit flag to check or uncheck all.\n * @returns {void}\n */\n Selection.prototype.headerSelection = function (checkAll) {\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n if (this.parent.grid.searchSettings.key.length) {\n this.searchingRecords = filterResult;\n }\n else {\n if (this.filteredList !== filterResult && !this.parent.grid.searchSettings.key.length) {\n this.filteredList = filterResult;\n this.searchingRecords = [];\n }\n }\n }\n if (this.searchingRecords.length > 0 && !isNullOrUndefined(checkAll)) {\n this.filteredList = this.searchingRecords;\n }\n else if (this.filteredList.length > 0 && !this.parent.filterSettings.columns.length\n && !this.parent.grid.searchSettings.key.length) {\n this.filteredList = [];\n }\n var records = this.resolveHeaderSelectionList(true);\n if (!isNullOrUndefined(checkAll)) {\n this.resetSelectionCaches();\n var targetState = checkAll ? 'check' : 'uncheck';\n this.headerSelectionState = targetState;\n this.processHeaderSelection(records, targetState);\n this.finalizeParentsAfterBulk(records);\n this.updateSelectedCollectionsAfterBulk(records, '');\n this.refreshVisibleCheckboxes();\n this.updateHeaderCheckboxState();\n return;\n }\n this.totalSelectableCount = this.countSelectableRecords(records);\n this.updateHeaderCheckboxState();\n };\n /**\n * Finalizes parent states after a bulk header operation (e.g., Select All).\n * This ensures parent states (checked/indeterminate) are correct after cascades.\n *\n * @param {ITreeData[]} records - The records that were processed in the bulk operation.\n * @returns {void}\n */\n Selection.prototype.finalizeParentsAfterBulk = function (records) {\n var all = records;\n for (var i = 0; i < all.length; i++) {\n var rec = all[parseInt(i.toString(), 10)];\n if (!rec || !rec.hasChildRecords) {\n continue;\n }\n var summary = this.buildSelectionSummary(rec, true);\n this.parentSelectionCounters[rec.uniqueID] = summary;\n var finalState = this.deriveParentState(rec, summary);\n if (this.headerSelectionState === 'check' &&\n summary.total > 0 && summary.checked === summary.total && summary.indeterminate === 0) {\n finalState = 'check';\n }\n else if (this.headerSelectionState === 'uncheck') {\n finalState = 'uncheck';\n }\n if (rec.checkboxState !== finalState) {\n this.updateSelectedItems(rec, finalState);\n }\n }\n };\n /**\n * Processes header selection for each record, setting their state silently in the data model.\n * Called during bulk operations like \"select all\".\n *\n * @param {ITreeData[]} records - The records to process.\n * @param {string} targetState - The target state to set on each record.\n * @returns {void}\n */\n Selection.prototype.processHeaderSelection = function (records, targetState) {\n for (var i = 0; i < records.length; i++) {\n var record = records[parseInt(i.toString(), 10)];\n if (!record) {\n continue;\n }\n var previousState = record.checkboxState;\n if (previousState === targetState) {\n continue;\n }\n record.checkboxState = targetState;\n this.updateSelectedItems(record, targetState, true);\n }\n };\n /**\n * Rebuilds `selectedItems`, `selectedUidMap`, and `selectedIndexes` based on the current data states in the model.\n * This method is called after bulk operations (like headerSelection, grid actions, etc.) to synchronize internal collections.\n * It ensures `selectedItems` retains original selection order *as much as possible* for currently checked items\n * and `selectedIndexes` reflects their *current visible order*.\n *\n * @param {ITreeData[]} records - The records that were processed (or the full data set if re-evaluating everything).\n * @param {string} requestType - The data action type such as filtering, searching, refresh,etc.\n * @returns {void}\n */\n Selection.prototype.updateSelectedCollectionsAfterBulk = function (records, requestType) {\n var hasFilter = !!(this.parent.filterModule && this.parent.filterModule.filteredResult &&\n this.parent.filterModule.filteredResult.length);\n var hasSearch = !!(this.parent.grid && this.parent.grid.searchSettings &&\n this.parent.grid.searchSettings.key && this.parent.grid.searchSettings.key.length);\n var isFilterOrSearch = hasFilter || hasSearch || requestType === 'refresh' || requestType === 'searching';\n var currentlySelectedItemsInOrder = isFilterOrSearch ? records : this.selectedItems.slice();\n var newSelectedItems = [];\n var newSelectedUidMap = new Map();\n var newSelectedIndexes = [];\n for (var _i = 0, currentlySelectedItemsInOrder_1 = currentlySelectedItemsInOrder; _i < currentlySelectedItemsInOrder_1.length; _i++) {\n var item = currentlySelectedItemsInOrder_1[_i];\n if (item.hasChildRecords && isFilterOrSearch && item.level === 0 && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(item);\n }\n if (item.uniqueID && item.checkboxState === 'check') {\n newSelectedItems.push(item);\n newSelectedUidMap.set(item.uniqueID, true);\n }\n }\n if (!isFilterOrSearch) {\n var allFlatData = this.parent.flatData;\n if (allFlatData) {\n for (var _a = 0, allFlatData_1 = allFlatData; _a < allFlatData_1.length; _a++) {\n var record = allFlatData_1[_a];\n if (!record || record.isSummaryRow) {\n continue;\n }\n if (record.uniqueID && record.checkboxState === 'check' && !newSelectedUidMap.has(record.uniqueID)) {\n newSelectedItems.push(record);\n newSelectedUidMap.set(record.uniqueID, true);\n }\n }\n }\n }\n this.selectedItems = newSelectedItems;\n this.selectedUidMap = newSelectedUidMap;\n this.buildVisibleUidMap();\n for (var _b = 0, _c = this.selectedItems; _b < _c.length; _b++) {\n var item = _c[_b];\n var visibleIdx = this.visibleUidIndex[item.uniqueID];\n if (visibleIdx !== undefined) {\n newSelectedIndexes.push(visibleIdx);\n }\n }\n this.selectedIndexes = newSelectedIndexes;\n this.checkedItemCount = this.selectedItems.length;\n this.totalSelectableCount =\n this.countSelectableRecords(records);\n };\n /**\n * Refreshes visible checkbox DOM elements to reflect the current data state.\n * This method exclusively updates the UI representation of checkboxes.\n *\n * @returns {void}\n */\n Selection.prototype.refreshVisibleCheckboxes = function () {\n this.buildVisibleUidMap();\n var data = this.parent.getCurrentViewRecords();\n var uidMap = this.parent.uniqueIDCollection;\n for (var i = 0; data && i < data.length; i++) {\n var viewRec = data[parseInt(i.toString(), 10)];\n if (!viewRec) {\n continue;\n }\n var uid = viewRec.uniqueID;\n var srcRec = (uidMap && uid != null) ? uidMap[String(uid)] : viewRec;\n var state = (srcRec && srcRec.checkboxState) ? srcRec.checkboxState : 'uncheck';\n var rowEl = null;\n var rowUid = viewRec.uid;\n if (rowUid) {\n rowEl = this.parent.grid.getRowElementByUID(rowUid);\n }\n if (!rowEl) {\n var rows = this.parent.getRows();\n rowEl = rows && rows[parseInt(i.toString(), 10)];\n if ((this.parent.frozenRows || this.parent.getFrozenColumns()) && !rowEl) {\n var movableRows = this.parent.getDataRows();\n rowEl = movableRows && movableRows[parseInt(i.toString(), 10)];\n }\n }\n if (rowEl) {\n var frame = rowEl.querySelector('.e-hierarchycheckbox .e-frame');\n if (frame) {\n removeClass([frame], ['e-check', 'e-stop', 'e-uncheck']);\n frame.classList.add(state === 'indeterminate' ? 'e-stop' : ('e-' + state));\n var input = rowEl.querySelector('.e-treecheckselect');\n if (input) {\n input.setAttribute('aria-checked', state === 'check' ? 'true' :\n (state === 'uncheck' ? 'false' : 'mixed'));\n }\n }\n }\n }\n };\n /**\n * Resets internal selection caches to their initial state.\n * This is usually called before a bulk selection operation (like \"select all\").\n *\n * @returns {void}\n */\n Selection.prototype.resetSelectionCaches = function () {\n this.parentSelectionCounters = {};\n this.selectedUidMap = new Map();\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.totalSelectableCount = 0;\n this.headerSelectionState = 'uncheck';\n this.checkedItemCount = 0;\n };\n /**\n * Counts selectable (non-summary) records in the provided array.\n *\n * @param {ITreeData[]} records - The records to count.\n * @returns {number} The number of selectable records.\n */\n Selection.prototype.countSelectableRecords = function (records) {\n var count = 0;\n if (!records) {\n return count;\n }\n for (var i = 0; i < records.length; i++) {\n var rec = records[parseInt(i.toString(), 10)];\n if (rec && !rec.isSummaryRow) {\n count++;\n }\n }\n return count;\n };\n /**\n * Resolves the list of records used for header selection operations (e.g., for `select all`).\n *\n * @param {boolean} [includeAll] - If true and data is local, returns flatData (all records for full dataset actions).\n * @returns {ITreeData[]} The array of records to consider for header operations.\n */\n Selection.prototype.resolveHeaderSelectionList = function (includeAll) {\n var dataToProcess = [];\n if (!isRemoteData(this.parent)) {\n var hasFilter = !!(this.parent.filterModule &&\n this.parent.filterModule.filteredResult &&\n this.parent.filterModule.filteredResult.length);\n var hasSearch = !!(this.parent.grid &&\n this.parent.grid.searchSettings &&\n this.parent.grid.searchSettings.key &&\n this.parent.grid.searchSettings.key.length);\n if (includeAll) {\n if (hasFilter) {\n dataToProcess = this.filteredList && this.filteredList.length\n ? this.filteredList\n : this.parent.filterModule.filteredResult;\n }\n else if (hasSearch && this.searchingRecords && this.searchingRecords.length) {\n dataToProcess = this.searchingRecords;\n }\n else {\n dataToProcess = this.parent.flatData;\n }\n }\n else {\n if (hasFilter) {\n dataToProcess = this.filteredList && this.filteredList.length\n ? this.filteredList\n : this.parent.filterModule.filteredResult;\n }\n else if (hasSearch && this.searchingRecords && this.searchingRecords.length) {\n dataToProcess = this.searchingRecords;\n }\n else {\n dataToProcess = this.parent.flatData;\n }\n }\n }\n else {\n dataToProcess = this.parent.getCurrentViewRecords();\n }\n return dataToProcess;\n };\n /**\n * Updates the header checkbox state (checked/indeterminate/unchecked) based on current selections.\n *\n * @returns {void}\n */\n Selection.prototype.updateHeaderCheckboxState = function () {\n var frame = this.headerCheckboxFrameEl;\n if (!frame) {\n return;\n }\n var recordsForHeaderLogic = this.resolveHeaderSelectionList(true);\n this.totalSelectableCount = this.countSelectableRecords(recordsForHeaderLogic);\n var checkedCountForHeaderLogic = 0;\n for (var _i = 0, recordsForHeaderLogic_1 = recordsForHeaderLogic; _i < recordsForHeaderLogic_1.length; _i++) {\n var record = recordsForHeaderLogic_1[_i];\n if (record && !record.isSummaryRow && record.checkboxState === 'check') {\n checkedCountForHeaderLogic++;\n }\n }\n removeClass([frame], ['e-check', 'e-stop', 'e-uncheck']);\n if (this.totalSelectableCount === 0) {\n frame.classList.add('e-uncheck');\n }\n else if (checkedCountForHeaderLogic === 0) {\n frame.classList.add('e-uncheck');\n }\n else if (checkedCountForHeaderLogic === this.totalSelectableCount) {\n frame.classList.add('e-check');\n }\n else {\n frame.classList.add('e-stop');\n }\n };\n /**\n * Updates selection arrays (selectedItems, selectedUidMap, selectedIndexes) and visible DOM for a single record.\n * This is the core method for managing the state of a single checkbox.\n *\n * @param {ITreeData} currentRecord - The record to update.\n * @param {string} checkState - The new checkbox state ('check' | 'uncheck' | 'indeterminate').\n * @param {boolean} [silent] - If true, update is silent (only updates data model, no collection management or DOM update).\n * @returns {void}\n */\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState, silent) {\n this.buildVisibleUidMap();\n var uid = currentRecord.uniqueID;\n var uidMap = this.parent.uniqueIDCollection;\n var checkboxRecord = (uidMap && uid != null) ? (uidMap[String(uid)] ?\n uidMap[String(uid)] : currentRecord) : currentRecord;\n var isSummary = currentRecord.isSummaryRow === true;\n var previousState = checkboxRecord.checkboxState;\n var currentVisibleIndex = this.visibleUidIndex[String(uid)];\n checkboxRecord.checkboxState = checkState;\n if (silent) {\n return;\n }\n if (!isSummary && previousState !== checkState) {\n if (checkState === 'check') {\n this.checkedItemCount++;\n if (!this.selectedUidMap.has(String(uid))) {\n if (checkboxRecord.uniqueID) {\n this.selectedUidMap.set(String(checkboxRecord.uniqueID), true);\n }\n this.selectedItems.push(checkboxRecord);\n if (currentVisibleIndex !== undefined && this.selectedIndexes.indexOf(currentVisibleIndex) === -1) {\n this.selectedIndexes.push(currentVisibleIndex);\n }\n }\n }\n else if (previousState === 'check' || previousState === 'indeterminate') {\n if (this.checkedItemCount > 0) {\n this.checkedItemCount--;\n }\n if (checkboxRecord && checkboxRecord.uniqueID && this.selectedUidMap.has(String(checkboxRecord.uniqueID))) {\n this.selectedUidMap.delete(String(checkboxRecord.uniqueID));\n var itemIdx = this.selectedItems.indexOf(checkboxRecord);\n if (itemIdx !== -1) {\n this.selectedItems.splice(itemIdx, 1);\n }\n if (currentVisibleIndex !== undefined) {\n var indexInSelectedIndexes = this.selectedIndexes.indexOf(currentVisibleIndex);\n if (indexInSelectedIndexes > -1) {\n this.selectedIndexes.splice(indexInSelectedIndexes, 1);\n }\n }\n }\n }\n }\n var rowEl = null;\n var rowUid = currentRecord.uid;\n if (rowUid) {\n rowEl = this.parent.grid.getRowElementByUID(rowUid);\n }\n if (!rowEl) {\n var recordVisibleIndex = currentVisibleIndex !== undefined ? currentVisibleIndex : (typeof this.visibleUidIndex[String(uid)] === 'number' ? this.visibleUidIndex[String(uid)] : -1);\n if (recordVisibleIndex > -1) {\n rowEl = this.parent.getRows()[parseInt(recordVisibleIndex.toString(), 10)];\n if (!rowEl && (this.parent.frozenRows || this.parent.getFrozenColumns())) {\n rowEl = this.parent.getDataRows()[parseInt(recordVisibleIndex.toString(), 10)];\n }\n }\n }\n if (rowEl) {\n var frame = rowEl.querySelector('.e-hierarchycheckbox .e-frame');\n if (frame) {\n removeClass([frame], ['e-check', 'e-stop', 'e-uncheck']);\n frame.classList.add(checkState === 'indeterminate' ? 'e-stop' : ('e-' + checkState));\n }\n var input = rowEl.querySelector('.e-treecheckselect');\n if (input) {\n input.setAttribute('aria-checked', checkState === 'check' ? 'true' :\n (checkState === 'uncheck' ? 'false' : 'mixed'));\n }\n }\n };\n /**\n * Handles various grid actions and updates selection state accordingly.\n * This method ensures that selection state is maintained and UI is refreshed after grid operations.\n *\n * @param {CellSaveEventArgs} args - Action arguments containing requestType and data.\n * @returns {void}\n */\n Selection.prototype.updateGridActions = function (args) {\n var requestType = args.requestType;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n this.updateSelectedCollectionsAfterBulk(this.resolveHeaderSelectionList(), '');\n this.refreshVisibleCheckboxes();\n this.updateHeaderCheckboxState();\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n this.updateSelectedItems(updatedData[parseInt(i.toString(), 10)], 'uncheck', false);\n }\n if (!isNullOrUndefined(updatedData[parseInt(i.toString(), 10)].parentItem)) {\n this.updateParentSelection(updatedData[parseInt(i.toString(), 10)].parentItem);\n }\n }\n this.updateSelectedCollectionsAfterBulk(this.resolveHeaderSelectionList(true), '');\n this.refreshVisibleCheckboxes();\n if (this.parent.autoCheckHierarchy) {\n this.updateHeaderCheckboxState();\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh') {\n this.updateSelectedCollectionsAfterBulk(this.resolveHeaderSelectionList(), requestType);\n this.refreshVisibleCheckboxes();\n if (this.parent.autoCheckHierarchy) {\n this.updateHeaderCheckboxState();\n }\n }\n }\n else {\n if ((requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh' ||\n requestType === 'sorting' || requestType === 'paging' || requestType === 'expanding' ||\n requestType === 'expand' || requestType === 'collapsing' || requestType === 'collapse') && !isRemoteData(this.parent)) {\n if (!(isCheckboxcolumn(this.parent) && (requestType === 'refresh' && this.parent['isVirtualExpandCollapse']))) {\n this.selectedItems = [];\n this.selectedUidMap = new Map();\n this.selectedIndexes = [];\n }\n if (requestType === 'filtering' || requestType === 'searching' || requestType === 'sorting') {\n this.headerSelection(false);\n }\n this.refreshVisibleCheckboxes();\n if (this.parent.autoCheckHierarchy) {\n this.updateHeaderCheckboxState();\n }\n }\n }\n }\n };\n /**\n * Retrieves checked record objects.\n * This array maintains the `ITreeData` objects in the order they were selected.\n *\n * @returns {ITreeData[]} Array of checked records.\n */\n Selection.prototype.getCheckedrecords = function () { return this.selectedItems; };\n /**\n * Retrieves visible indexes of checked rows in the current view, in the order they were selected.\n * This method dynamically generates the list of visible indexes by iterating through `selectedItems`\n * (which preserves selection order) and finding their *current* visible index.\n *\n * @returns {number[]} Array of checked row indexes in selection order.\n */\n Selection.prototype.getCheckedRowIndexes = function () {\n this.buildVisibleUidMap();\n var orderedVisibleIndexes = [];\n for (var _i = 0, _a = this.selectedItems; _i < _a.length; _i++) {\n var selectedItem = _a[_i];\n var uid = selectedItem.uniqueID;\n if (uid !== undefined && this.visibleUidIndex[uid] !== undefined) {\n orderedVisibleIndexes.push(this.visibleUidIndex[uid]);\n }\n }\n return orderedVisibleIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the searching behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed && !isNullOrUndefined(args.row)) {\n this.parent['toggleRowVisibility'](args.row, 'e-childrow-hidden');\n var rowsObj = this.parent.grid.getRowsObject();\n if (!this.parent.grid.isFrozenGrid() && !isNullOrUndefined(args.row.getAttribute('data-uid'))) {\n rowsObj.filter(function (e) { return e.uid === args.row.getAttribute('data-uid'); })[0].visible = false;\n }\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0 && !parentrec[0].isSummaryRow && !isNullOrUndefined(args.row)) {\n var display = parentrec[0].expanded ? 'e-childrow-visible' : 'e-childrow-hidden';\n this.parent['toggleRowVisibility'](args.row, display);\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (!isNullOrUndefined(args.row)) {\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n this.parent['toggleRowVisibility'](args.row, 'e-childrow-hidden');\n }\n }\n }\n var dragStartData = 'dragStartData';\n var draggedRecord = 'draggedRecord';\n if (this.parent.rowDragAndDropModule && this.parent.grid.rowDragAndDropModule && (this.parent.grid.rowDragAndDropModule[\"\" + dragStartData] ||\n this.parent.rowDragAndDropModule[\"\" + draggedRecord]) && this.parent.getContentTable().scrollHeight <= this.parent.getContent().clientHeight) {\n var lastRowBorder = 'lastRowBorder';\n var lastVisualData = this.parent.getVisibleRecords()[this.parent.getVisibleRecords().length - 1];\n if (lastVisualData.uniqueID === args.data.uniqueID && !isNullOrUndefined(args.row) && !args.row.cells[0].classList.contains('e-lastrowcell')) {\n this.parent[\"\" + lastRowBorder](args.row, true);\n }\n }\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_1 = this;\n // tslint:disable-next-line:typedef\n thisRef_1.parent[\"\" + renderReactTemplates](function () {\n thisRef_1.parent.trigger(events.rowDataBound, args);\n });\n }\n else {\n this.parent.trigger(events.rowDataBound, args);\n }\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[\"\" + getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', { className: 'e-icons e-none' });\n emptyExpandIcon.style.width = '10px';\n emptyExpandIcon.style.display = 'inline-block';\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n if (this.parent['isFromGantt'] && this.parent.loadChildOnDemand) {\n iconRequired = data.hasChildRecords;\n }\n else {\n iconRequired = !(data.childRecords.length === 0);\n }\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n args.cell.setAttribute('aria-expanded', data.expanded ? 'true' : 'false');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n // TicketsID 43483: While Modify Data Expand and Collapse Icon Behavior Changed\n if (this.parent.editSettings.mode === 'Cell' && !isRemoteData(this.parent)) {\n var selectedRow = this.parent.flatData.find(function (item) { return item.uniqueID === data.uniqueID; });\n if (!isNullOrUndefined(selectedRow)) {\n expand = data.expanded !== selectedRow.expanded ? selectedRow.expanded : data.expanded;\n }\n }\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '4px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n summaryData = isNullOrUndefined(summaryData) ? null : summaryData;\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n if (args.column.template) {\n args.cell.innerHTML = null;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n }\n this.parent['args'] = args;\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n if ((isNullOrUndefined(this.parent.rowTemplate) && !(this.parent.isReact))\n || ((this.parent.isReact) &&\n !args.column['template'])) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n else if (((this.parent.isReact) &&\n treeColumn.field !== args.column.field)) {\n var renderReactTemplates = 'renderReactTemplates';\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_2 = this;\n // tslint:disable-next-line:typedef\n thisRef_2.parent[\"\" + renderReactTemplates](function () {\n thisRef_2.parent.trigger(events.queryCellInfo, args);\n });\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('aria-colindex', (colindex + 1) + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n args.column.template = treeColumn.template;\n args.column[\"\" + templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[\"\" + templateFn](args.data, this.parent, 'columnTemplate', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[\"\" + portals])) {\n this.parent.grid[\"\" + portals] = this.parent[\"\" + portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[\"\" + portals]);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_3 = this;\n // tslint:disable-next-line:typedef\n thisRef_3.parent[\"\" + renderReactTemplates](function () {\n thisRef_3.parent.trigger(events.queryCellInfo, args);\n });\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[\"\" + templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[\"\" + str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[\"\" + templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[parseInt(i.toString(), 10)]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var rows = _this.parent.getDataRows();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n if (rows.length !== 0) {\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[parseInt(j.toString(), 10)].isDataRow\n && !isNullOrUndefined(rowsObj[parseInt(j.toString(), 10)].index)) {\n var cell = rowsObj[parseInt(j.toString(), 10)][\"\" + cells][parseInt(cellIndex.toString(), 10)];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = rows.length >= rowsObj.length\n ? _this.parent.getCellFromIndex(rowsObj[parseInt(j.toString(), 10)].index, cellIndex - indent)\n : rows[rowsObj[parseInt(j.toString(), 10)].index].querySelector('.e-templatecell');\n cellRenderer.refreshTD(td, cell, rowsObj[parseInt(j.toString(), 10)].data, { index: rowsObj[parseInt(j.toString(), 10)][\"\" + rowIdx] });\n var treecell = _this.parent.getRows()[parseInt(j.toString(), 10)]\n .cells[parseInt(cellIndex.toString(), 10)];\n _this.cellRender({ data: rowsObj[parseInt(j.toString(), 10)].data, cell: treecell, column: cell.column });\n }\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n // eslint-disable-next-line\n Render.prototype.reactTemplateRender = function (args, callBack) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[\"\" + portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[\"\" + portals]);\n this.parent[\"\" + renderReactTemplates](callBack);\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n this.hierarchyData = null;\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (!isNullOrUndefined(data) && Object.keys(data).length === 0\n && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req;\n if (e.result) {\n req = 0;\n }\n else {\n req = 1;\n }\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[parseInt(i.toString(), 10)];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[parseInt(i.toString(), 10)];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[parseInt(index.toString(), 10)][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[\"\" + isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var _this = this;\n var actionArgs = 'actionArgs';\n if (isRemoteData(this.parent) && this.parent.enableVirtualization && args[\"\" + actionArgs].requestType === 'virtualscroll') {\n this.parent.hideSpinner();\n }\n var records = args.result;\n if (isRemoteData(this.parent) && this.parent.enableVirtualization && (args[\"\" + actionArgs].requestType === 'virtualscroll' || args[\"\" + actionArgs].action === 'clearFilter' || args[\"\" + actionArgs].searchString === '')) {\n this.parent.query.expands = [];\n }\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (this.parent.loadChildOnDemand) {\n var _loop_1 = function (rec) {\n if (isCountRequired(this_1.parent) && records[parseInt(rec.toString(), 10)].hasChildRecords &&\n this_1.parent.initialRender) {\n records[parseInt(rec.toString(), 10)].expanded = false;\n }\n if (isRemoteData(this_1.parent) && this_1.parent.enableVirtualization) {\n var childRecords_1 = [];\n var parent_1 = this_1.parent;\n records.filter(function (e) {\n if (e[\"\" + parent_1.parentIdMapping] === records[parseInt(rec.toString(), 10)][\"\" + parent_1.idMapping]) {\n childRecords_1.push(e);\n }\n });\n if (childRecords_1.length) {\n records[parseInt(rec.toString(), 10)].expanded = true;\n }\n else if (records[parseInt(rec.toString(), 10)].hasChildRecords) {\n records[parseInt(rec.toString(), 10)].expanded = false;\n }\n }\n if (isNullOrUndefined(records[parseInt(rec.toString(), 10)].index)) {\n records[parseInt(rec.toString(), 10)].taskData = extend({}, records[parseInt(rec.toString(), 10)]);\n records[parseInt(rec.toString(), 10)].uniqueID = getUid(this_1.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[parseInt(rec.toString(), 10)].uniqueID, records[parseInt(rec.toString(), 10)], this_1.parent);\n if (isRemoteData(this_1.parent) && this_1.parent.enableVirtualization && records[parseInt(rec.toString(), 10)][\"\" + this_1.parent.parentIdMapping] && (isNullOrUndefined(records[parseInt(rec.toString(), 10)].level) || records[parseInt(rec.toString(), 10)].level === 0)) {\n var parentID_1 = records[parseInt(rec.toString(), 10)][\"\" + this_1.parent.parentIdMapping];\n var parentRec = records.find(function (record) { return record[\"\" + _this.parent.idMapping] === parentID_1; });\n if (parentRec) {\n records[parseInt(rec.toString(), 10)].level = parentRec.level + 1;\n }\n else {\n var parentRec_1 = args.actual.flatData.find(function (record) { return record[\"\" + _this.parent.idMapping] === parentID_1; });\n if (isNullOrUndefined(parentRec_1[\"\" + this_1.parent.parentIdMapping])) {\n records[parseInt(rec.toString(), 10)].level = 1;\n }\n else {\n records[parseInt(rec.toString(), 10)].level = parentRec_1.level + 1;\n }\n }\n }\n else {\n records[parseInt(rec.toString(), 10)].level = 0;\n }\n records[parseInt(rec.toString(), 10)].index = Math.ceil(Math.random() * 1000);\n if ((records[parseInt(rec.toString(), 10)][this_1.parent.hasChildMapping] ||\n this_1.parentItems.indexOf(records[parseInt(rec.toString(), 10)][this_1.parent.idMapping]) !== -1)) {\n records[parseInt(rec.toString(), 10)].hasChildRecords = true;\n }\n records[parseInt(rec.toString(), 10)].checkboxState = 'uncheck';\n }\n };\n var this_1 = this;\n for (var rec = 0; rec < records.length; rec++) {\n _loop_1(rec);\n }\n }\n else {\n var dataResults = 'dataResults';\n var expandRecord = 'expandRecord';\n if (!isNullOrUndefined(records) && !((!this.parent.loadChildOnDemand) && isCountRequired(this.parent) && !isNullOrUndefined(this.parent[\"\" + dataResults][\"\" + expandRecord])) &&\n !(isRemoteData(this.parent) && !this.parent.loadChildOnDemand && args[\"\" + actionArgs].isExpandCollapse && this.parent.enableVirtualization)) {\n this.convertToFlatData(records);\n }\n }\n }\n if (isRemoteData(this.parent) && !this.parent.loadChildOnDemand && args[\"\" + actionArgs].isExpandCollapse && this.parent.enableVirtualization) {\n args.result = records;\n }\n else if (isRemoteData(this.parent) && this.parent.enableVirtualization && this.parent.loadChildOnDemand) {\n args.result = records;\n }\n else {\n args.result = !this.parent.loadChildOnDemand ? this.parent.flatData : records;\n }\n if (isRemoteData(this.parent) && this.parent.enableVirtualization && !this.parent.loadChildOnDemand\n && this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var query = 'query';\n var summaryQuery = args[\"\" + query].queries.filter(function (q) { return q.fn === 'onAggregates'; });\n args.result = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n var name = 'name';\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n this.parent['toggleRowVisibility'](rowDetails.rows[parseInt(i.toString(), 10)], 'e-childrow-visible');\n if (!this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[parseInt(i.toString(), 10)].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ?\n this.parent.grid.getCurrentViewRecords()[rowDetails.rows[parseInt(i.toString(), 10)].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[parseInt(i.toString(), 10)].getAttribute('data-uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[parseInt(i.toString(), 10)].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n this.parent.grid.pageSettings.totalRecordsCount += rowDetails.rows.length;\n }\n else {\n this.fetchRemoteChildData({ action: rowDetails[\"\" + name], record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var query = this.parent.grid.getDataModule().generateQuery();\n var clonequries = query.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n query.queries = clonequries;\n query.isCountRequired = true;\n var idMappingValue = parseInt(rowDetails.record[this.parent.idMapping], 10);\n if (isNaN(idMappingValue)) {\n idMappingValue = rowDetails.record[this.parent.idMapping].toString();\n }\n if (this.parent.enableVirtualization && rowDetails.action === 'remoteExpand') {\n query.take(this.parent.grid.pageSettings.pageSize);\n var expandDetail = [];\n expandDetail.push('ExpandingAction', idMappingValue.toString());\n query.expand(expandDetail);\n }\n else if (this.parent.enableVirtualization && rowDetails.action === 'collapse') {\n query.take(this.parent.grid.pageSettings.pageSize);\n var expandDetail = [];\n expandDetail.push('CollapsingAction', idMappingValue.toString());\n query.expand(expandDetail);\n }\n query.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n if (rowDetails.action === 'remoteExpand' && this.parent.grid.filterSettings && this.parent.grid.filterSettings.columns.length) {\n var filterqry = this.parent.grid.getDataModule().generateQuery().queries.filter(function (e) { return e.fn !== 'onPage' && typeof e.e.predicates !== 'undefined'; });\n query.queries.push(filterqry[0]);\n }\n showSpinner(this.parent.element);\n dm.executeQuery(query).then(function (e) {\n var remoteExpandedData = 'remoteExpandedData';\n var remoteCollapsedData = 'remoteCollapsedData';\n var level = 'level';\n var datas = _this.parent.grid.currentViewData.slice();\n var inx;\n var idMapping = _this.parent.idMapping;\n if (_this.parent['isGantt'] && _this.parent.loadChildOnDemand && _this.parent.hasChildMapping) {\n for (var i = 0; i < _this.parent.grid.currentViewData.length; i++) {\n if (rowDetails.record[idMapping] === _this.parent.grid.currentViewData[i][idMapping]) {\n inx = i;\n break;\n }\n }\n }\n else {\n inx = datas.indexOf(rowDetails.record);\n }\n if (_this.parent.enableVirtualization && (rowDetails.action === 'collapse' || rowDetails.action === 'remoteExpand')) {\n datas = [];\n for (var i = 0; i < inx; i++) {\n datas.push(_this.parent.grid.currentViewData[parseInt(i.toString(), 10)]);\n }\n }\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n var resultChildData = [];\n if (rowDetails.action === 'remoteExpand' && _this.parent.grid.filterModule && _this.parent.grid.filterModule['value']) {\n for (var i = 0; i < datas.length; i++) {\n if (Object.prototype.hasOwnProperty.call(datas[parseInt(i.toString(), 10)], _this.parent.parentIdMapping) && datas[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping] !== null && datas[parseInt(i.toString(), 10)].level === 0) {\n datas.splice(i, 1);\n i--;\n }\n }\n for (var i = 0; i < result.length; i++) {\n if (rowDetails.record['' + _this.parent.idMapping] !== result[parseInt(i.toString(), 10)]['' + _this.parent.idMapping] &&\n rowDetails.record['' + _this.parent.idMapping] === result[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping]) {\n if (Object.prototype.hasOwnProperty.call(result, i)) {\n resultChildData.push(result[parseInt(i.toString(), 10)]);\n }\n }\n }\n result = resultChildData;\n }\n if (_this.parent.enableVirtualization && rowDetails.action === 'remoteExpand') {\n rowDetails.record.childRecords = [];\n for (var i = 0; i < result.length; i++) {\n if (rowDetails.record['' + _this.parent.idMapping] !== result[parseInt(i.toString(), 10)]['' + _this.parent.idMapping] &&\n rowDetails.record['' + _this.parent.idMapping] === result[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping] && Object.prototype.hasOwnProperty.call(result, i)) {\n rowDetails.record.childRecords.push(result[parseInt(i.toString(), 10)]);\n }\n }\n }\n else {\n rowDetails.record.childRecords = result;\n }\n var _loop_2 = function (r) {\n var record = result[parseInt(r.toString(), 10)];\n if (_this.parent.enableVirtualization && record[\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping] && rowDetails.action === 'remoteExpand') {\n _this.parent[\"\" + remoteExpandedData].push(rowDetails.record);\n }\n else if (_this.parent.enableVirtualization && record[\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping] && rowDetails.action === 'collapse') {\n for (var i = 0; i < _this.parent[\"\" + remoteExpandedData].length; i++) {\n if (rowDetails.record[\"\" + _this.parent.idMapping] === _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n _this.parent[\"\" + remoteExpandedData].splice(i, 1);\n }\n }\n }\n record.taskData = extend({}, record);\n if (record[\"\" + _this.parent.parentIdMapping] && _this.parent.enableVirtualization && _this.parent[\"\" + remoteExpandedData].length) {\n for (var i = 0; i < _this.parent[\"\" + remoteExpandedData].length; i++) {\n if (record[\"\" + _this.parent.parentIdMapping] === _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n record.level = _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)][\"\" + level] + 1;\n var parentData = _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)];\n delete parentData.childRecords;\n record.parentItem = parentData;\n record.parentUniqueID = parentData.uniqueID;\n }\n }\n }\n else if (_this.parent.enableVirtualization) {\n if ((record[\"\" + _this.parent.hasChildMapping] ||\n _this.parentItems.indexOf(record[\"\" + _this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[parseInt(r.toString(), 10)])) {\n if (isNullOrUndefined(record[\"\" + _this.parent.parentIdMapping])) {\n record.level = 0;\n if (rowDetails.action === 'remoteExpand') {\n record.childRecords = [];\n record.childRecords = rowDetails.record.childRecords;\n }\n }\n else {\n record.level = rowDetails.record.level;\n }\n }\n else {\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n record.parentItem = parentData;\n record.parentUniqueID = rowDetails.record.uniqueID;\n }\n }\n else {\n record.level = rowDetails.record.level + 1;\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n record.parentItem = parentData;\n record.parentUniqueID = rowDetails.record.uniqueID;\n }\n record.index = Math.ceil(Math.random() * 1000);\n record.uniqueID = getUid(_this.parent.element.id + '_data_');\n if (rowDetails.record[\"\" + _this.parent.idMapping] === record[\"\" + _this.parent.idMapping]) {\n rowDetails.record.uniqueID = record.uniqueID;\n }\n record.checkboxState = 'uncheck';\n if (_this.parent.enableVirtualization && isNullOrUndefined(record.level)) {\n for (var p = 0; p < _this.parent.grid.currentViewData.length; p++) {\n if (_this.parent.grid.currentViewData[parseInt(p.toString(), 10)][\"\" + _this.parent.idMapping] === record[\"\" + _this.parent.parentIdMapping]) {\n record.level = _this.parent.grid.currentViewData[parseInt(p.toString(), 10)]['level'] + 1;\n }\n }\n }\n setValue('uniqueIDCollection.' + record.uniqueID, record, _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((record[\"\" + _this.parent.hasChildMapping] ||\n _this.parentItems.indexOf(record[\"\" + _this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[parseInt(r.toString(), 10)])) {\n record.hasChildRecords = true;\n if (_this.parent.enableVirtualization && !_this.parent.loadChildOnDemand) {\n for (var i = 0; i < _this.parent[\"\" + remoteCollapsedData].length; i++) {\n if (record[\"\" + _this.parent.idMapping] === _this.parent[\"\" + remoteCollapsedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n record.expanded = _this.parent[\"\" + remoteCollapsedData][parseInt(i.toString(), 10)]['expanded'];\n }\n }\n if (rowDetails.action === 'collapse' && record[\"\" + _this.parent.idMapping] !== rowDetails.record[\"\" + _this.parent.idMapping] && record.expanded !== false) {\n record.expanded = true;\n }\n else if (rowDetails.action === 'collapse' && record[\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping]) {\n record.expanded = false;\n _this.parent[\"\" + remoteCollapsedData].push(rowDetails.record);\n }\n else if (rowDetails.action === 'remoteExpand') {\n for (var i = 0; i < _this.parent.grid.currentViewData.length; i++) {\n if (_this.parent.grid.currentViewData[parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping] === record[\"\" + _this.parent.idMapping]) {\n result.splice(r, 1, _this.parent.grid.currentViewData[parseInt(i.toString(), 10)]);\n }\n }\n if (record[_this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping]) {\n for (var i = 0; i < _this.parent[\"\" + remoteCollapsedData].length; i++) {\n if (rowDetails.record[\"\" + _this.parent.idMapping] === _this.parent[\"\" + remoteCollapsedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n _this.parent[\"\" + remoteCollapsedData].splice(i, 1);\n }\n }\n }\n if (record.expanded !== false) {\n record.expanded = true;\n }\n }\n }\n else if (_this.parent.enableVirtualization && record[\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping] && rowDetails.action !== 'collapse') {\n record.expanded = true;\n }\n else if (!(_this.parent.enableVirtualization && !_this.parent.loadChildOnDemand)) {\n record.expanded = false;\n }\n }\n var exists = datas.some(function (data) { return data[\"\" + _this.parent.idMapping] === record[_this.parent.idMapping]; });\n if (!exists) {\n datas.splice(inx + r + 1, 0, record);\n }\n };\n for (var r = 0; r < result.length; r++) {\n _loop_2(r);\n }\n var localIdMapping = _this.parent.idMapping;\n if (_this.parent.enableVirtualization && _this.parent.loadChildOnDemand) {\n datas.sort(function (firstRecord, secondRecord) {\n return firstRecord[\"\" + localIdMapping] - secondRecord[\"\" + localIdMapping];\n });\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[\"\" + result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[\"\" + result_1], true);\n }\n }\n if (rowDetails.action === 'remoteExpand' && _this.parent.allowPaging && _this.parent.pageSettings.pageSizeMode === 'All') {\n _this.parent.grid.pageSettings.totalRecordsCount = _this.parent.grid.pageSettings.totalRecordsCount + result.length;\n }\n if (_this.parent.enableVirtualization) {\n _this.parent.grid.pageSettings.totalRecordsCount = e.count;\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page\n && !this.parent.loadChildOnDemand) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n if (isRemoteData(this.parent) && this.parent.enableVirtualization) {\n var index = this.parent.query.queries.indexOf(this.parent.query.queries.filter(function (q) { return q.fn === 'onSortBy'; })[0]);\n if (index !== -1) {\n this.parent.query.queries.splice(index, 1);\n }\n if (this.parent.grid.sortSettings.columns.length === 0) {\n this.parent.query.sortBy(null, null);\n }\n }\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[parseInt(i.toString(), 10)]);\n currentData.taskData = data[parseInt(i.toString(), 10)];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n var childMapping = currentData[this.parent.childMapping];\n var hasChildren = !isNullOrUndefined(childMapping) && childMapping.length > 0;\n var shouldCount = isCountRequired(this.parent);\n var hasChildMapping = currentData[this.parent.hasChildMapping];\n if ((hasChildren && !shouldCount) || (hasChildMapping && shouldCount)) {\n currentData.hasChildRecords = true;\n }\n else {\n currentData.hasChildRecords = false;\n }\n if ((!isNullOrUndefined(childMapping) && !shouldCount) ||\n (hasChildMapping) && shouldCount) {\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(childMapping)) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n this.parent.uniqueIDCollection[currentData.uniqueID] = currentData;\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n var remoteCollapsedData = 'remoteCollapsedData';\n if (this.parent.enableVirtualization && !this.parent.loadChildOnDemand && isRemoteData(this.parent)\n && !this.parent.initialRender) {\n if (!currentData.hasChildRecords && isNullOrUndefined(currentData[\"\" + this.parent.parentIdMapping])) {\n currentData.hasChildRecords = true;\n for (var c = 0; c < this.parent[\"\" + remoteCollapsedData].length; c++) {\n if (this.parent[\"\" + remoteCollapsedData][parseInt(c.toString(), 10)][\"\" + this.parent.idMapping] === currentData[\"\" + this.parent.idMapping]) {\n currentData.expanded = false;\n }\n }\n }\n else if (currentData.level === 0 && isNullOrUndefined(parentRecords) && !currentData.hasChildRecords) {\n currentData.level = currentData.level + 1;\n }\n if (currentData[\"\" + this.parent.hasChildMapping] && !isNullOrUndefined(currentData[\"\" + this.parent.expandStateMapping])) {\n currentData.expanded = currentData[\"\" + this.parent.expandStateMapping];\n currentData.hasChildRecords = true;\n }\n this.parent.flatData.push(currentData);\n }\n else if (isNullOrUndefined(currentData[\"\" + this.parent.parentIdMapping]) || currentData.parentItem) {\n if (!isNullOrUndefined(this.parent.rowDropSettings.targetID)) {\n if (!this.parent.rowDragAndDropModule['isDuplicateData'](currentData)) {\n this.parent.flatData.push(currentData);\n }\n }\n else {\n this.parent.flatData.push(currentData);\n }\n this.parent['infiniteScrollData'].push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[\"\" + primaryKeyColumnName])) {\n actionAddArgs.data[\"\" + primaryKeyColumnName] = args.result[actionAddArgs.index][\"\" + primaryKeyColumnName];\n dataValue.taskData[\"\" + primaryKeyColumnName] = args.result[actionAddArgs.index][\"\" + primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[\"\" + getColumnByField](this.parent.grid.\n sortSettings.columns[parseInt(srt.toString(), 10)].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: args });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[\"\" + isPdfExport] && (isNullOrUndefined(args[\"\" + isCollapsedStatePersist])\n || args[\"\" + isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[parseInt(i.toString(), 10)], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[parseInt(i.toString(), 10)]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines enumerable toolbar items for programmatic access.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Enumerates detailed context menu items used for menu configurations.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid, enabling you to manage and display data efficiently across multiple pages.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the aggregate column for the TreeGrid.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows in the TreeGrid.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid, defining how records can be added, modified, or deleted.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of a sort column in the TreeGrid.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of the TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of the Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the column chooser behavior of the Grid.\n */\nvar ColumnChooserSettings = /** @class */ (function (_super) {\n __extends(ColumnChooserSettings, _super);\n function ColumnChooserSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('startsWith')\n ], ColumnChooserSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(false)\n ], ColumnChooserSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property(null)\n ], ColumnChooserSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ColumnChooserSettings.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ColumnChooserSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(true)\n ], ColumnChooserSettings.prototype, \"enableSearching\", void 0);\n __decorate([\n Property(null)\n ], ColumnChooserSettings.prototype, \"renderCustomColumnChooser\", void 0);\n return ColumnChooserSettings;\n}(ChildProperty));\nexport { ColumnChooserSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend, merge, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { getNumberFormat } from '@syncfusion/ej2-grids';\nimport { Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { RowDropSettings, getUid, parentsUntil } from '@syncfusion/ej2-grids';\nimport { LoadingIndicator } from '../models/loading-indicator';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\nimport * as literals from '../base/constant';\nimport { ColumnChooserSettings } from '../models/column-chooser-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n /** @hidden */\n _this.uniqueIDCollection = {};\n /** @hidden */\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.isFromChartSide = false;\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.freezeColumnRefresh = true;\n _this.componentRefresh = Component.prototype.refresh;\n _this.isComponentRefresh = false;\n _this.isVirtualExpandCollapse = false;\n _this.isInfiniteCollapse = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[parseInt(i.toString(), 10)]] !== current[keys[parseInt(i.toString(), 10)]] &&\n excludeKeys.indexOf(keys[parseInt(i.toString(), 10)]) === -1) {\n var isDate = old[keys[parseInt(i.toString(), 10)]] instanceof Date &&\n current[keys[parseInt(i.toString(), 10)]] instanceof Date;\n if (!isDate || (old[keys[parseInt(i.toString(), 10)]].getTime() !==\n current[keys[parseInt(i.toString(), 10)]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection, TreeLogger);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[\"\" + logger])) {\n Grid.Inject(Logger);\n }\n var freezeModulePresent = _this.injectedModules.filter(function (e) {\n if (e.prototype.getModuleName() === 'freeze') {\n Grid.Inject(FreezeColumn);\n }\n });\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Exports the TreeGrid data to an Excel file (.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - The properties used to configure the Excel export.\n * @param {boolean} isMultipleExport - Indicates whether multiple exporting is enabled.\n * @param {workbook} workbook - The workbook instance used for multiple exports.\n * @param {boolean} isBlob - If set to true, the result will be returned as blob data.\n * @returns {Promise<any>} - Returns a promise that resolves with the result of the export action.\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.allowExcelExport ? this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false) : null;\n };\n /**\n * Exports the TreeGrid data to a CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - The properties used to configure the CSV export.\n * @param {boolean} isMultipleExport - Indicates whether multiple exporting is enabled.\n * @param {workbook} workbook - The workbook instance used for multiple exports.\n * @param {boolean} isBlob - If set to true, the result will be returned as blob data.\n * @returns {Promise<any>} - Returns a promise that resolves with the result of the export action.\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.allowExcelExport ? this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true) : null;\n };\n /**\n * Exports the TreeGrid data to a PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - The properties used to configure the PDF export.\n * @param {boolean} isMultipleExport - Indicates whether multiple exporting is enabled.\n * @param {Object} pdfDoc - The PDF document instance used for multiple exports.\n * @param {boolean} isBlob - If set to true, the result will be returned as blob data.\n * @returns {Promise<any>} - Returns a promise that resolves with the result of the export action.\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.allowPdfExport ? this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob) : null;\n };\n /**\n * Sends a POST request to export the TreeGrid to an Excel file on the server side.\n *\n * @param {string} url - The URL for the server-side Excel export action.\n * @returns {void}\n */\n TreeGrid.prototype.serverExcelExport = function (url) {\n this.isExcel = true;\n this.exportTreeGrid(url);\n };\n /**\n * Sends a POST request to export the TreeGrid to a PDF document on the server side.\n *\n * @param {string} url - The URL for the server-side PDF export action.\n * @returns {void}\n */\n TreeGrid.prototype.serverPdfExport = function (url) {\n this.isExcel = false;\n this.exportTreeGrid(url);\n };\n /**\n * Sends a POST request to export the TreeGrid to a CSV file on the server side.\n *\n * @param {string} url - The URL for the server-side CSV export action.\n * @returns {void}\n */\n TreeGrid.prototype.serverCsvExport = function (url) {\n this.isExcel = true;\n this.exportTreeGrid(url);\n };\n /**\n * Exports the TreeGrid data to the specified URL using a POST request.\n *\n * @param {string} url - Defines exporting url\n * @returns {void}\n */\n TreeGrid.prototype.exportTreeGrid = function (url) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treegrid = this;\n var query = treegrid.grid.getDataModule().generateQuery(true);\n var state = new UrlAdaptor().processQuery(new DataManager({ url: '' }), query);\n var queries = JSON.parse(state.data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var treeGridModel = JSON.parse(this.addOnPersist(['allowPaging', 'pageSettings', 'sortSettings', 'allowPdfExport', 'allowExcelExport', 'aggregates',\n 'filterSettings', 'columns', 'locale', 'searchSettings', 'idMapping', 'parentIdMapping', 'childMapping', 'treeColumnIndex']));\n var include = ['field', 'headerText', 'type', 'format', 'visible',\n 'template', 'index', 'width', 'textAlign', 'headerTextAlign', 'columns'];\n treeGridModel.filterSettings.columns = queries.where;\n treeGridModel.searchSettings.fields = queries.search && queries.search[0]['fields'] || [];\n treeGridModel.sortSettings.columns = queries.sorted;\n treeGridModel.columns = this.setHeaderText(treeGridModel.columns, include);\n var form = this.createElement('form', { id: 'ExportForm' });\n form.style.display = 'none';\n var treeGridInput = this.createElement('input', { id: 'treeGridInput', attrs: { name: 'treeGridModel' } });\n treeGridInput.value = JSON.stringify(treeGridModel);\n form.method = 'POST';\n form.action = url;\n form.appendChild(treeGridInput);\n document.body.appendChild(form);\n form.submit();\n form.remove();\n };\n /**\n * Sets the header text and other properties for an array of columns based on specified criteria.\n *\n * @param {Column[]} columns - Defines array of columns\n * @param {string[]} include - Defines array of sting\n * @returns {Column[]} returns array of columns\n */\n TreeGrid.prototype.setHeaderText = function (columns, include) {\n for (var i = 0; i < columns.length; i++) {\n var column = this.getColumnByUid(columns[parseInt(i.toString(), 10)].uid);\n if (this.stackedHeader && isNullOrUndefined(column)) {\n column = !isNullOrUndefined(columns[parseInt(i.toString(), 10)].field) ?\n this.getColumnByField(columns[parseInt(i.toString(), 10)].field) : columns[parseInt(i.toString(), 10)];\n }\n columns[parseInt(i.toString(), 10)].headerText = column.headerText;\n if (!isNullOrUndefined(column.template)) {\n columns[parseInt(i.toString(), 10)].template = 'true';\n }\n if (columns[parseInt(i.toString(), 10)].format) {\n columns[parseInt(i.toString(), 10)].format = getNumberFormat(this.getFormat(column.format), column.type, false, this.currencyCode);\n if (!this.isExcel && (column.type === 'datetime' || column.type === 'date')) {\n columns[parseInt(i.toString(), 10)].format = columns[parseInt(i.toString(), 10)].format.toString().replace('AM/PM', 'tt');\n }\n columns[parseInt(i.toString(), 10)].type = column.type;\n }\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.setHeaderText(columns[parseInt(i.toString(), 10)].columns, include);\n }\n var keys = Object.keys(columns[parseInt(i.toString(), 10)]);\n for (var j = 0; j < keys.length; j++) {\n if (include.indexOf(keys[parseInt(j.toString(), 10)]) < 0) {\n delete columns[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n }\n }\n }\n return columns;\n };\n /**\n * Retrieves the appropriate format string from the given format options.\n *\n * @param {string | NumberFormatOptions | DateFormatOptions} format - The format options to retrieve the format string from.\n * @returns {string} The format string extracted from the provided format options.\n */\n TreeGrid.prototype.getFormat = function (format) {\n return typeof (format) === 'object' ? !isNullOrUndefined(format.format) ?\n format.format : format.skeleton : format;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * Initiates a complete refresh of the TreeGrid's column and layout.\n *\n * This method forces a full re-render of the TreeGrid, ensuring that any dynamic\n * changes to columns or layout are immediately reflected.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshLayout = function () {\n this.componentRefresh();\n };\n /**\n * @param {Object} prop - Defines the property\n * @param {boolean} muteOnChange - Defines the mute on change\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n if (this.isComponentRefresh) {\n this.grid = new Grid();\n }\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the specified options.\n *\n * @param {string} columnName - The name of the column to be sorted.\n * @param {SortDirection} direction - The direction of the sorting operation.\n * @param {boolean} isMultiSort - Specifies whether previous sorted columns should be maintained during sorting.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns in the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Removes the sorted state from a column specified by the field name.\n *\n * @param {string} field - The field name of the column from which the sort state should be removed.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches for TreeGrid records using a specified search string.\n * Customize the search behavior through the [searchSettings](./#searchsettings/).\n *\n * @param {string} searchString - The string used as the search key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Adjusts column widths to fit their content, ensuring content is displayed without wrapping or truncation.\n * - Hidden columns are ignored by this method.\n * - Use the `autoFitColumns` method during the `dataBound` event for initial rendering.\n *\n * @param {string | string[]} fieldNames - The name(s) of the column(s) to be auto-fitted.\n * @returns {void}\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Reorders TreeGrid columns by specifying their field names.\n *\n * @param {string | string[]} fromFName - The field name(s) of the column(s) to be moved.\n * @param {string} toFName - The destination field name to place the moved columns.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n if (!isNullOrUndefined(this.locale)) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale = void 0;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale = void 0;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n }\n };\n /**\n * Prints all the pages of the TreeGrid and hides the pager by default.\n * Customize print options using the [printMode](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n if (!isNullOrUndefined(column)) {\n row = column.closest('tr');\n if (!isNullOrUndefined(row) && !(isNullOrUndefined(row.getElementsByClassName('e-treegridexpand')[0]))) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n if (!isNullOrUndefined(column)) {\n row = column.closest('tr');\n if (!isNullOrUndefined(row) && !(isNullOrUndefined(row.getElementsByClassName('e-treegridcollapse')[0]))) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization && isNullOrUndefined(this.rowTemplate)) {\n target = e.target;\n if (!isNullOrUndefined(target.querySelectorAll('.e-rowcell'))) {\n target = parentsUntil(target, 'e-rowcell');\n }\n if (!isNullOrUndefined(target)) {\n parentTarget = target.parentElement;\n if (!isNullOrUndefined(parentTarget)) {\n var cellIndex = parentTarget.cellIndex;\n if (cellIndex && this.grid.getColumnByIndex(cellIndex).editType === 'dropdownedit' && isNullOrUndefined(this.grid.getColumnByIndex(cellIndex).edit['obj'])) {\n parentTarget = target;\n }\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var cellIndex_1 = target.cellIndex;\n var row_1 = summaryElement.children[parseInt(cellIndex_1.toString(), 10)];\n if (!isNullOrUndefined(row_1) && !this.grid.isEdit) {\n var focusedCells = this.grid.getContent().querySelectorAll('.e-rowcell.e-focused, .e-rowcell.e-focus');\n focusedCells.forEach(function (cell) {\n removeClass([cell], ['e-focused', 'e-focus']);\n });\n addClass([row_1], ['e-focused', 'e-focus']);\n }\n }\n else {\n var contentTableBody = this.grid.getContent().querySelector('.e-table tbody');\n if (parentTarget && contentTableBody && parentTarget !== contentTableBody.lastElementChild) {\n this.clearSelection();\n }\n }\n }\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization && isNullOrUndefined(this.rowTemplate)) {\n target = e.target;\n if (!isNullOrUndefined(target.querySelectorAll('.e-rowcell'))) {\n target = parentsUntil(target, 'e-rowcell');\n }\n if (!isNullOrUndefined(target)) {\n parentTarget = target.parentElement;\n if (!isNullOrUndefined(parentTarget)) {\n var cellIndex = parentTarget.cellIndex;\n if (cellIndex && this.grid.getColumnByIndex(cellIndex).editType === 'dropdownedit' && isNullOrUndefined(this.grid.getColumnByIndex(cellIndex).edit['obj'])) {\n parentTarget = target;\n }\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var cellIndex_2 = target.cellIndex;\n if (!isNullOrUndefined(cellIndex_2)) {\n var row_2 = summaryElement.children[parseInt(cellIndex_2.toString(), 10)];\n if (!isNullOrUndefined(row_2) && !this.grid.isEdit) {\n var focusedCells = this.grid.getContent().querySelectorAll('.e-rowcell.e-focused, .e-rowcell.e-focus');\n focusedCells.forEach(function (cell) {\n removeClass([cell], ['e-focused', 'e-focus']);\n });\n addClass([row_2], ['e-focused', 'e-focus']);\n }\n }\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.classList.contains('e-childrow-hidden'))) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.classList.contains('e-childrow-hidden'))) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.infiniteScrollData = [];\n this.remoteCollapsedData = [];\n this.remoteExpandedData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.freezeColumnRefresh = true;\n this.componentRefresh = Component.prototype.refresh;\n this.isComponentRefresh = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Attaches event handlers to the necessary elements during the component's initialization.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * Provides a list of the modules that are required for rendering the TreeGrid component.\n *\n * This method is essential for ensuring that all dependent modules are loaded and available\n * during the component's lifecycle, enabling full functionality.\n *\n * @returns {ModuleDeclaration[]} - Returns an array of the required TreeGrid module declarations.\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n var mergedColumns = 'mergedColumns';\n if (this[\"\" + mergedColumns]) {\n this.grid[\"\" + mergedColumns] = this[\"\" + mergedColumns];\n }\n if (isNullOrUndefined(this['changedProperties'].columns)) {\n this.grid[\"\" + splitFrozenCount](this.getColumns());\n }\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings],\n name: 'Filter'\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this],\n name: 'Toolbar'\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this],\n name: 'ContextMenu'\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings],\n name: 'Page'\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this],\n name: 'Reorder'\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this],\n name: 'Sort'\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this],\n name: 'Aggregate'\n });\n }\n if (this.resizeCheck()) {\n modules.push({\n member: 'resize', args: [this],\n name: 'Resize'\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this],\n name: 'ExcelExport'\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n var hasFreezeProp = Array.isArray(this.columns) &&\n this.columns.some(function (col) { return !!col.freeze; });\n if ((this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n hasFreezeProp) && freezePresent.length > 0) {\n modules.push({\n member: 'freeze', args: [this],\n name: 'Freeze'\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this],\n name: 'DetailRow'\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this],\n name: 'PdfExport'\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this],\n name: 'ColumnMenu'\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this],\n name: 'ColumnChooser'\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.resizeCheck = function () {\n var columnMenu = this.showColumnMenu && (!this.columnMenuItems || this.columnMenuItems\n .filter(function (c) { return c === 'AutoFit' || c === 'AutoFitAll'; }).length) ? true : false;\n var contextMenu = this.contextMenuItems && this.contextMenuItems\n .filter(function (c) { return c === 'AutoFit' || c === 'AutoFitAll'; }).length ? true : false;\n return this.allowResizing || columnMenu || contextMenu;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this],\n name: 'RowDD'\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this],\n name: 'Edit'\n });\n }\n if (!isNullOrUndefined(this.columns) && this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this],\n name: 'CommandColumn'\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this],\n name: 'Selection'\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this],\n name: 'VirtualScroll'\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this],\n name: 'InfiniteScroll'\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n if (this.element) {\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n this.keyboardModule = null;\n }\n if (this.allowKeyboard) {\n this.element.removeAttribute('tabIndex');\n }\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid.vueInstance = this.vueInstance;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol', className: 'e-treelistgrid' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[parseInt(i.toString(), 10)].member === 'virtualscroll') {\n modules[parseInt(i.toString(), 10)].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[\"\" + root] = this[\"\" + root] ? this[\"\" + root] : this;\n this.grid.appendTo(gridContainer);\n this.actionFailureHandler();\n var gridContent = this.element.getElementsByClassName('e-gridcontent')[0].childNodes[0];\n gridContent.setAttribute('tabindex', '0');\n var contentTable = this.element.getElementsByClassName('e-content')[0].querySelector('.e-table');\n if (!isNullOrUndefined(contentTable)) {\n contentTable.setAttribute('role', 'treegrid');\n }\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.updateColumnModel();\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[\"\" + destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[\"\" + destroyTemplate] = function (args, index, callback) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[\"\" + portals]))) {\n var isGantt = _this['isFromGantt'] && !isNullOrUndefined(_this['root'].clearTemplate) &&\n _this['root'].chartRowsModule['isGridRowRefreshed'];\n if (isGantt) {\n _this['root'].clearTemplate(args, index, callback);\n }\n else {\n _this.clearTemplate(args, index, callback);\n }\n }\n else if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\n };\n TreeGrid.prototype.actionFailureHandler = function () {\n var _this = this;\n var failureCases = [];\n var primaryKeyFieldNames = this.getPrimaryKeyFieldNames();\n var RecordsCount = this.flatData.length;\n if ((this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing)\n && primaryKeyFieldNames.length === 0 && RecordsCount !== 0) {\n failureCases.push('For the CRUD actions, it is necessary to enable Primary Key field for the unique data column.');\n }\n if (this.allowRowDragAndDrop && primaryKeyFieldNames.length === 0 && RecordsCount !== 0) {\n failureCases.push('For the Row Drag and Drop actions, it is necessary to enable Primary Key field for the unique data column.');\n }\n if (this.allowPaging && this.enableVirtualization) {\n failureCases.push('Paging is not allowed in virtualization case.');\n }\n if (RecordsCount === 0 && this.columns.length === 0) {\n failureCases.push('Either of the Data source or columns should be given.');\n }\n if (this.frozenColumns > 0 && this.columnModel.filter(function (col) { return col.isFrozen; }).length > 0) {\n failureCases.push('Use only one attribute for Frozen either IsFrozen or FrozenColumns.');\n }\n if (this.enableVirtualization && !isNullOrUndefined(this.detailTemplate)) {\n failureCases.push('Virtual scrolling is not compatible with the detail template');\n }\n if ((this.frozenColumns > 0 || this.frozenRows > 0 || this.columnModel.filter(function (col) { return col.isFrozen; }))\n && (!isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.rowTemplate))) {\n failureCases.push('Frozen rows and columns are not supported with the Detail template and row template.');\n }\n if ((this.frozenColumns > 0 || this.columnModel.filter(function (col) { return col.isFrozen; }).length > 0 || this.frozenRows > 0) && this.editSettings.allowEditing && this.editSettings.mode === 'Cell') {\n failureCases.push('Frozen rows and columns are not supported with cell editing.');\n }\n if (this.allowSelection && !isNullOrUndefined(this.rowTemplate)) {\n failureCases.push('Selection is not supported in RowTemplate');\n }\n if (!this.allowExcelExport && this.action === 'csvExport') {\n failureCases.push('CSV export is not allowed when allowExcelExport is disabled.');\n }\n if (!this.allowPdfExport && this.action === 'pdfExport') {\n failureCases.push('PDF export is not allowed when allowPdfExport is disabled');\n }\n if (!this.allowExcelExport && this.action === 'excelExport') {\n failureCases.push('Excel export is not allowed when allowExcelExport is disabled.');\n }\n if (this.treeColumnIndex >= this.columns.length) {\n failureCases.push('TreeColumnIndex value should not exceed the total column count.');\n }\n if (this.enableVirtualization &&\n (this.columnModel.some(function (col) { return /%$/.test(col.width); }) ||\n /%$/.test(this.height.toString()))) {\n failureCases.push('column width and height should be in pixels');\n }\n if ((this.childMapping !== 'Children') && !isNullOrUndefined(this.idMapping)) {\n failureCases.push('Both IdMapping and ChildMapping should not be used together for tree grid rendering.');\n }\n if ((!isNullOrUndefined(this.idMapping) && (isNullOrUndefined(this.parentIdMapping))) ||\n ((isNullOrUndefined(this.idMapping) && (!isNullOrUndefined(this.parentIdMapping))))) {\n failureCases.push('IdMapping and ParentIdMapping properties should be defined and vice versa.');\n }\n var checkboxColumn = this.columnModel.filter(function (col) { return col.showCheckbox; });\n var treeColumn = this.columns[this.treeColumnIndex];\n if (checkboxColumn.length !== 0) {\n if (checkboxColumn.length > 1) {\n failureCases.push('Only one column can have the ShowCheckbox option enabled.');\n }\n else if (checkboxColumn[0].field !== treeColumn.field) {\n failureCases.push('ShowCheckbox column should not be defined other than the tree column.');\n }\n }\n var alignColumn;\n if (this.treeColumnIndex !== null && this.treeColumnIndex !== -1 && this.treeColumnIndex < this.columns.length) {\n alignColumn = this.columnModel.filter(function (col) { return col.textAlign === 'Right' && col.field === _this.columnModel[_this.treeColumnIndex].field; });\n if (alignColumn.length !== 0) {\n failureCases.push('TextAlign right for the tree column is not applicable.');\n }\n }\n if (failureCases.length > 0) {\n var failureEventArgs_1 = {\n error: {}\n };\n failureCases.forEach(function (failureCase, index) {\n failureEventArgs_1.error[parseInt(index.toString(), 10)] = failureCase;\n });\n this.trigger(events.actionFailure, failureEventArgs_1);\n }\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this, this.grid.serviceLocator);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n var _loop_1 = function (i, len) {\n var rowData = this_1.flatData[parseInt(i.toString(), 10)];\n setValue('uniqueIDCollection.' + rowData['uniqueID'], rowData, this_1);\n if (rowData.level === 0 && !this_1.parentData.some(function (record) {\n return record.uniqueID === rowData.uniqueID;\n })) {\n this_1.parentData.push(rowData);\n }\n };\n var this_1 = this;\n for (var i = 0, len = this.flatData.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowMultiSorting = this.allowMultiSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.enableVirtualMaskRow = this.enableVirtualMaskRow;\n this.grid.loadingIndicator = this.loadingIndicator;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.columnChooserSettings = this.columnChooserSettings;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n this.grid.enableColumnSpan = this.enableColumnSpan;\n this.grid.enableRowSpan = this.enableRowSpan;\n var templateInstance = 'templateDotnetInstance';\n this.grid[\"\" + templateInstance] = this[\"\" + templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[\"\" + isJsComponent] = true;\n var enableHtmlSanitizer = 'enableHtmlSanitizer';\n this.grid[\"\" + enableHtmlSanitizer] = this.enableHtmlSanitizer;\n this.grid.enableStickyHeader = this.enableStickyHeader;\n this.grid.emptyRecordTemplate = this.emptyRecordTemplate;\n this.grid.isRowSelectable = this.isRowSelectable;\n var isTreeGrid = 'isTreeGrid';\n this.grid[\"\" + isTreeGrid] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.IsExpandCollapseClicked = function (args) {\n if (!this.isFromChartSide && !isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))\n && !this.selectionSettings.checkboxOnly) {\n if ((!isNullOrUndefined(args.data) && args.data['hasChildRecords']) || (args.rowIndex !== -1 && isNullOrUndefined(args.data))) {\n args.cancel = true;\n return;\n }\n }\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n if (!isNullOrUndefined(args.data) && _this.selectionSettings.persistSelection\n && _this.columnModel.filter(function (col) { return col.type === 'checkbox'; }).length > 0 && isRemoteData(_this)) {\n if (!isNullOrUndefined(args.data.parentItem) || args.isHeaderCheckboxClicked) {\n _this.parentQuery = _this.query.queries.filter(function (q) { return q.e.field === _this.parentIdMapping; });\n _this.query.queries = _this.query.queries.slice(0, 0);\n }\n }\n if (_this.pageSettings.pageSizeMode === 'Root') {\n _this.grid.selectionModule['totalRecordsCount'] = _this.grid.currentViewData.length;\n }\n if (!args.cancel) {\n _this.trigger(events.rowSelecting, args);\n }\n };\n this.grid.rowDeselecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n if (!isNullOrUndefined(args.data) && _this.selectionSettings.persistSelection\n && _this.columnModel.filter(function (col) { return col.type === 'checkbox'; }).length > 0 && isRemoteData(_this)) {\n _this.parentQuery = _this.query.queries.filter(function (q) { return q.e.field === _this.parentIdMapping; });\n _this.query.queries = _this.query.queries.slice(0, 0);\n }\n _this.trigger(events.rowDeselecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization) {\n _this.virtualScrollModule.updateSelection(args);\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.excelAggregateQueryCellInfo = function (args) {\n _this.notify('excelAggregateCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfAggregateQueryCellInfo = function (args) {\n _this.notify('pdfAggregateCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[\"\" + rowIndex]].classList.contains('e-summaryrow')) {\n args[\"\" + rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[\"\" + loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = function (args) {\n _this.trigger(events.actionFailure, args);\n };\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[parseInt(j.toString(), 10)]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[parseInt(j.toString(), 10)]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.lastRowBorderEventListener();\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = void 0;\n if (_this.dataResults.result) {\n req = 0;\n }\n else {\n req = 1;\n }\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[parseInt(i.toString(), 10)])) {\n if (totalRows[parseInt(i.toString(), 10)].nextElementSibling) {\n _this.lastRowBorder(totalRows[parseInt(i.toString(), 10)], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[\"\" + action] === 'expand' || _this.dataResults[\"\" + action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[\"\" + refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[\"\" + updateRowSelection](_this.getRows()[parseInt(index.toString(), 10)], index);\n }\n }\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection\n && !isNullOrUndefined(_this.virtualScrollModule.prevSelectedRecord)) {\n for (var i = 0; i < _this.virtualScrollModule.prevSelectedRecord.length; i++) {\n var updateRowSelection = 'updateRowSelection';\n var index = \n // eslint-disable-next-line max-len\n _this.getCurrentViewRecords().indexOf(_this.virtualScrollModule.prevSelectedRecord[parseInt(i.toString(), 10)]);\n _this.grid.selectionModule[\"\" + updateRowSelection](_this.getRows()[parseInt(index.toString(), 10)], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[\"\" + dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.lastRowBorderEventListener = function () {\n this.grid.on('last-rowcell-border-updated', this.lastRowCellBorderUpdated, this);\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var actualTarget = 'actualTarget';\n var target = _this.grid.selectionModule[\"\" + actualTarget];\n if (!isNullOrUndefined(target) && (target.classList.contains('e-treegridexpand') || target.classList.contains('e-treegridcollapse'))) {\n args.cancel = true;\n }\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n if (args.action.requestType !== 'infiniteScroll') {\n _this.infiniteScrollData = [];\n }\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[\"\" + prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n var _this = this;\n if (this.rowTemplate) {\n if (this.isReact && this.getContentTable().rows.length === 0) {\n setTimeout(function () {\n _this.treeColumnRowTemplate();\n if (_this.enableCollapseAll) {\n var currentData = _this.getCurrentViewRecords();\n var rows = _this.getContentTable().rows;\n for (var i = 0; i < rows.length; i++) {\n var args = { data: currentData[parseInt(i.toString(), 10)],\n row: rows[parseInt(i.toString(), 10)] };\n _this.renderModule.RowModifier(args);\n }\n }\n }, 0);\n }\n else {\n this.treeColumnRowTemplate();\n }\n }\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor, this.hasPreAndPostMiddleware(this.dataSource) ? this.dataSource : undefined);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[\"\" + dataSource].json = extendArray(this.dataSource[\"\" + dataSource].json);\n this.grid.dataSource[\"\" + ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[\"\" + ready])) {\n this.grid.dataSource[\"\" + ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[\"\" + dataSource].offline = true;\n dm[\"\" + isDataAvailable] = true;\n dm[\"\" + dataSource].json = e.result;\n dm[\"\" + adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n return;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n if (isRemoteData(_this) && _this.enableVirtualization) {\n if (args.requestType === 'virtualscroll') {\n _this.query.expand('VirtualScrollingAction');\n _this.showSpinner();\n }\n else if (args.requestType === 'searching' && args.searchString === '') {\n _this.query.expand('ClearSearchingAction');\n }\n else if (args.action === 'clearFilter') {\n _this.query.expand('ClearFilteringAction');\n }\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 && _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n _this.isVirtualExpandCollapse = false;\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if ((args.action === 'clearFilter' || args.action === 'clear-filter' || args.requestType === 'sorting') && _this.enableInfiniteScrolling) {\n _this.expandAll();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n if (_this.grid.isFrozenGrid() && _this.enableVirtualization && args['tableName'] === 'movable') {\n var movableContent = _this.grid.element.querySelector('.' + literals.movableContent);\n var frozenContent = _this.grid.element.querySelector('.' + literals.frozenContent);\n movableContent.style.height = frozenContent.style.height = 'auto';\n }\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[\"\" + ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n var _this = this;\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n this.columns = keys.filter(function (key) { return [_this.childMapping, _this.parentIdMapping].indexOf(key) === -1; });\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[\"\" + guid] = this.editSettings[\"\" + guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[parseInt(i.toString(), 10)]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[parseInt(i.toString(), 10)]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[parseInt(i.toString(), 10)]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[parseInt(i.toString(), 10)]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n if (this.columnModel.length === 0) {\n index = index === 0 ? -1 : index;\n }\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[parseInt(i.toString(), 10)].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[parseInt(i.toString(), 10)] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[parseInt(i.toString(), 10)];\n }\n else {\n var columnProps = Object.keys(column[parseInt(i.toString(), 10)]);\n for (var j = 0; j < columnProps.length; j++) {\n var prop = columnProps[parseInt(j.toString(), 10)];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[\"\" + prop] = column[parseInt(i.toString(), 10)][\"\" + prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[parseInt(i.toString(), 10)][\"\" + prop])) {\n gridColumn[\"\" + prop] = this.getGridColumns(column[parseInt(i.toString(), 10)][\"\" + prop], false, this.columnModel.length - 1);\n treeGridColumn[\"\" + prop] = column[parseInt(i.toString(), 10)][\"\" + prop];\n }\n else if (this.initialRender && !isNullOrUndefined(treeColumn) && this.enablePersistence && prop === 'edit') {\n gridColumn[\"\" + prop] = treeGridColumn[\"\" + prop] = treeColumn[\"\" + prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[\"\" + prop] = treeGridColumn[\"\" + prop] = column[parseInt(i.toString(), 10)][\"\" + prop];\n }\n }\n }\n if (!treeGridColumn[\"\" + stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n TreeGrid.prototype.lastRowCellBorderUpdated = function () {\n var rows = this.getContentTable().querySelectorAll('tr.e-row');\n var visibleRows = Array.from(rows).filter(function (row) { return !row.classList.contains('e-childrow-hidden'); });\n if (visibleRows.length > 0) {\n var lastVisibleRow = visibleRows[visibleRows.length - 1];\n this.lastRowBorder(lastVisibleRow, true);\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n if (!isNullOrUndefined(newProp.columns)) {\n this.refreshColumns();\n }\n requireRefresh = true;\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[\"\" + prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n this.refresh();\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'columnChooserSettings':\n this.grid.columnChooserSettings = getActualProperties(this.columnChooserSettings);\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'enableStickyHeader':\n this.grid.enableStickyHeader = this.enableStickyHeader;\n break;\n case 'emptyRecordTemplate':\n this.grid.emptyRecordTemplate = this.emptyRecordTemplate;\n break;\n case 'isRowSelectable':\n this.grid.isRowSelectable = this.isRowSelectable;\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[\"\" + prop].mode &&\n (newProp[\"\" + prop].mode === 'Cell' || newProp[\"\" + prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n case 'enableRowSpan':\n case 'enableColumnSpan':\n this.grid.enableRowSpan = this.enableRowSpan;\n this.grid.enableColumnSpan = this.enableColumnSpan;\n this.refreshColumns();\n break;\n }\n }\n if (requireRefresh) {\n if (this.isFrozenGrid()) {\n this.refreshLayout();\n }\n else {\n this.grid.refresh();\n }\n }\n };\n TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the TreeGrid component by detaching event handlers,\n * removing attributes and classes, and clearing the component's DOM elements.\n *\n * This method ensures that all resources used by the TreeGrid are properly released\n * and the component is cleaned up from the DOM to prevent memory leaks.\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n this.isComponentRefresh = true;\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n if (this.grid) {\n this.grid.dataSource = null;\n this.grid.destroy();\n }\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n this.infiniteScrollData = null;\n this.remoteCollapsedData = null;\n this.remoteExpandedData = null;\n this.parentData = null;\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[parseInt(i.toString(), 10)]]) {\n this[modules[parseInt(i.toString(), 10)]] = null;\n }\n }\n this.dataResults = null;\n this.uniqueIDCollection = {};\n this.uniqueIDFilterCollection = {};\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Updates the TreeGrid model and ensures that the underlying Grid's data model is in sync with TreeGrid.\n * This method binds current data and settings to the TreeGrid.\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Retrieves the properties of the TreeGrid that should be retained and persisted between sessions.\n *\n * The method ensures that user preferences and important settings like paging, sorting, filtering,\n * column configurations, etc., are preserved and can be restored when the component is re-initialized.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex', 'scrollPosition'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: [], scrollPosition: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[parseInt(i.toString(), 10)]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[parseInt(i.toString(), 10)]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[parseInt(k.toString(), 10)];\n delete currentObject[\"\" + objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[parseInt(i.toString(), 10)]);\n this.ignoreInArrays(ignoreOnColumn, columns[parseInt(i.toString(), 10)].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[parseInt(i.toString(), 10)]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n if (isNullOrUndefined(column.template)) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[parseInt(i.toString(), 10)]];\n column.filter = {};\n }\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n var _this = this;\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n var isEllipsisTooltip = 'isEllipsisTooltip';\n if ((target.classList.contains('e-treegridexpand') || target.classList.contains('e-treegridcollapse')) &&\n (this.grid[\"\" + isEllipsisTooltip]())) {\n this.grid['toolTipObj'].close();\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n if (this.grid.isCheckBoxSelection && !this.grid.isPersistSelection) {\n if (this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n var checkedTarget = this.grid.getHeaderContent().querySelector('.e-checkselectall');\n var checkedLen = this.grid.getSelectedRowIndexes().length;\n var totalRecords = this.getCurrentViewRecords().length;\n if (totalRecords > 0 && checkedLen === totalRecords) {\n var spanEle = checkedTarget.nextElementSibling;\n removeClass([spanEle], ['e-stop', 'e-uncheck']);\n addClass([spanEle], ['e-check']);\n }\n }\n }\n if (((target.classList.contains('e-flmenu-cancelbtn') || target.classList.contains('e-flmenu-okbtn')\n || target.classList.contains('e-content') || target.classList.contains('e-rowcell'))\n && !isNullOrUndefined(this.grid.filterModule) && this.isReact)) {\n if (!isNullOrUndefined(this.grid.filterModule['column'])) {\n if (this.grid.filterModule['column'].filterTemplate) {\n var elem = document.getElementById(this.grid.filterModule.filterModule['dlgObj'].element.id);\n this.grid.filterModule['fltrDlgDetails'].isOpen = false;\n if (this.grid.filterModule.filterModule['dlgObj'] && !this.grid.filterModule.filterModule['dlgObj'].isDestroyed && elem) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.clearTemplate(['filterTemplate'], undefined, function () {\n _this.grid.filterModule.filterModule['dlgObj'].destroy();\n });\n }\n }\n }\n }\n };\n /**\n * Retrieves all the TreeGrid row elements.\n *\n * This method is useful for accessing the HTML representation of the rows for further manipulation or inspection.\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Obtains the pager element of the TreeGrid.\n *\n * The pager enables navigation between pages when the TreeGrid displays paginated data.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid at the specified position or default location.\n *\n * @param {Object | Object[]} data - Object containing data for a single record, or an array of objects for creating multiple records. If omitted, an empty row is added.\n * @param {number} index - The index at which the new row should be added.\n * @param {RowPosition} position - Specifies the position of the new row (e.g., before, after or child).\n *\n * > Requires `editSettings.allowAdding` to be true.\n *\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[\"\" + isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels the current edit operation on the TreeGrid.\n *\n * This method discards changes made to the row and exits the edit mode without saving.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.editModule['closeEdit']();\n }\n };\n /**\n * Saves the current cell value changes without committing to the data source.\n *\n * This operation persists the changes in the UI but not in the underlying data model.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * Updates the value of a specific cell directly, bypassing the edit mode.\n *\n * This method provides a quick way to update the UI and data without user interaction.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * Updates a specific row with given values directly, skipping the edit state.\n *\n * This method allows for bulk updates of row data programmatically.\n *\n * @param {number} index - The index of the row to update.\n * @param {Object} data - The data object containing updated field values.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[parseInt(index.toString(), 10)];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Deletes a record based on specified criteria or the selected record if none specified.\n *\n * @param {string} fieldName - The name of the primary key field.\n * @param {Object} data - The data object representing the record to delete.\n * @returns {void}\n *\n * > Requires `editSettings.allowDeleting` to be true.\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if ((isNullOrUndefined(fieldName) && (isNullOrUndefined(data)) || (this.getSelectedRecords().length <= 0))) {\n var error = 'The provided value for the fieldName and data is undefined. Please ensure the fieldName and data contains number.';\n this.trigger(events.actionFailure, { error: error });\n }\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * Initiates editing for a specific row using its HTML element.\n *\n * This allows for manual control of which row enters edit mode through the UI.\n *\n * @param {HTMLTableRowElement} row - The table row element to enter into edit mode.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * Begins editing of a specific cell using row and field indices.\n *\n * Customers can programmatically specify which cell to edit without user input.\n *\n * @param {number} rowIndex - The index of the row containing the cell.\n * @param {string} field - The field name of the cell to edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables specified ToolBar items within the TreeGrid.\n *\n * This facilitates dynamic control of toolbar actions based on application logic.\n *\n * @param {string[]} items - Array of ToolBar item IDs to enable or disable.\n * @param {boolean} isEnable - Boolean flag to determine whether to enable (true) or disable (false) items.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * Commits the edits made to a record in edit mode, updating the data source.\n *\n * Use this method to finalize changes for rows in edit mode, ensuring persistence.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Displays the column chooser at a specified screen position.\n *\n * Useful for customizing the visibility of columns interactively via the UI.\n *\n * @param {number} x - The X-axis position of the column chooser.\n * @param {number} y - The Y-axis position of the column chooser.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Deletes a visible row from the TreeGrid using its HTML element.\n *\n * Apply this method when handling row deletions through DOM manipulations.\n *\n * @param {HTMLTableRowElement} tr - The table row element to remove.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Retrieves the primary key field names used in the TreeGrid.\n *\n * This information is crucial for identifying and manipulating unique rows.\n *\n * @returns {string[]} - Returns an array of primary key field names.\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates the value of a specific cell using its primary key for identification.\n *\n * Useful for targeted updates that leverage unique identifiers to ensure accuracy.\n *\n * @param {string| number} key - The primary key value of the row containing the cell.\n * @param {string} field - The field name of the cell to update.\n * @param {string | number | boolean | Date} value - The new value to assign to the specified cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[parseInt(rowIndex.toString(), 10)];\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n };\n /**\n * Updates the data for a specific row identified by its primary key and refreshes the display.\n *\n * Important for keeping the displayed data consistent with the source database or dataset.\n *\n * @param {string| number} key - The primary key value of the row to update.\n * @param {Object} rowData - The new data to apply to the row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[\"\" + primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n if (this.enableVirtualization) {\n this.grid.selectionModule.selectedRowIndexes = this.grid.selectionModule.selectedRowIndexes.indexOf(record.index) === -1\n && (this.selectedRowIndex >= 0 && this.selectedRowIndex !== record.index) ? [record.index] :\n this.grid.selectionModule.selectedRowIndexes;\n }\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[\"\" + primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n removeClass(table.querySelectorAll('td.e-lastrowcell'), 'e-lastrowcell');\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\n };\n /**\n * Navigates to a specified page number within the TreeGrid pagination.\n *\n * This can be used to programmatically change the page being viewed,\n * allowing for scripted navigation through data.\n *\n * @param {number} pageNo - The page number to navigate to. Must be within valid page range.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Updates the external message displayed within the pager component.\n *\n * This is useful for showing custom messages or additional information\n * related to the data set or pagination status.\n *\n * @param {string} message - The custom message to display in the pager.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Retrieves a cell element based on its row and column indices in the TreeGrid.\n *\n * This method is helpful for accessing cell-level elements for custom\n * operations or styling.\n *\n * @param {number} rowIndex - The index of the row containing the cell.\n * @param {number} columnIndex - The index of the column containing the cell.\n * @returns {Element} - Returns the HTML element of the specified cell.\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Retrieves a column object by the column's field name.\n *\n * This is typically used for obtaining the details of a column for\n * configuration or data manipulation purposes.\n *\n * @param {string} field - The field name of the column.\n * @returns {Column} - Returns the column object corresponding to the field.\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Fetches a column object using the column's unique identifier (UID).\n *\n * Useful in scenarios where columns do not have unique field names but\n * are uniquely identifiable via UID.\n *\n * @param {string} uid - The unique identifier for the column.\n * @returns {Column} - Returns the column object for the given UID.\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[\"\" + columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Retrieves the names of all column fields in the TreeGrid.\n *\n * This method provides a list of field names useful for dynamic operations\n * or configuration where fields need to be enumerated or manipulated.\n *\n * @returns {string[]} - Returns an array of column field names.\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Retrieves the footer content element of the TreeGrid, usually for styling or custom manipulation.\n *\n * This can be used to access the footer for adding custom functionality\n * or styling purposes to enhance user interaction at the bottom of the grid.\n *\n * @returns {Element} - Returns the footer content HTML element.\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Acquires the footer table element of the TreeGrid for layout management.\n *\n * Useful for manipulating the table's structure or style beneath the grid content.\n *\n * @returns {Element} - Returns the footer table HTML element.\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows one or more columns based on the specified column names.\n *\n * This is useful for dynamically adjusting the visibility of columns\n * based on user actions or application logic.\n *\n * @param {string|string[]} keys - A single column name or an array of column names to show.\n * @param {string} showBy - Key to determine visibility either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides one or more columns based on the specified column names.\n *\n * Utilized to dynamically reduce the visibility of columns based on\n * user roles or preferences.\n *\n * @param {string|string[]} keys - A single column name or an array of column names to hide.\n * @param {string} hideBy - Key to evaluate columns either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Retrieves a column header element based on the field name of the column.\n *\n * This method helps to directly manipulate headers, such as applying custom styles.\n *\n * @param {string} field - The field name of the desired column.\n * @returns {Element} - Returns the HTML element of the column header.\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Acquires the column header element using the column's index.\n *\n * Suitable for situations where direct column index is available\n * and header access is needed for operations.\n *\n * @param {number} index - The index of the column.\n * @returns {Element} - Returns the HTML element of the specified column header.\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Retrieves a column header element utilizing the column's UID.\n *\n * Useful for precision access to header elements when UIDs are used\n * uniquely to manage column identities.\n *\n * @param {string} uid - The UID of the column.\n * @returns {Element} - Returns the HTML element of the column header.\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Determines the column index by the specified field name.\n *\n * Helpful in converting field names to indices for operations that require\n * numeric input for array or collection indexing.\n *\n * @param {string} field - The field name of the column.\n * @returns {number} - Returns the index of the column.\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[\"\" + columnModel], function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Determines the column index based on the unique identifier (UID).\n *\n * This can be crucial in scenarios that involve dynamic column management\n * where UID provides an accurate reference.\n *\n * @param {string} uid - The UID of the column.\n * @returns {number} - Returns the column index.\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Fetches a collection of columns from the TreeGrid optionally refreshing the column model.\n *\n * Use this method to retrieve and optionally refresh the list of columns\n * to ensure up-to-date configurations and settings.\n *\n * @param {boolean} isRefresh - Determines whether to refresh the grid's column model.\n * @returns {Column[]} - Returns an array of TreeGrid column objects.\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[parseInt(i.toString(), 10)]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[\"\" + prop] = gridColumns[parseInt(i.toString(), 10)][\"\" + prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[parseInt(i.toString(), 10)].field && this.columnModel[parseInt(i.toString(), 10)].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[parseInt(i.toString(), 10)].template = temp;\n }\n }\n }\n var deepMerge = 'deepMerge';\n this[\"\" + deepMerge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (this.stackedHeader && !isNullOrUndefined(this.detailTemplate)) {\n var error = 'Stacked header is not compatible with the detail template';\n this.trigger(events.actionFailure, { error: error });\n }\n if (this.stackedHeader && this.allowResizing && !isNullOrUndefined(this.columns)) {\n this.updateColumnsWidth(this.columns);\n }\n if (!this.stackedHeader && !isNullOrUndefined(this.columns)) {\n merge(this.columns, this.columnModel);\n }\n this[\"\" + deepMerge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnsWidth = function (columns) {\n var _this = this;\n columns.forEach(function (column) {\n if (!isNullOrUndefined(column) && column.columns) {\n _this.updateColumnsWidth(column.columns);\n }\n else if (!isNullOrUndefined(column) && column.field) {\n var currentColumn = _this.grid.getColumnByField(column.field);\n if (!isNullOrUndefined(currentColumn)) {\n column.width = currentColumn.width;\n }\n }\n });\n };\n /**\n * Retrieves the main content area of the TreeGrid.\n *\n * This method allows access to the main content DIV, which can\n * be used for layout adjustments or adding custom elements.\n *\n * @returns {Element} - Returns the TreeGrid content HTML element.\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[\"\" + persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[\"\" + persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.setFrozenCount = function () {\n var persist3 = 'setFrozenCount';\n this.grid[\"\" + persist3].apply(this);\n };\n TreeGrid.prototype.splitFrozenCount = function (columns) {\n var persist4 = 'splitFrozenCount';\n var instance = this.frozenColumns > 0 ? this.grid : this;\n this.grid[\"\" + persist4].apply(instance, [columns]);\n };\n TreeGrid.prototype.removeBorder = function (columns) {\n var persist5 = 'removeBorder';\n this.grid[\"\" + persist5].apply(this.grid, [columns]);\n };\n TreeGrid.prototype.frozenLeftBorderColumns = function (columns) {\n var persist6 = 'frozenLeftBorderColumns';\n this.grid[\"\" + persist6].apply(this.grid, [columns]);\n };\n TreeGrid.prototype.frozenRightBorderColumns = function (columns) {\n var persist7 = 'frozenRightBorderColumns';\n this.grid[\"\" + persist7].apply(this.grid, [columns]);\n };\n TreeGrid.prototype.isFrozenGrid = function () {\n var hasFreezeProp = Array.isArray(this.columns) &&\n this.columns.some(function (col) { return !!col.freeze; });\n return (this.frozenColumns > 0 || this.frozenRows > 0 || this.getFrozenColumns() > 0 ||\n hasFreezeProp);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n TreeGrid.prototype.hasPreAndPostMiddleware = function (obj) {\n return (obj && typeof obj.applyPreRequestMiddlewares === 'function' && typeof obj.applyPostRequestMiddlewares === 'function');\n };\n /**\n * Retrieves the content table element of the TreeGrid.\n *\n * This table contains the main data display area, allowing for\n * interaction and data manipulation directly within the TreeGrid.\n *\n * @returns {Element} - Returns the HTML element representing the content table.\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Obtains all data row elements from the TreeGrid, excluding summary rows.\n *\n * Provides a way to access the visual representation of data for purposes\n * like custom formatting or event binding.\n *\n * @returns {Element[]} - Returns an array of data row elements.\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[parseInt(i.toString(), 10)].classList.contains('e-summaryrow')) {\n dRows.push(rows[parseInt(i.toString(), 10)]);\n }\n }\n return dRows;\n };\n /**\n * Retrieves the current set of records that are visible in the TreeGrid view.\n *\n * This method excludes any summary rows to focus on the main data set\n * currently being viewed by the user.\n *\n * @returns {Object[]} - Returns an array of the current view records.\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n var isSummaryRow = 'isSummaryRow';\n return this.grid.currentViewData.filter(function (e) { return isNullOrUndefined(e[\"\" + isSummaryRow]); });\n };\n /**\n * Collects data changes (added, edited, and deleted) that have not been saved in batch mode.\n *\n * This allows you to view pending changes awaiting a commit to the data source.\n *\n * @returns {Object} - Returns an object detailing batch changes.\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Retrieves the header content element of the TreeGrid.\n *\n * Mainly used for interacting with the header section, which includes\n * column headers and any applied header styling or events.\n *\n * @returns {Element} - Returns the HTML element for header content.\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Retrieves the header table element of the TreeGrid.\n *\n * This method is useful for direct access to the table structure\n * where column headers are defined.\n *\n * @returns {Element} - Returns the HTML element for the header table.\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Fetches a specific row element based on its index in the TreeGrid.\n *\n * This provides a way to directly access and manipulate a row using its index.\n *\n * @param {number} index - The index of the desired row.\n * @returns {Element} - Returns the HTML element of the specified row.\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Provides detailed information about a row based on a specified target element.\n *\n * Integral for retrieving metadata such as row index or data object\n * when working with events or complex tree structures.\n *\n * @param {Element | EventTarget} target - The target element or event triggering the request.\n * @returns {RowInfo} - Returns an object containing row information.\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Finds the unique identifier (UID) for a column based on its field name.\n *\n * UIDs are essential for precise identification and manipulation within complex grids.\n *\n * @param {string} field - The field name of the column.\n * @returns {string} - Returns the unique identifier for the specified column.\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Retrieves all the columns that are currently set to be visible within the TreeGrid.\n *\n * Helps in understanding the user's current view and can be used to dynamically\n * adjust the visible columns.\n *\n * @returns {Column[]} - Returns an array of visible column objects.\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n return this.columnModel.filter(function (col) { return col.visible; });\n };\n /**\n * Displays a loading spinner overlay across the TreeGrid for any data action or long-running process.\n *\n * This can be manually invoked to indicate processing, enhancing user experience by providing feedback.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Hides a manually shown loading spinner overlay from the TreeGrid.\n *\n * Ensures that any long-running process indication is removed after completion\n * to manage user interface aesthetics.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the visual appearance and data of the TreeGrid, updating header and content.\n *\n * This is crucial for synchronizing the displayed data with the underlying data source,\n * ensuring the view reflects current data.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor, this.hasPreAndPostMiddleware(this.dataSource) ? this.dataSource : undefined)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Retrieves the records associated with rows that have their checkboxes checked.\n *\n * Facilitates operations that require information about specifically selected or\n * interacted rows within the grid.\n *\n * @returns {Object[]} - Returns an array of checked row data objects.\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Retrieves currently visible records according to the TreeGrid's visual state.\n *\n * It considers row expansion and collapse states to return only those records\n * that a user can currently interact with.\n *\n * @returns {Object[]} - Returns visible records reflecting the TreeGrid's current view.\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[parseInt(i.toString(), 10)]);\n if (!currentViewRecords[parseInt(i.toString(), 10)].expanded) {\n i += findChildrenRecords(currentViewRecords[parseInt(i.toString(), 10)]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Retrieves the indices of rows that have their checkboxes checked.\n *\n * This can assist in programatically assessing which rows have been selected\n * by checkbox interaction for further processing.\n *\n * @returns {number[]} - Returns an array of indices corresponding to checked rows.\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Selects rows in the TreeGrid using row indices, checking their associated checkboxes.\n *\n * This method provides automation for selecting or highlighting specific rows,\n * useful in scenarios needing pre-selection or default selections.\n *\n * @param {number[]} indexes - An array of row indices to be marked as selected.\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Updates and refreshes the TreeGrid's column definitions and layout.\n *\n * Ensures that the latest column settings are displayed, either refreshing the UI\n * or adjusting internal configurations to match current data or configuration updates.\n *\n * @param {boolean} refreshUI - A flag indicating whether the DOM should be updated.\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.getTreeColumn();\n if (!this.isFrozenGrid()) {\n this.grid.refreshColumns();\n }\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n TreeGrid.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this[\"\" + columnModel][this.treeColumnIndex];\n var updatedCols = this.getColumns();\n var treeColumnField = getObject('field', treeColumn);\n var treeIndex = updatedCols.findIndex(function (col) {\n return getObject('field', col) === treeColumnField;\n });\n if (!isNullOrUndefined(treeIndex)) {\n this.setProperties({ treeColumnIndex: treeIndex }, true);\n }\n };\n /**\n * Refreshes the header section of the TreeGrid to reflect any structural or data changes.\n *\n * This method is useful when there are dynamic updates or layout adjustments\n * needed in the header portion to ensure it aligns with current grid data or settings.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if ((this.getBatchChanges()[this.changedRecords].length || this.getBatchChanges()[this.deletedRecords].length ||\n this.getBatchChanges()[this.addedRecords].length) && this.editSettings.showConfirmDialog) {\n var dialogObj = this.grid.editModule[\"\" + obj];\n this.grid.editModule[\"\" + showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo_1 = this.grid.getRowInfo(target);\n var record = rowInfo_1.rowData;\n if (this.grid.isFrozenGrid() && this.enableVirtualization && !Object.keys(record).length) {\n var freezeRows = 'freezeRows';\n record = this.grid.contentModule[\"\" + freezeRows].filter(function (e) { return e.uid === rowInfo_1.row.getAttribute('data-uid'); })[0].data;\n }\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo_1.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo_1.row, record);\n }\n else {\n this.expandRow(rowInfo_1.row, record);\n }\n }\n };\n /**\n * Expands the specified parent row within the TreeGrid to reveal its nested data.\n *\n * This method is useful for programmatically expanding rows to display their\n * hierarchical children, providing detailed views for nested data structures.\n *\n * @param {HTMLTableRowElement} row - The table row element that should be expanded.\n * @param {Object} record - Optional. Represents the data record associated with the row to be expanded.\n * @param {Object} key - Optional. The primary key value that uniquely identifies the record.\n * @param {number} level - Optional. Indicates the hierarchical level of the record within the TreeGrid.\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n this.isCollapseAll = false;\n var parentRec = this.parentData;\n if (!this.enableVirtualization) {\n parentRec = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n record = this.getCollapseExpandRecords(row, record);\n if (isNullOrUndefined(row) && isNullOrUndefined(record)) {\n return;\n }\n if (!isNullOrUndefined(row) && row.cells && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n if (this.isExpandAll && !isRemoteData(this)) {\n var args = { data: parentRec, row: row, cancel: false };\n var pagerValuePresent = false;\n if (this.grid.pagerModule && !isNullOrUndefined(this.grid.pagerModule.pagerObj.pagerdropdownModule)) {\n pagerValuePresent = this.grid.pagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value ? true : false;\n }\n if (!this.isExpandingEventTriggered) {\n this.trigger(events.expanding, args, function (expandingArgs) {\n _this.expandAllPrevent = expandingArgs.cancel;\n if (!expandingArgs.cancel && !isNullOrUndefined(record)) {\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n _this.expandRows(row, record, parentRec);\n }\n });\n }\n else if ((!this.allowPaging || (pagerValuePresent && this.grid.pagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === 'All')) &&\n !this.expandAllPrevent && this.isExpandingEventTriggered) {\n this.expandRows(row, record, parentRec);\n }\n this.isExpandingEventTriggered = true;\n }\n else if (!this.isExpandAll || (this.isExpandAll && isRemoteData(this))) {\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n _this.expandRows(row, record, parentRec);\n }\n });\n }\n };\n // Internal method to handle the rows expand\n TreeGrid.prototype.expandRows = function (row, record, parentRec) {\n this.expandCollapse('expand', row, record);\n var children = 'Children';\n if (!(isRemoteData(this) && !isOffline(this)) && (!isCountRequired(this) || !isNullOrUndefined(record[\"\" + children]))) {\n var expandArgs = { data: record, row: row };\n if (!isNullOrUndefined(this.expandStateMapping)) {\n this.updateExpandStateMapping(expandArgs.data, true);\n }\n if (this.isExpandAll && !this.isExpandedEventTriggered) {\n this.isExpandedEventTriggered = true;\n expandArgs = { data: parentRec, row: row };\n this.trigger(events.expanded, expandArgs);\n }\n else if (!this.isExpandAll && this.enableVirtualization && this.selectionSettings.persistSelection\n && !isNullOrUndefined(this.virtualScrollModule.prevSelectedRecord)) {\n this.virtualScrollModule.prevSelectedRecord = [];\n }\n else if (!this.isExpandAll) {\n this.trigger(events.expanded, expandArgs);\n }\n }\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[parseInt(i.toString(), 10)]);\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record) && !isNullOrUndefined(row)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[parseInt(row.getAttribute('aria-rowindex'), 10) - 1];\n }\n else {\n if (this.enableVirtualization && (this.isCollapseAll || this.isExpandAll)) {\n if (row.rowIndex === -1) {\n record = this.grid.getCurrentViewRecords()[parseInt(row.getAttribute('aria-rowindex'), 10) - 1];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n else if (this.rowTemplate) {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n else {\n record = this.grid.getCurrentViewRecords()[parseInt(row.getAttribute('aria-rowindex'), 10) - 1];\n }\n }\n }\n return record;\n };\n /**\n * Collapses the specified parent row in the TreeGrid.\n *\n * This method collapses the row associated with the provided HTMLTableRowElement,\n * hiding any of its displayed child rows. It is typically used to manage the\n * visibility of hierarchical data within a tree structure.\n *\n * @param {HTMLTableRowElement} row - The HTMLTableRowElement representing the parent row\n * whose child rows are to be collapsed.\n * @param {Object} record - (Optional) The data record associated with the row being collapsed.\n * This can be used to access or manipulate the underlying data\n * when collapsing the row.\n * @param {Object} key - (Optional) The primary key value of the record. It can be used to identify\n * the target record uniquely when collapsing the row, especially in cases\n * where the row or record data needs to be referenced or logged.\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n this.isExpandAll = false;\n var parentRec = this.parentData;\n if (!this.enableVirtualization) {\n parentRec = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n record = this.getCollapseExpandRecords(row, record);\n if (isNullOrUndefined(row) && isNullOrUndefined(record)) {\n return;\n }\n if (this.isCollapseAll && !isRemoteData(this)) {\n var args = { data: parentRec, row: row, cancel: false };\n if (!this.isCollapsingEventTriggered) {\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n _this.collapseAllPrevent = collapsingArgs.cancel;\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.collapseRows(row, record, parentRec);\n }\n });\n }\n else if (!this.allowPaging && !this.collapseAllPrevent && this.isCollapsingEventTriggered) {\n this.collapseRows(row, record, parentRec);\n }\n this.isCollapsingEventTriggered = true;\n }\n else if (!this.isCollapseAll || (this.isCollapseAll && isRemoteData(this))) {\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n _this.collapseRows(row, record, parentRec);\n }\n });\n }\n };\n // Internal method for handling the rows collapse\n TreeGrid.prototype.collapseRows = function (row, record, parentRec) {\n this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(this)) {\n if (!isNullOrUndefined(this.expandStateMapping)) {\n this.updateExpandStateMapping(collapseArgs.data, false);\n }\n if (this.isCollapseAll && !this.isCollapsedEventTriggered) {\n this.isCollapsedEventTriggered = true;\n collapseArgs = { data: parentRec, row: row };\n this.trigger(events.collapsed, collapseArgs);\n }\n else if (!this.isCollapseAll) {\n this.trigger(events.collapsed, collapseArgs);\n }\n }\n };\n TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[parseInt(i.toString(), 10)][this.expandStateMapping] = state;\n editAction({ value: totalRecords[parseInt(i.toString(), 10)], action: 'edit' }, this, this.isSelfReference, totalRecords[parseInt(i.toString(), 10)].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[\"\" + this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands all the records at the specified hierarchical level within the TreeGrid.\n *\n * This method is useful for visually expanding data at a certain depth, making\n * all parent rows visible at the given level and their child rows accessible.\n *\n * @param {number} level - The hierarchical level at which parent rows should be expanded.\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands a specific record identified by the provided primary key value.\n *\n * This method is useful for expanding particular node in the TreeGrid when\n * the parent rows need to be targeted individually by their unique key.\n *\n * @param {Object} key - The primary key value of the record to be expanded.\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_2 = function (i) {\n if (!isNullOrUndefined(record[parseInt(i.toString(), 10)].parentItem)) {\n var puniqueID_1 = record[parseInt(i.toString(), 10)].parentItem.uniqueID;\n var parentItem = this_2.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_2)) {\n parentItem = this_2.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_2, parentItem[0], this_2.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_2.expandRow(null, record[parseInt(i.toString(), 10)], key, level);\n }\n };\n var this_2 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_2(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses all the records at the specified hierarchical level within the TreeGrid.\n *\n * This function helps in hiding child rows for all parent nodes at a given level,\n * effectively reducing the visible depth of the hierarchical structure.\n *\n * @param {number} level - The hierarchical level at which parent rows should be collapsed.\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses a specific record identified by the provided primary key value.\n *\n * This method is useful for collapsing particular node in the TreeGrid when\n * the parent rows need to be targeted individually by their unique key.\n *\n * @param {Object} key - The primary key value of the record to be collapsed.\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[\"\" + primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[parseInt(i.toString(), 10)], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[\"\" + endIndex] = -1;\n }\n };\n /**\n * Expands all rows in the TreeGrid, making the full hierarchy visible.\n *\n * This method should be used with caution on large datasets, as it makes\n * all nodes and their child rows visible, which might affect performance.\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n if (this.getCurrentViewRecords().length === 0) {\n var error = 'The provided value for the datasource is undefined. Please ensure to add the dataSource.';\n this.trigger(events.actionFailure, { error: error });\n }\n this.isExpandedEventTriggered = false;\n this.isExpandingEventTriggered = false;\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n var changes = this.getBatchChanges ? this.getBatchChanges() : {};\n var changed = Array.isArray(changes.changedRecords) ? changes.changedRecords : [];\n var deleted = Array.isArray(changes.deletedRecords) ? changes.deletedRecords : [];\n var added = Array.isArray(changes.addedRecords) ? changes.addedRecords : [];\n var hasChanges = changed.length > 0 || deleted.length > 0 || added.length > 0;\n if (hasChanges && this.editSettings.showConfirmDialog) {\n var dialogObj = this.grid.editModule[\"\" + obj];\n this.grid.editModule[\"\" + showDialog]('CancelEdit', dialogObj);\n return;\n }\n }\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses all rows in the TreeGrid, hiding all child rows and leaving only parent nodes visible.\n *\n * This method can be used to quickly minimize the view to only top-level data,\n * which is helpful for summarizing or performing broad overviews of the dataset.\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n if (this.getCurrentViewRecords().length === 0) {\n var error = 'The provided value for the datasource is undefined. Please ensure to add the dataSource.';\n this.trigger(events.actionFailure, { error: error });\n }\n this.isCollapsedEventTriggered = false;\n this.isCollapsingEventTriggered = false;\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n var changes = this.getBatchChanges ? this.getBatchChanges() : {};\n var changed = Array.isArray(changes.changedRecords) ? changes.changedRecords : [];\n var deleted = Array.isArray(changes.deletedRecords) ? changes.deletedRecords : [];\n var added = Array.isArray(changes.addedRecords) ? changes.addedRecords : [];\n var hasChanges = changed.length > 0 || deleted.length > 0 || added.length > 0;\n if (hasChanges && this.editSettings.showConfirmDialog) {\n var dialogObj = this.grid.editModule[\"\" + obj];\n this.grid.editModule[\"\" + showDialog]('CancelEdit', dialogObj);\n return;\n }\n }\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows;\n if (this.rowTemplate) {\n rows = [].slice.call(this.grid.getContentTable().querySelectorAll('tr')).filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n }\n else {\n rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n }\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && (this.pageSettings.pageSizeMode === 'All' || this.pageSettings.pageSizeMode === 'Root')) || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n var currentRecordIndx = this.frozenRows ? this.getCurrentViewRecords()[parseInt(rows[parseInt(i.toString(), 10)].getAttribute('aria-rowindex'), 10) - 1] : this.getCurrentViewRecords()[rows[parseInt(i.toString(), 10)].rowIndex];\n if (!isNullOrUndefined(currentRecordIndx)) {\n this.collapseRow(rows[parseInt(i.toString(), 10)]);\n }\n }\n else {\n if (!this.enableVirtualization) {\n this.expandRow(rows[parseInt(i.toString(), 10)]);\n }\n else if (rows[0].getAttribute('aria-expanded') !== 'true') {\n this.expandRow(rows[0]);\n }\n }\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[parseInt(i.toString(), 10)]);\n }\n else {\n this.expandRow(rows[parseInt(i.toString(), 10)]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var _this = this;\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.grid.currentViewData.filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if ((!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) || (action === 'collapse' || (this.isExpandAll && !this.loadChildOnDemand) && !isRemoteData(this) && this.isSelfReference && isCountRequired(this))) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.grid.currentViewData.indexOf(record);\n row = gridRows[parseInt(rowIndex.toString(), 10)];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex') - 1;\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && (this.pageSettings.pageSizeMode === 'All' || this.pageSettings.pageSizeMode === 'Root')) || this.enableVirtualization) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'e-childrow-visible';\n if (!isChild) {\n record.expanded = true;\n this.flatData.forEach(function (e) {\n e.expanded = e.uniqueID === record.uniqueID && e.expanded !== record.expanded ? record.expanded : e.expanded;\n });\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'e-childrow-hidden';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.flatData.forEach(function (e) {\n e.expanded = e.uniqueID === record.uniqueID && e.expanded !== record.expanded ? record.expanded : e.expanded;\n });\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n row.querySelectorAll('.e-treerowcell')[0].setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n if (this.enableInfiniteScrolling && action === 'collapse' && !this.isCollapseAll) {\n this.notify(events.collapseActionComplete, { isCollapse: true, data: record, row: row });\n }\n var lastrowIdx = this.getVisibleRecords()[this.getVisibleRecords().length - 1]['index'];\n var lastRow = this.getRowByIndex(lastrowIdx);\n var borderElement = lastRow ? lastRow.nextElementSibling ? lastRow.nextElementSibling.classList.contains('e-detailrow') ? lastRow.nextElementSibling : lastRow : lastRow : null;\n if (!this.isInfiniteCollapse && this.grid.getContentTable().clientHeight <= this.grid.getContent().clientHeight && !isNullOrUndefined(borderElement) && !borderElement.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(borderElement, true);\n }\n }\n if (isCountRequired(this) && action === 'expand') {\n var currentData = this.getCurrentViewRecords();\n var visibleRecords = currentData.filter(function (e) {\n return getExpandStatus(_this, e, _this.parentData);\n });\n this.dataResults.result = visibleRecords;\n }\n if (!isNullOrUndefined(targetEle) && targetEle.closest('.e-treerowcell').classList.contains('e-cellselectionbackground')) {\n targetEle.closest('.e-treerowcell').classList.remove('e-cellselectionbackground');\n targetEle.closest('.e-treerowcell').removeAttribute('aria-selected');\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell') && !this.isInfiniteCollapse) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[parseInt(i.toString(), 10)])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[parseInt(i.toString(), 10)], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n this.isInfiniteCollapse = false;\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n if (expandingArgs.requestType === 'collapse' && isCountRequired(this)) {\n var flatDataRecords = this.flatData.slice();\n for (var i = 0; i < flatDataRecords.length; i++) {\n if (flatDataRecords[parseInt(i.toString(), 10)]['parentUniqueID'] === expandingArgs.data['uniqueID']) {\n flatDataRecords.splice(i, 1);\n i = i - 1;\n }\n }\n this.dataResults.result = flatDataRecords;\n return;\n }\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n var state;\n if (this.query) {\n state = this.grid.getDataModule().getStateEventArgument(this.query);\n state.action = expandingArgs;\n }\n else {\n state = expandingArgs;\n }\n expandingArgs[\"\" + childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, state);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n if (isCountRequired(_this)) {\n _this.flatData = _this.dataResults.result;\n }\n if (_this.enableInfiniteScrolling && isCountRequired(_this)) {\n _this.flatData = _this.infiniteScrollData;\n }\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[parseInt(i.toString(), 10)].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[parseInt(i.toString(), 10)]) {\n childData[parseInt(i.toString(), 10)].level = record.level + 1;\n childData[parseInt(i.toString(), 10)].index = Math.ceil(Math.random() * 1000);\n childData[parseInt(i.toString(), 10)].parentItem = extend({}, record);\n childData[parseInt(i.toString(), 10)].taskData = extend({}, childData[parseInt(i.toString(), 10)]);\n delete childData[parseInt(i.toString(), 10)].parentItem.childRecords;\n delete childData[parseInt(i.toString(), 10)].taskData.parentItem;\n childData[parseInt(i.toString(), 10)].parentUniqueID = record.uniqueID;\n childData[parseInt(i.toString(), 10)].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[parseInt(i.toString(), 10)].uniqueID, childData[parseInt(i.toString(), 10)], _this);\n if (!isNullOrUndefined(childData[parseInt(i.toString(), 10)][_this.childMapping]) ||\n (childData[parseInt(i.toString(), 10)][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[parseInt(i.toString(), 10)].hasChildRecords = true;\n }\n if (isCountRequired(_this) && record[_this.childMapping] && record[_this.childMapping][parseInt(i.toString(), 10)]) {\n currentData.splice(index + 1 + i, 0, childData[parseInt(i.toString(), 10)]);\n }\n else {\n currentData.splice(index + 1 + i, record[_this.childMapping] &&\n record[_this.childMapping][parseInt(i.toString(), 10)] ? 1 : 0, childData[parseInt(i.toString(), 10)]);\n }\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[parseInt(index.toString(), 10)][\"\" + _this.childMapping] = childData;\n currentData[parseInt(index.toString(), 10)].childRecords = childData;\n currentData[parseInt(index.toString(), 10)].expanded = true;\n setValue('uniqueIDCollection.' + currentData[parseInt(index.toString(), 10)].uniqueID, currentData[parseInt(index.toString(), 10)], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[parseInt(j.toString(), 10)]);\n }\n }\n if (isCountRequired(_this) && !_this.loadChildOnDemand && expandingArgs.requestType === 'expand') {\n _this.dataResults['expandRecord'] = {};\n _this.dataResults['expandRecord'] = expandingArgs.data;\n }\n _this.isExpandRefresh = true;\n var scrollHeightBeforeRefresh = _this.getContentTable().parentElement.scrollTop;\n _this.grid.refresh();\n if (_this.enableInfiniteScrolling) {\n _this.getContentTable().parentElement.scrollTop = scrollHeightBeforeRefresh;\n }\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n var fetchRemoteChildData = 'fetchRemoteChildData';\n var requestType = getValue('isCollapseAll', this) ? 'collapseAll' : 'refresh';\n this.grid.contentModule.requestType = requestType;\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return ((r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.trigger(events.expanded, args_1);\n }\n }\n else if (action === 'collapse' && this.enableVirtualization) {\n this.dataModule[\"\" + fetchRemoteChildData]({ action: action, record: args.data, rows: null, parentRow: args.row });\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var _this = this;\n var rows;\n var detailRow = row.nextElementSibling ? row.nextElementSibling.classList.contains('e-detailrow') ? row.nextElementSibling : null : null;\n var childRecords;\n if (this.enableInfiniteScrolling) {\n childRecords = this.grid.getRowsObject().filter(function (e) { return e.data.parentUniqueID === record.uniqueID; });\n }\n else {\n childRecords = this.grid.currentViewData.filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n }\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n else if (this.isPixelHeight() && detailRow && detailRow.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row.nextElementSibling, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'e-childrow-visible' : 'e-childrow-hidden';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[parseInt(i.toString(), 10)][\"\" + primaryKeyField]);\n rows.push(this.getRows()[parseInt(rowIndex.toString(), 10)]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var gridRowsObject = this.grid.getRowsObject();\n var currentViewData = this.enableInfiniteScrolling ? this.grid.getRowsObject() : this.grid.currentViewData;\n var currentRecord = currentViewData.filter(function (e) {\n return _this.enableInfiniteScrolling ? e.data.uniqueID === record.uniqueID : e.uniqueID === record.uniqueID;\n });\n var currentIndex = currentViewData.indexOf(currentRecord[0]);\n if (!isNullOrUndefined(gridRowsObject[parseInt(currentIndex.toString(), 10)].visible) &&\n gridRowsObject[parseInt(currentIndex.toString(), 10)].visible !== false) {\n gridRowsObject[parseInt(currentIndex.toString(), 10)].visible = true;\n }\n if (this.detailTemplate) {\n gridRows.forEach(function (row) {\n if (row.classList.contains('e-detailrow') && row.style.display === 'none') {\n row.style.display = '';\n }\n });\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[parseInt(i.toString(), 10)])) {\n this.toggleRowVisibility(rows[parseInt(i.toString(), 10)], displayAction);\n }\n if (!isNullOrUndefined(rows[parseInt(i.toString(), 10)]) && !this.allowPaging && !(this.enableVirtualization\n || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n if (!isNullOrUndefined(gridRowsObject[rows[parseInt(i.toString(), 10)].rowIndex])) {\n gridRowsObject[rows[parseInt(i.toString(), 10)].rowIndex].visible = displayAction !== 'e-childrow-hidden' ? true : false;\n }\n var parentRecord = currentViewData.filter(function (e) {\n return e.uniqueID === currentRecord[0].parentUniqueID;\n });\n if (!isNullOrUndefined(parentRecord[0]) && gridRows[currentViewData.indexOf(parentRecord[0])].getElementsByClassName('e-treegridcollapse').length) {\n gridRowsObject[parseInt(currentIndex.toString(), 10)].visible = false;\n }\n }\n if (!isNullOrUndefined(movableRows)) {\n this.toggleRowVisibility(movableRows[parseInt(i.toString(), 10)], displayAction);\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n this.toggleRowVisibility(freezeRightRows[parseInt(i.toString(), 10)], displayAction);\n }\n this.notify('childRowExpand', { row: rows[parseInt(i.toString(), 10)] });\n if ((!isNullOrUndefined(childRecords)) && (!isNullOrUndefined(childRecords[parseInt(i.toString(), 10)].childRecords) && childRecords[parseInt(i.toString(), 10)].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[parseInt(i.toString(), 10)].expanded) || childRecords[parseInt(i.toString(), 10)].expanded)) {\n this.expandCollapse(action, rows[parseInt(i.toString(), 10)], childRecords[parseInt(i.toString(), 10)], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[parseInt(i.toString(), 10)], childRecords[parseInt(i.toString(), 10)], true);\n }\n }\n }\n for (var i = 0; i < detailrows.length; i++) {\n if (!isNullOrUndefined(detailrows[parseInt(i.toString(), 10)]) && !this.allowPaging && !(this.enableVirtualization ||\n this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n gridRowsObject[detailrows[parseInt(i.toString(), 10)].rowIndex].visible = displayAction !== 'e-childrow-hidden' ? true : false;\n this.toggleRowVisibility(detailrows[parseInt(i.toString(), 10)], displayAction);\n }\n }\n if (!this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this)\n || isCountRequired(this))) {\n this.grid.notify('refresh-Expand-and-Collapse', { rows: this.grid.getRowsObject() });\n }\n };\n TreeGrid.prototype.toggleRowVisibility = function (row, displayAction) {\n if (row) {\n row.classList.remove('e-childrow-hidden', 'e-childrow-visible', 'e-hide');\n row.classList.add(displayAction);\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[parseInt(i.toString(), 10)];\n if (!gridRow.classList.contains('e-childrow-hidden')) {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n var rowsObject = this.grid.getRowsObject();\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[parseInt(i.toString(), 10)]\n .cells[this.treeColumnIndex];\n var row = rows[parseInt(i.toString(), 10)];\n var rowData = rowsObject.length !== 0 ? rowsObject[parseInt(i.toString(), 10)].data : new Object();\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isNullOrUndefined(isChild) && !isChild && this.loadChildOnDemand) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n this.toggleRowVisibility(rows[parseInt(i.toString(), 10)], 'e-childrow-hidden');\n row = rows[parseInt(i.toString(), 10)];\n var collapsingTd = rows[parseInt(i.toString(), 10)].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n this.toggleRowVisibility(movablerows[parseInt(i.toString(), 10)], 'e-childrow-hidden');\n this.toggleRowVisibility(rightrows[parseInt(i.toString(), 10)], 'e-childrow-hidden');\n if (!rows[parseInt(i.toString(), 10)].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[parseInt(i.toString(), 10)].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[parseInt(i.toString(), 10)];\n }\n else if (rightrows[parseInt(i.toString(), 10)].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[parseInt(i.toString(), 10)];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[parseInt(i.toString(), 10)].rowIndex] :\n this.grid.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[parseInt(i_1.toString(), 10)].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[parseInt(i_1.toString(), 10)]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, false);\n }\n }\n }\n this.grid.pageSettings.totalRecordsCount -= rows.length;\n };\n /**\n * Method to sanitize html element\n *\n * @param {any} value - Specifies the html value to sanitize\n * @returns {any} Returns the sanitized html value\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TreeGrid.prototype.sanitize = function (value) {\n if (this.enableHtmlSanitizer && typeof (value) === 'string') {\n return SanitizeHtmlHelper.sanitize(value);\n }\n return value;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n this.grid.on('partial-filter-update', this.partialFilterUpdate, this);\n this.grid.on('get-row-cells', this.getCellsByTableName, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n this.grid.off('last-rowcell-border-updated', this.lastRowCellBorderUpdated);\n this.grid.off('partial-filter-update', this.partialFilterUpdate);\n this.grid.off('get-row-cells', this.getCellsByTableName);\n };\n TreeGrid.prototype.getCellsByTableName = function (args) {\n if (!Array.isArray(args.elements)) {\n args.elements = [];\n }\n if (args.rowIndex < this.grid.getDataRows().length) {\n var cells = [].slice.call(this.grid.getDataRows()[parseInt(args.rowIndex.toString(), 10)].getElementsByClassName('e-rowcell'));\n Array.prototype.push.apply(args.elements, cells);\n }\n };\n TreeGrid.prototype.partialFilterUpdate = function (args) {\n var gridFiltered = args.gridFiltered;\n this.notify('updateFilterRecs', { data: gridFiltered });\n };\n /**\n * Filters the TreeGrid rows based on a specified column and filter criteria.\n *\n * This method allows for dynamic filtering against column data using various\n * operators and values, supporting case-sensitive filtering and accent sensitivity.\n *\n * @param {string} fieldName - The name of the column to apply the filter on.\n * @param {string} filterOperator - The operator used to perform the filter (e.g., 'equals', 'startswith').\n * @param {string | number | Date | boolean } filterValue - The value to filter against.\n * @param {string} predicate - The logical operator ('AND'/'OR') to combine this filter with others.\n * @param {boolean} matchCase - If true, the filter performs a case-sensitive match.\n * @param {boolean} ignoreAccent - If true, the filter ignores diacritical marks.\n * @param {string} actualFilterValue - The original value used for filtering, useful for distinguishing displayed and actual values.\n * @param {string} actualOperator - The actual operator that is applied when different from the displayed operator.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all filters applied to the TreeGrid, restoring the view to show all records.\n *\n * This method is useful for resetting the grid to its unfiltered state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row in the TreeGrid by its index.\n *\n * Use this method to highlight a specific row; useful for programmatically navigating data.\n *\n * @param {number} index - Index of the row to select.\n * @param {boolean} isToggle - If true, toggles the selection state of the row.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects multiple rows in the TreeGrid given an array of row indexes.\n *\n * Useful for batch operations where multiple row selections are necessary.\n *\n * @param {number[]} rowIndexes - Array of row index numbers to select.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects all selected rows and cells within the TreeGrid.\n *\n * Resets the selection state of the grid, which is useful after bulk operations.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n if (!isNullOrUndefined(this.grid.selectionModule)) {\n this.grid.selectionModule['actualTarget'] = null;\n }\n this.grid.clearSelection();\n };\n /**\n * Copies the data of selected rows or cells to the clipboard.\n *\n * This method supports including headers for better context when pasting elsewhere.\n *\n * @param {boolean} withHeader - (Optional) If true, includes column headers in the copied data.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Pastes data into the selected cells from the clipboard.\n *\n * Automatically places the pasted data starting from the specified indices.\n *\n * @param {string} data - The clipboard data to paste.\n * @param {number} rowIndex - The starting row index for pasting.\n * @param {number} colIndex - The starting column index for pasting.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by its index position in the TreeGrid.\n *\n * Useful for navigating or highlighting specific data cells within the grid.\n *\n * @param {IIndex} cellIndex - An object specifying the row and column indexes.\n * @param {boolean} isToggle - (Optional) If true, toggles the selection state of the cell.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Retrieves the currently selected rows.\n *\n * Useful for obtaining the selected data elements for downstream processing.\n *\n * @returns {Element[]} - An array of Element objects representing the selected rows.\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n *\n * @deprecated This method is deprecated. Use getCellFromIndex method instead.\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n *\n * @deprecated This method is deprecated. Use getDataRows method instead.\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n *\n * @deprecated This method is deprecated. Use getRowByIndex method instead.\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n * @deprecated This method is deprecated. Use getRows method instead.\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n *\n * @deprecated This method is deprecated. Use getRowByIndex method instead.\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n *\n * @deprecated This method is deprecated. Use getRows method instead.\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n *\n * @deprecated This method is deprecated. Use getDataRows method instead.\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n *\n * @deprecated This method is deprecated. Use getCellFromIndex method instead.\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n *\n * @deprecated This method is deprecated. Use getColumnHeaderByIndex method instead.\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n *\n * @deprecated This method is deprecated. Use getColumnHeaderByIndex method instead.\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n *\n * @deprecated This method is deprecated. Use getColumnHeaderByIndex method instead.\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(!isNullOrUndefined(this.columns) && this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[parseInt(j.toString(), 10)].columns) {\n cnt = this.getFrozenCount(cols[parseInt(j.toString(), 10)].columns, cnt);\n }\n else {\n if (cols[parseInt(j.toString(), 10)].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Retrieves the indexes of the currently selected rows in the TreeGrid.\n *\n * This method is useful when you need to perform actions based on the selected rows,\n * such as retrieving data or changing the selection.\n *\n * @returns {number[]} - An array of numbers representing the indexes of selected rows.\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Retrieves the indexes of the selected cells within the selected rows.\n *\n * This can be useful for handling cell-specific operations, such as\n * applying styles or editing values programmatically.\n *\n * @returns {ISelectedCell[]} - An array of objects representing the selected cells' indexes.\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Retrieves the data records corresponding to the currently selected rows.\n *\n * This method provides the full record data for the selected rows,\n * which is useful for data manipulation or extraction operations.\n *\n * @isGenericType true\n * @returns {Object[]} - An array of data objects representing the selected records.\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Obtains the data handling modules used by the TreeGrid.\n *\n * This includes both the base data module for standard grid operations and the tree module\n * for handling hierarchical data, giving complete access to data management capabilities.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}} - An object containing both grid and tree data modules.\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorders rows in the TreeGrid based on specified source indexes and a target position.\n *\n * This functionality allows for dynamic rearrangement of rows, such as moving selected\n * rows to a new position as siblings or children.\n *\n * @param {number[]} fromIndexes - An array indicating the source indexes of the rows to be moved.\n * @param {number} toIndex - The target index where the rows should be moved.\n * @param {string} position - The position relative to the target index ('above', 'below', 'child').\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n }\n };\n /**\n * Indents a specified record, promoting it to one level deeper in the hierarchy.\n *\n * This function moves the selected row to become the last child of its preceding row,\n * altering the visual and hierarchical data structure.\n *\n * @param {Object} record - (Optional) The record to be indented. If omitted, the currently selected row is used.\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdents a specified record, moving it one level up in the hierarchy.\n *\n * This method repositions the selected row to be a sibling of its parent, impacting\n * its display and the hierarchical relationships within the TreeGrid.\n *\n * @param {Object} record - (Optional) The record to be outdented. If omitted, the currently selected row is used.\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n /**\n * Calculates and returns the optimal page size that fits the current height of the TreeGrid's container.\n *\n * @param {number | string } containerHeight - (Optional) The height of the container - i.e. the complete TreeGrid height, which can be a number (in pixels) or a string.\n * @returns {number} returns the page size\n */\n TreeGrid.prototype.getPageSizeByHeight = function (containerHeight) {\n if (isNullOrUndefined(containerHeight)) {\n var treegridControlElement = document.getElementById(this.element.id);\n if (treegridControlElement) {\n containerHeight = treegridControlElement.clientHeight;\n }\n else {\n var root = this.element;\n containerHeight = root ? (root.offsetHeight || root.clientHeight || 0) : 0;\n }\n }\n if ((this.allowTextWrap && this.textWrapSettings.wrapMode === 'Header') || (!this.allowTextWrap)) {\n var pagesize = 0;\n if (typeof containerHeight === 'string' && containerHeight.indexOf('%') !== -1) {\n containerHeight = parseInt(containerHeight, 10) / 100 * this.element.clientHeight;\n }\n var nonContentHeight = this.grid['getNoncontentHeight']() + this.grid.getRowHeight();\n if (containerHeight > nonContentHeight) {\n var contentHeight = 0;\n var calcNonContentHeight = this.grid['getNoncontentHeight']();\n var pagerMsg = document.getElementsByClassName('e-pagerexternalmsg')[0];\n if (pagerMsg) {\n calcNonContentHeight += pagerMsg.clientHeight;\n }\n contentHeight = containerHeight - calcNonContentHeight;\n pagesize = (contentHeight / this.grid.getRowHeight());\n }\n if (this.frozenRows > 0) {\n pagesize = pagesize + this.frozenRows;\n }\n if (pagesize > 0) {\n return Math.floor(pagesize);\n }\n else {\n return 0;\n }\n }\n else {\n return 0;\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property('USD')\n ], TreeGrid.prototype, \"currencyCode\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Complex({}, ColumnChooserSettings)\n ], TreeGrid.prototype, \"columnChooserSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableStickyHeader\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"emptyRecordTemplate\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Complex({}, LoadingIndicator)\n ], TreeGrid.prototype, \"loadingIndicator\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableVirtualMaskRow\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"isRowSelectable\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnSpan\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableRowSpan\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfAggregateQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelAggregateQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.updateTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.updateTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.updateTreeColumn = function () {\n this.parent['getTreeColumn']();\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden\n * Indicates whether a row can be dropped into the current target position during a drag-and-drop operation.\n */\n this.canDrop = true;\n /** @hidden\n * Indicates whether the current drag operation includes child records of the dragged item.\n */\n this.isDraggedWithChild = false;\n /** @hidden\n * Indicates whether multiple TreeGrid instances are being managed or displayed.\n */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden\n * Represents the currently selected item in the TreeGrid.\n */\n this.selectedRecords = 'selectedRecords';\n /** @hidden\n * Holds an array of currently selected records in the TreeGrid.\n */\n this.selectedRows = 'selectedRows';\n /** @hidden\n * Indicates whether there is a droppable item in the TreeGrid.\n */\n this.hasDropItem = true;\n /** @hidden\n * Indicates whether the item is being added to the bottom of the TreeGrid.\n */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Retrieves child records for a specified parent ID in the TreeGrid.\n *\n * @param {string} id - The unique ID of the parent record for which to retrieve child records.\n * @returns {ITreeData[]} An array of child records corresponding to the specified parent ID.\n */\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n if (fromIndexes[0] === toIndex || ['above', 'below', 'child'].indexOf(position) === -1) {\n return;\n }\n var action = 'action';\n var dropPosition = 'dropPosition';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[\"\" + dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n var index = this.parent.getRowByIndex(fromIndexes[parseInt(i.toString(), 10)]).rowIndex;\n data[parseInt(i.toString(), 10)] = this.parent.getCurrentViewRecords()[parseInt(index.toString(), 10)];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[\"\" + action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = this.parent.allowRowDragAndDrop\n ? this.parent.treeColumnIndex + 1\n : (this.parent[\"\" + action] === 'indenting' ? this.parent.treeColumnIndex : undefined);\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][\"\" + parentUniqueID]);\n var parentrow = this.parent.getRows()[parseInt(toIndex.toString(), 10)];\n totalRecord.push(parentData);\n rows.push(parentrow);\n this.updateRowAndCellElements(totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[\"\" + action] === 'outdenting') {\n var index = this.parent.allowRowDragAndDrop\n ? this.parent.treeColumnIndex + 1\n : (this.parent[\"\" + action] === 'outdenting' ? this.parent.treeColumnIndex : undefined);\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.updateRowAndCellElements(totalRecord, rows, index);\n }\n }\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n RowDD.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.parent.renderModule.cellRender({\n data: records[parseInt(i.toString(), 10)], cell: rows[parseInt(i.toString(), 10)].cells[parseInt(index.toString(), 10)],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this.parent['action'] === 'indenting' || this.parent['action'] === 'outdenting') {\n this.parent.renderModule.RowModifier({\n data: records[parseInt(i.toString(), 10)], row: rows[parseInt(i.toString(), 10)]\n });\n }\n }\n };\n /**\n * Performs indent or outdent actions on selected records in the TreeGrid.\n *\n * @param {ITreeData} [record] - The record to be indented or outdented. If undefined, the method operates on the currently selected record.\n * @param {string} [request] - The action to perform, either 'indent' or 'outdent'.\n * @returns {void}\n */\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[parseInt(selectedItemIndex.toString(), 10)] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n if (!primaryKeyField) {\n return;\n }\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[\"\" + primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[parseInt(selectedItemIndex.toString(), 10)]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[parseInt(i.toString(), 10)].taskData ===\n record_1.parentItem.taskData) {\n dropIndex = i;\n if (tObj.enableVirtualization) {\n dropIndex = parseInt(tObj.getRows()[parseInt(i.toString(), 10)].getAttribute('aria-rowindex'), 10) - 1;\n }\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n if (this.parent.enableVirtualization && this.selectedRecord && !(record_1.level > this.selectedRecord.level)) {\n dropIndex = parseInt(this.selectedRow.getAttribute('aria-rowindex'), 10) - 2;\n }\n tObj[\"\" + action] = 'indenting';\n tObj[\"\" + droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n var isInvalidSelection = this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0;\n var isRootLevel = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0;\n if (isInvalidSelection || isRootLevel) {\n return;\n }\n var parentItem_1 = this.selectedRecord.parentItem;\n var records = tObj.getCurrentViewRecords();\n var dropIndex = records.findIndex(function (record) { return record.uniqueID === parentItem_1.uniqueID; });\n if (dropIndex === -1) {\n return;\n }\n if (this.parent.enableVirtualization && this.selectedRecord) {\n var ariaRowIndex = this.parent.getRows()[parseInt(dropIndex.toString(), 10)].getAttribute('aria-rowindex');\n dropIndex = parseInt(ariaRowIndex, 10) - 1;\n }\n tObj[\"\" + action] = 'outdenting';\n tObj[\"\" + droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n /**\n * Triggers a specified event for the TreeGrid, notifying subscribers about the event occurrence.\n *\n * @param {string} action - The action to be triggered, either 'indenting' or 'outdenting'.\n * @param {number} dropIndex - The index at which the row should be dropped.\n * @returns {void}\n */\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n if (_this.parent.enableVirtualization) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('aria-rowindex'), 10) - 1], dropIndex, 'child');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n }\n else if (actionArgs.action === 'outdenting') {\n if (_this.parent.enableVirtualization) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('aria-rowindex'), 10) - 1], dropIndex, 'below');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n }\n });\n };\n /**\n * Reorders the flat data array of the TreeGrid and updates the index of each record.\n *\n * @param {ITreeData[]} currentData - The array of tree data records to reorder.\n * @returns {ITreeData[]} The updated array of tree data records with indices set.\n */\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[parseInt(i.toString(), 10)].index = i;\n if (!isNullOrUndefined(currentData[parseInt(i.toString(), 10)].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[parseInt(i.toString(), 10)].parentUniqueID, this.parent);\n currentData[parseInt(i.toString(), 10)].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n };\n /**\n * Handles the addition of new rows to the TreeGrid.\n *\n * @param {Object} e - The event object containing information about the rows being added.\n * @param {number} e.toIndex - The index at which the new rows should be added in the TreeGrid.\n * @param {Object[]} e.records - An array of the records to be added to the TreeGrid.\n *\n * @returns {void} This function does not return any value.\n */\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[parseInt(i.toString(), 10)];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[parseInt(i.toString(), 10)];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (!isNullOrUndefined(draggedRecord_1[tObj.childMapping])) {\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[parseInt(j.toString(), 10)]) === -1) {\n dragRecords_1.splice(j, 0, childData[parseInt(j.toString(), 10)]);\n childData[parseInt(j.toString(), 10)].taskData = extend({}, childData[parseInt(j.toString(), 10)]);\n i += 1;\n }\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[parseInt(i.toString(), 10)].uniqueID, dragRecords[parseInt(i.toString(), 10)], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n /**\n * Handles the removal of specified rows from the TreeGrid.\n *\n * @param {Object} e - The event object containing information about the removed rows.\n * @param {number[]} e.indexes - An array of indexes of the rows that were removed.\n * @param {Object[]} e.records - An array of the records corresponding to the removed rows.\n *\n * @returns {void} This function does not return any value.\n */\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[parseInt(i.toString(), 10)];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n /**\n * Refreshes the data source of the TreeGrid.\n *\n * @returns {void} This function does not return any value.\n */\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var temporaryDataSource;\n var indexOfDroppedRecord;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n temporaryDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n temporaryDataSource = proxy.dataSource;\n }\n if (temporaryDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem)\n && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(temporaryDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (temporaryDataSource[parseInt(i.toString(), 10)][this.parent.childMapping]) {\n if (temporaryDataSource[parseInt(i.toString(), 10)][this.parent.childMapping] ===\n droppedRecord.taskData[this.parent.childMapping]) {\n indexOfDroppedRecord = i;\n }\n }\n else {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n if (temporaryDataSource[parseInt(i.toString(), 10)][\"\" + primaryKeyField] ===\n droppedRecord.taskData[\"\" + primaryKeyField]) {\n indexOfDroppedRecord = i;\n }\n }\n }\n if (!this.parent.idMapping) {\n var positionAdjustment = this.dropPosition === 'topSegment' ? 0 : 1;\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n temporaryDataSource.splice(indexOfDroppedRecord + positionAdjustment, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][parseInt(i.toString(), 10)]\n = childRecords[parseInt(i.toString(), 10)].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n /**\n * Removes the border from the first row of the TreeGrid.\n *\n * @param {HTMLTableRowElement} element - The table row element from which to remove the border.\n * @returns {void} This function does not return any value.\n */\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n /**\n * Removes the border from the last row of the TreeGrid.\n *\n * @param {HTMLTableRowElement} element - The row element from which to remove the last row border.\n * @returns {void}\n */\n RowDD.prototype.removeLastrowBorder = function (element) {\n if (!element) {\n return;\n }\n var isEmptyRow = element.classList.contains('e-emptyrow') ||\n element.classList.contains('e-columnheader') ||\n element.classList.contains('e-detailrow');\n if (isEmptyRow) {\n return;\n }\n var lastRow = this.parent.enableVirtualization ?\n this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1] :\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1);\n var isNotLastRow = lastRow.getAttribute('data-uid') !== element.getAttribute('data-uid');\n var canRemove = isNotLastRow || this.dropPosition === 'topSegment';\n var lastRowBorderElement = this.parent.element.getElementsByClassName('e-lastrow-border')[0];\n if (lastRowBorderElement && canRemove) {\n lastRowBorderElement.remove();\n }\n };\n /**\n * Updates the icons associated with the specified rows in the TreeGrid.\n *\n * @param {Element[]} row - The array of row elements to update the icons for.\n * @param {number} index - The index of the row being updated.\n * @param {RowDragEventArgs} args - The event arguments associated with the row drag operation.\n * @returns {string} The drop position ('topSegment', 'middleSegment', 'bottomSegment', or 'Invalid').\n */\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[parseInt(i.toString(), 10)].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n if (isNullOrUndefined(this.parent.rowDropSettings.targetID)) {\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n }\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n if (this.parent.enableVirtualization) {\n rowTop = rowEle.getBoundingClientRect().top;\n }\n else {\n rowTop = rowPositionHeight + contentHeight + roundOff;\n }\n var rowBottom = row[0].offsetHeight !== 0 && isNullOrUndefined(rowEle) ?\n rowTop + row[0].offsetHeight : rowTop + rowEle.offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n if (this.parent.enableVirtualization) {\n posy = (mouseEvent.type === 'mousemove') ? mouseEvent.clientY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].clientY : null);\n }\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n var isBorderNeed = true;\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n this.dropPosition = 'middleSegment';\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n }\n if ((isTopSegment || isBottomRowSegment) && this.dropPosition !== 'Invalid') {\n isBorderNeed = this.updateBorderStatus(row, index);\n this.topOrBottomBorder(args.target, isBorderNeed);\n }\n else if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n isBorderNeed = this.updateBorderStatus(row, index);\n if (rowElement.length > 0 && isBorderNeed) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n }\n }\n return this.dropPosition;\n };\n /**\n * Updates the border status for a specified row and index.\n *\n * @private\n * @param {Element[]} row - The array of row elements to be updated.\n * @param {number} index - The index of the row element for which the border status is to be updated.\n * @returns {boolean} - Returns true if the border status was successfully updated, otherwise false.\n */\n RowDD.prototype.updateBorderStatus = function (row, index) {\n var _this = this;\n var isBorderNeed = true;\n var rows = this.parent.grid.getRows();\n var childRows = [];\n var hasDetailTemplate = false;\n if (!isNullOrUndefined(this.parent.detailTemplate)) {\n rows = this.parent.getDataRows();\n hasDetailTemplate = true;\n }\n var treegridColumnIndex = this.parent.treeColumnIndex;\n var treeColIndex = this.parent.allowRowDragAndDrop ?\n (hasDetailTemplate ? treegridColumnIndex + 2 : treegridColumnIndex + 1) :\n (hasDetailTemplate ? treegridColumnIndex + 1 : treegridColumnIndex);\n if (!isNullOrUndefined(this.parent.rowDropSettings.targetID)) {\n treeColIndex = treegridColumnIndex;\n }\n var dragRows = row;\n var targetRow = [rows[\"\" + index]];\n if (this.dropPosition === 'topSegment') {\n row.filter(function (e) {\n if (isNullOrUndefined(e) || isNullOrUndefined(e.cells) || isNullOrUndefined(targetRow[0]) ||\n isNullOrUndefined(targetRow[0].cells)) {\n return true;\n }\n var regex = /index(\\d+)|level(\\d+)/g;\n var parentIndexLevel = e === null || e === undefined ? undefined : e.cells[\"\" + treeColIndex].className.match(regex);\n var dropIndexLevel = targetRow[0].cells[\"\" + treeColIndex].className.match(regex);\n if (isNullOrUndefined(dropIndexLevel) || isNullOrUndefined(dropIndexLevel) || isNullOrUndefined(parentIndexLevel)) {\n return true;\n }\n var parentLevel = +parentIndexLevel[1].match(/\\d+/)[0];\n var dropParentLevel = +dropIndexLevel[1].match(/\\d+/)[0];\n var InDraggedRowIndex = false;\n if (parentLevel !== 0 && parentLevel !== dropParentLevel) {\n return true;\n }\n for (var i = 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)] === dragRows[0]) {\n InDraggedRowIndex = true;\n }\n if (InDraggedRowIndex && rows[parseInt(i.toString(), 10)] !== dragRows[0]) {\n var parentIndexLevelInRow = rows[parseInt(i.toString(), 10)].cells[\"\" + treeColIndex].className.match(regex);\n var parentLevelInRow = +parentIndexLevelInRow[1].match(/\\d+/)[0];\n if (parentLevelInRow !== parentLevel && parentLevelInRow > parentLevel) {\n childRows.push(rows[parseInt(i.toString(), 10)]);\n }\n else {\n break;\n }\n }\n }\n if (parentLevel === dropParentLevel && ((childRows.length > 0 && parseInt(row[0].getAttribute('aria-rowindex'), 10) - 1 === index - (childRows.length + 1)) || (childRows.length === 0 && parseInt(row[0].getAttribute('aria-rowindex'), 10) - 1 === index - 1))) {\n isBorderNeed = false;\n }\n return true;\n });\n isBorderNeed = (!isNullOrUndefined(row) && childRows.length === 0 && !isNullOrUndefined(row[0].getAttribute('aria-rowindex')) && parseInt(row[0].getAttribute('aria-rowindex'), 10) - 1 === index - 1) && isNullOrUndefined(row[0]) ? false : isBorderNeed;\n }\n if (this.dropPosition === 'bottomSegment') {\n targetRow.filter(function (e) {\n if (isNullOrUndefined(e) || isNullOrUndefined(e.cells) || isNullOrUndefined(dragRows[0]) ||\n isNullOrUndefined(dragRows[0].cells)) {\n return true;\n }\n var regex = /index(\\d+)|level(\\d+)/g;\n var parentIndexLevel = e === null || e === undefined ? undefined : e.cells[\"\" + treeColIndex].className.match(regex);\n var dragIndexLevel = dragRows[0].cells[\"\" + treeColIndex].className.match(regex);\n if (isNullOrUndefined(dragIndexLevel) || isNullOrUndefined(parentIndexLevel)) {\n return true;\n }\n var parentLevel = +parentIndexLevel[1].match(/\\d+/)[0];\n var dragParentLevel = +dragIndexLevel[1].match(/\\d+/)[0];\n var InDraggedRowIndex = false;\n if (parentLevel !== 0 && parentLevel !== dragParentLevel) {\n return true;\n }\n for (var i = 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)] === targetRow[0]) {\n InDraggedRowIndex = true;\n }\n if (InDraggedRowIndex && rows[parseInt(i.toString(), 10)] !== targetRow[0]) {\n var parentIndexLevelInRow = rows[parseInt(i.toString(), 10)].cells[\"\" + treeColIndex].className.match(regex);\n var parentLevelInRow = +parentIndexLevelInRow[1].match(/\\d+/)[0];\n if (parentLevelInRow !== parentLevel && parentLevelInRow > parentLevel) {\n childRows.push(rows[parseInt(i.toString(), 10)]);\n }\n else {\n break;\n }\n }\n }\n if (!isNullOrUndefined(row) && parentLevel === dragParentLevel && ((childRows.length > 0 && !isNullOrUndefined(row[0].getAttribute('aria-rowindex')) && parseInt(row[0].getAttribute('aria-rowindex'), 10) - 1 === index + (childRows.length + 1)) || (childRows.length === 0 && !isNullOrUndefined(row[0].getAttribute('aria-rowindex')) && parseInt(row[0].getAttribute('aria-rowindex'), 10) - 1 === index + 1))) {\n isBorderNeed = false;\n }\n return true;\n });\n isBorderNeed = (!isNullOrUndefined(row) && childRows.length === 0 && !isNullOrUndefined(row[0].getAttribute('aria-rowindex')) && parseInt(row[0].getAttribute('aria-rowindex'), 10) - 1 === index + 1) && isNullOrUndefined(row[0]) ? false : isBorderNeed;\n }\n if (this.dropPosition === 'middleSegment') {\n targetRow.filter(function (e) {\n if (isNullOrUndefined(e) || isNullOrUndefined(e.cells) || isNullOrUndefined(dragRows[0]) ||\n isNullOrUndefined(dragRows[0].cells)) {\n return true;\n }\n for (var i = 0; i < dragRows.length; i++) {\n var regex = /index(\\d+)|level(\\d+)/g;\n var dropActualIndex = targetRow[0].rowIndex;\n var dragIndexLevel = dragRows[parseInt(i.toString(), 10)].cells[\"\" + treeColIndex].className.match(regex);\n if (!dragIndexLevel) {\n return true;\n }\n var dragIndex = parseInt(dragIndexLevel.find(function (item) { return item.includes('index'); }).match(/\\d+/)[0] || '0', 10);\n if (hasDetailTemplate) {\n dropActualIndex = dropActualIndex / 2;\n }\n if (dragIndex === dropActualIndex && !_this.parent.rowDropSettings.targetID) {\n isBorderNeed = false;\n }\n else {\n isBorderNeed = true;\n break;\n }\n }\n if (!isBorderNeed) {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n }\n return isBorderNeed;\n });\n }\n this.canDrop = isBorderNeed;\n return isBorderNeed;\n };\n /**\n * Removes the visual border from all child rows within the TreeGrid.\n *\n * @returns {void} No return value.\n */\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n /**\n * Adds a visual border to the first row of the TreeGrid.\n *\n * @param {HTMLTableRowElement} targetRow - The target row element to which the border will be added, if it is the first row.\n * @returns {void} No return value.\n */\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n /**\n * Adds a visual border to the last row of the TreeGrid.\n *\n * @param {HTMLTableRowElement} trElement - The table row element to which the border will be added, if it is the last row.\n * @returns {void} No return value.\n */\n RowDD.prototype.addLastRowborder = function (trElement) {\n if (!trElement) {\n return;\n }\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (isEmptyRow) {\n return;\n }\n if (trElement && !isEmptyRow && this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n /**\n * Retrieves the total scroll width of the TreeGrid content area.\n *\n * @returns {number} The width of the scrollbar if content overflows, otherwise 0.\n */\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n /**\n * Adds an error element to the dragged row element during a row drag-and-drop operation.\n *\n * @returns {void} No return value.\n */\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelemCount = dragelem.querySelectorAll('.e-errorelem').length;\n var sanitize = 'sanitize';\n if (!errorelemCount && !this.parent.rowDropSettings.targetID) {\n var errorContainer = document.createElement('div');\n errorContainer.classList.add('e-errorcontainer', 'e-icons', 'e-errorelem');\n var rowCell = dragelem.querySelector('.e-rowcell');\n var errorVal = dragelem.querySelector('.errorValue');\n var content = rowCell.innerHTML;\n if (errorVal) {\n content = this.parent[\"\" + sanitize](errorVal.innerHTML);\n errorVal.parentNode.removeChild(errorVal);\n }\n rowCell.innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = this.parent[\"\" + sanitize](content);\n rowCell.appendChild(errorContainer);\n rowCell.appendChild(spanContent);\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + errorContainer.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n /**\n * Removes the error element from the DOM and adjusts the position of the drop item count if necessary.\n *\n * @returns {void} No return value.\n */\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n /**\n * Applies drop border styles to row elements based on the current drop position ('topSegment' or 'bottomSegment').\n *\n * @param {Element} target - The target element where the drop action is taking place.\n * @param {boolean} [isBorderNeed=true] - Indicates whether a border is needed during the drop action. Defaults to `true`.\n * @returns {void} No return value.\n */\n RowDD.prototype.topOrBottomBorder = function (target, isBorderNeed) {\n if (isBorderNeed === void 0) { isBorderNeed = true; }\n var element = closest(target, 'tr');\n var rowElements = element ?\n Array.from(element.querySelectorAll('.e-rowcell, .e-rowdragdrop, .e-detailrowcollapse')) : [];\n if (!rowElements.length) {\n return;\n }\n var classAction = isBorderNeed ? this.addRemoveClasses.bind(this, rowElements, true) : this.addRemoveClasses.bind(this, rowElements, false, 'e-dragborder');\n if (this.dropPosition === 'topSegment') {\n classAction('e-droptop');\n var lastRowDragBorder = this.parent.element.querySelector('.e-lastrow-dragborder');\n if (lastRowDragBorder) {\n lastRowDragBorder.remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n classAction('e-dropbottom');\n }\n };\n /**\n * Removes the drop border classes ('e-dropbottom' and 'e-droptop') from the parent element if present.\n *\n * @returns {void} No return value.\n */\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (this.parent.rowDropSettings.targetID) {\n border = [].slice.call(document.querySelectorAll('.e-dropbottom, .e-droptop'));\n }\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n /**\n * Adds or removes a specified class from a list of HTML elements.\n *\n * @param {Element[]} cells - The list of HTML elements to which the class will be added or removed.\n * @param {boolean} add - A flag indicating whether to add (`true`) or remove (`false`) the class.\n * @param {string} className - The class name to be added or removed from each element in `cells`.\n * @returns {void} No return value.\n */\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[parseInt(i.toString(), 10)].classList.add(className);\n }\n else {\n cells[parseInt(i.toString(), 10)].classList.remove(className);\n }\n }\n };\n /**\n * Calculates the offset position of the specified HTML element relative to the document.\n *\n * @param {Element} element - The HTML element for which the offset position is calculated.\n * @returns {PositionOffSet} The offset position containing `top` and `left` values.\n */\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n /**\n * Handles the dragging of rows in the TreeGrid.\n *\n * @param {RowDragEventArgs} args - The event arguments for the row drag action.\n * @returns {void} This function does not return a value.\n */\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n if (!cloneElement) {\n return;\n }\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = -1;\n if (!isNullOrUndefined(this.parent.detailTemplate)) {\n rowIdx = rowEle ? this.parent.getDataRows().indexOf(rowEle) : -1;\n }\n else {\n rowIdx = rowEle ? rowEle.rowIndex : -1;\n }\n if (rowIdx === -1) {\n this.canDrop = false;\n this.addErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n return;\n }\n var dragRecords = Array.isArray(args.data) ? args.data : [args.data];\n var droppedRecord = tObj.getCurrentViewRecords()[parseInt(rowIdx.toString(), 10)];\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n droppedRecord = srcControl.getCurrentViewRecords()[parseInt(rowIdx.toString(), 10)];\n }\n }\n this.removeErrorElem();\n this.canDrop = true;\n this.ensuredropPosition(dragRecords, droppedRecord);\n if (!tObj.rowDropSettings.targetID && this.canDrop && !isNullOrUndefined(args.rows[0])) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n this.dropPosition = srcControl.rowDragAndDropModule.dropPosition;\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n /**\n * Handles the row drop event for the TreeGrid.\n *\n * @param {RowDropEventArgs} args - The event arguments for the row drop action.\n * @returns {void} This function does not return a value.\n */\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content') || (this.dropPosition === 'Invalid' || !this.canDrop)) {\n if (this.parent.element.querySelector('.e-errorelem') || !this.canDrop) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent) && (this.dropPosition === 'Invalid' && !this.canDrop)) {\n return;\n }\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n this.removeRowBorders();\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n if (this.parent.element.querySelector('.e-errorelem') || !this.canDrop) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n if (this.dropPosition === 'Invalid' && !this.canDrop) {\n return;\n }\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.removeRowBorders();\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][\"\" + parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][\"\" + primaryKeyField]);\n var row = this.parent.getRows()[parseInt(rowIndex.toString(), 10)];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][\"\" + parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[\"\" + primaryKeyField]);\n var parentrow = this.parent.getRows()[parseInt(rowIndex.toString(), 10)];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[parseInt(i.toString(), 10)],\n cell: rows[parseInt(i.toString(), 10)].cells[parseInt(index.toString(), 10)],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[parseInt(index.toString(), 10)],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n /**\n * Removes the border elements for the first and last rows of the TreeGrid.\n *\n * @returns {void} This function does not return a value.\n */\n RowDD.prototype.removeRowBorders = function () {\n var _this = this;\n ['e-firstrow-border', 'e-lastrow-border'].forEach(function (className) {\n var element = _this.parent.element.getElementsByClassName(className)[0];\n if (element) {\n element.remove();\n }\n });\n };\n /**\n * Handles the drag-and-drop operation between TreeGrids, updating the source and target grids.\n *\n * @param {RowDropEventArgs} args - The arguments related to the row drop event, including target information and data being dropped.\n * @returns {void} - This function does not return any value.\n */\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[parseInt(i.toString(), 10)] = records[parseInt(i.toString(), 10)].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping !== null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[parseInt(i.toString(), 10)].hasChildRecords) {\n actualData.push(records[parseInt(i.toString(), 10)]);\n var child = findChildrenRecords(records[parseInt(i.toString(), 10)]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[parseInt(i_1.toString(), 10)]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[parseInt(i.toString(), 10)].index = i;\n if (!isNullOrUndefined(srcControlFlatData[parseInt(i.toString(), 10)].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[parseInt(i.toString(), 10)].parentUniqueID + '.index', srcControl);\n srcControlFlatData[parseInt(i.toString(), 10)].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n /**\n * Retrieves the index of the target row based on its 'aria-rowindex' attribute.\n *\n * @param {Element} targetRow - The target row element from which to retrieve the index.\n * @returns {number} - The index of the target row, or 0 if the targetRow is null or undefined.\n */\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) - 1 : 0;\n };\n /**\n * Retrieves the parent data of a given record during a row drag-and-drop operation.\n *\n * @param {ITreeData} record - The record for which to retrieve the parent data.\n * @param {Object[]} [data] - Optional data array containing additional information related to the drop operation.\n * @returns {void} - This function does not return any value.\n */\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][\"\" + primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[parseInt(rowIndex.toString(), 10)];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[parseInt(selectedItemIndex.toString(), 10)].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n /**\n * Handles the row drop operation for the tree grid.\n *\n * @param {RowDropEventArgs} args - The event arguments containing details about the drop operation, including the target index and data.\n * @param {boolean} [isByMethod=false] - Optional flag indicating if the drop operation is triggered by a method.\n * @returns {void} - This function does not return any value.\n */\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][\"\" + primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[parseInt(rowIndex.toString(), 10)];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n if (this.parent.enableVirtualization) {\n var index = this.parent.getRowByIndex(args.dropIndex).rowIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[parseInt(index.toString(), 10)];\n }\n else {\n if (!isNullOrUndefined(this.parent.rowDropSettings.targetID)) {\n var rowsObject = this.parent.grid.getRowsObject();\n this.droppedRecord = rowsObject.length > 0 ? rowsObject[args.dropIndex].data : undefined;\n }\n else {\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n }\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping) || (this.dropPosition === 'bottomSegment' && dragRecords.length > 1 && isNullOrUndefined(this.parent.idMapping))) {\n dragRecords.reverse();\n }\n var _loop_1 = function (i) {\n draggedRecord_2 = dragRecords[parseInt(i.toString(), 10)];\n this_1.draggedRecord = draggedRecord_2;\n if (!this_1.draggedRecord.hasChildRecords) {\n for (var _i = 0, dragRecords_2 = dragRecords; _i < dragRecords_2.length; _i++) {\n var dragRecord = dragRecords_2[_i];\n if (!isNullOrUndefined(dragRecord.childRecords) &&\n dragRecord.childRecords.indexOf(this_1.draggedRecord) !== -1) {\n this_1.draggedRecord = undefined;\n }\n }\n }\n if (!isNullOrUndefined(this_1.draggedRecord)) {\n if (this_1.dropPosition !== 'Invalid' && !isNullOrUndefined(this_1.droppedRecord)) {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n draggedRecord_2.level = droppedRecord.level;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n }\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(i);\n }\n }\n };\n /**\n * Handles the logic for inserting a dragged record into the middle of a parent record's child records.\n *\n * @param {number} recordIndex - The index at which to insert the dragged record relative to the parent record's child records.\n * @returns {void} - This function does not return any value.\n */\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n /**\n * Handles the logic for inserting a dragged record at the top of a parent record's child records.\n *\n * @param {number} recordIndex1 - The index at which to insert the dragged record in the tree grid data.\n * @returns {void} - This function does not return any value.\n */\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n var targetRecord = this.treeGridData[parseInt(recordIndex1.toString(), 10)];\n this.draggedRecord.parentItem = targetRecord.parentItem;\n this.draggedRecord.parentUniqueID = targetRecord.parentUniqueID;\n this.draggedRecord.level = targetRecord.level;\n // Insert dragged record into the grid data\n this.treeGridData.splice(parseInt(recordIndex1.toString(), 10), 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n // Insert the dragged record into the child records at the appropriate position\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n /**\n * Updates the level and hierarchy of the dragged record based on the drop position.\n *\n * @returns {void} - This function does not return any value.\n */\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[\"\" + childItem])) {\n droppedRecord.taskData[\"\" + childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n setValue('uniqueIDCollection.' + draggedRecord.uniqueID, draggedRecord, tObj);\n var isSelfReference = 'isSelfReference';\n if (tObj[\"\" + isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[\"\" + childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n /**\n * Deletes the currently dragged row from the TreeGrid.\n *\n * @returns {void} - This function does not return any value.\n */\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n /**\n * Updates the child records of a specified parent record in the TreeGrid.\n *\n * @param {ITreeData} record - The parent record whose child records will be updated.\n * @param {number} count - The initial count to keep track of record positioning.\n * @returns {number} - The updated count after processing all child records.\n */\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n if (!this.isMultipleGrid) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[parseInt(i.toString(), 10)].uniqueID, tObj);\n }\n else {\n currentRecord = record.childRecords[parseInt(i.toString(), 10)];\n }\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n /**\n * Updates the level of child records for a specified parent record in the TreeGrid.\n *\n * @param {ITreeData} record - The parent record whose child records' levels will be updated.\n * @param {number} level - The current level of the parent record.\n * @returns {number} - The updated level after processing all child records.\n */\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n if (!this.isMultipleGrid) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[parseInt(i.toString(), 10)].uniqueID, this.parent);\n }\n else {\n currentRecord = record.childRecords[parseInt(i.toString(), 10)];\n }\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n /**\n * Removes specified records from the TreeGrid data source.\n *\n * @param {ITreeData} record - The record to be removed, including any child records if applicable.\n * @returns {void} - This method does not return a value.\n */\n RowDD.prototype.removeRecords = function (record) {\n var _this = this;\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var treeGridData = dataSource;\n var idx = treeGridData.findIndex(function (data) {\n return data[_this.parent.idMapping] === deletedRow.taskData[_this.parent.idMapping];\n });\n var idz = this.treeGridData.findIndex(function (data) {\n return data[_this.parent.idMapping] === deletedRow.taskData[_this.parent.idMapping];\n });\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[parseInt(j.toString(), 10)][\"\" + primaryKeyField] === deletedRow[\"\" + primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n /**\n * Updates the records in the TreeGrid data source that have been modified.\n *\n * @param {ITreeData} record - The record to update, along with its parent records if applicable.\n * @returns {void} - This method does not return a value.\n */\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n /**\n * Recursively removes child records from the specified record and updates the data source.\n *\n * @param {ITreeData} record - The parent record whose child records are to be removed.\n * @returns {void} - This method does not return a value.\n */\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[parseInt(i.toString(), 10)];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[parseInt(i_2.toString(), 10)][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[parseInt(i_3.toString(), 10)][this.parent.idMapping]\n === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n /**\n * Retrieves the count of child records associated with the specified parent record.\n *\n * @param {ITreeData} record - The parent record for which child count is to be calculated.\n * @param {number} count - The initial count to start with, usually passed as 0.\n * @returns {number} - The total count of child records.\n */\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[parseInt(i.toString(), 10)];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n /**\n * Ensures the validity of the drop position for the dragged records by verifying the hierarchy and position constraints.\n * If the current record is found in the dragged records' children, sets the drop position to 'Invalid'.\n *\n * @param {ITreeData[]} draggedRecords - The array of dragged records being verified.\n * @param {ITreeData} currentRecord - The current record to check against dragged records.\n * @returns {void} - This function does not return a value.\n */\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n if (isNullOrUndefined(_this.parent.rowDropSettings.targetID)) {\n _this.removetopOrBottomBorder();\n _this.removeChildBorder();\n }\n return;\n }\n }\n });\n };\n RowDD.prototype.isDuplicateData = function (currentData) {\n var primaryKeys = this.parent.getPrimaryKeyFieldNames();\n if (primaryKeys.length === 0) {\n return false;\n }\n return this.parent.flatData.some(function (data) {\n // eslint-disable-next-line\n return primaryKeys.every(function (key) { return data[key] === currentData[key]; });\n });\n };\n /**\n * Cleans up resources, event listeners, and DOM elements when the TreeGrid component is destroyed.\n *\n * @returns {void}\n */\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the settings for row dragging and dropping within the TreeGrid, allowing for enhanced user interaction and data manipulation capabilities.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired, isRemoteData } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var info = this.getDataInfo();\n if (notifyArgs.requestType === 'refresh' && notifyArgs.isExpandCollapse) {\n notifyArgs.virtualInfo = this['prevInfo'];\n }\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && !(this.parent.root.loadChildOnDemand && isRemoteData(this.parent.root))) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n if ((!isRemoteData(this.parent.root) || isCountRequired(this.parent))\n || notifyArgs.virtualInfo.blockIndexes.length === 1) {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n if (!isNullOrUndefined((this.visualData))) {\n for (var r = 0; r < rows.length; r++) {\n rows[parseInt(r.toString(), 10)].index\n = (this.visualData).indexOf(rows[parseInt(r.toString(), 10)].data);\n }\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[\"\" + model].currentPage;\n if (clear) {\n this.cache = {};\n /*this.movableCache = {};\n this.frozenRightCache = {};*/\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[parseInt(currentPage.toString(), 10)] &&\n this.cache[parseInt(currentPage.toString(), 10)].length >\n (this.parent.contentModule).getBlockSize()) {\n if (this.cache[parseInt(currentPage.toString(), 10)].length > (this.parent.contentModule).getBlockSize()) {\n this.cache[parseInt(currentPage.toString(), 10)] =\n this.cache[parseInt(currentPage.toString(), 10)].slice(0, (this.parent.contentModule).getBlockSize());\n }\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n /*this.movableCache = {};\n this.frozenRightCache = {};*/\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[parseInt(f.toString(), 10)];\n this.addParentRecord(rec);\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[parseInt(count.toString(), 10)].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[parseInt(count.toString(), 10)].uniqueID)) {\n this.filteredResult.push(childRec[parseInt(count.toString(), 10)]);\n setValue('uniqueIDFilterCollection.' + childRec[parseInt(count.toString(), 10)].uniqueID, childRec[parseInt(count.toString(), 10)], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[parseInt(count.toString(), 10)]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[parseInt(count.toString(), 10)]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[parseInt(c.toString(), 10)].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[parseInt(c.toString(), 10)].parentUniqueID, true);\n record[parseInt(c.toString(), 10)].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[parseInt(c.toString(), 10)].filterLevel = 0;\n this.filteredParentRecs.push(record[parseInt(c.toString(), 10)]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[parseInt(count.toString(), 10)];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel, ExportHelper } from '@syncfusion/ej2-grids';\nimport { Data } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.on('excelAggregateCellInfo', this.excelAggregateCellInfo, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.off('excelAggregateCellInfo', this.excelAggregateCellInfo);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var data = new Data(this.parent.grid);\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n if (!isNullOrUndefined(excelExportProperties)) {\n if (!this.isLocal() && !isNullOrUndefined(excelExportProperties.dataSource) && !excelExportProperties.dataSource['dataSource']) {\n return this.parent.grid.excelExportModule.Map(this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob);\n }\n if (excelExportProperties.exportType === 'CurrentPage') {\n excelExportProperties.dataSource = this.parent.getCurrentViewRecords();\n return this.parent.grid.excelExportModule.Map(this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob);\n }\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n query.queries = _this.parent.grid.getDataModule().generateQuery().queries;\n query = ExportHelper.getQuery(_this.parent.grid, data);\n if (isNullOrUndefined(_this.parent.filterModule)) {\n query.queries = query.queries.slice(1, 2);\n query.params = query.params.slice(0, 0);\n }\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n if (!isNullOrUndefined(this.parent.grid.getDataModule())) {\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n }\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n if (this.parent.aggregates.length > 0) {\n property.query = args['query'];\n }\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n /**\n * TreeGrid Excel Export Aggregate cell modifier\n *\n * @param {AggregateQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelAggregateCellInfo = function (args) {\n this.parent.trigger('excelAggregateQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[parseInt(i.toString(), 10)].rows) {\n workbook.worksheets[parseInt(i.toString(), 10)].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n this.parent.on('pdfAggregateCellInfo', this.pdfAggregateCellInfo, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n this.parent.off('pdfAggregateCellInfo', this.pdfAggregateCellInfo);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n if (!isNullOrUndefined(pdfExportProperties)) {\n this.isCollapsedStatePersist = pdfExportProperties.isCollapsedStatePersist;\n }\n if (!isNullOrUndefined(pdfExportProperties)) {\n if (!isLocal && !isNullOrUndefined(pdfExportProperties.dataSource) && !pdfExportProperties.dataSource['dataSource']) {\n return this.parent.grid.pdfExportModule.Map(this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n }\n if (pdfExportProperties.exportType === 'CurrentPage') {\n pdfExportProperties.dataSource = this.parent.getCurrentViewRecords();\n return this.parent.grid.pdfExportModule.Map(this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n }\n }\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var _this = this;\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n if (!isLocal && !isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)\n && prop.isCollapsedStatePersist === false) {\n if (args.query && args.query.queries && args.query.queries.length) {\n args.query.queries = args.query.queries.filter(function (q) {\n if (q.fn === 'onWhere' && q.e) {\n var preds = q.e;\n if (preds && preds.field === _this.parent.parentIdMapping && (preds.value === null || preds.value === 'null')) {\n return false;\n }\n }\n return true;\n });\n }\n if (args.query && args.query.params && args.query.params.length) {\n args.query.params = args.query.params.filter(function (param) { return param.key !== 'IdMapping'; });\n }\n }\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n prop.query = args['query'];\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n /**\n * TreeGrid PDF Export Aggregate cell modifier\n *\n * @param {AggregateQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfAggregateCellInfo = function (args) {\n this.parent.trigger('pdfAggregateQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n if (isNullOrUndefined(message)) {\n var error = 'The provided value for the message is undefined. Please ensure the message contains string.';\n this.parent.trigger(events.actionFailure, { error: error });\n }\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n this.parent.flatData.map(function (e) { return e.expanded = e.uniqueID === rowDetails.record.uniqueID &&\n e.expanded !== rowDetails.record.expanded ? rowDetails.record.expanded : e.expanded; });\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[\"\" + primaryKeyField_1] === rowDetails.record[\"\" + primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[\"\" + action] === 'collapse') {\n targetEle = ret[\"\" + row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[\"\" + action] === 'expand') {\n targetEle = ret[\"\" + row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[parseInt(t.toString(), 10)]);\n var res = [];\n if (temp[parseInt(t.toString(), 10)].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[parseInt(t.toString(), 10)].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.count;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && (pageingDetails.actionArgs.action !== 'collapse' &&\n pageingDetails.actionArgs.action !== 'expand')) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n if (!isNullOrUndefined(toolbarElement)) {\n var tObj = this.parent;\n var indentElement = void 0;\n var outdentElement = void 0;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = indentEle.parentElement;\n outdentElement = outdentEle.parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[\"\" + indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[\"\" + indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentData = filteredData.filter(function (data) { return !getObject('isSummaryRow', data); });\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[parseInt(i.toString(), 10)];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[parseInt(i_1.toString(), 10)]))) ?\n columns[parseInt(i_1.toString(), 10)] : getObject('field', (columns[parseInt(i_1.toString(), 10)]));\n item[\"\" + field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[parseInt(columnIndex.toString(), 10)])) ?\n columns[parseInt(columnIndex.toString(), 10)] : getObject('field', columns[parseInt(columnIndex.toString(), 10)]);\n items[\"\" + fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[parseInt(i.toString(), 10)];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[parseInt(i.toString(), 10)].columnName) ?\n summary.columns[parseInt(i.toString(), 10)].field : summary.columns[parseInt(i.toString(), 10)].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[\"\" + key] = this.getSummaryValues(summary.columns[parseInt(i.toString(), 10)], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[\"\" + key] = this.getSummaryValues(summary.columns[parseInt(i.toString(), 10)], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[parseInt(i.toString(), 10)];\n var key = summaryColumn.field + ' - ' + types[parseInt(i.toString(), 10)].toLowerCase();\n var val = types[parseInt(i.toString(), 10)] !== 'Custom' ? getObject('aggregates', sumData) :\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n calculateAggregate(types[parseInt(i.toString(), 10)], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[parseInt(i.toString(), 10)] !== 'Custom' ? val[\"\" + key] : val;\n single[\"\" + disp] = single[\"\" + disp] || {};\n single[\"\" + disp][\"\" + key] = value_1;\n single[\"\" + disp][types[parseInt(i.toString(), 10)]] = (!isNullOrUndefined(val) && !isNullOrUndefined(value_1)) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact && typeof (summaryColumn.footerTemplate) !== 'string') {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[\"\" + renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[\"\" + summaryColumn.columnName][\"\" + summaryKey];\n return cellElement.innerHTML.indexOf(value) === -1 ? cellElement.innerHTML + value : cellElement.innerHTML;\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n if (srtQry.queries.filter(function (q) { return q.fn === 'onSortBy'; }).length > 0) {\n this.sortedResult = this.flatSortedData.filter(function (item) { return !item.isSummaryRow; });\n }\n else {\n this.sortedResult = [];\n }\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n var gridQuery = this.parent.query;\n var filterQuery = [];\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n }\n for (var d = 0; d < data.length; d++) {\n if (filterQuery.length > 0 || this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[parseInt(d.toString(), 10)].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[parseInt(d.toString(), 10)];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[parseInt(d.toString(), 10)];\n }\n if (data[parseInt(d.toString(), 10)].hasChildRecords) {\n var childSort = (new DataManager(data[parseInt(d.toString(), 10)].childRecords)\n .executeLocal(srtQry));\n if (this.parent.allowRowDragAndDrop && data[parseInt(d.toString(), 10)].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n childSort.splice(dragdIndex, 1);\n var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n this.parent.on('contextMenuItemClick', this.contextMenuItemClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n this.parent.off('contextMenuItemClick', this.contextMenuItemClick);\n };\n ContextMenu.prototype.contextMenuItemClick = function (args) {\n var id = args.item && args.item.id ? args.item.id : '';\n var delId = this.parent.element.id + '_gridcontrol_cmenu_Delete';\n if (id !== delId) {\n return;\n }\n if (this.parent.getSelectedRecords()[0].hasChildRecords || this.parent.getSelectedRecords().length > 1) {\n this.parent.deleteRecord();\n }\n else {\n this.parent.deleteRow(this.parent.getSelectedRows()[0]);\n }\n args.cancel = true;\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false || this.parent.grid.isEdit) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\n if ((indent || outdent) && !isNullOrUndefined(selectedrow)) {\n var targetElement = args.event.target.closest('td');\n if (isNullOrUndefined(targetElement) || (!isNullOrUndefined(targetElement) && (!targetElement.classList.contains('e-rowcell') ||\n targetElement.querySelectorAll('.e-gridform').length !== 0))) {\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var items = _a[_i];\n if (items.text === 'Outdent' || items.text === 'Indent') {\n tObj.grid.contextMenuModule['hiddenItems'].push(items.text);\n }\n }\n tObj.grid.contextMenuModule.contextMenu.hideItems(tObj.grid.contextMenuModule['hiddenItems']);\n indent.style.display = outdent.style.display = 'none';\n }\n else {\n if (selectedrow.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indent.style.display = outdent.style.display = 'none';\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[selectedrow.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level)) {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level)) {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === 0)) {\n outdent.style.display = 'none';\n }\n else {\n outdent.style.display = 'block';\n }\n }\n }\n }\n }\n else {\n if (((indent || outdent) || tObj.grid.isEdit) && isNullOrUndefined(selectedrow)) {\n for (var _b = 0, _c = args.items; _b < _c.length; _b++) {\n var items = _c[_b];\n if (items.text === 'Outdent' || items.text === 'Indent') {\n if (!tObj.grid.contextMenuModule['hiddenItems'].includes(items.text)) {\n tObj.grid.contextMenuModule['hiddenItems'].push(items.text);\n }\n }\n }\n tObj.grid.contextMenuModule.contextMenu.hideItems(tObj.grid.contextMenuModule['hiddenItems']);\n if (indent || outdent) {\n indent.style.display = outdent.style.display = 'none';\n }\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.editModule['isAddedRowByContextMenu'] = true;\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[\"\" + indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n this.parent.grid.on('cellfocused', this.onCellFocused, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n this.parent.grid.off('cellfocused', this.onCellFocused);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var _this = this;\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKeyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n var _loop_1 = function (i) {\n index = data.findIndex(function (e) { return e[\"\" + primaryKeyField] === _this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKeyField]; });\n data.splice(index, 1);\n };\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n _loop_1(i);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.column.index;\n if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.column.index)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + parentItem]) {\n parentUniqueID = this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + parentItem][\"\" + uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[parseInt(rowObjectIndex.toString(), 10)].changes;\n if (!isNullOrUndefined(added)) {\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[\"\" + primaryKey_1]; }).indexOf(record[\"\" + primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[\"\" + primaryKey_1]; }).indexOf(record[\"\" + primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[\"\" + primaryKey_1]; }).indexOf(record[\"\" + primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n }\n this.parent.grid.getRowsObject()[parseInt(rowObjectIndex.toString(), 10)].data = added;\n this.newBatchRowAdded = false;\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[\"\" + isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[\"\" + isTabLastRow] = false;\n return;\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && (this.parent.editModule['selectedIndex'] >= 0 || this.parent.editModule['batchEditModule'].isAdd)) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.batchRecords.length ? this.batchRecords[this.selectedIndex]\n : this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n if (this.parent.frozenRows) {\n actualIndex = this.batchIndex;\n }\n else if (this.parent.editModule.isAddedMultipleRowsByMethod) {\n actualIndex = e.index;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n }\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && !this.parent.editModule.isAddedMultipleRowsByMethod) {\n var newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('aria-rowindex'), 10) - 1;\n this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);\n }\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n var rowElement = Array.isArray(args.row) ? args.row[0] : args.row;\n if (!isNullOrUndefined(rowElement) && this.parent.getSelectedRows().indexOf(rowElement) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = rowElement.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10) - 1;\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[parseInt(i.toString(), 10)]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getHeaderContent()[parseInt(i.toString(), 10)]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n var _loop_2 = function (i) {\n var indexvalue = this_1.batchRecords.findIndex(function (e) { return e[\"\" + primarykey] === records[parseInt(i.toString(), 10)][\"\" + primarykey]; });\n if (indexvalue !== -1) {\n this_1.batchRecords.splice(indexvalue, 1);\n }\n };\n var this_1 = this;\n for (var i = 0; i < records.length; i++) {\n _loop_2(i);\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[parseInt(i.toString(), 10)])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[parseInt(i.toString(), 10)]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[parseInt(i.toString(), 10)].setAttribute('aria-rowindex', (i + 1).toString());\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = this.parent.getBatchChanges().addedRecords || [];\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < addedRecords.length; i++) {\n if (!isNullOrUndefined(addedRecords[parseInt(i.toString(), 10)][\"\" + parentItem])) {\n if (addedRecords[parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primaryKey] === records[parseInt(this.addRowIndex.toString(), 10)][\"\" + primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[\"\" + changeRecords];\n if (e.batchChanges[\"\" + changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[parseInt(i.toString(), 10)], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[\"\" + deleterecords].length) {\n var deletedRecords = e.batchChanges[\"\" + deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[parseInt(i.toString(), 10)].uniqueID);\n var childs = findChildrenRecords(record[parseInt(i.toString(), 10)]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[parseInt(c.toString(), 10)].uniqueID);\n }\n e.batchChanges[\"\" + deleterecords] = e.batchChanges[\"\" + deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[\"\" + idFilter][\"\" + value];\n var id = 'uniqueIDCollection';\n delete this.parent[\"\" + id][\"\" + value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var _this = this;\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n var _loop_3 = function (i) {\n index = data.findIndex(function (e) { return e[\"\" + primaryKey] === _this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]; });\n if (index !== -1) {\n data.splice(index, 1);\n }\n if (this_2.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[\"\" + primaryKey]; })\n .indexOf(this_2.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + parentItem] ? this_2.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primaryKey]\n : this_2.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[parseInt(index.toString(), 10)])) {\n var children = currentViewRecords[parseInt(index.toString(), 10)][\"\" + childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[parseInt(j.toString(), 10)][\"\" + primaryKey] === this_2.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]) {\n children.splice(j, 1);\n }\n }\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n _loop_3(i);\n }\n }\n if (!isNullOrUndefined(this.parent[\"\" + targetElement])) {\n var row = this.parent[\"\" + targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[\"\" + targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + parentItem])) {\n index = currentViewRecords.map(function (e) { return e[\"\" + primaryKey]; })\n .indexOf(this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primaryKey]);\n var positionIndex = this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + indexvalue] === 0 ? this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + indexvalue] :\n this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[parseInt(index.toString(), 10)])) {\n currentViewRecords[parseInt(index.toString(), 10)][\"\" + childRecords].splice(positionIndex, 0, this.batchDeletedRecords[parseInt(i.toString(), 10)]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[\"\" + addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord_1;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n for (var i_1 = 0; i_1 < addRecords.length; i_1++) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[parseInt(i_1.toString(), 10)].getAttribute('aria-rowindex'), 10) - 1;\n data.splice(index_1, 0, addRecords[parseInt(i_1.toString(), 10)]);\n }\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length && currentViewRecords.length !== 0) {\n var startIndex = totalRecords.map(function (e) { return e[\"\" + primarykey_1]; })\n .indexOf(currentViewRecords[0][\"\" + primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[parseInt(i.toString(), 10)]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n if (addRecords.length > 1 && this.parent.editModule['isAddedRowByContextMenu']) {\n var rowPosition = this.parent.editSettings.newRowPosition;\n this.parent.editSettings.newRowPosition = this.parent.editModule['previousNewRowPosition'];\n this.parent.editModule['previousNewRowPosition'] = rowPosition;\n }\n addRecords[parseInt(i.toString(), 10)].taskData = taskData;\n if (this.batchAddRowRecord.length > 1) {\n addRowRecord_1 = this.batchAddRowRecord[parseInt(i.toString(), 10)];\n }\n else {\n addRowRecord_1 = this.batchAddRowRecord[0];\n }\n if (isNullOrUndefined(addRowRecord_1)) {\n addRowRecord_1 = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[parseInt(i.toString(), 10)].parentItem)) {\n updateParentRow(primarykey_1, addRecords[parseInt(i.toString(), 10)].parentItem, 'add', this.parent, this.isSelfReference, addRecords[parseInt(i.toString(), 10)]);\n }\n }\n if (!isNullOrUndefined(addRowRecord_1)) {\n addRowIndex = addRowRecord_1.index;\n }\n if (isNullOrUndefined(addRecords[parseInt(i.toString(), 10)].index)) {\n addRowIndex = 0;\n }\n if (this.parent.editModule.isAddedMultipleRowsByMethod && this.isSelfReference && (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')) {\n addRowIndex = args.index;\n addRowRecord_1 = this.parent.flatData[args.index];\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[parseInt(i.toString(), 10)].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord_1 = null;\n }\n }\n editAction({ value: addRecords[parseInt(i.toString(), 10)], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord_1);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[parseInt(i.toString(), 10)][\"\" + parentItem]) &&\n (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\n var indexValue = currentViewRecords.map(function (e) { return e[\"\" + primarykey_1]; })\n .indexOf(addRecords[parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primarykey_1]);\n var children = currentViewRecords[parseInt(indexValue.toString(), 10)][\"\" + childRecords];\n if (!isNullOrUndefined(addRowIndex) && children.some(function (records) {\n return records.uniqueID === addRowRecord_1.uniqueID;\n })) {\n for (var j = 0; j < children.length; j++) {\n if (children[parseInt(j.toString(), 10)][\"\" + primarykey_1] === addRecords[parseInt(i.toString(), 10)][\"\" + primarykey_1]) {\n currentViewRecords[parseInt(indexValue.toString(), 10)][\"\" + childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n if (batchChanges[\"\" + deletedRecords].length) {\n for (i = 0; i < batchChanges[\"\" + deletedRecords].length; i++) {\n editAction({ value: batchChanges[\"\" + deletedRecords][parseInt(i.toString(), 10)], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord_1);\n }\n }\n this.parent.parentData = [];\n for (var i_2 = 0; i_2 < data.length; i_2++) {\n data[parseInt(i_2.toString(), 10)][\"\" + index] = i_2;\n setValue('uniqueIDCollection.' + data[parseInt(i_2.toString(), 10)][\"\" + uniqueID] + '.index', i_2, this.parent);\n if (!data[parseInt(i_2.toString(), 10)][\"\" + level]) {\n this.parent.parentData.push(data[parseInt(i_2.toString(), 10)]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n this.parent.editModule['isAddedRowByContextMenu'] = false;\n }\n if (this.parent.editModule['isAddedRowByMethod']) {\n this.parent.editModule['isAddedRowByMethod'] = false;\n }\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[parseInt(i.toString(), 10)][\"\" + index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n var batchChanges = this.parent.getBatchChanges();\n var deletedRecords = batchChanges.deletedRecords;\n if (this.parent.getSelectedRows().length) {\n if (this.isAdd && deletedRecords.length > 0) {\n args[\"\" + index] = this.parent.getSelectedRecords()[0][\"\" + index];\n }\n else {\n args[\"\" + index] = this.parent.getSelectedRows()[0][\"\" + rowIndex];\n }\n }\n else {\n args[\"\" + index] = this.batchIndex;\n }\n };\n BatchEdit.prototype.onCellFocused = function (e) {\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.isEdit && e.keyArgs) {\n if (e.keyArgs.action === 'shiftEnter') {\n e.keyArgs.preventDefault();\n this.parent.endEdit();\n return;\n }\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n this.isAddedRowByContextMenu = false;\n this.isIndexUndefined = false;\n this.isAddedMultipleRowsByMethod = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n if (e.target.classList.contains('e-frame') && this.parent.getCurrentViewRecords().length === 0) {\n this.doubleClickTarget = null;\n }\n if (e.target.classList.contains('e-treegridcollapse') || e.target.classList.contains('e-treegridexpand')) {\n var tr = parentsUntil(e.target, 'e-row');\n var rowIndex = tr && parseInt(tr.getAttribute('aria-rowindex'), 10) - 1;\n if (!isNullOrUndefined(rowIndex) && rowIndex >= 0 && this.parent.allowPaging) {\n /* eslint-disable-next-line */\n this.parent.grid.getDataRows()[rowIndex].dataset.uid = this.parent.grid.contentModule.getRows()[rowIndex].uid;\n }\n }\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.dataRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionBegin, args);\n }\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n args['requestType'] = 'cancel';\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = !isNullOrUndefined(treeObj.dataSource)\n && treeObj.dataSource.adaptor;\n if (!isNullOrUndefined(adaptor) && (isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[parseInt(rowIndex.toString(), 10)][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[parseInt(i.toString(), 10)].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getRows();\n var movableRowsObject = this.parent.grid.getRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[\"\" + infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[parseInt(page.toString(), 10)];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[parseInt(page.toString(), 10)];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[\"\" + updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('aria-colindex') - 1);\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('aria-rowindex');\n tr.setAttribute('aria-rowindex', (tr.rowIndex + 1) + '');\n }\n this.updateGridEditMode('Batch');\n }\n else if (this.parent.editSettings.mode === 'Cell' && (!column.allowEditing || column.isPrimaryKey)) {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch || args.action === 'tab' || args.action === 'shiftTab') {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[\"\" + idFilter][\"\" + value];\n var id = 'uniqueIDCollection';\n delete this.parent[\"\" + id][\"\" + value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[\"\" + promise];\n delete args[\"\" + promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['editedRowIndex'] = this.parent.grid.editModule.editModule['index'];\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n if (!isNullOrUndefined(this.editedRowIndex)) {\n cellDetails.rowIndex = this.editedRowIndex;\n }\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[\"\" + editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[\"\" + eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n setValue('isEdit', false, this.parent.grid);\n this.afterCellSave(args, row_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n if (this.parent['isGantt'] && this.parent.loadChildOnDemand) {\n this.updateCell(args, rowIndex_1);\n setValue('isEdit', false, this.parent.grid);\n this.afterCellSave(args, row_1);\n }\n else {\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n setValue('isEdit', false, _this.parent.grid);\n _this.afterCellSave(args, row_1);\n });\n }\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['virtualData'] = {};\n }\n };\n Edit.prototype.afterCellSave = function (args, row) {\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.some(function (ag) { return ag.showChildSummary === true; })) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[parseInt(rowIndex.toString(), 10)].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[parseInt(i.toString(), 10)].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[\"\" + key] === data[parseInt(i.toString(), 10)][\"\" + key]) {\n if (details.action === 'add') {\n data[parseInt(i.toString(), 10)].level = this.internalProperties.level;\n data[parseInt(i.toString(), 10)].taskData = this.internalProperties.taskData;\n data[parseInt(i.toString(), 10)].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[parseInt(i.toString(), 10)].parentItem = this.internalProperties.parentItem;\n data[parseInt(i.toString(), 10)].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[parseInt(i.toString(), 10)].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[parseInt(i.toString(), 10)].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[parseInt(i.toString(), 10)].uniqueID, data[parseInt(i.toString(), 10)], this.parent);\n }\n if (!data[parseInt(i.toString(), 10)].level) {\n this.parent.parentData.push(data[parseInt(i.toString(), 10)]);\n }\n }\n if (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[parseInt(j.toString(), 10)];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[parseInt(l.toString(), 10)].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[parseInt(k.toString(), 10)].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[parseInt(count.toString(), 10)];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[parseInt(k.toString(), 10)];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[parseInt(treeColIndex.toString(), 10)];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[parseInt(l.toString(), 10)];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[parseInt(k.toString(), 10)].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') - 1 : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') - 1 : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[parseInt(index.toString(), 10)]) &&\n records[parseInt(index.toString(), 10)].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[parseInt(index.toString(), 10)]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else if (!this.parent.enableVirtualization) {\n index += findChildrenRecords(records[parseInt(index.toString(), 10)]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[\"\" + r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][\"\" + position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[\"\" + r].splice(0, 1);\n this.parent.grid.contentModule[\"\" + r].splice(rowObjectIndex, 0, newRowObject);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[parseInt(i.toString(), 10)].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n if (!this.parent.enableVirtualization || this.parent.enableVirtualization) {\n this.isScrollByFocus = true;\n focussedElement.focus();\n }\n if (this.parent.enableVirtualization && !Object.keys(this.parent.grid.contentModule['emptyRowData']).length) {\n this.parent.grid.contentModule['createEmptyRowdata']();\n }\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1 &&\n !this.isAddedMultipleRowsByMethod && this['isAddedRowByMethod'] && !this.isAddedRowByContextMenu) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n var batchAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[parseInt(i.toString(), 10)].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[parseInt(i.toString(), 10)];\n }\n }\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n else if (this.parent.editSettings.mode === 'Batch' && this.isAddedMultipleRowsByMethod && (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')) {\n index = this.multipleRowIndex;\n this.selectedIndex = this.multipleRowIndex;\n var batchAddedRecords = this.updatedRecords.addedRecords;\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[parseInt(i.toString(), 10)].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[parseInt(i.toString(), 10)];\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n }\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (this.parent.flatData.length === 0 && !isNullOrUndefined(this.addRowRecord)) {\n this.addRowRecord = undefined;\n }\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && args.requestType !== 'delete' && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[\"\" + primaryKeys_2[0]] === args.data[parseInt(i.toString(), 10)][primaryKeys_2[0]]) {\n data_1[parseInt(i.toString(), 10)] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[parseInt(i.toString(), 10)].uniqueID);\n var childs = findChildrenRecords(data_1[parseInt(i.toString(), 10)]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[parseInt(c.toString(), 10)].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[aria-rowindex=\"' + (this.selectedIndex + 1) + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + (this.prevAriaRowIndex + 1) + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n var selectedRecords = this.parent.getSelectedRecords()[0];\n if ((this.isAddedRowByMethod || (this.isAddedRowByContextMenu && this.parent.grid.selectedRowIndex !== -1)) &&\n (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n if (this.parent.enableVirtualization && this.isAddedRowByContextMenu) {\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.addRowIndex];\n }\n }\n else if (!isNullOrUndefined(selectedRecords)) {\n this.addRowRecord = selectedRecords;\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && (this.isIndexUndefined || this.isAddedRowByMethod) &&\n !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n this.isIndexUndefined = false;\n }\n if (isNullOrUndefined(this.addRowRecord) && this.parent.getCurrentViewRecords().length > this.addRowIndex &&\n args.requestType === 'save' && this.parent.getSelectedRecords().length !== 0) {\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.addRowIndex];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = void 0;\n if (this.parent.enableVirtualization && args.index !== 0) {\n currentData = this.parent.flatData;\n }\n else if (this.parent.editSettings.mode === 'Batch' && this['isAddedRowByMethod'] && !isNullOrUndefined(this.addRowIndex)) {\n currentData = this.batchEditModule['batchRecords'];\n }\n else {\n currentData = this.parent.grid.getCurrentViewRecords();\n }\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.flatData.indexOf(this.addRowRecord);\n this.selectedIndex = this.addRowIndex;\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') - 1 : 0;\n var withinRange = this.parent.enableVirtualization && args.index !== 0 ? true :\n this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length && !isNullOrUndefined(index)) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length && !isNullOrUndefined(index)) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n if (!this.parent.isLocalData && this.parent.editModule.selectedIndex === -1) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = null;\n }\n else {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n }\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n level = 0;\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues_1 = args.data;\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames();\n if (!isNullOrUndefined(primaryKeyField_1) && primaryKeyField_1.length > 0) {\n var _loop_2 = function (i) {\n var deletevalue = deletedValues_1[parseInt(i.toString(), 10)].parentItem;\n if (deletevalue) {\n var parentItem = getParentData(this_2.parent, deletevalue.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.findIndex(function (child) {\n return deletedValues_1[parseInt(i.toString(), 10)][primaryKeyField_1[0]] === child[primaryKeyField_1[0]];\n });\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < deletedValues_1.length; i++) {\n _loop_2(i);\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (isNullOrUndefined(index)) {\n this.isIndexUndefined = true;\n }\n if (!isNullOrUndefined(data) && Array.isArray(data)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n addRecords.push(data);\n }\n else if (Array.isArray(data)) {\n addRecords = data;\n }\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n if ((position === 'Above' || position === 'Below') && this.isSelfReference) {\n this.isAddedMultipleRowsByMethod = true;\n this.multipleRowIndex = index;\n this.addRowIndex = index;\n this.parent.notify(events.batchAdd, { updatedRecords: this.updatedRecords, index: index });\n }\n var updatedRecords = this.updatedRecords;\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n var updatedRecords = this.updatedRecords;\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.enableVirtualization && this.parent.grid.editSettings.mode === 'Batch' && this.parent.grid.pageSettings.currentPage > 1) {\n this.editedRowIndex = this.parent.grid.editModule.editModule['cellDetails'].rowIndex;\n this.parent.grid.editModule.editModule['cellDetails'].rowIndex = parseInt(this.parent.getRows()[this.parent.grid.editModule.editModule['cellDetails'].rowIndex].getAttribute('aria-rowIndex'), 10) - 1;\n }\n this.parent.grid.editModule.closeEdit();\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[\"\" + visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailRows = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailRows.length; i++) {\n var elements = detailRows[parseInt(i.toString(), 10)].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailRows[parseInt(i.toString(), 10)].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[parseInt(i.toString(), 10)]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n this.parent['toggleRowVisibility'](args.detailrows[parseInt(i.toString(), 10)], args.action);\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var colSpan = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(colSpan, 10) - 1;\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', colum.toString());\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[parseInt(i.toString(), 10)].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[\"\" + matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType, getVisiblePage } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport * as literals from '../base/constant';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired, isRemoteData } from '../utils';\n/**\n * VirtualTreeContentRenderer\n *\n * @hidden\n */\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n /**\n * Retrieves the row element for a given row index.\n *\n * @param {number} index - The index of the row to retrieve.\n * @returns {Element} The row element at the specified index.\n */\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n if (this.parent.enableVirtualization && this.parent.isFrozenGrid()) {\n return this.getRowCollection(index, true);\n }\n var dataRows = this.parent.getDataRows();\n var targetRow = dataRows.find(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) - 1 === index; });\n if (!targetRow && this.parent.isEdit && this.parent.editSettings.mode === 'Batch') {\n return index != null ? this.parent.getRows()[parseInt(index.toString(), 10)] : undefined;\n }\n return targetRow;\n };\n /**\n * Retrieves the frozen right virtual row element by its index.\n *\n * @param {number} index - The index of the row to be retrieved.\n * @returns {Element} The DOM element representing the frozen right virtual row.\n */\n VirtualTreeContentRenderer.prototype.getFrozenRightVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, false, false, true);\n };\n /**\n * Retrieves the row or record from the virtual tree grid based on the provided index.\n * Considers conditions such as frozen rows and pagination for accurate retrieval.\n *\n * @param {number} index - The index of the desired row or record.\n * @param {boolean} isMovable - Specifies if the content is movable.\n * @param {boolean} [isRowObject] - Optional. Determines if the return value should be a row object.\n * @param {boolean} [isFrozenRight] - Optional. Used for determining frozen right rows.\n * @returns {Element | Object} - The HTML element or row object.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n VirtualTreeContentRenderer.prototype.getRowCollection = function (index, isMovable, isRowObject, isFrozenRight) {\n var rows = this.parent.getRows();\n var startIdx = rows.length > 0 ? parseInt(rows[0].getAttribute(literals.ariaRowIndex), 10) - 1 : 0;\n var rowCollection = this.parent.getDataRows();\n var collection = isRowObject ? this.parent.getCurrentViewRecords() : rowCollection;\n var selectedRow = collection[index - startIdx];\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n if (!isRowObject) {\n selectedRow = index <= this.parent.frozenRows ? rowCollection[parseInt(index.toString(), 10)]\n : rowCollection[(index - startIdx) + this.parent.frozenRows];\n }\n else {\n selectedRow = index <= this.parent.frozenRows ?\n this.parent.getRowsObject()[parseInt(index.toString(), 10)].data : selectedRow;\n }\n }\n if (selectedRow == null && index != null && this.parent.editSettings.mode === 'Batch' && this.parent.isEdit && isMovable) {\n selectedRow = rowCollection[parseInt(index.toString(), 10)];\n }\n return selectedRow;\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n /**\n * Handles virtual scrolling actions based on the provided arguments.\n *\n * @param {Object} args - The argument object.\n * @param {boolean} args.setTop - Determines if the virtual scroll position should reset to top.\n * @param {boolean} args.isExpandCollapse - Determines if the action is part of an expand/collapse operation.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n /**\n * Modifies the index based on various conditions such as record addition, deletion, or data source changes.\n *\n * @private\n * @param {Object} args - Contains parameters for the current operation.\n * @param {number} args.startIndex - The starting index for the modification.\n * @param {number} args.endIndex - The ending index for the modification.\n * @param {number} args.count - The number of items affected in the operation.\n * @param {string} args.requestType - The type of request, such as 'insert', 'delete', or 'update'.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n var pageSize = this.parent.pageSettings.pageSize;\n if ((this.recordAdded || args.requestType === 'delete' && this.endIndex > args.count - this.parent.pageSettings.pageSize) && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else if (this.parent.root.editSettings.newRowPosition !== 'Top' && this.parent.root.editModule.selectedIndex !== -1 || this.parent.root.editModule.selectedIndex !== -1) {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = pageSize - 1;\n }\n if ((this.endIndex - this.startIndex !== pageSize) &&\n (this.totalRecords > pageSize)\n && (this.endIndex === this.totalRecords)) {\n args.startIndex = this.endIndex - pageSize;\n args.endIndex = this.endIndex;\n }\n else {\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n }\n };\n /**\n * Handles the addition or removal of event listeners for virtual scrolling in a TreeGrid.\n *\n * @param {string} action - The action to perform, either 'on' or 'off'.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[\"\" + action]('data-ready', this.onDataReady, this);\n this.parent[\"\" + action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction(), _this.parent);\n var gObj = _this.parent;\n if (gObj.root.enablePersistence && gObj.root.scrollPosition) {\n _this.content.scrollTop = gObj.root.scrollPosition.top;\n if (gObj.root.enableColumnVirtualization) {\n _this.content.scrollLeft = gObj.root.scrollPosition.left;\n }\n var scrollValues = {\n direction: 'down', sentinel: _this.observer.sentinelInfo.down,\n offset: gObj.root.scrollPosition, focusElement: gObj.element\n };\n _this.scrollListeners(scrollValues);\n }\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[\"\" + action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionBegin, this.handleActionBegin.bind(this));\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[\"\" + action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[\"\" + action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[\"\" + action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[\"\" + action]('edit-reset', this.resetIseditValue, this);\n this.parent[\"\" + action]('get-virtual-data', this.getData, this);\n this.parent[\"\" + action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[\"\" + action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[\"\" + action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[\"\" + action]('virtaul-cell-focus', this.cellFocus, this);\n this.parent[\"\" + action]('virtual-scroll-edit', this.restoreEditState, this);\n this.parent[\"\" + action]('set-virtual-page-query', this.SetVirtualPageQury, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n /**\n * Handles cell focus transitions in a virtualized tree grid component\n * when a keyboard event is triggered.\n *\n * @param {KeyboardEventArgs} e - The keyboard event arguments that contain\n * information about the key action.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[\"\" + virtualCellFocus].call(this, e);\n };\n /**\n * Handles the data ready event for the virtual tree grid content renderer.\n *\n * @param {NotifyArgs} [e] - The notification arguments that contain information about the data.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n // To overcome the white space issue in last page when records collapsed\n if (this.parent.isFrozenGrid() && e.count < Object.keys(this.parent.dataSource).length) {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length - 1) + 'px' : '100%';\n var height = (this.parent.getRowHeight() * e.count) -\n (this.parent.getRowHeight() * this.parent.pageSettings.pageSize);\n getValue('virtualEle', this).setVirtualHeight(height, width);\n }\n if (!this.parent.enableColumnVirtualization && !this.parent.isFrozenGrid()) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && (this.startIndex === -1 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n /**\n * Renders the table for the virtual tree content. It sets up a new `TreeInterSectionObserver`\n * based on certain conditions regarding the data source and counting requirements.\n *\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (this.observers) {\n this.observers.disconnect();\n }\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n /**\n * Calculates the translateY value for a virtual tree grid based on the scroll top, container height,\n * and additional virtual scrolling information. This method specifically handles logic for remote\n * data sources and ensures smooth scrolling with respect to expansion states.\n *\n * @param {number} sTop - The scroll top position.\n * @param {number} cHeight - The height of the container.\n * @param {VirtualInfo} [info] - Optional virtual scrolling information.\n * @param {boolean} [isOnenter] - Flag indicating if the scroll event is on enter.\n * @returns {number} The calculated translateY value.\n */\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n };\n /**\n * Handles the dataBound event to calculate and set the initial row top position for the grid.\n *\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (!isNullOrUndefined(this.parent.getRows()) && this.parent.getRows().length && !isNullOrUndefined(this.parent.getRowByIndex(0)) && !this[\"\" + initialRowTop]) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[\"\" + initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else if (this.parent.selectedRowIndex === -1) {\n this[\"\" + initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[\"\" + dataBoundEve].call(this);\n };\n /**\n * Handles the row selection event for virtual tree grid rows.\n * It invokes the base class's rowSelected method and notifies\n * the parent component about a virtual transformation change.\n *\n * @param {RowSelectEventArgs} args - The arguments related to the row selection event.\n * @returns {void} This method does not return a value.\n */\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[\"\" + rowSelected].call(this, args);\n this.parent.notify('virtualTransform', { requestType: 'transformChange' });\n };\n /**\n * Handles virtual row selection in TreeGrid.\n *\n * @param {Object} args - The argument object containing the selected index.\n * @param {number} args.selectedIndex - The index of the row to be selected.\n *\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[\"\" + containerRect])) {\n this.observer[\"\" + containerRect] = this.observers[\"\" + containerRect];\n }\n var treeGridParent = this.parent.clipboardModule['treeGridParent'];\n if (isNullOrUndefined(treeGridParent.editModule) ||\n isNullOrUndefined(treeGridParent.editModule['addRowIndex']) || args.selectedIndex !== 0) {\n if (!isNullOrUndefined(treeGridParent.grid.sortModule) && treeGridParent.grid.sortModule['sortedColumns'].length > 0) {\n var sortedData = treeGridParent.dataModule['sortedData'];\n if (!isNullOrUndefined(sortedData) && sortedData.length > 0) {\n var targetIndex = sortedData.findIndex(function (record) { return record.index === args.selectedIndex; });\n args.selectedIndex = targetIndex;\n }\n }\n _super.prototype[\"\" + selectVirtualRow].call(this, args);\n }\n };\n /**\n * Refreshes the cells for the given row object by regenerating them.\n *\n * @param {Row<Column>} rowObj - The row object for which the cells need to be refreshed.\n * @returns {void} This method does not return any value.\n */\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n /**\n * Generates an array of cells for each column in the parent.\n *\n * @returns {Cell<Column>[]} An array of cells for the corresponding columns.\n */\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[parseInt(i.toString(), 10)]));\n }\n return cells;\n };\n /**\n * returns the index of a row in virtualization case\n *\n * @param {number} index - The index of the row.\n * @returns {number} virtual index of that row.\n */\n VirtualTreeContentRenderer.prototype.getVirtualRowIndex = function (index) {\n if (isNullOrUndefined(this.prevInfo)) {\n return index;\n }\n else {\n var startIdx = (this.parent.getRowsObject()[0]).index;\n return startIdx + index;\n }\n };\n /**\n * Generates a cell object with provided column and row configurations.\n *\n * @param {Column} col - The Column object which holds the column configuration.\n * @param {string} [rowId] - An optional string that represents the row ID.\n * @param {CellType} [cellType] - An optional CellType enum to specify the type of the cell.\n * @param {number} [colSpan] - An optional number to specify the column span of the cell.\n * @param {number} [oIndex] - An optional number for the order index of the cell.\n * @param {Object} [foreignKeyData] - An optional object for foreign key data associated with the column.\n *\n * @returns {Cell<Column>} Returns a newly created Cell object of type Column.\n */\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n /**\n * Begins the edit operation for a specified row in the grid.\n * Updates the `editedRowIndex` and assigns row data to the event data.\n *\n * @param {{ data: Object, index: number }} e - An object containing the row data and index.\n * @param {Object} e.data - The data of the row to be edited.\n * @param {number} e.index - The index of the row to be edited.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n this['editedRowIndex'] = e.index;\n var selector = '.e-row[aria-rowindex=\"' + (e.index + 1) + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[parseInt(index.toString(), 10)];\n e.data = rowData;\n };\n /**\n * Begins the process of adding a new row in the tree grid.\n *\n * @param {Object} args - The arguments for adding a new row.\n * @param {boolean} args.startEdit - A flag indicating whether to start editing.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') - 1 : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') - 1 : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[\"\" + isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[\"\" + addAction].call(this, args);\n }\n };\n /**\n * Restores the edit state of the tree grid content. This method calls the\n * base class method to handle the restoration logic.\n *\n * @returns {void} This method does not return any value.\n */\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[\"\" + restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.SetVirtualPageQury = function (args) {\n var visiblePage = [];\n if (this.prevInfo && this.prevInfo.blockIndexes) {\n visiblePage = getVisiblePage(this.prevInfo.blockIndexes);\n }\n if ((this.requestType === 'refresh') && visiblePage.length) {\n args.query.skip(this.parent.pageSettings.pageSize * (visiblePage[0] - 1));\n args.query.take(this.parent.pageSettings.pageSize * visiblePage.length);\n args.skipPage = true;\n return;\n }\n };\n /**\n * Resets the edit state if certain conditions are met.\n *\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[\"\" + isAdd]) {\n _super.prototype[\"\" + resetIsEdit].call(this);\n }\n };\n /**\n * Handles the successful editing operation when virtual scrolling is enabled.\n * Checks if a row has been added to the tree grid and sets the `recordAdded` flag accordingly.\n *\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[\"\" + isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n /**\n * Cancels the edit operation for the provided data.\n *\n * @param {Object} args - The arguments containing the data to cancel edit for.\n * @param {Object} args.data - The specific data object for which the edit operation needs to be canceled.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[\"\" + editCancel].call(this, args);\n };\n /**\n * Handles the action of selecting a row when the context menu is opened.\n *\n * @param {Object} args - An object containing related parameters.\n * @param {boolean} args.isOpen - A flag indicating whether the context menu is open.\n * @returns {void} This method does not return any value.\n */\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[\"\" + selectRowOnContextOpen].call(this, args);\n };\n /**\n * Restores a new row in the grid when necessary by adding it back to the content.\n *\n * @returns {void} This method does not return any value.\n */\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[\"\" + isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.editModule.addRecord(null, this.parent.root.editModule.selectedIndex);\n }\n };\n /**\n * Retrieves virtual data for operations like adding or canceling rows in the grid.\n *\n * @param {Object} data - An object containing properties to determine the virtual data processing.\n * @param {Object} data.virtualData - The virtual data object to be processed.\n * @param {boolean} data.isAdd - A boolean indicating if the operation is an addition.\n * @param {boolean} data.isCancel - A boolean indicating if the operation is a cancellation.\n * @returns {void} This method does not return any value.\n */\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[\"\" + getVirtualData].call(this, data);\n };\n /**\n * Initiates the beginning of an action within the tree grid component.\n * This method is invoked before any action is performed, allowing for\n * any necessary modifications or cancellations of the upcoming action.\n *\n * @param {NotifyArgs} args - The arguments associated with the action,\n * providing context and specifics about what is being commenced.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.handleActionBegin = function (args) {\n var actionBegin = 'actionBegin';\n _super.prototype[\"\" + actionBegin].call(this, args);\n };\n /**\n * Handles the completion of various actions, such as adding a new row.\n * Updates row positions and indexes based on the action completed.\n *\n * @param {NotifyArgs} args - An object containing the details of the completed action.\n * Specifically, it includes the `requestType` which determines the type\n * of action that was completed.\n * @returns {void} This method does not return any value.\n */\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = this.parent.root.editModule.selectedIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[\"\" + actionComplete].call(this, args);\n };\n /**\n * Creates a callback function to be executed during virtual scrolling actions.\n * This function handles the adjustment of virtual elements and rendering logic,\n * particularly optimizing for non-IE browsers, wheel events, and virtual masks.\n *\n * @returns {Function} A function that handles scrolling and adjusts table rendering.\n * @param {HTMLElement} element - The HTML element involved in the action.\n * @param {SentinelType} current - The type of sentinel indicating the scroll.\n * @param {string} direction - The scroll direction.\n * @param {Offsets} e - The offset values indicating the current scroll position.\n * @param {boolean} isWheel - Indicates if the scrolling was initiated by a mouse wheel.\n * @param {boolean} check - A boolean flag for additional control logic.\n */\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[\"\" + directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[\"\" + preventEvent] && !_this.parent.enableVirtualMaskRow) {\n _this.parent.showSpinner();\n }\n if (_this.parent.enableVirtualMaskRow && !_this[\"\" + preventEvent]) {\n setTimeout(function () {\n _this.parent.showMaskRow(current.axis);\n _this.parent.notify('showGanttShimmer', { requestType: 'showShimmer' });\n }, 0);\n }\n var height = _this.content.getBoundingClientRect().height;\n var top_1 = _this.prevInfo.offsets ? _this.prevInfo.offsets.top : null;\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (_this.parent.isFrozenGrid() && _this.parent.enableColumnVirtualization && _this.currentInfo &&\n _this.currentInfo.columnIndexes) {\n var cBlock = _this.currentInfo.columnIndexes[0] - 1;\n var frzLeftWidth_1 = 0;\n _this.parent.getColumns().filter(function (col) {\n if (col.visible && col.freeze === 'Left') {\n frzLeftWidth_1 += parseInt(col.width.toString(), 10);\n }\n });\n if (cBlock > _this.parent.getVisibleFrozenLeftCount()) {\n x = x - frzLeftWidth_1;\n }\n }\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n var y = _this.getTranslateY(e.top, height, xAxis && top_1 === e.top ? _this.prevInfo : undefined, true);\n if (!_this.parent.isFrozenGrid() || _this.parent.enableVirtualMaskRow) {\n if (_this.parent.enableVirtualMaskRow) {\n var upScroll = (e.top - _this.translateY) < 0;\n y = (Math.round(_this.translateY) > y && !upScroll) ? Math.round(_this.translateY) : y;\n _this.virtualEle.adjustTable(x, y);\n }\n else {\n _this.virtualEle.adjustTable(x, _this.translateY);\n }\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n if (_this.parent.isFrozenGrid()) {\n _this.parent.contentModule['resetStickyLeftPos'](x);\n }\n }\n }\n }\n };\n };\n /**\n * Handles scroll events to manage virtual scrolling and row rendering.\n * Adjusts view information, row indexes, and translates viewport positioning\n * based on the given scroll arguments.\n *\n * @param {ScrollArg} scrollArgs - Contains the scroll offsets, sentinel information, direction of scroll, and other related details.\n * @returns {void} - No return value. It adjusts scrolling state internally.\n */\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n this['scrollAfterEdit']();\n this.shouldPreventScrolling(scrollArgs);\n if (this.parent.root.enablePersistence) {\n this.parent.root.scrollPosition = scrollArgs.offset;\n }\n var info = scrollArgs.sentinel;\n var rowHeight = this.parent.getRowHeight();\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content;\n if (!isNullOrUndefined(this.parent.contentModule)) {\n content = this.parent.getContent().querySelector('.e-content');\n }\n var scrollHeight = outBuffer * rowHeight;\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0 && this.activeKey !== 'downArrow';\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) + rowHeight >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n var currentViewData = this.parent.currentViewData;\n var indexValue = 'index';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') && !isNullOrUndefined(content)) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? parseInt(this.parent.height.toString(), 10) :\n this.parent.element.getBoundingClientRect().height);\n // Calculate the integer number of rows that are scrolled past plus the number of rows that fit within the visible height\n var scrolledRows = Math.floor(content.scrollTop / rowHeight);\n var visibleRows = Math.ceil(vHeight / rowHeight);\n // Calculate the index by subtracting the page size from the total rows taken into account\n var index = scrolledRows + visibleRows - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[\"\" + selectedRowIndex]) && this[\"\" + selectedRowIndex] !== -1 && index !== this[\"\" + selectedRowIndex] &&\n ((this.parent.rowHeight * this.parent.pageSettings.pageSize) < content.scrollTop) && !this.parent.allowRowDragAndDrop) {\n index = this[\"\" + selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n if (currentViewData.length && (currentViewData[0][\"\" + indexValue] >= this.parent.pageSettings.pageSize / 2) &&\n ((currentViewData[0][\"\" + indexValue] - this.startIndex) < (this.parent.pageSettings.pageSize / 2)) &&\n this.parent.selectionModule && this.parent.selectionModule.isRowSelected) {\n this.startIndex = currentViewData[0][\"\" + indexValue] - (this.parent.pageSettings.pageSize / 2);\n this.endIndex = this.startIndex + this.parent.pageSettings.pageSize;\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / rowHeight);\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[parseInt(rowPt.toString(), 10)]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[parseInt(rowPt.toString(), 10)])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[parseInt(rowPt.toString(), 10)]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('data-rowindex');\n }\n if (firsttdinx === 0) {\n if (this.endIndex - this.startIndex < this.parent.pageSettings.pageSize) {\n this.translateY = !isNullOrUndefined(this.endIndex) ?\n (this.endIndex - this.parent.pageSettings.pageSize) * (this.parent.rowHeight ?\n this.parent.rowHeight : this.parent.getRowHeight()) : 0;\n }\n else if (this.startIndex === this[\"\" + selectedRowIndex]) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n this.translateY = (scrollArgs.offset.top - (outBuffer * rowHeight) > 0) ?\n scrollArgs.offset.top - (outBuffer * rowHeight) + rowHeight : 0;\n }\n }\n else if (this.parent.getFrozenColumns() > 0) {\n scrollArgs.offset.top = scrollArgs.offset.top + 80;\n this.translateY = (scrollArgs.offset.top - (outBuffer * rowHeight) > 0) ?\n scrollArgs.offset.top - (outBuffer * rowHeight) + 10 : 0;\n }\n else {\n this.translateY = (scrollArgs.offset.top - (outBuffer * rowHeight) > 0) ?\n scrollArgs.offset.top - (outBuffer * rowHeight) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') && !isNullOrUndefined(content)) {\n var nextSetResIndex = ~~(content.scrollTop / rowHeight);\n var isLastBlock = (this[\"\" + selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[\"\" + selectedRowIndex]) && this[\"\" + selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[\"\" + selectedRowIndex] && !isLastBlock && !this.parent.allowRowDragAndDrop) {\n nextSetResIndex = this[\"\" + selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock || isNullOrUndefined(this['' + selectedRowIndex]) ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if ((nextSetResIndex + this.parent.pageSettings.pageSize) > this.totalRecords && (this.endIndex - this.startIndex) <\n (this.parent.pageSettings.pageSize / 2) && (this.endIndex - nextSetResIndex) < (this.parent.pageSettings.pageSize / 2)) {\n this.startIndex = lastIndex - (this.parent.pageSettings.pageSize / 2);\n }\n if (scrollArgs.offset.top > (rowHeight * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n if (this.totalRecords === this.endIndex) {\n if (this.totalRecords === this.endIndex) {\n if (this.parent.isEdit) {\n this.translateY = ((this.totalRecords * rowHeight) - (this.parent.pageSettings.pageSize * rowHeight))\n + rowHeight;\n }\n else {\n this.translateY = (this.totalRecords * rowHeight) - (this.parent.pageSettings.pageSize * rowHeight);\n }\n }\n }\n else {\n if (this.parent.getFrozenColumns() > 0) {\n this.translateY = scrollArgs.offset.top - ((rowHeight * 2) + this.parent.pageSettings.pageSize);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n }\n if (((downScroll && scrollArgs.direction !== 'up' && (scrollArgs.offset.top < (rowHeight * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left') ||\n ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== ''))) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n if (this.prevInfo && (isRemoteData(this.parent.root) && viewInfo.event !== 'model-changed') && ((info.axis === 'Y' && this.prevInfo.blockIndexes.toString() === viewInfo.blockIndexes.toString())\n || ((info.axis === 'X' && this.prevInfo.columnIndexes.toString() === viewInfo.columnIndexes.toString())\n || (this.parent.isFrozenGrid() && this.parent.getVisibleFrozenLeftCount() >= viewInfo.columnIndexes[0]\n && this.prevInfo.columnIndexes.toString().includes(viewInfo.columnIndexes.toString()))))) {\n this.parent.removeMaskRow();\n this.parent.notify('removeGanttShimmer', { requestType: 'hideShimmer' });\n if (Browser.isIE) {\n this.parent.hideSpinner();\n }\n this.requestType = this.requestType === 'virtualscroll' ? this['empty'] : this.requestType;\n if (info.axis === 'Y') {\n this.restoreEditState();\n }\n return;\n }\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n // if (downScroll && this.endIndex === this.totalRecords && viewInfo.loadNext) {\n // viewInfo.loadNext = false;\n // }\n this.requestType = 'virtualscroll';\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left' && !isRemoteData(this.parent.root)) {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n if (this.parent.enableVirtualMaskRow) {\n this.parent.showMaskRow(info.axis);\n this.parent.addShimmerEffect();\n this.parent.notify('showGanttShimmer', { requestType: 'showShimmer' });\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n else {\n if (this.parent.enableVirtualMaskRow) {\n this.parent.removeMaskRow();\n this.parent.notify('removeGanttShimmer', { requestType: 'hideShimmer' });\n }\n }\n };\n /**\n * Prevents scrolling under specific conditions related to adding a new row.\n *\n * @param {ScrollArg} scrollArgs - The scroll event arguments containing offset details.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.shouldPreventScrolling = function (scrollArgs) {\n var addedRow = this.parent.element.querySelector('.e-addedrow');\n if (addedRow && this.rowPosition !== 'Top' && this.rowPosition !== 'Bottom' && scrollArgs.offset.top !== 0) {\n this.parent.closeEdit();\n return;\n }\n };\n /**\n * Appends content to the target element. Handles dynamic adjustments for remote data sources,\n * frozen columns, and virtual scrolling.\n *\n * @param {HTMLElement} target - The target HTML element where content is to be appended.\n * @param {DocumentFragment} newChild - The new content as a DocumentFragment to append.\n * @param {NotifyArgs} e - Object containing information about the operation.\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)\n || (this.parent.isFrozenGrid() && (e.requestType === undefined || !isNullOrUndefined(e.virtualInfo) && (e.virtualInfo.direction === 'right' || e.virtualInfo.direction === 'left')))) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n if (getValue('requestTypes', this).indexOf('isFrozen') !== -1) {\n getValue('requestTypes', this).splice(getValue('requestTypes', this).indexOf('isFrozen'), 1);\n this.requestType = this.requestType === 'isFrozen' ? undefined : this.requestType;\n }\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[\"\" + replace](target);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'Y') {\n this.isExpandCollapse = false;\n }\n var reduceWidth_1 = 0;\n if (this.parent.enableColumnVirtualization && this.parent.isFrozenGrid()) {\n var frzLeftWidth_2 = 0;\n this.parent.getColumns().filter(function (col) {\n if (col.visible) {\n reduceWidth_1 += parseInt(col.width.toString(), 10);\n if (col.freeze === 'Left') {\n frzLeftWidth_2 += parseInt(col.width.toString(), 10);\n }\n }\n });\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n if (cBlock > this.parent.getVisibleFrozenLeftCount()) {\n cOffset = cOffset - frzLeftWidth_2;\n }\n this.resetStickyLeftPos(cOffset, newChild);\n }\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n if (this.parent.isFrozenGrid()) {\n this.resetStickyLeftPos(cOffset);\n }\n }\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[\"\" + focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[\"\" + isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.dataRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[\"\" + isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[\"\" + restoreAdd].call(this);\n _super.prototype[\"\" + ensureSelectedRowPosition].call(this);\n }\n };\n /**\n * Unsubscribes all event listeners to prevent memory leaks.\n * This method is called when the component is being destroyed or when event listeners need to be cleaned up.\n *\n * @returns {void}\n */\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n this.parent.off('virtual-scroll-edit', this.restoreEditState);\n if (this.observers) {\n this.observers.disconnect();\n }\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n /**\n * Sets up observers to monitor scroll events on a given container\n * and its movable companion within a virtual grid setup.\n *\n * @param {Function} callback - Function to call when a scroll event is detected.\n * @param {Function} onEnterCallback - Function to call when a specific event, like entering a region, is detected.\n * @param {IGrid} instance - The grid instance that requires observation.\n * @returns {void}\n */\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback, instance) {\n var containerRect = 'containerRect';\n _super.prototype[\"\" + containerRect] = getValue('options', this).container.getBoundingClientRect();\n this.containerEl = getValue('options', this).container;\n this.containerScrollHandler = this.virtualScrollHandlers(callback, onEnterCallback, instance);\n EventHandler.add(this.containerEl, 'scroll', this.containerScrollHandler, this);\n if (getValue('options', this).movableContainer) {\n var movableContainerRect = 'movableContainerRect';\n _super.prototype[\"\" + movableContainerRect] = getValue('options', this).movableContainer.getBoundingClientRect();\n this.movableContainerEl = getValue('options', this).movableContainer;\n this.movableScrollHandler = this.virtualScrollHandlers(callback, onEnterCallback, instance);\n EventHandler.add(this.movableContainerEl, 'scroll', this.movableScrollHandler, this);\n }\n };\n TreeInterSectionObserver.prototype.disconnect = function () {\n if (this.containerEl && this.containerScrollHandler) {\n EventHandler.remove(this.containerEl, 'scroll', this.containerScrollHandler);\n this.containerScrollHandler = null;\n }\n if (this.movableContainerEl && this.movableScrollHandler) {\n EventHandler.remove(this.movableContainerEl, 'scroll', this.movableScrollHandler);\n this.movableScrollHandler = null;\n }\n this.containerEl = null;\n this.movableContainerEl = null;\n };\n /**\n * Clears the last known position.\n *\n * @returns {void} No value is returned from this function.\n */\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n /**\n * Handles virtual scrolling events and manages scroll direction and debouncing for rendering updates.\n *\n * @private\n * @param {Function} callback - Function to call on scroll end.\n * @param {Function} onEnterCallback - Function to call on entering a virtual scrolling area.\n * @param {IGrid} instance - The grid instance on which virtual scrolling is being implemented.\n * @returns {Function} - A function that processes scroll events.\n */\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback, instance) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[\"\" + options].prevTop = this[\"\" + options].prevLeft = 0;\n var isScrollByFocus = 'isScrollByFocus';\n return function (e) {\n var keyPress = 'keyPress';\n var keyaction;\n if (instance && instance.root && instance.root.editModule && instance.root.editModule[\"\" + keyPress]) {\n keyaction = instance.root.editModule[\"\" + keyPress];\n }\n if ((instance.isEdit && instance.root.editModule[\"\" + isScrollByFocus]) || (instance.isEdit && (keyaction === 'tab' || keyaction === 'shiftTab'))) {\n instance.root.editModule[\"\" + isScrollByFocus] = false;\n return;\n }\n var top = _this[\"\" + options].movableContainer ? _this[\"\" + options].container.scrollTop : e.target.scrollTop;\n var left = _this[\"\" + options].movableContainer ? _this[\"\" + options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[\"\" + options].prevTop < top ? 'down' : 'up';\n direction = _this[\"\" + options].prevLeft === left ? direction : _this[\"\" + options].prevLeft < left ? 'right' : 'left';\n _this[\"\" + options].prevTop = top;\n _this[\"\" + options].prevLeft = left;\n var current = _this.sentinelInfo[\"\" + direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[\"\" + options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var containerRect = 'containerRect';\n _this[\"\" + containerRect] = _this[\"\" + options].container.getBoundingClientRect();\n var check = _this.check(direction);\n if (current.entered && (current.axis === 'X' || instance.enableVirtualMaskRow)) {\n if (_this[\"\" + movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[\"\" + movableEle], current, direction, { top: top, left: left }, _this[\"\" + fromWheel], check);\n }\n else {\n onEnterCallback(_this[\"\" + element], current, direction, { top: top, left: left }, _this[\"\" + fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced50;\n if (current.axis === 'X') {\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n if ((instance.dataSource instanceof DataManager && instance.dataSource.dataSource.url !== undefined\n && !instance.dataSource.dataSource.offline && instance.dataSource.dataSource.url !== '') || isCountRequired(instance)\n || instance.enableVirtualMaskRow) {\n fn = instance.enableVirtualMaskRow ? debounced100 : fn;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n }\n _this[\"\" + fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer, getTransformValues } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.setEndIndexToGantt = true;\n this.prevendIndex = -1;\n this.prevSelectedRecord = [];\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n /**\n * Handles the virtual child collapse or expand action in a tree grid.\n *\n * @param {object} row - Object containing information about the collapse/expand action.\n * @param {string} row.action - The type of action, either \"collapse\" or \"expand\".\n * @param {HTMLTableRowElement} row.row - The HTML row element that is affected by the action.\n * @param {ITreeData} row.record - The tree data record associated with the row.\n * @param {RowCollapsedEventArgs} row.args - Additional event arguments related to the row collapse or expand.\n *\n * @returns {void} No return value as the function executes a procedure.\n */\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n this.parent.flatData.map(function (e) { return e.expanded = e.uniqueID === row.record.uniqueID &&\n e.expanded !== row.record.expanded ? row.record.expanded : e.expanded; });\n var actionDetails = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n this.handleSelection();\n this.parent['isVirtualExpandCollapse'] = true;\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(actionDetails, { requestType: requestType });\n };\n /**\n * Handles selection logic for the TreeGrid component.\n *\n * @returns {void}\n */\n VirtualScroll.prototype.handleSelection = function () {\n if ((this.parent.selectionSettings.mode === 'Cell' ||\n (this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection))) {\n this.parent.grid.clearSelection();\n }\n if (getValue('isCollapseAll', this.parent) && this.parent.selectionSettings.persistSelection && this.parent.getSelectedRecords().length > 0) {\n this.prevSelectedRecord = this.parent.getSelectedRecords();\n this.parent.grid.clearSelection();\n }\n };\n /**\n * Handles the action related to virtual scrolling with paging details.\n *\n * @param {Object} pageingDetails - Contains the result data, count of results, and action arguments.\n * @param {ITreeData[]} pageingDetails.result - The result data to be handled.\n * @param {number} pageingDetails.count - The count of results.\n * @param {ActionEventArgs} pageingDetails.actionArgs - The action arguments related to the virtual page action.\n * @returns {void}\n */\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var isFiltering = pageingDetails.actionArgs.requestType === 'filtering';\n var isFlatHierarchy = this.parent.filterSettings.hierarchyMode === 'Child' ||\n this.parent.filterSettings.hierarchyMode === 'None';\n var visualData = isFiltering && isFlatHierarchy\n ? parents\n : parents.filter(function (e) { return getExpandStatus(_this.parent, e, parents); });\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count, requestType: pageingDetails.actionArgs.requestType };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' || (requestType === 'refresh' && getValue('isExpandAll', this.parent)) ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length && isNullOrUndefined(this.expandCollapseRec))) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n if ((requestType === 'save' && pageingDetails.actionArgs.index >= (counts.count - this.parent.grid.pageSettings.pageSize)) || (requestType === 'refresh' && this.parent['isGantt'] && this.parent['isAddedFromGantt'])) {\n if (this.setEndIndexToGantt) {\n this.ganttEndIndex = counts.endIndex;\n }\n if (((counts.endIndex + this.parent.pageSettings.pageSize >= counts.count) &&\n (this.parent.root && counts.count !== this.ganttEndIndex) && this.parent['isAddedFromGantt']) || !(this.parent['isGantt'] && this.parent['isAddedFromGantt'])) {\n startIndex = counts.startIndex + (counts.count - counts.endIndex);\n endIndex = counts.count;\n this.setEndIndexToGantt = false;\n }\n this.ganttEndIndex = endIndex;\n this.parent['isAddedFromGantt'] = false;\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n var virtualWrapperElement = this.parent.grid.contentModule.virtualEle.wrapper;\n var translateY = getTransformValues(virtualWrapperElement).height;\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length) && translateY === 0) {\n startIndex = 0;\n }\n if ((pageingDetails.actionArgs.requestType === 'save' && startIndex !== this.prevstartIndex) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length) && translateY === 0) {\n startIndex = 0;\n endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.grid.pageSettings.pageSize;\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount);\n if (tempdata.length < resourceCount && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount;\n sIndex = sIndex > 0 ? sIndex : 0;\n endIndex = visualData.length;\n if (endIndex - startIndex < resourceCount) {\n var newRowsCount = sIndex - startIndex;\n startIndex = sIndex;\n if (visualData.indexOf(this.expandCollapseRec) > visualData.length - resourceCount / 2) {\n var newTranslateY = startIndex * this.parent.grid.getRowHeight();\n this.parent.grid.contentModule['translateY'] = newTranslateY;\n this.parent.grid.contentModule.virtualEle.adjustTable(0, newTranslateY);\n }\n }\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if (this.prevrequestType === 'collapseAll' && pageingDetails.actionArgs.requestType === 'virtualscroll'\n && !isNullOrUndefined(this.parent.idMapping) && startIndex === 0) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll'] && this.parent.grid.contentModule['translateY'] === 0) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n startIndex = startIndex < 0 ? 0 : startIndex;\n if (endIndex === 0 && visualData.length > 0) {\n pageingDetails.result = visualData;\n }\n else {\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n }\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n this.prevrequestType = pageingDetails.actionArgs.requestType;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Updates the row selection when the header checkbox is clicked and the number of selected rows\n * does not match the current view data length.\n *\n * @param {RowDeselectEventArgs} args - The arguments containing details of the row deselection event.\n * @returns {void} - This method does not return a value.\n */\n VirtualScroll.prototype.updateSelection = function (args) {\n if (args.isHeaderCheckboxClicked &&\n this.parent.grid.currentViewData.length !== this.parent.grid.selectionModule.selectedRowIndexes.length &&\n args.target.classList.contains('e-uncheck')) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < this.parent.getRows().length; i++) {\n if (this.parent.getRows()[parseInt(i.toString(), 10)].getElementsByClassName('e-frame e-icons e-uncheck').length &&\n !this.parent.getRows()[parseInt(i.toString(), 10)].querySelector('.e-checkbox-disabled')) {\n this.parent.grid.selectionModule[\"\" + updateRowSelection](this.parent.getRows()[parseInt(i.toString(), 10)], \n // eslint-disable-next-line max-len\n this.parent.getCurrentViewRecords()[parseInt(i.toString(), 10)].index);\n }\n }\n }\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parseInt(parentGrid.height.toString(), 10) :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var row = rows[parseInt(i.toString(), 10)];\n var rData = this.parent.grid.getRowObjectFromUID(row.getAttribute('data-uid')).data;\n if (!isNullOrUndefined(movableRows) && row.parentElement.firstElementChild.clientHeight > 0) {\n row.style.height = row.parentElement.firstElementChild.clientHeight + 'px';\n }\n this.parent['toggleRowVisibility'](row, args.action);\n if (freeze && frozenRightRows.length) {\n this.parent['toggleRowVisibility'](frozenRightRows[parseInt(i.toString(), 10)], args.action);\n }\n var queryselector = args.action === 'e-childrow-hidden' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[parseInt(row.getAttribute('aria-rowindex'), 10) - 1].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[parseInt(i_1.toString(), 10)].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[parseInt(i_1.toString(), 10)]);\n }\n }\n if (cRow.length) {\n var data = this.parent.getCurrentViewRecords()[cRow[0].rowIndex];\n this.rowExpandCollapse({ detailrows: cRow, action: args.action, record: data });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell' && (!e.target['classList'].contains('e-treegridcollapse') && !e.target['classList'].contains('e-treegridexpand'))) {\n this.parent.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll, getRowIndexFromElement } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.collapseActionComplete, this.collapseActionComplete, this);\n this.parent.grid.on('data-ready', this.onDataReady, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.collapseActionComplete, this.collapseActionComplete);\n this.parent.grid.off('data-ready', this.onDataReady);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n };\n InfiniteScroll.prototype.dataBound = function () {\n if (this.treeAction === 'collapse') {\n this.treeAction = 'refresh';\n this.makeCollapseRequest();\n }\n else if (this.treeAction === 'refresh') {\n this.treeAction = null;\n }\n };\n InfiniteScroll.prototype.onDataReady = function (e) {\n if (!isNullOrUndefined(e.count) && e.requestType !== 'infiniteScroll') {\n this.maxPage = Math.ceil(e.count / this.parent.pageSettings.pageSize);\n }\n };\n InfiniteScroll.prototype.collapseActionComplete = function (args) {\n if (!this.parent.infiniteScrollSettings.enableCache && args.isCollapse) {\n var contentBounds = this.parent.getContent().firstElementChild.getBoundingClientRect();\n var tableBounds = this.parent.grid.contentModule.getTable().getBoundingClientRect();\n if (Math.round(tableBounds.bottom - this.parent.grid.getRowHeight()) <= Math.round(contentBounds.bottom)) {\n this.treeAction = 'collapse';\n this.collapsedData = args.data;\n this.makeCollapseRequest(args);\n }\n }\n };\n InfiniteScroll.prototype.makeCollapseRequest = function (args) {\n var rows = this.parent.getRows();\n var index = getRowIndexFromElement(rows[rows.length - 1]);\n var previousPage = this.parent.grid.pageSettings.currentPage;\n var nextPage = Math.ceil(index / this.parent.grid.pageSettings.pageSize) + 1;\n if ((previousPage >= this.maxPage) || (nextPage > this.maxPage)) {\n return;\n }\n this.parent.grid.pageSettings.currentPage = nextPage;\n this.parent['isInfiniteCollapse'] = true;\n var scrollArg = {\n requestType: 'infiniteScroll',\n currentPage: this.parent.grid.pageSettings.currentPage,\n prevPage: previousPage,\n startIndex: index + 1,\n direction: 'down'\n };\n this.parent.grid.notify('model-changed', scrollArg);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[\"\" + locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[\"\" + generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[parseInt(i.toString(), 10)], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][\"\" + position](childRowElements[parseInt(i.toString(), 10)]);\n }\n else {\n rows[args.index + i + 1][\"\" + position](childRowElements[parseInt(i.toString(), 10)]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[parseInt(i.toString(), 10)]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[\"\" + updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[\"\" + updateIndex](this.parent.grid.dataSource, this.parent.getDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var visualData = dm.executeLocal(new Query().where(expanded));\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n if (this.parent.grid.infiniteScrollModule['isInitialRender'] && !this.parent.initialRender) {\n this.parent.grid.pageSettings.currentPage = 1;\n }\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.grid.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n if (skip < 0) {\n query = query.take(take);\n }\n else {\n query = query.skip(skip).take(take);\n }\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if (this.treeAction !== 'collapse' && this.treeAction !== 'refresh') {\n query = query.page(current, size);\n }\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (this.treeAction === 'collapse') {\n var rows = this.parent.getRows();\n var skip = getRowIndexFromElement(rows[rows.length - 1]) + 1;\n query = query.skip(skip);\n var renderedChildDataCount = this.parent.grid.getRowsObject().filter(function (record) {\n return record.data.parentUniqueID === _this.collapsedData.uniqueID;\n }).length;\n var remainingChildDataCount = this.collapsedData.childRecords.length - renderedChildDataCount;\n if (remainingChildDataCount > 0) {\n query = query.take(Math.max(remainingChildDataCount, 0));\n }\n else {\n query = query.take(this.parent.pageSettings.pageSize);\n }\n }\n else if (this.treeAction === 'refresh') {\n var rows = this.parent.getRows();\n var skip = getRowIndexFromElement(rows[rows.length - 1]) + 1;\n query = query.skip(skip);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[\"\" + infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getRowsObject();\n var mRowElms = this.parent.grid.getRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[\"\" + keyField] === data[parseInt(i.toString(), 10)][\"\" + keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[\"\" + resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[parseInt(index.toString(), 10)]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[\"\" + locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getContent().querySelector('tbody')\n : this.parent.grid.getContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getHeaderContent().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getHeaderContent().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[\"\" + addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[parseInt(i.toString(), 10)], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[parseInt(newRowIndex.toString(), 10)]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[parseInt(newRowIndex.toString(), 10)][\"\" + position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[\"\" + addRowIndex]][\"\" + position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n","import * as index from './index';\nindex.TreeGrid.Inject(index.Filter, index.Page, index.Sort, index.Reorder, index.Toolbar, index.Aggregate, index.Resize, index.ColumnMenu, index.ExcelExport, index.PdfExport, index.CommandColumn, index.ContextMenu, index.Edit, index.Selection, index.VirtualScroll, index.DetailRow, index.RowDD, index.Freeze, index.ColumnChooser, index.Logger, index.InfiniteScroll);\nexport * from './index';\n"],"names":["isRemoteData","parent","hasChildMapping","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","parseInt","toString","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","filter","item","isSummaryRow","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","gridData","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","addAction","Array","extend","newRowPosition","k","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","e","p","enableImmutableMode","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","updatedParent","getValue","parentUniqueID","sortSettings","some","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","this","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Column","options","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","enableRowSpan","enableColumnSpan","merge","setProperties","clipboardModule","uid","TreeGridColumn","_super","apply","Property","StackedColumn","LoadingIndicator","ChildProperty","Predicate","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","TreeClipboard","serviceLocator","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","getSelection","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","selectedRowIndex","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","col","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","headerCheckboxFrameEl","checkboxColIndexCache","parentSelectionCounters","selectedUidMap","Map","totalSelectableCount","headerSelectionState","checkedItemCount","visibleUidIndex","selectedItems","filteredList","searchingRecords","addEventListener","buildVisibleUidMap","view","currentViewData","rec","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","resetSelectionCaches","_a","checkBox","checkWrap","parentsUntil","querySelector","closest","getAttribute","selectCheckboxes","newCheckState","nextElementSibling","triggerChkChangeEvent","autoCheckHierarchy","frame","targetState","headerSelection","persistSelection","query","queries","checkState","rowElement","checked","rowData","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","columnIndex","headerDivs","getHeaderContent","countSelectableRecords","resolveHeaderSelectionList","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","aria-label","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","viewRec","flatRec","nextState","traverSelection","isChildItem","previousState","effectiveChildren","isArray","getChildrenFromFlat","filterModule","filteredResult","getFilteredChildRecords","updateSelectedItems","updateParentSelection","updateSelectedCollectionsAfterBulk","refreshVisibleCheckboxes","updateHeaderCheckboxState","childCount","checkedCount","indeterminateCount","total","indeterminate","summary","finalState","deriveParentState","bulkList","all","pid","out","previousChildState","nextChildState","buildSelectionSummary","applySummaryDelta","desiredState","parentPrev","ignoreFilter","children","state","delta","Math","max","checkAll","filterResult","processHeaderSelection","finalizeParentsAfterBulk","hasFilter","hasSearch","isFilterOrSearch","currentlySelectedItemsInOrder","newSelectedItems","newSelectedUidMap","newSelectedIndexes","_i","currentlySelectedItemsInOrder_1","set","allFlatData","allFlatData_1","has","_b","_c","visibleIdx","undefined","uidMap","uniqueIDCollection","srcRec","String","rowEl","rowUid","getRowElementByUID","movableRows","getDataRows","input","count","includeAll","dataToProcess","recordsForHeaderLogic","checkedCountForHeaderLogic","recordsForHeaderLogic_1","currentRecord","silent","checkboxRecord","isSummary","currentVisibleIndex","delete","itemIdx","indexInSelectedIndexes","recordVisibleIndex","updatedData","getCheckedrecords","getCheckedRowIndexes","orderedVisibleIndexes","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","rowsObj","getRowsObject","isFrozenGrid","visible","proxy_1","parentrec","rowDragAndDropModule","getContentTable","scrollHeight","getContent","clientHeight","getVisibleRecords","isReact","thisRef_1","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","n","iconRequired","hasFilteredChildRecords","loadChildOnDemand","expandIcon","expand","selectedRow","find","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","summaryData","template","treeColumn","rowTemplate","thisRef_2","colindex","templateCompiler","textContent","appendChildren","tempID","element","id","thisRef_3","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","td","getCellFromIndex","refreshTD","treecell","callBack","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","Query","filterKey","params","param","where","addParams","qry","clone","executeQuery","then","DataUtil","distinct","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","searchString","expands","this_1","childRecords_1","parent_1","getUid","parentID_1","parentRec","parentRec_1","actual","ceil","random","isExpandCollapse","aggregates","summaryQuery","q","fn","summaryModule","calculateSummaryValue","rowDetails","isChild","gridRows","childRecord","targetEle","getElementsByClassName","getRowObjectFromUID","childRows","parentRow","expandingTd","detailRowModule","totalRecordsCount","fetchRemoteChildData","getDataModule","generateQuery","clonequries","idMappingValue","isNaN","take","pageSize","expandDetail","filterqry","predicates","showSpinner","inx","forEach","haveChild","resultChildData","localIdMapping","firstRecord","secondRecord","gridQuery","aggregateQuery","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","sortBy","parentRecords","treeGridData","currentData","hasChildren","shouldCount","rowDropSettings","targetID","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","dragdIndex","dropdIndex","sortArgs","temp","paging","printMode","actArgs","actualResults","dataResult","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","templateFn","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","ColumnChooserSettings","TreeGrid","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","isFromChartSide","modifiedRecords","stackedHeader","freezeColumnRefresh","componentRefresh","Component","refresh","isComponentRefresh","isVirtualExpandCollapse","isInfiniteCollapse","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","TreeLogger","mergePersistTreeGridData","injectedModules","FreezeColumn","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","allowExcelExport","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","allowPdfExport","pdfExportModule","serverExcelExport","url","isExcel","exportTreeGrid","serverPdfExport","serverCsvExport","processQuery","JSON","parse","treeGridModel","addOnPersist","include","fields","search","sorted","setHeaderText","form","treeGridInput","name","stringify","method","document","body","submit","remove","getColumnByField","getFormat","currencyCode","refreshLayout","muteOnChange","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","getColumnByIndex","editType","findnextRowElement","cellIndex_1","row_1","isEdit","focusedCells","contentTableBody","lastElementChild","clearSelection","findPreviousRowElement","cellIndex_2","row_2","summaryRowElement","previousElementSibling","infiniteScrollData","remoteCollapsedData","remoteExpandedData","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","member","toolbar","contextMenuItems","resizeCheck","freezePresent","hasFreezeProp","freeze","detailTemplate","showColumnChooser","extendRequiredModules","columnMenu","columnMenuItems","contextMenu","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","commands","commandsTemplate","unwireEvents","removeAttribute","loggerModule","render","portals","isVue","vueInstance","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","addListener","gridContainer","height","gridRequiredModules","appendTo","actionFailureHandler","childNodes","contentTable","refreshToolbarItems","renderComplete","destroyTemplateFn","callback","chartRowsModule","failureCases","primaryKeyFieldNames","RecordsCount","isFrozen","test","checkboxColumn","textAlign","failureEventArgs_1","error","failureCase","toolbarElement","toolbarModule","getToolbar","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","getGridColumns","columnQueryMode","getActualProperties","pagerTemplate","allowMultiSorting","infiniteScrollSettings","enableVirtualMaskRow","loadingIndicator","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","columnChooserSettings","textWrapSettings","getContextMenu","getGridEditSettings","clipMode","enableHtmlSanitizer","enableStickyHeader","emptyRecordTemplate","isRowSelectable","triggerEvents","IsExpandCollapseClicked","checkboxOnly","bindGridEvents","rowSelecting","isHeaderCheckboxClicked","parentQuery","selectionModule","rowDeselecting","rowSelected","virtualScrollModule","updateSelection","rowDeselected","resizeStop","excelQueryCellInfo","excelAggregateQueryCellInfo","pdfAggregateQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","lastRowBorderEventListener","updateRowTemplate","updateAltRow","req","totalRows","updateRowSelection","prevSelectedRecord","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","lastRowCellBorderUpdated","toolbarClick","callBackPromise","toolbarargs","cellSelecting","cellselectingArgs","beginEdit","begineditArgs","isExpandRefresh","cellSave","isContextMenuOpen","contextitems","contextMenuModule","cellsaveArgs","cellSaved","cellEdit","promise","batchAdd","beforeBatchSave","beforeBatchAdd","batchDelete","beforeBatchDelete","batchCancel","setTimeout","treeColumnRowTemplate","datacount","defaultQuery","hasPreAndPostMiddleware","JsonAdaptor","actionBegin","dataManager","isQueryInvokedFromData","callBackPromise_2","actionComplete","updateTreeGridModel","ag","showChildSummary","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","movableContent","frozenContent","detailDataBound","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","rowDrop","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","columnProps","enablePersistence","treeColumnTextAlign","treeColumnField","visibleRows","from","lastVisibleRow","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","treeGridElement","hasTreeGridChild","removeListener","dataBind","getElementById","getPersistData","keyEntity","ignoreOnPersist","scrollPosition","ignoreOnColumn","currentObject","val","ignoreInArrays","ignoreInColumn","touches","isEditCollapse","close","isCheckBoxSelection","isPersistSelection","checkedTarget","checkedLen","totalRecords","filterTemplate","elem","isOpen","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","tr","setCellValue","primaryKey","selectedRowIndexes","visibleRecords","table","sHeight","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","updateColumnsWidth","currentColumn","mergeColumns","storedColumn","setFrozenCount","splitFrozenCount","instance","removeBorder","frozenLeftBorderColumns","frozenRightBorderColumns","applyPreRequestMiddlewares","applyPostRequestMiddlewares","dRows","getHeaderTable","getRowInfo","getUidByColumnField","indexes","refreshUI","getTreeColumn","updatedCols","treeIndex","findIndex","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","rowInfo_1","getCollapseExpandRecords","pagerValuePresent","pagerObj","pagerdropdownModule","isExpandingEventTriggered","expandAllPrevent","expandRows","expandingArgs","expandCollapseAllChildren","expandCollapse","expandArgs","updateExpandStateMapping","isExpandedEventTriggered","isCollapsingEventTriggered","collapseAllPrevent","collapseRows","collapsingArgs","collapseArgs","isCollapsedEventTriggered","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","this_2","puniqueID_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","changes","changed","deleted","added","expandCollapseAll","currentRecordIndx","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","remoteExpand","localExpand","isCollapse","lastrowIdx","lastRow","borderElement","flatDataRecords","deff","getStateEventArgument","data_1","length_1","scrollHeightBeforeRefresh","scrollTop","rows_1","args_1","collapseRemoteChild","detailRow","freezeRightRows","rows_2","gridRowsObject","currentIndex","toggleRowVisibility","visibleRowCount","gridRow","rowsObject","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","sanitize","SanitizeHtmlHelper","updateResultModel","partialFilterUpdate","getCellsByTableName","returnResult","elements","gridFiltered","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","selectRow","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getMovableDataRows","getMovableRowByIndex","getMovableRows","getFrozenRightRowByIndex","getFrozenRightRows","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cols","cnt","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","outdent","getPageSizeByHeight","containerHeight","treegridControlElement","root","offsetHeight","wrapMode","pagesize","getRowHeight","calcNonContentHeight","pagerMsg","floor","Complex","RowDropSettings","Event","NotifyPropertyChanges","Reorder","GridReorder","updateTreeColumn","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","rowDropped","rowsAdded","rowsRemoved","tObj","dropRows","orderToIndex","dropData","totalRecord","parentrow","updateRowAndCellElements","request","selectedItemIndex","selectedItem","selectedRecord","record_1","eventTrigger","isInvalidSelection","isRootLevel","parentItem_1","ariaRowIndex","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","temporaryDataSource","indexOfDroppedRecord","droppedRecord","proxy","positionAdjustment","removeFirstrowBorder","canremove","removeLastrowBorder","canRemove","lastRowBorderElement","updateIcon","rowEle","rowPositionHeight","addErrorElem","removetopOrBottomBorder","removeChildBorder","rowTop","toolHeight","positionOffSet","getOffset","contentHeight","top","firstElementChild","offsetTop","getBoundingClientRect","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","clientY","isTopSegment","isMiddleRowSegment","isBottomRowSegment","isBorderNeed","addFirstrowBorder","removeErrorElem","addLastRowborder","updateBorderStatus","topOrBottomBorder","addRemoveClasses","hasDetailTemplate","treegridColumnIndex","treeColIndex","dragRows","targetRow","regex","parentIndexLevel","dropIndexLevel","parentLevel","dropParentLevel","InDraggedRowIndex","parentLevelInRow","dragIndexLevel","dragParentLevel","dropActualIndex","dragIndex","includes","borderElem","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","isEmptyRow","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","errorContainer","rowCell","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","rowElements","classAction","lastRowDragBorder","border","box","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","dropElement","srcControl","ej2_instances","ensuredropPosition","dragDropGrid","removeRowBorders","targetIndex","getTargetIdx","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","fromIndex","isMultipleGrid","dragLength","reverse","dragRecords_2","dragRecord","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","recordIndex","childRecordsLength","recordLevel","targetRecord","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idx","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","isDuplicateData","every","TreeVirtualRowModelGenerator","getDatas","visualData","getDataInfo","getData","generateRows","info","virtualInfo","blockIndexes","getBlockIndexes","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","f","addParentRecord","ischild","checkChildExsist","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","isCollapsedStatePersist","GridExcel","updateExcelResultModel","exportRowDataBound","excelAggregateCellInfo","finalPageSetup","isCsv","Data","isLocal","Promise","ExportHelper","getQuery","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","pdfAggregateCellInfo","customsData","manipulatePdfProperties","preds","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","updatePageSize","pageingDetails","updateSize","gridPagerModule","pageSizes","getLocalizedLabel","propname","skip","size","dm_1","or","parents_1","Toolbar","tool","refreshToolbar","toolbarClickHandler","indentEle","outdentEle","selectedrow","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","summaryParent","length_2","itemData","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","sortedResult","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","contextMenuItemClick","addRow","editRecord","hideItems","event","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchSave","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","onCellFocused","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","matrix","isAddedMultipleRowsByMethod","newlyAddedRecords","childs","primarykey","parentRowIndex","totalCount","deleteUniqueID","positionIndex","addRowRecord_1","updatedRecords","primarykey_1","addRecords","endIndex","rowPosition","indexValue","keyArgs","preventDefault","Edit","prevAriaRowIndex","isAddedRowByMethod","isAddedRowByContextMenu","isIndexUndefined","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","dataset","addArgs","dataRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","columnObject","toolbarID","cellDetails","editedRowIndex","treeCell","afterCellSave","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","l","data2","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","errors","isScrollByFocus","focus","multipleRowIndex","newlyAddedRecord","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues_1","deletevalue","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailRows","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","colSpan","colum","focusElement","VirtualTreeContentRenderer","locator","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","getRowCollection","getFrozenRightVirtualRowByIndex","isMovable","isRowObject","isFrozenRight","startIdx","rowCollection","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","gObj","scrollValues","sentinel","observer","sentinelInfo","down","offset","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","handleActionBegin","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","restoreEditState","SetVirtualPageQury","getColumnOffset","setVirtualHeight","contents","disconnect","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","generateCells","generateCell","getVirtualRowIndex","rowId","cellType","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","isForeignKey","isForeignColumn","Cell","withInRange","visiblePage","getVisiblePage","skipPage","restoreNewRow","isWheel","isIE","showMaskRow","axis","top_1","offsets","xAxis","vgenerator","getColumnIndexes","columnIndexes","cBlock","frzLeftWidth_1","cOffsets","maxLeft","upScroll","virtualEle","adjustTable","header","shouldPreventScrolling","outBuffer","activeKey","downScroll","vHeight","lastInx","remains","isRowSelected","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","removeMaskRow","setColumnIndexesInView","loadSelf","addShimmerEffect","appendContent","newChild","cOffset","cIndex","setWrapperWidth","getTable","reduceWidth_1","frzLeftWidth_2","resetStickyLeftPos","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","onEnterCallback","containerEl","containerScrollHandler","virtualScrollHandlers","movableContainer","movableContainerEl","movableScrollHandler","delay","debounced100","debounce","debounced50","prevTop","prevLeft","keyaction","scrollbar","clearTimeout","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","setEndIndexToGantt","prevendIndex","TreeVirtual","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","actionDetails","handleSelection","isFiltering","isFlatHierarchy","counts","ganttEndIndex","virtualWrapperElement","wrapper","getTransformValues","resourceCount","sIndex","newTranslateY","prevrequestType","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseActionComplete","dataBoundFunction","treeAction","makeCollapseRequest","maxPage","contentBounds","tableBounds","collapsedData","getRowIndexFromElement","previousPage","nextPage","scrollArg","prevPage","rowRenderer","RowRenderer","childRowObjects","childRowElements","actions","initialBlocks","maxBlocks","firstIndex","renderedChildDataCount","remainingChildDataCount","rowElms","keyField","removeRows","mRows","mRowElms","tbody","currentRows","isFrozenRows","newRow","index.Filter","index.Page","index.Sort","index.Reorder","index.Toolbar","index.Aggregate","index.Resize","index.ColumnMenu","index.ExcelExport","index.PdfExport","index.CommandColumn","index.ContextMenu","index.Edit","index.Selection","index.VirtualScroll","index.DetailRow","index.RowDD","index.Freeze","index.ColumnChooser","index.Logger","index.InfiniteScroll"],"mappings":"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SpnB,UAAW,gBAAa,IACpCiE,IACI6B,WAAS,OACVshB,EAASpnB,UAAW,sBAAmB,IAC1CiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,wBAAqB,IAC5CiE,IACI6B,WAAS,OACVshB,EAASpnB,UAAW,yBAAsB,IAC7CiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,0BAAuB,IAC9CiE,IACI6B,gBACDshB,EAASpnB,UAAW,iBAAc,IACrCiE,IACI6B,cACDshB,EAASpnB,UAAW,YAAS,IAChCiE,IACI6B,cACDshB,EAASpnB,UAAW,iBAAc,IACrCiE,IACI6B,WAAS,aACVshB,EAASpnB,UAAW,gBAAa,IACpCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,kBAAe,IACtCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,wBAAqB,IAC5CiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,oBAAiB,IACxCiE,IACIwqC,aAAYpoC,IACb+gB,EAASpnB,UAAW,uBAAoB,IAC3CiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,sBAAmB,IAC1CiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,oBAAiB,IACxCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,yBAAsB,IAC7CiE,IACIwqC,aAAYppB,KACb+B,EAASpnB,UAAW,mBAAgB,IACvCiE,IACIwqC,aAAYC,oBACbtnB,EAASpnB,UAAW,sBAAmB,IAC1CiE,IACI6B,WAAS,QACVshB,EAASpnB,UAAW,mBAAgB,IACvCiE,IACI6B,cACDshB,EAASpnB,UAAW,oBAAiB,IACxCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,qBAAkB,IACzCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,wBAAqB,IAC5CiE,IACIwqC,aAAYtnB,KACbC,EAASpnB,UAAW,4BAAyB,IAChDiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,mBAAgB,IACvCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,wBAAqB,IAC5CiE,IACIwqC,aAAYxnB,KACbG,EAASpnB,UAAW,mBAAgB,IACvCiE,IACImC,gBAAe0gB,KAChBM,EAASpnB,UAAW,iBAAc,IACrCiE,IACIwqC,aAAY1nB,KACbK,EAASpnB,UAAW,mBAAgB,IACvCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,qBAAkB,IACzCiE,IACI6B,cACDshB,EAASpnB,UAAW,qBAAkB,IACzCiE,IACIwqC,aAAYtoC,IACbihB,EAASpnB,UAAW,qBAAkB,IACzCiE,IACIwqC,aAAY93B,IACbyQ,EAASpnB,UAAW,qBAAkB,IACzCiE,IACI6B,cACDshB,EAASpnB,UAAW,cAAW,IAClCiE,IACI6B,cACDshB,EAASpnB,UAAW,sBAAmB,IAC1CiE,IACI6B,WAAS,YACVshB,EAASpnB,UAAW,gBAAa,IACpCiE,IACI6B,cACDshB,EAASpnB,UAAW,uBAAoB,IAC3CiE,IACI6B,cACDshB,EAASpnB,UAAW,sBAAmB,IAC1CiE,IACI6B,cACDshB,EAASpnB,UAAW,kBAAe,IACtCiE,IACI6B,WAAS,WACVshB,EAASpnB,UAAW,wBAAqB,IAC5CiE,IACI6B,WAAS,OACVshB,EAASpnB,UAAW,gBAAa,IACpCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,mBAAgB,IACvCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,oBAAiB,IACxCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,kBAAe,IACtCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,qBAAkB,IACzCiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,uBAAoB,IAC3CiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,0BAAuB,IAC9CiE,IACI6B,YAAS,IACVshB,EAASpnB,UAAW,yBAAsB,IAC7CiE,IACI6B,cACDshB,EAASpnB,UAAW,0BAAuB,IAC9CiE,IACI6B,WAAS,SACVshB,EAASpnB,UAAW,aAAU,IACjCiE,IACI6B,WAAS,SACVshB,EAASpnB,UAAW,YAAS,IAChCiE,IACIwqC,aAAYzoC,IACbohB,EAASpnB,UAAW,uBAAoB,IAC3CiE,IACI6B,YAAS,IACVs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"}
|