@syncfusion/ej2-treegrid 19.4.52 → 19.4.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.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/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.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 * @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[i].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[i]);\n if (hasChild) {\n datas.push(records[i]);\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;\n for (var i = 0, len = Object.keys(childRecords).length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\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[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\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 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[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\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[p][control.idMapping] === currentData_1[control.idMapping]) {\n parentData['childRecords'].splice(p, 1);\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[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], 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[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], 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 {\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[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\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[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][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[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\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[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], 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[j], 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[j], 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[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], 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 (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\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 record.childRecords.push(child);\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[i][primaryKeys] === record[primaryKeys]) {\n data[i] = 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 row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(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[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'][refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\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 Tree Grid predicate for the filter column.\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.\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 textwrap 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[i]];\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[i] === '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[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === '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[i]];\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) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\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 if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], 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[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\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[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][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[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][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","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, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\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 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 * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\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 rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var columns = (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = this.parent.columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = 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 if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\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 checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\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 Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\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 Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\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 else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\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 var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\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 && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\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 filtering 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 } 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) {\n args.row.style.display = 'none';\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) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + 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 (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 args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\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', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\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 iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\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 }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\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 if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\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 + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\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, 'template', 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 this.parent[renderReactTemplates]();\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[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\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]();\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 };\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 = (Object.keys(data).length === 0 && !(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 = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\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 for (var i = 0; i < Object.keys(data).length; i++) {\n var tempData = data[i];\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[i];\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[index][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 records = args.result;\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 for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\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 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 rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].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[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ 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 qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\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 rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\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 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.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n for (var i = 0, len = Object.keys(data).length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.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 setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\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 if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.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[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\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 });\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[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\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 Predefined toolbar items.\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 * Defines predefined contextmenu items.\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 = {}));\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.\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 TreeGrid's aggregate column.\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 };\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.\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 sort column.\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 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 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 { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } 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 { CellRenderer } from '@syncfusion/ej2-grids';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\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 } 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';\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 _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\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[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].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);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\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 * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\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 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 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 of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\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 TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\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;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`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 row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\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.style.display === 'none')) {\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.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = 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 * Binding events to the element while component creation.\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 * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount()) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\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 };\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 }\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' });\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[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n this.grid.appendTo(gridContainer);\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) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\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);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\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 this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\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 this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\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.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 this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\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 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 this.grid.rowTemplate = getActualProperties(this.rowTemplate);\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 var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\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 _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.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.rowDeselecting = 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 = this.triggerEvents.bind(this);\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[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], '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.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 = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\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[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], 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()[index], 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.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 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 _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 this.treeColumnRowTemplate();\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);\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 }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\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 !== 'indent' && _this.action !== 'outdent') {\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 if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indent' || _this.action === 'outdent') {\n var actionArgs = {\n requestType: _this.action,\n data: _this.selectedRecords,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = [];\n }\n else {\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 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 for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\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[i]) {\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 default:\n items.push(this.contextMenuItems[i]);\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 var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\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[i]);\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 index = index === 0 ? -1 : index;\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n }\n return gridColumnCollection;\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 this.grid.columns = this.getGridColumns(this.columns);\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 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 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 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 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 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 '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 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 this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\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 }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\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 (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\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[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\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 * Get the properties to be maintained in the persisted state.\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'];\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: []\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[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\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[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\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 this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\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. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\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 edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\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 * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\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()[index];\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 * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\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 * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell 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 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 */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\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 TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\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 * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular 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()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular 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 this.grid.setRowData(key, rowData);\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[record.index], sHeight <= clientHeight);\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\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 * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a 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 cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\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 * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key 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 a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key 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 * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\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 * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\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 stackedHeader = false;\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[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n stackedHeader = true;\n }\n if (!stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.grid.getRowsObject();\n var indent = _this.grid.getIndentCount();\n var cellIndex = _this.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.grid, _this.grid.serviceLocator);\n var td = _this.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n }\n }\n });\n }\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content 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.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 /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns 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[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ? this.flatData :\n new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\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[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\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.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\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 ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\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 = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, collapseArgs);\n }\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[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\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)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('aria-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\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 the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\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_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.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_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(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 the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to 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 the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\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[i], 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 the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\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.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 if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\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[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().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) {\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.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !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 = 'table-row';\n if (!isChild) {\n record.expanded = true;\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 = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\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 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 }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\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[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], 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 };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].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[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\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));\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.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, 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') ? 'table-row' : 'none';\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[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\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.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if (!isNullOrUndefined(childRecords[i].childRecords) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\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[i];\n if (gridRow.style.display !== 'none') {\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 if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\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.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().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 rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\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[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].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[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\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 };\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 };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\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 the filtered rows of the TreeGrid.\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 by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\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 the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\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 TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(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 TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\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 TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\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 TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(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 TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\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 TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(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 TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(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 TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(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 TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(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(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[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\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(false)\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()\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 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('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", 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, \"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 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 Property(true)\n ], TreeGrid.prototype, \"allowSelection\", 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 Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", 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 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, \"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 { getObject, 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.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\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.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\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, classList, setValue, extend, getValue, removeClass, addClass } 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 this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\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 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 var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\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 this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = this.parent.treeColumnIndex + 1;\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()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n for (var i = 0; i < totalRecord.length; i++) {\n this.parent.renderModule.cellRender({\n data: totalRecord[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n var _loop_1 = function (i) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = currentData.filter(function (data) {\n return data.uniqueID === currentData[i].parentUniqueID;\n })[0];\n currentData[i].parentItem.index = updatedParent.index;\n }\n };\n for (var i = 0; i < currentData.length; i++) {\n _loop_1(i);\n }\n return currentData;\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[i];\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[i];\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 (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[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping) && 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[i].uniqueID, dragRecords[i], 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 RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\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 RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n for (var i = 0; i < Object.keys(tempDataSource).length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 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][i] = childRecords[i].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 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 RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\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[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\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 rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].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 var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\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 this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\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 this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\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 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 RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(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 RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n if (errorelem) {\n errorelem.remove();\n }\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\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[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\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 RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\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 }\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 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')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\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 if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\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 setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\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 if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\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()[rowIndex];\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()[rowIndex];\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[i], cell: rows[i].cells[index],\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[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\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[i] = records[i].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[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // 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[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].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 RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record) {\n var parentItem = record.parentItem;\n if (this.dropPosition === 'bottomSegment') {\n var selectedRecord = this.parent.getSelectedRecords()[0];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getSelectedRecords()[0].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 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 rowIndex = tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\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 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)) {\n dragRecords.reverse();\n }\n var _loop_2 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\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 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 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 var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_2(i);\n }\n }\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 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 this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 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 childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\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 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 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 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 currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\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 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 currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\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 RowDD.prototype.removeRecords = function (record) {\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) {\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 idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\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 }\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[j][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 }\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[i];\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[i_2][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[i_3][this.parent.idMapping] === 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 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[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\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 return;\n }\n }\n });\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 row drop settings of the TreeGrid.\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 } 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 if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\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 for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\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.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\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 for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\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 //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\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 //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\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[count].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[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], 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[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\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[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\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[count];\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 } 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.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.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 property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\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 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 setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\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 && this.isLocal()) {\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 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 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[i].rows) {\n workbook.worksheets[i].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 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 };\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 };\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 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 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 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 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 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 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 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[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].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.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) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\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 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.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.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var tObj = this.parent;\n if (args.row.rowIndex === 0 || tObj.getSelectedRecords().length > 1) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent', tObj.element.id + '_gridcontrol_outdent'], false);\n }\n else {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex])) {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex]) &&\n (tObj.getCurrentViewRecords()[args.row.rowIndex].level >\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level)) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n else {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level ===\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level === 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level !== 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n }\n if (args.row.rowIndex === 0 && !isNullOrUndefined(args.data.parentItem)) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var action = 'action';\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 var record = tObj.getCurrentViewRecords()[tObj.getSelectedRowIndexes()[0] - 1];\n var dropIndex = void 0;\n if (record.level > tObj.getSelectedRecords()[0].level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = tObj.getSelectedRowIndexes()[0] - 1;\n }\n this.parent[action] = 'indent';\n this.eventTrigger('indent', dropIndex);\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n var dropIndex = void 0;\n var parentItem = tObj.getSelectedRecords()[0].parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n this.parent[action] = 'outdent';\n this.eventTrigger('outdent', dropIndex);\n }\n };\n Toolbar.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var selectedRecords = 'selectedRecords';\n var selectedRows = 'selectedRows';\n this.parent[selectedRows] = this.parent.getSelectedRows();\n this.parent[selectedRecords] = this.parent.getSelectedRecords();\n var actionArgs = {\n requestType: action,\n data: this.parent.getSelectedRecords(),\n row: this.parent.getSelectedRows(),\n cancel: false\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.requestType === 'indent') {\n _this.parent.reorderRows([_this.parent.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n else if (actionArgs.requestType === 'outdent') {\n _this.parent.reorderRows([_this.parent.getSelectedRowIndexes()[0]], dropIndex, 'below');\n }\n }\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 parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\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[i];\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[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\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[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\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[i];\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[i].columnName) ? summary.columns[i].field :\n summary.columns[i].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[i], 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[i], 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[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\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 var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\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 this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\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 };\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 };\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 if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\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 };\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.addRecord();\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, merge } 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';\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 };\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 };\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 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 var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\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[this.addRowIndex][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[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][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()[rowObjectIndex].changes;\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[this.addRowIndex][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 this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\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 this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\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.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 actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\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 }\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 if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.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);\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()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\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 for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\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[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][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[i], 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[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].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 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 for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\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[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\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 = void 0;\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.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) {\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 for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\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 addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem])) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\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[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\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 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 };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\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 = treeObj.dataSource.adaptor;\n if ((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()[rowIndex][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[i].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.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\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[page];\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[page];\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'));\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 + '');\n }\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) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.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)) {\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.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 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, args.rowIndex);\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('isEdit', false, this.parent.grid);\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 if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().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.getMovableRows().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 this.afterCellSave(args, row_1, rowIndex_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 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 _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\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 var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\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.map(function (ag) { return ag.showChildSummary === true; }).length) {\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()[rowIndex].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[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\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[j];\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 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[l].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[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\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[k].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 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') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 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[index]) && records[index].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[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).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 var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\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[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\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 (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 && (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[i][primaryKeys_2[0]]) {\n data_1[i] = 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[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].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 + '\"]';\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 + '\"]';\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 this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\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' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\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 = this.parent.grid.getCurrentViewRecords();\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('aria-rowindex'), 10);\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 ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\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) {\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 value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\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 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 = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\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 (!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 var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\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.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), 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 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 detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\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 args.detailrows[i].style.display = 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 spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].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 } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\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 } from '../utils';\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 VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\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 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 VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.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 {\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 = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\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());\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.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 }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\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 if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || this.isDataSourceChanged) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\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 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 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 else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\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 {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\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 if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\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[i]));\n }\n return cells;\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 VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 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 VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\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 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 VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\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.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\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]) {\n _this.parent.showSpinner();\n }\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 (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 _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\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 - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\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) {\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 ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\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 (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\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 if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\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 (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\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.ariaRowIndex >= 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 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 };\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 TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\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 return function (e) {\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 check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\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 = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\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 _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 } 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.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\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 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 var ret = {\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 if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\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 visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\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' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\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)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\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.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']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\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 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 //renderer.addRenderer(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 ? parentGrid.height :\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 } 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.getMovableDataRows();\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.getFrozenRightRows().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 rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\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') {\n this.parent.grid.editModule.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 } 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, getExpandStatus } 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.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\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.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\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[i], 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[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\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.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\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 var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\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 infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\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.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.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 query = query.skip(skip).take(take);\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 ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\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[i]);\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.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\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[i][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[index]);\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.getMovableRows()\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.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().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.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().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[i], 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[newRowIndex + 1]).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[newRowIndex][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","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","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","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","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","filter","e","p","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","enableImmutableMode","renderModule","cellRender","cell","cells","column","getColumns","requestType","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","RowModifier","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","isReact","result","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","getElementsByClassName","getRowObjectFromUID","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","getRowsObject","haveChild","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","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","sortBy","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","undefined","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","cellIndex","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","portals","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","renderComplete","destroyTemplateFn","clearTemplate","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","triggerEvents","bindGridEvents","rowSelecting","rowSelected","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","toolbarClick","callBackPromise","toolbarargs","cellSelecting","cellselectingArgs","beginEdit","begineditArgs","isExpandRefresh","cellSave","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","cellsaveArgs","cellSaved","cellEdit","promise","batchAdd","beforeBatchSave","beforeBatchAdd","batchDelete","beforeBatchDelete","batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","actionBegin","dataManager","isQueryInvokedFromData","callBackPromise_2","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","selectedRecords","selectedRows","detailDataBound","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","isEdit","rowDrop","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","closeEdit","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","toolbarModule","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","getCellFromIndex","getColumnByField","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","stackedHeader","refreshReactColumnTemplateByUid","columnUid","rowsObj","indent","getIndentCount","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","serviceLocator","td","refreshTD","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","getVisibleRecords","visibleRecords","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","freeze","refreshScrollOffset","collapsingArgs","firstElementChild","scrollTop","getRowHeight","scrollBy","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","this_1","puniqueID_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","remoteExpand","localExpand","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","rowDragAndDropModule","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","rowDropped","rowsAdded","rowsRemoved","tObj","dropPosition","dropIndex","dropRows","orderToIndex","dropData","totalRecord","parentrow","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","getToolbar","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","errorelem","border","box","getBoundingClientRect","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","left","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","selectedRecord","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","isCollapsedStatePersist","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","state","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","pageingDetails","propname","skip","size","pageSize","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","eventTrigger","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchSave","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","totalRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","request","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","treecell","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","primaryKeys_2","selector","beginAddEdit","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","event","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","index.TreeGrid","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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"}
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/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/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.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 * @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[i].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[i]);\n if (hasChild) {\n datas.push(records[i]);\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;\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\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[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\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 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[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\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[p][control.idMapping] === currentData_1[control.idMapping]) {\n parentData['childRecords'].splice(p, 1);\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[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], 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[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], 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 {\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[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\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[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][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[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\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[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], 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[j], 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[j], 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[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], 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 (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\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 record.childRecords.push(child);\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[i][primaryKeys] === record[primaryKeys]) {\n data[i] = 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 row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(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[index_2] ? row.cells[index_2]\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","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'][refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\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 Tree Grid predicate for the filter column.\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.\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 textwrap 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[i]];\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[i] === '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[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === '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[i]];\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) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\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 if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], 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[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\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[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][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[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][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","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, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\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 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 * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\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 rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var columns = (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = this.parent.columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = 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 if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\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 checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\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 Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\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 Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\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 else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\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 var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\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 && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\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 filtering 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 } 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) {\n args.row.style.display = 'none';\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) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + 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 (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 args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\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', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\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 iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\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 }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\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 if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\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 + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\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, 'template', 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 this.parent[renderReactTemplates]();\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[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\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]();\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 };\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 = (Object.keys(data).length === 0 && !(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 = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\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[i];\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[i];\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[index][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 records = args.result;\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 for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\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 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 rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].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[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ 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 qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\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 rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\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 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.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\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[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.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 setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\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 if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.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[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\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 });\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[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\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 Predefined toolbar items.\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 * Defines predefined contextmenu items.\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 = {}));\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.\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 TreeGrid's aggregate column.\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 };\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.\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 sort column.\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 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 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 { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } 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 { CellRenderer } from '@syncfusion/ej2-grids';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\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 } 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';\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 _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\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[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].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);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\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 * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\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 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 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 of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\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 TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\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;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`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 row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\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.style.display === 'none')) {\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.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = 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 * Binding events to the element while component creation.\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 * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount()) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\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 };\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 }\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' });\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[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n this.grid.appendTo(gridContainer);\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) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\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);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\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 this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\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 this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\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.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 this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\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 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 this.grid.rowTemplate = getActualProperties(this.rowTemplate);\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 var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\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.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.rowDeselecting = 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 = this.triggerEvents.bind(this);\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[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], '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.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 = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\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[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], 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()[index], 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.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 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 _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 this.treeColumnRowTemplate();\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);\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 }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\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 if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var actionArgs = {\n requestType: _this.action,\n data: _this.selectedRecords,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = [];\n }\n else {\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 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 for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\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[i]) {\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 default:\n items.push(this.contextMenuItems[i]);\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 var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\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, disabled: true,\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, disabled: true,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\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 index = index === 0 ? -1 : index;\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n }\n return gridColumnCollection;\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 this.grid.columns = this.getGridColumns(this.columns);\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 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 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 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 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 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 '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 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 this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\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 }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\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 (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\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[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\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 * Get the properties to be maintained in the persisted state.\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'];\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: []\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[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\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[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\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 this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\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. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\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 edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\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 * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\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()[index];\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 * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\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 * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell 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 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 */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\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 TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\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 * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular 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()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular 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 this.grid.setRowData(key, rowData);\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[record.index], sHeight <= clientHeight);\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\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 * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a 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 cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\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 * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key 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 a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key 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 * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\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 * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\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 stackedHeader = false;\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[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n stackedHeader = true;\n }\n if (!stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.grid.getRowsObject();\n var indent = _this.grid.getIndentCount();\n var cellIndex = _this.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.grid, _this.grid.serviceLocator);\n var td = _this.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n }\n }\n });\n }\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content 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.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 /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns 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[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ? this.flatData :\n new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\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[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\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.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\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 ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\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 = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, collapseArgs);\n }\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[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\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)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('aria-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\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 the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\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_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.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_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(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 the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to 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 the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\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[i], 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 the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\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.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 if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\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[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().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) {\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.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !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 = 'table-row';\n if (!isChild) {\n record.expanded = true;\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 = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\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 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 }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\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[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], 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 };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].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[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\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));\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.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, 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') ? 'table-row' : 'none';\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[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\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.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if (!isNullOrUndefined(childRecords[i].childRecords) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\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[i];\n if (gridRow.style.display !== 'none') {\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 if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\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.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().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 rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\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[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].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[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\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 };\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 };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\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 the filtered rows of the TreeGrid.\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 by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\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 the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\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 TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(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 TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\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 TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\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 TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(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 TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\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 TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(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 TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(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 TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(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 TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(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(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[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\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(false)\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()\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 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('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", 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, \"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 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 Property(true)\n ], TreeGrid.prototype, \"allowSelection\", 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 Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", 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 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, \"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 { getObject, 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.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\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.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\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, classList, setValue, extend, getValue, removeClass, addClass } 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 this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\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 var action = 'action';\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 var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\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.treeColumnIndex + 1;\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()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n for (var i = 0; i < totalRecord.length; i++) {\n this.parent.renderModule.cellRender({\n data: totalRecord[i], cell: rows[i].cells[index],\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: totalRecord[i], row: rows[i]\n });\n }\n }\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n var _loop_1 = function (i) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = currentData.filter(function (data) {\n return data.uniqueID === currentData[i].parentUniqueID;\n })[0];\n currentData[i].parentItem.index = updatedParent.index;\n }\n };\n for (var i = 0; i < currentData.length; i++) {\n _loop_1(i);\n }\n return currentData;\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[i];\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[i];\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 (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[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping) && 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[i].uniqueID, dragRecords[i], 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 RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\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 RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 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][i] = childRecords[i].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 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 RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\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[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\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 rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].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 var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\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 this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\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 this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\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 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 RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(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 RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n if (errorelem) {\n errorelem.remove();\n }\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\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[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\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 RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\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 }\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 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')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\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 if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\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 setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\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 if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\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()[rowIndex];\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()[rowIndex];\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[i], cell: rows[i].cells[index],\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[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\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[i] = records[i].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[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // 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[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].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 RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record) {\n var parentItem = record.parentItem;\n if (this.dropPosition === 'bottomSegment') {\n var selectedRecord = this.parent.getSelectedRecords()[0];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getSelectedRecords()[0].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 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 rowIndex = tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\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 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)) {\n dragRecords.reverse();\n }\n var _loop_2 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\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 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 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 var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_2(i);\n }\n }\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 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 this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 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 childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\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 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 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 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 currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\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 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 currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\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 RowDD.prototype.removeRecords = function (record) {\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) {\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 idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\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 }\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[j][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 }\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[i];\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[i_2][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[i_3][this.parent.idMapping] === 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 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[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\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 return;\n }\n }\n });\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 row drop settings of the TreeGrid.\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 } 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 if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\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 for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\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.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\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 for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\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 //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\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 //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\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[count].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[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], 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[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\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[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\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[count];\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 } 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.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.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 property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\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 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 setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\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 && this.isLocal()) {\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 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 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[i].rows) {\n workbook.worksheets[i].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 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 };\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 };\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 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 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 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 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 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 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 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[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].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.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) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\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 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 tObj = this.parent;\n if (args.row.rowIndex === 0 || tObj.getSelectedRecords().length > 1) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent', tObj.element.id + '_gridcontrol_outdent'], false);\n }\n else if (args['name'] !== \"rowDeselected\") {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex])) {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex]) &&\n (tObj.getCurrentViewRecords()[args.row.rowIndex].level >\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level)) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n else {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level ===\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level === 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level !== 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n }\n if (args['name'] === \"rowDeselected\") {\n if (this.parent.toolbar['includes']('Indent')) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n }\n if (args.row.rowIndex === 0 && !isNullOrUndefined(args.data.parentItem)) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var action = 'action';\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 var record = tObj.getCurrentViewRecords()[tObj.getSelectedRowIndexes()[0] - 1];\n var dropIndex = void 0;\n if (record.level > tObj.getSelectedRecords()[0].level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = tObj.getSelectedRowIndexes()[0] - 1;\n }\n this.parent[action] = 'indenting';\n this.eventTrigger('indenting', dropIndex);\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n var dropIndex = void 0;\n var parentItem = tObj.getSelectedRecords()[0].parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n this.parent[action] = 'outdenting';\n this.eventTrigger('outdenting', dropIndex);\n }\n };\n Toolbar.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var selectedRecords = 'selectedRecords';\n var selectedRows = 'selectedRows';\n this.parent[selectedRows] = this.parent.getSelectedRows();\n this.parent[selectedRecords] = this.parent.getSelectedRecords();\n var actionArgs = {\n requestType: action,\n data: this.parent.getSelectedRecords(),\n row: this.parent.getSelectedRows(),\n cancel: false\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.requestType === 'indenting') {\n _this.parent.reorderRows([_this.parent.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n else if (actionArgs.requestType === 'outdenting') {\n _this.parent.reorderRows([_this.parent.getSelectedRowIndexes()[0]], dropIndex, 'below');\n }\n }\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 parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\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[i];\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[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\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[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\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[i];\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[i].columnName) ? summary.columns[i].field :\n summary.columns[i].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[i], 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[i], 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[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\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 var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\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 this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\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 };\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 };\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 if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\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 };\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.addRecord();\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, merge } 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';\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 };\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 };\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 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 var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\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[this.addRowIndex][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[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][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()[rowObjectIndex].changes;\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[this.addRowIndex][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 this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\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 this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\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.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 actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\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 }\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 if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.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);\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()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\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 for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\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[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][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[i], 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[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].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 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 for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\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[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\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 = void 0;\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.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) {\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 for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\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 addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem])) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\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[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\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 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 };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\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 = treeObj.dataSource.adaptor;\n if ((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()[rowIndex][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[i].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.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\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[page];\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[page];\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'));\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 + '');\n }\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) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.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.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 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, args.rowIndex);\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('isEdit', false, this.parent.grid);\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 if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().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.getMovableRows().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 this.afterCellSave(args, row_1, rowIndex_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 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 _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\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 var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\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.map(function (ag) { return ag.showChildSummary === true; }).length) {\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()[rowIndex].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[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\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[j];\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 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[l].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[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\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[k].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 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') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 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[index]) && records[index].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[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).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 var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\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[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\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 (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 && (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[i][primaryKeys_2[0]]) {\n data_1[i] = 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[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].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 + '\"]';\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 + '\"]';\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 this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\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' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\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 = this.parent.grid.getCurrentViewRecords();\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('aria-rowindex'), 10);\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 ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\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) {\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 value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\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 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 = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\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 (!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 var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\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.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), 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 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 detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\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 args.detailrows[i].style.display = 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 spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].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 } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\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 } from '../utils';\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 VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\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 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 VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.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 {\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 = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\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());\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.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 }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\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 if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || this.isDataSourceChanged) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\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 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 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 else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\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 {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\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 if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\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[i]));\n }\n return cells;\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 VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 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 VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\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 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 VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\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.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\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]) {\n _this.parent.showSpinner();\n }\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 (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 _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\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 - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\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) {\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 ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\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 (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\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 if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\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 (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\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.ariaRowIndex >= 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 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 };\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 TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\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 return function (e) {\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 check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\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 = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\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 _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 } 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.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\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 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 var ret = {\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 if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\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 visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\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' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\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)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\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.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']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\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 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 //renderer.addRenderer(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 ? parentGrid.height :\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 } 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.getMovableDataRows();\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.getFrozenRightRows().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 rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\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') {\n this.parent.grid.editModule.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 } 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, getExpandStatus } 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.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\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.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\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[i], 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[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\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.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\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 var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\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 infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\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.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.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 query = query.skip(skip).take(take);\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 ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\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[i]);\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.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\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[i][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[index]);\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.getMovableRows()\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.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().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.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().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[i], 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[newRowIndex + 1]).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[newRowIndex][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","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","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","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","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","filter","e","p","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","enableImmutableMode","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","isReact","result","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","getElementsByClassName","getRowObjectFromUID","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","getRowsObject","haveChild","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","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","sortBy","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","undefined","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","cellIndex","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","portals","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","renderComplete","destroyTemplateFn","clearTemplate","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","triggerEvents","bindGridEvents","rowSelecting","rowSelected","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","toolbarClick","callBackPromise","toolbarargs","cellSelecting","cellselectingArgs","beginEdit","begineditArgs","isExpandRefresh","cellSave","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","cellsaveArgs","cellSaved","cellEdit","promise","batchAdd","beforeBatchSave","beforeBatchAdd","batchDelete","beforeBatchDelete","batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","actionBegin","dataManager","isQueryInvokedFromData","callBackPromise_2","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","selectedRecords","selectedRows","detailDataBound","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","isEdit","rowDrop","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","tooltipText","Search","prefixIcon","disabled","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","closeEdit","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","toolbarModule","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","getCellFromIndex","getColumnByField","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","stackedHeader","refreshReactColumnTemplateByUid","columnUid","rowsObj","indent","getIndentCount","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","serviceLocator","td","refreshTD","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","getVisibleRecords","visibleRecords","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","freeze","refreshScrollOffset","collapsingArgs","firstElementChild","scrollTop","getRowHeight","scrollBy","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","this_1","puniqueID_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","remoteExpand","localExpand","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","rowDragAndDropModule","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","rowDropped","rowsAdded","rowsRemoved","tObj","dropPosition","dropIndex","dropRows","orderToIndex","dropData","totalRecord","parentrow","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","getToolbar","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","errorelem","border","box","getBoundingClientRect","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","left","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","selectedRecord","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","isCollapsedStatePersist","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","state","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","pageingDetails","propname","skip","size","pageSize","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","eventTrigger","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchSave","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","totalRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","request","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","treecell","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","primaryKeys_2","selector","beginAddEdit","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","event","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","index.TreeGrid","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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"}