@syncfusion/ej2-treegrid 20.1.59 → 20.1.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.js","../../src/treegrid/models/filter-settings.js","../../src/treegrid/models/textwrap-settings.js","../../src/treegrid/actions/logger.js","../../src/treegrid/actions/clipboard.js","../../src/treegrid/base/constant.js","../../src/treegrid/actions/selection.js","../../src/treegrid/actions/freeze-column.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/column-chooser.js","../../src/treegrid/actions/infinite-scroll.js","../../src/global.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords;\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n if (!control.enableImmutableMode) {\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var 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 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import { 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 * 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) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('aria-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\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 }\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]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"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 } 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 { Freeze } from '../actions/freeze-column';\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.freezeModule = new Freeze(this);\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || this.freezeModule) {\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.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var 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, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n 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 merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n 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('aria-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n 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('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && 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 data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = 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 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 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 _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n else if (actionArgs.action === 'outdenting') {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\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 = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n 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('aria-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 this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n 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 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 (parent['expanded'] === false && this.parent.getVisibleRecords().indexOf(record) === -1 && isNullOrUndefined(this.parent['dataResults']['action'])) {\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 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 if (indent || outdent) {\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\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)) {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) {\n indent.style.display = 'block';\n }\n if (selectedItem.level === 0) {\n outdent.style.display = 'none';\n }\n if (selectedItem.level !== 0) {\n outdent.style.display = 'block';\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indent.style.display = 'none';\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdent.style.display = 'none';\n }\n }\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.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']) && this.parent.grid.selectedRowIndex === -1) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = 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 }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[0].getAttribute('aria-rowindex'), 10);\n data.splice(index_1, 0, addRecords[0]);\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 for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem]) &&\n (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_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('aria-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('aria-rowindex');\n tr.setAttribute('aria-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n 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('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.editModule['isAddedRowByMethod']) {\n var args = {\n action: 'add',\n data: this.parent.getBatchChanges()['addedRecords'][0],\n index: index,\n seletedRow: 0\n };\n this.parent.editModule.beginAddEdit(args);\n this.parent.editModule.batchEditModule['batchAddRowRecord'].push(this.parent.editModule.batchEditModule['addRowRecord']);\n this.parent.editModule.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = this.parent.grid.getCurrentViewRecords();\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('aria-rowindex'), 10);\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction());\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && this.startIndex === -1)) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.ariaRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || 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 { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n","import * as index from './index';\nindex.TreeGrid.Inject(index.Filter, index.Page, index.Sort, index.Reorder, index.Toolbar, index.Aggregate, index.Resize, index.ColumnMenu, index.ExcelExport, index.PdfExport, index.CommandColumn, index.ContextMenu, index.Edit, index.Selection, index.VirtualScroll, index.DetailRow, index.RowDD, index.Freeze, index.ColumnChooser, index.Logger, index.InfiniteScroll);\nexport * from './index';\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","addAction","Array","extend","newRowPosition","k","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","filter","e","p","enableImmutableMode","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Freeze","FreezeColumn","rowExpandCollapse","dataBoundArg","dblClickHandler","frozenRightRows","movableRows","frozenrows","freeze","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","getFrozenRightRows","detailrows","rData","getRowObjectFromUID","queryselector","cRow","i_1","allowEditOnDblClick","startEdit","freezeModule","addClass","element","getElementsByClassName","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","id","isReact","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","undefined","rowsObj","getRowsObject","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","serviceLocator","td","getCellFromIndex","refreshTD","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","haveChild","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","sortArgs","temp","paging","printMode","actArgs","actualResults","dataResult","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","templateFn","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","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","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","portals","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","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","triggerEvents","bindGridEvents","rowSelecting","rowSelected","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","toolbarClick","callBackPromise","toolbarargs","cellSelecting","cellselectingArgs","beginEdit","begineditArgs","isExpandRefresh","cellSave","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","cellsaveArgs","cellSaved","cellEdit","promise","batchAdd","beforeBatchSave","beforeBatchAdd","batchDelete","beforeBatchDelete","batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","actionBegin","dataManager","isQueryInvokedFromData","callBackPromise_2","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","detailDataBound","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","isEdit","rowDrop","registeredTemplate","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","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","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","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","refreshScrollOffset","collapsingArgs","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","this_1","puniqueID_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","remoteExpand","localExpand","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","freezeRightRows","rows_2","getMovableRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","eRows","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","rowDragAndDropModule","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","rowDropped","rowsAdded","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","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","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","getBoundingClientRect","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","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","isCollapsedStatePersist","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","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","batchSave","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","treecell","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","detaildataBound","setIndentVisibility","childRowExpand","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","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","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","index.TreeGrid","index.Filter","index.Page","index.Sort","index.Reorder","index.Toolbar","index.Aggregate","index.Resize","index.ColumnMenu","index.ExcelExport","index.PdfExport","index.CommandColumn","index.ContextMenu","index.Edit","index.Selection","index.VirtualScroll","index.DetailRow","index.RowDD","index.Freeze","index.ColumnChooser","index.Logger","index.InfiniteScroll"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.js","../../src/treegrid/models/filter-settings.js","../../src/treegrid/models/textwrap-settings.js","../../src/treegrid/actions/logger.js","../../src/treegrid/actions/clipboard.js","../../src/treegrid/base/constant.js","../../src/treegrid/actions/selection.js","../../src/treegrid/actions/freeze-column.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/column-chooser.js","../../src/treegrid/actions/infinite-scroll.js","../../src/global.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords;\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n if (!control.enableImmutableMode) {\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var 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 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import { 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 * 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) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('aria-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\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]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"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 } 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 { Freeze } from '../actions/freeze-column';\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.freezeModule = new Freeze(this);\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || this.freezeModule) {\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.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var 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, index);\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 merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n 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('aria-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n 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('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && 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 data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = 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 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 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 _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n else if (actionArgs.action === 'outdenting') {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\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 = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n 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('aria-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 this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n 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 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 (parent['expanded'] === false && this.parent.getVisibleRecords().indexOf(record) === -1 && isNullOrUndefined(this.parent['dataResults']['action'])) {\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 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 if (indent || outdent) {\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\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)) {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) {\n indent.style.display = 'block';\n }\n if (selectedItem.level === 0) {\n outdent.style.display = 'none';\n }\n if (selectedItem.level !== 0) {\n outdent.style.display = 'block';\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indent.style.display = 'none';\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdent.style.display = 'none';\n }\n }\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.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']) && this.parent.grid.selectedRowIndex === -1) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = 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 }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[0].getAttribute('aria-rowindex'), 10);\n data.splice(index_1, 0, addRecords[0]);\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 for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem]) &&\n (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_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('aria-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('aria-rowindex');\n tr.setAttribute('aria-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n 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('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.editModule['isAddedRowByMethod']) {\n var args = {\n action: 'add',\n data: this.parent.getBatchChanges()['addedRecords'][0],\n index: index,\n seletedRow: 0\n };\n this.parent.editModule.beginAddEdit(args);\n this.parent.editModule.batchEditModule['batchAddRowRecord'].push(this.parent.editModule.batchEditModule['addRowRecord']);\n this.parent.editModule.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = this.parent.grid.getCurrentViewRecords();\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('aria-rowindex'), 10);\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction());\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && this.startIndex === -1)) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.ariaRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || 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 { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n","import * as index from './index';\nindex.TreeGrid.Inject(index.Filter, index.Page, index.Sort, index.Reorder, index.Toolbar, index.Aggregate, index.Resize, index.ColumnMenu, index.ExcelExport, index.PdfExport, index.CommandColumn, index.ContextMenu, index.Edit, index.Selection, index.VirtualScroll, index.DetailRow, index.RowDD, index.Freeze, index.ColumnChooser, index.Logger, index.InfiniteScroll);\nexport * from './index';\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","addAction","Array","extend","newRowPosition","k","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","filter","e","p","enableImmutableMode","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Freeze","FreezeColumn","rowExpandCollapse","dataBoundArg","dblClickHandler","frozenRightRows","movableRows","frozenrows","freeze","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","getFrozenRightRows","detailrows","rData","getRowObjectFromUID","queryselector","cRow","i_1","allowEditOnDblClick","startEdit","freezeModule","addClass","element","getElementsByClassName","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","id","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","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","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","haveChild","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","sortArgs","temp","paging","printMode","actArgs","actualResults","dataResult","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","templateFn","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","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","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","portals","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","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","triggerEvents","bindGridEvents","rowSelecting","rowSelected","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","toolbarClick","callBackPromise","toolbarargs","cellSelecting","cellselectingArgs","beginEdit","begineditArgs","isExpandRefresh","cellSave","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","cellsaveArgs","cellSaved","cellEdit","promise","batchAdd","beforeBatchSave","beforeBatchAdd","batchDelete","beforeBatchDelete","batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","actionBegin","dataManager","isQueryInvokedFromData","callBackPromise_2","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","detailDataBound","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","isEdit","rowDrop","registeredTemplate","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","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","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","refreshScrollOffset","collapsingArgs","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","this_1","puniqueID_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","remoteExpand","localExpand","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","freezeRightRows","rows_2","getMovableRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","eRows","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","rowDragAndDropModule","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","rowDropped","rowsAdded","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","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","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","getBoundingClientRect","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","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","isCollapsedStatePersist","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","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","batchSave","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","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","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","detaildataBound","setIndentVisibility","childRowExpand","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","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","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","index.TreeGrid","index.Filter","index.Page","index.Sort","index.Reorder","index.Toolbar","index.Aggregate","index.Resize","index.ColumnMenu","index.ExcelExport","index.PdfExport","index.CommandColumn","index.ContextMenu","index.Edit","index.Selection","index.VirtualScroll","index.DetailRow","index.RowDD","index.Freeze","index.ColumnChooser","index.Logger","index.InfiniteScroll"],"mappings":"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"}