@syncfusion/ej2-treegrid 19.3.47 → 19.3.48

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 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 col = this.parent.grid.getColumnByField(this.parent.grid.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 { 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, 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 } 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 this.sortModule.sortColumn(columnName, direction, isMultiSort);\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 this.sortModule.removeSortColumn(field);\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 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.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 _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 _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 }\n var callBackPromise = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise.resolve(actionArgs);\n });\n return callBackPromise;\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 _this.trigger(events.actionComplete, args);\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 '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 _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 };\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 && (!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 * 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 * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record) {\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 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.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 record = this.grid.getCurrentViewRecords()[row.rowIndex];\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 * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record) {\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 _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.expandRow(null, rec);\n }\n else {\n var rec = this.getRecordDetails(level);\n var row = getObject('rows', rec);\n var record = getObject('records', rec);\n for (var i = 0; i < record.length; i++) {\n if (record[i].parentItem !== undefined) {\n var pindex = this.flatData[record[i].parentItem.index].index;\n if (this.flatData[pindex].expanded === false) {\n record.push(this.flatData[pindex]);\n this.flatData[pindex].expanded = true;\n }\n }\n this.expandRow(row[i], record[i]);\n }\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.collapseRow(null, record);\n }\n else {\n var rec = this.getRecordDetails(level);\n var rows = getObject('rows', rec);\n var records = getObject('records', rec);\n for (var i = 0; i < records.length; i++) {\n this.collapseRow(rows[i], records[i]);\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) && !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) && !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, \"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) {\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 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 if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\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 }\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 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 tObj.reorderRows([tObj.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n var index = tObj.getSelectedRowIndexes()[0];\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 tObj.reorderRows([index], dropIndex, 'below');\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.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.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.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 = args.data;\n for (var i = 0; i < data.length; i++) {\n this.deleteUniqueID(data[i].uniqueID);\n var childs = findChildrenRecords(data[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = 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 }\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 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 _super.prototype[selectVirtualRow].call(this, args);\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 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 this.parent.grid.clearSelection();\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)) {\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 {\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 } 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 };\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 };\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 /**\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 dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var visualData = dm.executeLocal(new Query().where(expanded));\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n 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 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","__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","uid","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","getColumnByField","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","setProperties","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","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","renderComplete","destroyTemplateFn","clearTemplate","afterGridRender","clipboardModule","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","triggerEvents","bindGridEvents","rowSelecting","rowSelected","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","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","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","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","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","goToPage","pageNo","pagerModule","updateExternalMessage","getCellFromIndex","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","stackedHeader","getContent","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","selectionModule","getVisibleRecords","visibleRecords","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","collapseArgs","setHeightForFrozenContent","freeze","refreshScrollOffset","collapsingArgs","firstElementChild","scrollHeight","scrollTop","getRowHeight","scrollBy","expandAtLevel","getRecordDetails","pindex","collapseAtLevel","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","remoteExpand","localExpand","sHeight","clientHeight","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","primaryKeyField","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","document","getElementById","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","this_1","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","info","virtualInfo","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","indent","excelRow","excelrowobj","rowObj","filtercolumnlength","Boolean","rowlength","excelRows","rowlevel","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","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","selectedRecords","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","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","serviceLocator","rowRenderer","RowRenderer","childRowObjects","childRowElements","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 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 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 col = this.parent.grid.getColumnByField(this.parent.grid.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 { 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, 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 } 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 this.sortModule.sortColumn(columnName, direction, isMultiSort);\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 this.sortModule.removeSortColumn(field);\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 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.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 _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 _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 ? _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise.resolve(actionArgs);\n });\n return callBackPromise;\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 _this.trigger(events.actionComplete, args);\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 '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 };\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 && (!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 * 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 * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record) {\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 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.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 record = this.grid.getCurrentViewRecords()[row.rowIndex];\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 * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record) {\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 _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.expandRow(null, rec);\n }\n else {\n var rec = this.getRecordDetails(level);\n var row = getObject('rows', rec);\n var record = getObject('records', rec);\n for (var i = 0; i < record.length; i++) {\n if (record[i].parentItem !== undefined) {\n var pindex = this.flatData[record[i].parentItem.index].index;\n if (this.flatData[pindex].expanded === false) {\n record.push(this.flatData[pindex]);\n this.flatData[pindex].expanded = true;\n }\n }\n this.expandRow(row[i], record[i]);\n }\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.collapseRow(null, record);\n }\n else {\n var rec = this.getRecordDetails(level);\n var rows = getObject('rows', rec);\n var records = getObject('records', rec);\n for (var i = 0; i < records.length; i++) {\n this.collapseRow(rows[i], records[i]);\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) && !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) && !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, \"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 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 if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\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 }\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 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 tObj.reorderRows([tObj.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n var index = tObj.getSelectedRowIndexes()[0];\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 tObj.reorderRows([index], dropIndex, 'below');\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.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.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.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 = args.data;\n for (var i = 0; i < data.length; i++) {\n this.deleteUniqueID(data[i].uniqueID);\n var childs = findChildrenRecords(data[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = 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 }\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 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 _super.prototype[selectVirtualRow].call(this, args);\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 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 this.parent.grid.clearSelection();\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)) {\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 {\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 } 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 };\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 };\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 /**\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 dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var visualData = dm.executeLocal(new Query().where(expanded));\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n 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 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","__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","uid","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","getColumnByField","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","setProperties","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","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","renderComplete","destroyTemplateFn","clearTemplate","afterGridRender","clipboardModule","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","triggerEvents","bindGridEvents","rowSelecting","rowSelected","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","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","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","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","goToPage","pageNo","pagerModule","updateExternalMessage","getCellFromIndex","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","stackedHeader","getContent","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","selectionModule","getVisibleRecords","visibleRecords","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","collapseArgs","setHeightForFrozenContent","freeze","refreshScrollOffset","collapsingArgs","firstElementChild","scrollHeight","scrollTop","getRowHeight","scrollBy","expandAtLevel","getRecordDetails","pindex","collapseAtLevel","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","remoteExpand","localExpand","sHeight","clientHeight","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","primaryKeyField","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","this_1","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","info","virtualInfo","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","indent","excelRow","excelrowobj","rowObj","filtercolumnlength","Boolean","rowlength","excelRows","rowlevel","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","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","selectedRecords","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","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","serviceLocator","rowRenderer","RowRenderer","childRowObjects","childRowElements","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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"}