@syncfusion/ej2-treegrid 20.2.39 → 20.2.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.js","../../src/treegrid/models/filter-settings.js","../../src/treegrid/models/textwrap-settings.js","../../src/treegrid/actions/logger.js","../../src/treegrid/actions/clipboard.js","../../src/treegrid/base/constant.js","../../src/treegrid/actions/selection.js","../../src/treegrid/actions/print.js","../../src/treegrid/models/search-settings.js","../../src/treegrid/models/selection-settings.js","../../src/treegrid/renderer/render.js","../../src/treegrid/base/data.js","../../src/treegrid/enum.js","../../src/treegrid/models/page-settings.js","../../src/treegrid/models/summary.js","../../src/treegrid/models/edit-settings.js","../../src/treegrid/models/sort-settings.js","../../src/treegrid/models/infinite-scroll-settings.js","../../src/treegrid/base/treegrid.js","../../src/treegrid/actions/reorder.js","../../src/treegrid/actions/resize.js","../../src/treegrid/actions/rowdragdrop.js","../../src/treegrid/models/rowdrop-settings.js","../../src/treegrid/renderer/virtual-row-model-generator.js","../../src/treegrid/actions/filter.js","../../src/treegrid/actions/excel-export.js","../../src/treegrid/actions/pdf-export.js","../../src/treegrid/actions/page.js","../../src/treegrid/actions/toolbar.js","../../src/treegrid/actions/summary.js","../../src/treegrid/actions/sort.js","../../src/treegrid/actions/column-menu.js","../../src/treegrid/actions/context-menu.js","../../src/treegrid/actions/batch-edit.js","../../src/treegrid/actions/edit.js","../../src/treegrid/actions/command-column.js","../../src/treegrid/actions/detail-row.js","../../src/treegrid/renderer/virtual-tree-content-render.js","../../src/treegrid/actions/virtual-scroll.js","../../src/treegrid/actions/freeze-column.js","../../src/treegrid/actions/column-chooser.js","../../src/treegrid/actions/infinite-scroll.js","../../src/global.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords;\n 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 && (!record.hasFilteredChildRecords || isNullOrUndefined(record.hasFilteredChildRecords)) && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check') {\n record.checkboxState = 'check';\n }\n else if ((checkChildRecords === 0 && indeter === 0) || (checkChildRecords === 0 && record.hasFilteredChildRecords && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check')) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0 && !parentrec[0].isSummaryRow) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('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]) && !isCountRequired(this.parent)) ||\n ((currentData[this.parent.hasChildMapping]) && isCountRequired(this.parent) && this.parent.initialRender)) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || freezePresent.length) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.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))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && childRecords[i].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\n });\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n var index = this.parent.getRowByIndex(fromIndexes[i]).rowIndex;\n data[i] = this.parent.getCurrentViewRecords()[index];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.selectedRow.getAttribute('aria-rowindex'), 10) - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.parent.getRows()[dropIndex].getAttribute('aria-rowindex'), 10);\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('aria-rowindex'), 10)], dropIndex, 'child');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n }\n else if (actionArgs.action === 'outdenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('aria-rowindex'), 10)], dropIndex, 'below');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex;\n if (this.parent.enableVirtualization) {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n else {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n if (this.parent.enableVirtualization) {\n rowTop = rowEle.getBoundingClientRect().top;\n }\n else {\n rowTop = rowPositionHeight + contentHeight + roundOff;\n }\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping !== null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('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 if (this.parent.enableVirtualization) {\n var index = this.parent.getRowByIndex(args.dropIndex).rowIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[index];\n }\n else {\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n draggedRecord_2.level = droppedRecord.level;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n if (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 if (this.parent.allowRowDragAndDrop && data[d].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n childSort.splice(dragdIndex, 1);\n var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n 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 if (this.parent.getSelectedRows().length) {\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n else {\n args[index] = this.batchIndex;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n 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 (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('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 if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = 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 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[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 if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.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 { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).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","hasFilteredChildRecords","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","isReact","result","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","getElementsByClassName","getRowObjectFromUID","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","rowDragAndDropModule","dragdIndex","dropdIndex","sortArgs","temp","paging","printMode","actArgs","actualResults","dataResult","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","templateFn","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","freezePresent","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","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","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","enablePersistence","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","freeze","refreshScrollOffset","collapsingArgs","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","detailrows","remoteExpand","localExpand","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateRowAndCellElements","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","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","islastRowIndex","isEmptyRow","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","getBoundingClientRect","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","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","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","index.TreeGrid","index.Filter","index.Page","index.Sort","index.Reorder","index.Toolbar","index.Aggregate","index.Resize","index.ColumnMenu","index.ExcelExport","index.PdfExport","index.CommandColumn","index.ContextMenu","index.Edit","index.Selection","index.VirtualScroll","index.DetailRow","index.RowDD","index.Freeze","index.ColumnChooser","index.Logger","index.InfiniteScroll"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.js","../../src/treegrid/models/filter-settings.js","../../src/treegrid/models/textwrap-settings.js","../../src/treegrid/actions/logger.js","../../src/treegrid/actions/clipboard.js","../../src/treegrid/base/constant.js","../../src/treegrid/actions/selection.js","../../src/treegrid/actions/print.js","../../src/treegrid/models/search-settings.js","../../src/treegrid/models/selection-settings.js","../../src/treegrid/renderer/render.js","../../src/treegrid/base/data.js","../../src/treegrid/enum.js","../../src/treegrid/models/page-settings.js","../../src/treegrid/models/summary.js","../../src/treegrid/models/edit-settings.js","../../src/treegrid/models/sort-settings.js","../../src/treegrid/models/infinite-scroll-settings.js","../../src/treegrid/base/treegrid.js","../../src/treegrid/actions/reorder.js","../../src/treegrid/actions/resize.js","../../src/treegrid/actions/rowdragdrop.js","../../src/treegrid/models/rowdrop-settings.js","../../src/treegrid/renderer/virtual-row-model-generator.js","../../src/treegrid/actions/filter.js","../../src/treegrid/actions/excel-export.js","../../src/treegrid/actions/pdf-export.js","../../src/treegrid/actions/page.js","../../src/treegrid/actions/toolbar.js","../../src/treegrid/actions/summary.js","../../src/treegrid/actions/sort.js","../../src/treegrid/actions/column-menu.js","../../src/treegrid/actions/context-menu.js","../../src/treegrid/actions/batch-edit.js","../../src/treegrid/actions/edit.js","../../src/treegrid/actions/command-column.js","../../src/treegrid/actions/detail-row.js","../../src/treegrid/renderer/virtual-tree-content-render.js","../../src/treegrid/actions/virtual-scroll.js","../../src/treegrid/actions/freeze-column.js","../../src/treegrid/actions/column-chooser.js","../../src/treegrid/actions/infinite-scroll.js","../../src/global.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords.filter(function (item) { return !item.isSummaryRow; });\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n if (!control.enableImmutableMode) {\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/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[stackedHeader] ? this.parent[columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && (!record.hasFilteredChildRecords || isNullOrUndefined(record.hasFilteredChildRecords)) && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check') {\n record.checkboxState = 'check';\n }\n else if ((checkChildRecords === 0 && indeter === 0) || (checkChildRecords === 0 && record.hasFilteredChildRecords && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check')) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization && record.childRecords.length > 0) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0 && !parentrec[0].isSummaryRow) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('data-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n var treecell = _this.parent.getRows()[j].cells[cellIndex];\n _this.cellRender({ data: rowsObj[j].data, cell: treecell, column: cell.column });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if ((!isNullOrUndefined(currentData[this.parent.childMapping]) && !isCountRequired(this.parent)) ||\n ((currentData[this.parent.hasChildMapping]) && isCountRequired(this.parent) && this.parent.initialRender)) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || freezePresent.length) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.IsExpandCollapseClicked = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowDeselecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowDeselecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n index = index === 0 ? -1 : index;\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, 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('data-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, false);\n }\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[i][this.expandStateMapping] = state;\n editAction({ value: totalRecords[i], action: 'edit' }, this, this.isSelfReference, totalRecords[i].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[i], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('data-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return ((r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && childRecords[i].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\n });\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n var index = this.parent.getRowByIndex(fromIndexes[i]).rowIndex;\n data[i] = this.parent.getCurrentViewRecords()[index];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.selectedRow.getAttribute('data-rowindex'), 10) - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n if (this.parent.enableVirtualization && this.parent.allowRowDragAndDrop && this.selectedRecord) {\n dropIndex = parseInt(this.parent.getRows()[dropIndex].getAttribute('data-rowindex'), 10);\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'child');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n }\n else if (actionArgs.action === 'outdenting') {\n if (_this.parent.enableVirtualization && _this.parent.allowRowDragAndDrop) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'below');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex;\n if (this.parent.enableVirtualization) {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n else {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n if (this.parent.enableVirtualization) {\n rowTop = rowEle.getBoundingClientRect().top;\n }\n else {\n rowTop = rowPositionHeight + contentHeight + roundOff;\n }\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping !== null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('data-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[rowIndex];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[selectedItemIndex].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n if (this.parent.enableVirtualization) {\n var index = this.parent.getRowByIndex(args.dropIndex).rowIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[index];\n }\n else {\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n draggedRecord_2.level = droppedRecord.level;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n if ((!this.parent.enableCollapseAll || !this.parent.initialRender && isNullOrUndefined(this.parent['dataResults']['result']))\n && parent['expanded'] === false && this.parent.getVisibleRecords().indexOf(record) === -1) {\n this.parent.expandRow(this.parent.getRows()[parent['index']], parent);\n }\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.result.length;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var tObj = this.parent;\n var indentElement;\n var outdentElement;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\n item[field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[key] = this.getSummaryValues(summary.columns[i], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[key] = this.getSummaryValues(summary.columns[i], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[summaryColumn.columnName][summaryKey];\n var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n if (this.parent.allowRowDragAndDrop && data[d].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n childSort.splice(dragdIndex, 1);\n var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n 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.editModule['isAddedRowByContextMenu'] = true;\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][parentItem][uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[rowObjectIndex].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[this.addRowIndex][level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && (this.parent.grid.selectedRowIndex === -1 || this.parent.editModule['batchEditModule'].isAdd)) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.batchRecords.length ? this.batchRecords[this.selectedIndex]\n : this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n var newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('data-rowindex'), 10);\n this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);\n }\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('data-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('data-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('data-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('data-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n if (index !== -1) {\n data.splice(index, 1);\n }\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n for (var i_1 = 0; i_1 < addRecords.length; i_1++) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[i_1].getAttribute('data-rowindex'), 10);\n data.splice(index_1, 0, addRecords[i_1]);\n }\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n if (addRecords.length > 1 && this.parent.editModule['isAddedRowByContextMenu']) {\n var rowPosition = this.parent.editSettings.newRowPosition;\n this.parent.editSettings.newRowPosition = this.parent.editModule['previousNewRowPosition'];\n this.parent.editModule['previousNewRowPosition'] = rowPosition;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem]) &&\n (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_2 = 0; i_2 < data.length; i_2++) {\n data[i_2][index] = i_2;\n setValue('uniqueIDCollection.' + data[i_2][uniqueID] + '.index', i_2, this.parent);\n if (!data[i_2][level]) {\n this.parent.parentData.push(data[i_2]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n this.parent.editModule['isAddedRowByContextMenu'] = false;\n }\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n if (this.parent.getSelectedRows().length) {\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n else {\n args[index] = this.batchIndex;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n this.isAddedRowByContextMenu = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.dataRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('data-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('data-rowindex');\n tr.setAttribute('data-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('data-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1 && this['isAddedRowByMethod'] && !this.isAddedRowByContextMenu) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n var batchAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[i].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[i];\n }\n }\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[data-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[data-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = void 0;\n if (this.parent.editSettings.mode === 'Batch' && this['isAddedRowByMethod'] && !isNullOrUndefined(this.addRowIndex)) {\n currentData = this.batchEditModule['batchRecords'];\n }\n else {\n currentData = this.parent.grid.getCurrentViewRecords();\n }\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('data-rowindex'), 10);\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('data-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction());\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && (this.startIndex === -1 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[data-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n 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('data-rowindex');\n }\n if (firsttdinx === 0) {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.dataRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n if (this.parent.grid.infiniteScrollModule['isInitialRender'] && !this.parent.initialRender) {\n this.parent.grid.pageSettings.currentPage = 1;\n }\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.grid.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.grid.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n","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","filter","item","isSummaryRow","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","addAction","Array","extend","newRowPosition","k","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","e","p","enableImmutableMode","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","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","indeter","checkChildRecords","checkBoxRecord","hasFilteredChildRecords","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","element","id","isReact","result","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","getElementsByClassName","getRowObjectFromUID","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","rowDragAndDropModule","dragdIndex","dropdIndex","sortArgs","temp","paging","printMode","actArgs","actualResults","dataResult","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","templateFn","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","freezePresent","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","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","IsExpandCollapseClicked","bindGridEvents","rowSelecting","rowDeselecting","rowSelected","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","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","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","enablePersistence","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","freeze","refreshScrollOffset","collapsingArgs","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","detailrows","remoteExpand","localExpand","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateRowAndCellElements","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","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","islastRowIndex","isEmptyRow","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","getBoundingClientRect","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","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","newlyAddedRecords","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","rowPosition","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","isAddedRowByContextMenu","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","dataRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","newlyAddedRecord","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","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","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","Freeze","FreezeColumn","dblClickHandler","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","actions","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","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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"}