@syncfusion/ej2-treegrid 20.2.46 → 20.2.49

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.umd.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/base/constant.js","../src/treegrid/actions/clipboard.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"],"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.filter(function (item) { return !item.isSummaryRow; });\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[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 if (!control.enableImmutableMode && parentData.childRecords.length === parentData['Children'].length) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[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 if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the textwrap behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n","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","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 stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[stackedHeader] ? this.parent[columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = 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 && (!record.hasFilteredChildRecords || isNullOrUndefined(record.hasFilteredChildRecords)) && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check') {\n record.checkboxState = 'check';\n }\n else if ((checkChildRecords === 0 && indeter === 0) || (checkChildRecords === 0 && record.hasFilteredChildRecords && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check')) {\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 && record.childRecords.length > 0) {\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, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\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 && !parentrec[0].isSummaryRow) {\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('data-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 /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n var treecell = _this.parent.getRows()[j].cells[cellIndex];\n _this.cellRender({ data: rowsObj[j].data, cell: treecell, column: cell.column });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if ((!isNullOrUndefined(currentData[this.parent.childMapping]) && !isCountRequired(this.parent)) ||\n ((currentData[this.parent.hasChildMapping]) && isCountRequired(this.parent) && (this.parent.initialRender || isNullOrUndefined(this.parent['dataResults'].result)))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\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[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\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, merge } 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, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || freezePresent.length) {\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 var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\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.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.IsExpandCollapseClicked = 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 };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowDeselecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowDeselecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[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 this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[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, this.columnModel.length - 1);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (this.initialRender && !isNullOrUndefined(treeColumn) && this.enablePersistence && prop === 'edit') {\n gridColumn[prop] = treeGridColumn[prop] = treeColumn[prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n /**\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 this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n 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 TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\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 var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * 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 gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var deepMerge = 'deepMerge';\n this[deepMerge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n merge(this.columns, this.columnModel);\n }\n this[deepMerge] = 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 if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, true);\n }\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('data-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, false);\n }\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 TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[i][this.expandStateMapping] = state;\n editAction({ value: totalRecords[i], action: 'edit' }, this, this.isSelfReference, totalRecords[i].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[i], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('data-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return ((r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.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) && childRecords[i].childRecords.length > 0) && (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 * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\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 /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n var index = this.parent.getRowByIndex(fromIndexes[i]).rowIndex;\n data[i] = this.parent.getCurrentViewRecords()[index];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\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 this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.selectedRow.getAttribute('data-rowindex'), 10) - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.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 if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.parent.getRows()[dropIndex].getAttribute('data-rowindex'), 10);\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'child');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n }\n else if (actionArgs.action === 'outdenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'below');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\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)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex;\n if (this.parent.enableVirtualization) {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n else {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\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 if (this.parent.enableVirtualization) {\n rowTop = rowEle.getBoundingClientRect().top;\n }\n else {\n rowTop = rowPositionHeight + contentHeight + roundOff;\n }\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.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n 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 var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n 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('data-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[rowIndex];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[selectedItemIndex].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 primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n if (this.parent.enableVirtualization) {\n var index = this.parent.getRowByIndex(args.dropIndex).rowIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[index];\n }\n else {\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = 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 delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n draggedRecord_2.level = droppedRecord.level;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(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 || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var 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 if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n if ((!this.parent.enableCollapseAll || !this.parent.initialRender && isNullOrUndefined(this.parent['dataResults']['result']))\n && parent['expanded'] === false && this.parent.getVisibleRecords().indexOf(record) === -1) {\n this.parent.expandRow(this.parent.getRows()[parent['index']], parent);\n }\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.result.length;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((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 this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var tObj = this.parent;\n var indentElement;\n var outdentElement;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var 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 if (this.parent.allowRowDragAndDrop && data[d].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n childSort.splice(dragdIndex, 1);\n var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\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 var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\n if ((indent || outdent) && !isNullOrUndefined(selectedrow)) {\n var targetElement = args.event.target.closest('td');\n if (isNullOrUndefined(targetElement) || (!isNullOrUndefined(targetElement) && !targetElement.classList.contains('e-rowcell'))) {\n indent.style.display = outdent.style.display = 'none';\n }\n else {\n if (selectedrow.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indent.style.display = outdent.style.display = 'none';\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[selectedrow.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) && this.parent.editSettings.mode !== 'Batch'\n && this.parent.editSettings.mode !== 'Cell') {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === 0) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n outdent.style.display = 'none';\n }\n else {\n outdent.style.display = 'block';\n }\n }\n }\n }\n }\n else {\n if (tObj.grid.isEdit && isNullOrUndefined(selectedrow)) {\n indent.style.display = 'none';\n outdent.style.display = 'none';\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.editModule['isAddedRowByContextMenu'] = true;\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, 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';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\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 if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && (this.parent.grid.selectedRowIndex === -1 || this.parent.editModule['batchEditModule'].isAdd)) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.batchRecords.length ? this.batchRecords[this.selectedIndex]\n : this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n 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 if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n var newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('data-rowindex'), 10);\n this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);\n }\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n 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('data-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('data-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('data-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('data-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n if (index !== -1) {\n data.splice(index, 1);\n }\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n for (var i_1 = 0; i_1 < addRecords.length; i_1++) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[i_1].getAttribute('data-rowindex'), 10);\n data.splice(index_1, 0, addRecords[i_1]);\n }\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[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 if (addRecords.length > 1 && this.parent.editModule['isAddedRowByContextMenu']) {\n var rowPosition = this.parent.editSettings.newRowPosition;\n this.parent.editSettings.newRowPosition = this.parent.editModule['previousNewRowPosition'];\n this.parent.editModule['previousNewRowPosition'] = rowPosition;\n }\n addRecords[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 (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\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_2 = 0; i_2 < data.length; i_2++) {\n data[i_2][index] = i_2;\n setValue('uniqueIDCollection.' + data[i_2][uniqueID] + '.index', i_2, this.parent);\n if (!data[i_2][level]) {\n this.parent.parentData.push(data[i_2]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n this.parent.editModule['isAddedRowByContextMenu'] = false;\n }\n };\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 if (this.parent.getSelectedRows().length) {\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n else {\n args[index] = this.batchIndex;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n this.isAddedRowByContextMenu = false;\n 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.dataRowIndex = +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('data-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('data-rowindex');\n tr.setAttribute('data-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('data-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 (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[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 if (!isNullOrUndefined(data2)) {\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 };\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('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-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 if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1 && this['isAddedRowByMethod'] && !this.isAddedRowByContextMenu) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n var batchAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[i].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[i];\n }\n }\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[data-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[data-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 if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = void 0;\n if (this.parent.editSettings.mode === 'Batch' && this['isAddedRowByMethod'] && !isNullOrUndefined(this.addRowIndex)) {\n currentData = this.batchEditModule['batchRecords'];\n }\n else {\n currentData = this.parent.grid.getCurrentViewRecords();\n }\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('data-rowindex'), 10);\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-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('data-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 && (this.startIndex === -1 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[data-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, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-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, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n }\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 var currentViewData = this.parent.currentViewData;\n var indexValue = 'index';\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 if (currentViewData.length && ((currentViewData[0][indexValue] - this.startIndex) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] - (this.parent.pageSettings.pageSize / 2);\n this.endIndex = this.startIndex + this.parent.pageSettings.pageSize;\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / 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('data-rowindex');\n }\n if (firsttdinx === 0) {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\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 (currentViewData.length && this.startIndex > currentViewData[0][indexValue] &&\n ((this.startIndex - currentViewData[0][indexValue]) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] + (this.parent.pageSettings.pageSize / 2);\n }\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 if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.dataRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n if (this.parent.grid.infiniteScrollModule['isInitialRender'] && !this.parent.initialRender) {\n this.parent.grid.pageSettings.currentPage = 1;\n }\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.grid.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.grid.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).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"],"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","filter","item","isSummaryRow","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","currentViewRecords","getCurrentViewRecords","extend","newRowPosition","unshift","primaryKeys","currentdata","addAction","Array","k","_loop_1","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","e","p","enableImmutableMode","removeChildRecords","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","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","rowDataBound","queryCellInfo","beforeDataBound","actionBegin","actionComplete","rowSelected","checkboxChange","rowDeselected","toolbarClick","beforeExcelExport","beforePdfExport","collapsed","remoteExpand","localPagedExpandCollapse","pagingActions","printGridInit","contextMenuOpen","contextMenuClick","crudAction","beginEdit","beginAdd","recordDoubleClick","cellSave","cellSaved","cellEdit","batchDelete","batchCancel","batchAdd","beforeBatchDelete","beforeBatchAdd","beforeBatchSave","batchSave","keyPressed","doubleTap","virtualActionArgs","dataListener","indexModifier","beforeStartEdit","beforeBatchCancel","detailDataBound","rowDragStartHelper","rowsAdd","rowsRemove","rowdraging","rowDropped","rowDeselecting","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","copyContent","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","events.checkboxChange","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","indeter","checkChildRecords","checkBoxRecord","hasFilteredChildRecords","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","events.printGridInit","printTreeGrid","printGrid","gridElement","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","templateFn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","portals","isReact","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","undefined","rowsObj","getRowsObject","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","serviceLocator","td","getCellFromIndex","refreshTD","treecell","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","events.remoteExpand","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","haveChild","events.actionComplete","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","events.expanded","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","rowDragAndDropModule","dragdIndex","dropdIndex","sortArgs","temp","paging","printMode","actArgs","events.pagingActions","isCollapsedStatePersist","actualResults","dataResult","events.crudAction","events.batchSave","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","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","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","freezePresent","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","refreshToolbarItems","renderComplete","destroyTemplateFn","toolbarElement","toolbarModule","getToolbar","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","templateInstance","triggerEvents","IsExpandCollapseClicked","bindGridEvents","rowSelecting","events.rowDeselecting","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","events.rowSelected","events.rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","callBackPromise","events.toolbarClick","toolbarargs","cellSelecting","cellselectingArgs","events.beginEdit","begineditArgs","isExpandRefresh","events.dataStateChange","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","events.cellSave","cellsaveArgs","events.cellSaved","promise","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","dataManager","isQueryInvokedFromData","callBackPromise_2","events.actionBegin","updateTreeGridModel","events.beginAdd","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","rowDragStart","rowDrag","isEdit","events.rowdraging","rowDrop","events.rowDropped","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","enablePersistence","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","currentObject","val","ignoreInArrays","addOnPersist","ignoreOnColumn","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","freeze","refreshScrollOffset","collapsingArgs","events.collapsed","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","puniqueID_1","this_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","localExpand","events.localPagedExpandCollapse","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateRowAndCellElements","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","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","events.rowsAdd","rowsAdded","events.rowsRemove","rowsRemoved","tObj","dropRows","orderToIndex","dropData","totalRecord","parentrow","request","selectedItemIndex","selectedItem","selectedRow","selectedRecord","record_1","eventTrigger","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","islastRowIndex","isEmptyRow","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","getBoundingClientRect","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","events.dataListener","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","event.beforeExcelExport","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","event.beforePdfExport","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","updatePageSize","pageingDetails","updateSize","gridPagerModule","pageSizes","pagerObj","pagerdropdownModule","getLocalizedLabel","pageSize","propname","skip","size","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","indentEle","outdentEle","selectedrow","isCheckBoxSelection","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","event","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","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","newlyAddedRecords","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleterecords","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","rowPosition","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","isAddedRowByContextMenu","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","events.keyPressed","lastCellTab","contentready","editActionEvents","events.doubleTap","gridDblClick","customCellSave","savePreviousRowPosition","events.beforeStartEdit","events.beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","dataRowIndex","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","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","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","newlyAddedRecord","seletedRow","beginAddEdit","primaryKeys_2","selector","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","events.virtualActionArgs","virtualOtherAction","events.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","initialRowTop","gridTop","containerRect","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","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","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","actions","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow"],"mappings":"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ACI49B,WACDpf,EAAShjB,UAAW,iBAAa,GACpCwE,IACI49B,WACDpf,EAAShjB,UAAW,gBAAY,GACnCwE,IACI49B,WACDpf,EAAShjB,UAAW,iBAAa,GACpCwE,IACI49B,WACDpf,EAAShjB,UAAW,mBAAe,GACtCwE,IACI49B,WACDpf,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,iBAAa,GACpCwE,IACI49B,WACDpf,EAAShjB,UAAW,gBAAY,GACnCwE,IACI49B,WACDpf,EAAShjB,UAAW,mBAAe,GACtCwE,IACI49B,WACDpf,EAAShjB,UAAW,mBAAe,GACtCwE,IACI49B,WACDpf,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,yBAAqB,GAC5CwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,gBAAY,GACnCwE,IACI49B,WACDpf,EAAShjB,UAAW,qBAAiB,GACxCwE,IACI49B,WACDpf,EAAShjB,UAAW,iBAAa,GACpCwE,IACI49B,WACDpf,EAAShjB,UAAW,yBAAqB,GAC5CwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,yBAAqB,GAC5CwE,IACI49B,WACDpf,EAAShjB,UAAW,oBAAgB,GACvCwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,qBAAiB,GACxCwE,IACIc,YAAS,IACV0d,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,oBAAgB,GACvCwE,IACI49B,WACDpf,EAAShjB,UAAW,mBAAe,GACtCwE,IACI49B,WACDpf,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,qBAAiB,GACxCwE,IACI49B,WACDpf,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,qBAAiB,GACxCwE,IACI49B,WACDpf,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,oBAAgB,GACvCwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,mBAAe,GACtCwE,IACI49B,WACDpf,EAAShjB,UAAW,gBAAY,GACnCwE,IACI49B,WACDpf,EAAShjB,UAAW,kBAAc,GACrCwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,kBAAc,GACrCwE,IACI49B,WACDpf,EAAShjB,UAAW,kBAAc,GACrCwE,IACI49B,WACDpf,EAAShjB,UAAW,sBAAkB,GACzCwE,IACI49B,WACDpf,EAAShjB,UAAW,qBAAiB,GACxCwE,IACI49B,WACDpf,EAAShjB,UAAW,mBAAe,GACtCwE,IACI49B,WACDpf,EAAShjB,UAAW,oBAAgB,GACvCwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,uBAAmB,GAC1CwE,IACI49B,WACDpf,EAAShjB,UAAW,wBAAoB,GAC3CwE,IACI49B,WACDpf,EAAShjB,UAAW,kBAAc,GACrCwE,IACI49B,WACDpf,EAAShjB,UAAW,mBAAe,GACtCwE,IACI49B,WACDpf,EAAShjB,UAAW,eAAW,GAClCwE,IACI49B,WACDpf,EAAShjB,UAAW,oBAAgB,GACvCwE,IACI49B,WACDpf,EAAShjB,UAAW,0BAAsB,GAC7CwE,IACI49B,WACDpf,EAAShjB,UAAW,eAAW,GAClCwE,IACIc,YAAU,IACX0d,EAAShjB,UAAW,wBAAoB,GAC3CwE,IACI09B,aAAYtuB,KACboP,EAAShjB,UAAW,yBAAqB,GAC5CwE,IACIc,YAAS,IACV0d,EAAShjB,UAAW,wBAAoB,GAC3CwE,IACIc,YAAS,IACV0d,EAAShjB,UAAW,sBAAkB,GACz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"}
1
+ {"version":3,"file":"ej2-treegrid.umd.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/base/constant.js","../src/treegrid/actions/clipboard.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"],"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.filter(function (item) { return !item.isSummaryRow; });\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[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 if (!control.enableImmutableMode && parentData.childRecords.length === parentData['Children'].length) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[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 if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the textwrap behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n","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","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 stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[stackedHeader] ? this.parent[columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = 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 && (!record.hasFilteredChildRecords || isNullOrUndefined(record.hasFilteredChildRecords)) && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check') {\n record.checkboxState = 'check';\n }\n else if ((checkChildRecords === 0 && indeter === 0) || (checkChildRecords === 0 && record.hasFilteredChildRecords && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check')) {\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 //This property used to maintain the check state of the currentview data after clear filtering\n var multiFilterCheckState = false;\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 multiFilterCheckState = true;\n }\n else {\n multiFilterCheckState = false;\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 if (multiFilterCheckState) {\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 && record.childRecords.length > 0) {\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, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\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 && !parentrec[0].isSummaryRow) {\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('data-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 /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n var treecell = _this.parent.getRows()[j].cells[cellIndex];\n _this.cellRender({ data: rowsObj[j].data, cell: treecell, column: cell.column });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if ((!isNullOrUndefined(currentData[this.parent.childMapping]) && !isCountRequired(this.parent)) ||\n ((currentData[this.parent.hasChildMapping]) && isCountRequired(this.parent) && (this.parent.initialRender || isNullOrUndefined(this.parent['dataResults'].result)))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\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[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\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, merge } 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, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || freezePresent.length) {\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 var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\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.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.IsExpandCollapseClicked = 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 };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowDeselecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowDeselecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (args.action === 'filter') {\n if (_this.filterModule['currentFilterObject'] !== '' && _this.enableVirtualization && !_this.initialRender) {\n _this.expandAll();\n }\n }\n if (args.requestType === 'searching') {\n if (_this.searchSettings.key !== '' && _this.enableVirtualization && !_this.initialRender) {\n _this.expandAll();\n }\n }\n if (args.action === 'clearFilter' && _this.enableCollapseAll) {\n _this.collapseAll();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[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 this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[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, this.columnModel.length - 1);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (this.initialRender && !isNullOrUndefined(treeColumn) && this.enablePersistence && prop === 'edit') {\n gridColumn[prop] = treeGridColumn[prop] = treeColumn[prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n /**\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 this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n 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 TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\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 var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * 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 gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var deepMerge = 'deepMerge';\n this[deepMerge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n merge(this.columns, this.columnModel);\n }\n this[deepMerge] = 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 if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, true);\n }\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('data-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, false);\n }\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 TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[i][this.expandStateMapping] = state;\n editAction({ value: totalRecords[i], action: 'edit' }, this, this.isSelfReference, totalRecords[i].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[i], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('data-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return ((r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.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) && childRecords[i].childRecords.length > 0) && (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 * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\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 /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n var index = this.parent.getRowByIndex(fromIndexes[i]).rowIndex;\n data[i] = this.parent.getCurrentViewRecords()[index];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\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 this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.selectedRow.getAttribute('data-rowindex'), 10) - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.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 if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.parent.getRows()[dropIndex].getAttribute('data-rowindex'), 10);\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'child');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n }\n else if (actionArgs.action === 'outdenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'below');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\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)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex;\n if (this.parent.enableVirtualization) {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n else {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\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 if (this.parent.enableVirtualization) {\n rowTop = rowEle.getBoundingClientRect().top;\n }\n else {\n rowTop = rowPositionHeight + contentHeight + roundOff;\n }\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.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n 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 var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n 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('data-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[rowIndex];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[selectedItemIndex].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 primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n if (this.parent.enableVirtualization) {\n var index = this.parent.getRowByIndex(args.dropIndex).rowIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[index];\n }\n else {\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = 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 delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n draggedRecord_2.level = droppedRecord.level;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(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 || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var 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 if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.result.length;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((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 this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n if (!isNullOrUndefined(toolbarElement)) {\n var tObj = this.parent;\n var indentElement = void 0;\n var outdentElement = void 0;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var 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 if (this.parent.allowRowDragAndDrop && data[d].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n childSort.splice(dragdIndex, 1);\n var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\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 var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\n if ((indent || outdent) && !isNullOrUndefined(selectedrow)) {\n var targetElement = args.event.target.closest('td');\n if (isNullOrUndefined(targetElement) || (!isNullOrUndefined(targetElement) && !targetElement.classList.contains('e-rowcell'))) {\n indent.style.display = outdent.style.display = 'none';\n }\n else {\n if (selectedrow.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indent.style.display = outdent.style.display = 'none';\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[selectedrow.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) && this.parent.editSettings.mode !== 'Batch'\n && this.parent.editSettings.mode !== 'Cell') {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === 0) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n outdent.style.display = 'none';\n }\n else {\n outdent.style.display = 'block';\n }\n }\n }\n }\n }\n else {\n if (tObj.grid.isEdit && isNullOrUndefined(selectedrow)) {\n indent.style.display = 'none';\n outdent.style.display = 'none';\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.editModule['isAddedRowByContextMenu'] = true;\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, 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';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\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 if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && (this.parent.grid.selectedRowIndex === -1 || this.parent.editModule['batchEditModule'].isAdd)) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.batchRecords.length ? this.batchRecords[this.selectedIndex]\n : this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n 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 if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n var newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('data-rowindex'), 10);\n this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);\n }\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n 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('data-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('data-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('data-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('data-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n if (index !== -1) {\n data.splice(index, 1);\n }\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n for (var i_1 = 0; i_1 < addRecords.length; i_1++) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[i_1].getAttribute('data-rowindex'), 10);\n data.splice(index_1, 0, addRecords[i_1]);\n }\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[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 if (addRecords.length > 1 && this.parent.editModule['isAddedRowByContextMenu']) {\n var rowPosition = this.parent.editSettings.newRowPosition;\n this.parent.editSettings.newRowPosition = this.parent.editModule['previousNewRowPosition'];\n this.parent.editModule['previousNewRowPosition'] = rowPosition;\n }\n addRecords[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 (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\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_2 = 0; i_2 < data.length; i_2++) {\n data[i_2][index] = i_2;\n setValue('uniqueIDCollection.' + data[i_2][uniqueID] + '.index', i_2, this.parent);\n if (!data[i_2][level]) {\n this.parent.parentData.push(data[i_2]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n this.parent.editModule['isAddedRowByContextMenu'] = false;\n }\n };\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 if (this.parent.getSelectedRows().length) {\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n else {\n args[index] = this.batchIndex;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n this.isAddedRowByContextMenu = false;\n 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.dataRowIndex = +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('data-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('data-rowindex');\n tr.setAttribute('data-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('data-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 (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[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 if (!isNullOrUndefined(data2)) {\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 };\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('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-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 if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1 && this['isAddedRowByMethod'] && !this.isAddedRowByContextMenu) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n var batchAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[i].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[i];\n }\n }\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[data-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[data-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 if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = void 0;\n if (this.parent.editSettings.mode === 'Batch' && this['isAddedRowByMethod'] && !isNullOrUndefined(this.addRowIndex)) {\n currentData = this.batchEditModule['batchRecords'];\n }\n else {\n currentData = this.parent.grid.getCurrentViewRecords();\n }\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('data-rowindex'), 10);\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-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('data-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 && (this.startIndex === -1 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[data-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, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-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, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n }\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 var currentViewData = this.parent.currentViewData;\n var indexValue = 'index';\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 if (currentViewData.length && ((currentViewData[0][indexValue] - this.startIndex) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] - (this.parent.pageSettings.pageSize / 2);\n this.endIndex = this.startIndex + this.parent.pageSettings.pageSize;\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / 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('data-rowindex');\n }\n if (firsttdinx === 0) {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\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 (currentViewData.length && this.startIndex > currentViewData[0][indexValue] &&\n ((this.startIndex - currentViewData[0][indexValue]) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] + (this.parent.pageSettings.pageSize / 2);\n }\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 if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.dataRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n if (this.parent.grid.infiniteScrollModule['isInitialRender'] && !this.parent.initialRender) {\n this.parent.grid.pageSettings.currentPage = 1;\n }\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.grid.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.grid.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).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"],"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","filter","item","isSummaryRow","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","currentViewRecords","getCurrentViewRecords","extend","newRowPosition","unshift","primaryKeys","currentdata","addAction","Array","k","_loop_1","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","e","p","enableImmutableMode","removeChildRecords","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","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","rowDataBound","queryCellInfo","beforeDataBound","actionBegin","actionComplete","rowSelected","checkboxChange","rowDeselected","toolbarClick","beforeExcelExport","beforePdfExport","collapsed","remoteExpand","localPagedExpandCollapse","pagingActions","printGridInit","contextMenuOpen","contextMenuClick","crudAction","beginEdit","beginAdd","recordDoubleClick","cellSave","cellSaved","cellEdit","batchDelete","batchCancel","batchAdd","beforeBatchDelete","beforeBatchAdd","beforeBatchSave","batchSave","keyPressed","doubleTap","virtualActionArgs","dataListener","indexModifier","beforeStartEdit","beforeBatchCancel","detailDataBound","rowDragStartHelper","rowsAdd","rowsRemove","rowdraging","rowDropped","rowDeselecting","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","copyContent","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","events.checkboxChange","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","indeter","checkChildRecords","checkBoxRecord","hasFilteredChildRecords","checkAll","multiFilterCheckState","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","events.printGridInit","printTreeGrid","printGrid","gridElement","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","templateFn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","portals","isReact","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","undefined","rowsObj","getRowsObject","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","serviceLocator","td","getCellFromIndex","refreshTD","treecell","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","events.remoteExpand","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","haveChild","events.actionComplete","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","events.expanded","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","rowDragAndDropModule","dragdIndex","dropdIndex","sortArgs","temp","paging","printMode","actArgs","events.pagingActions","isCollapsedStatePersist","actualResults","dataResult","events.crudAction","events.batchSave","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","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","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","freezePresent","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","refreshToolbarItems","renderComplete","destroyTemplateFn","toolbarElement","toolbarModule","getToolbar","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","templateInstance","triggerEvents","IsExpandCollapseClicked","bindGridEvents","rowSelecting","events.rowDeselecting","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","events.rowSelected","events.rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","callBackPromise","events.toolbarClick","toolbarargs","cellSelecting","cellselectingArgs","events.beginEdit","begineditArgs","isExpandRefresh","events.dataStateChange","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","events.cellSave","cellsaveArgs","events.cellSaved","promise","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","dataManager","isQueryInvokedFromData","callBackPromise_2","events.actionBegin","updateTreeGridModel","events.beginAdd","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","rowDragStart","rowDrag","isEdit","events.rowdraging","rowDrop","events.rowDropped","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","enablePersistence","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","currentObject","val","ignoreInArrays","addOnPersist","ignoreOnColumn","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","freeze","refreshScrollOffset","collapsingArgs","events.collapsed","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","puniqueID_1","this_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","localExpand","events.localPagedExpandCollapse","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateRowAndCellElements","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","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","events.rowsAdd","rowsAdded","events.rowsRemove","rowsRemoved","tObj","dropRows","orderToIndex","dropData","totalRecord","parentrow","request","selectedItemIndex","selectedItem","selectedRow","selectedRecord","record_1","eventTrigger","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","islastRowIndex","isEmptyRow","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","getBoundingClientRect","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","events.dataListener","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","event.beforeExcelExport","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","event.beforePdfExport","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","updatePageSize","pageingDetails","updateSize","gridPagerModule","pageSizes","pagerObj","pagerdropdownModule","getLocalizedLabel","pageSize","propname","skip","size","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","indentEle","outdentEle","selectedrow","isCheckBoxSelection","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","event","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","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","newlyAddedRecords","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleterecords","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","rowPosition","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","isAddedRowByContextMenu","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","events.keyPressed","lastCellTab","contentready","editActionEvents","events.doubleTap","gridDblClick","customCellSave","savePreviousRowPosition","events.beforeStartEdit","events.beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","dataRowIndex","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","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","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","newlyAddedRecord","seletedRow","beginAddEdit","primaryKeys_2","selector","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","events.virtualActionArgs","virtualOtherAction","events.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","initialRowTop","gridTop","containerRect","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","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","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","actions","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow"],"mappings":"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ACI29B,aAAYnf,KACbC,EAASjjB,UAAW,8BAA0B,GACjDwE,IACIc,WAAS,QACV2d,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,eAAW,GAClCwE,IACI69B,WACDpf,EAASjjB,UAAW,YAAQ,GAC/BwE,IACI69B,WACDpf,EAASjjB,UAAW,iBAAa,GACpCwE,IACI69B,WACDpf,EAASjjB,UAAW,gBAAY,GACnCwE,IACI69B,WACDpf,EAASjjB,UAAW,kBAAc,GACrCwE,IACI69B,WACDpf,EAASjjB,UAAW,iBAAa,GACpCwE,IACI69B,WACDpf,EAASjjB,UAAW,gBAAY,GACnCwE,IACI69B,WACDpf,EAASjjB,UAAW,iBAAa,GACpCwE,IACI69B,WACDpf,EAASjjB,UAAW,mBAAe,GACtCwE,IACI69B,WACDpf,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,iBAAa,GACpCwE,IACI69B,WACDpf,EAASjjB,UAAW,gBAAY,GACnCwE,IACI69B,WACDpf,EAASjjB,UAAW,mBAAe,GACtCwE,IACI69B,WACDpf,EAASjjB,UAAW,mBAAe,GACtCwE,IACI69B,WACDpf,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,yBAAqB,GAC5CwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,gBAAY,GACnCwE,IACI69B,WACDpf,EAASjjB,UAAW,qBAAiB,GACxCwE,IACI69B,WACDpf,EAASjjB,UAAW,iBAAa,GACpCwE,IACI69B,WACDpf,EAASjjB,UAAW,yBAAqB,GAC5CwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,yBAAqB,GAC5CwE,IACI69B,WACDpf,EAASjjB,UAAW,oBAAgB,GACvCwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,qBAAiB,GACxCwE,IACIc,YAAS,IACV2d,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,oBAAgB,GACvCwE,IACI69B,WACDpf,EAASjjB,UAAW,mBAAe,GACtCwE,IACI69B,WACDpf,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,qBAAiB,GACxCwE,IACI69B,WACDpf,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,qBAAiB,GACxCwE,IACI69B,WACDpf,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,oBAAgB,GACvCwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,mBAAe,GACtCwE,IACI69B,WACDpf,EAASjjB,UAAW,gBAAY,GACnCwE,IACI69B,WACDpf,EAASjjB,UAAW,kBAAc,GACrCwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,kBAAc,GACrCwE,IACI69B,WACDpf,EAASjjB,UAAW,kBAAc,GACrCwE,IACI69B,WACDpf,EAASjjB,UAAW,sBAAkB,GACzCwE,IACI69B,WACDpf,EAASjjB,UAAW,qBAAiB,GACxCwE,IACI69B,WACDpf,EAASjjB,UAAW,mBAAe,GACtCwE,IACI69B,WACDpf,EAASjjB,UAAW,oBAAgB,GACvCwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,uBAAmB,GAC1CwE,IACI69B,WACDpf,EAASjjB,UAAW,wBAAoB,GAC3CwE,IACI69B,WACDpf,EAASjjB,UAAW,kBAAc,GACrCwE,IACI69B,WACDpf,EAASjjB,UAAW,mBAAe,GACtCwE,IACI69B,WACDpf,EAASjjB,UAAW,eAAW,GAClCwE,IACI69B,W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"}