@syncfusion/ej2-treegrid 19.4.50 → 19.4.55
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.
- package/CHANGELOG.md +22 -0
- package/README.md +1 -1
- package/dist/ej2-treegrid.umd.min.js +2 -2
- package/dist/ej2-treegrid.umd.min.js.map +1 -1
- package/dist/es6/ej2-treegrid.es2015.js +114 -21
- package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
- package/dist/es6/ej2-treegrid.es5.js +114 -19
- package/dist/es6/ej2-treegrid.es5.js.map +1 -1
- package/dist/global/ej2-treegrid.min.js +2 -2
- package/dist/global/ej2-treegrid.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +9 -9
- package/src/treegrid/actions/crud-actions.js +5 -0
- package/src/treegrid/actions/infinite-scroll.d.ts +1 -0
- package/src/treegrid/actions/infinite-scroll.js +24 -2
- package/src/treegrid/actions/rowdragdrop.js +11 -0
- package/src/treegrid/actions/toolbar.d.ts +1 -0
- package/src/treegrid/actions/toolbar.js +39 -4
- package/src/treegrid/base/treegrid-model.d.ts +1 -1
- package/src/treegrid/base/treegrid.d.ts +3 -0
- package/src/treegrid/base/treegrid.js +36 -14
- package/src/treegrid/models/rowdrop-settings-model.d.ts +1 -1
- package/src/treegrid/models/rowdrop-settings.d.ts +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-treegrid.es2015.js","sources":["../src/es6/treegrid/models/column.js","../src/es6/treegrid/models/filter-settings.js","../src/es6/treegrid/models/textwrap-settings.js","../src/es6/treegrid/actions/logger.js","../src/es6/treegrid/base/constant.js","../src/es6/treegrid/actions/clipboard.js","../src/es6/treegrid/utils.js","../src/es6/treegrid/actions/selection.js","../src/es6/treegrid/actions/print.js","../src/es6/treegrid/models/search-settings.js","../src/es6/treegrid/models/selection-settings.js","../src/es6/treegrid/renderer/render.js","../src/es6/treegrid/base/data.js","../src/es6/treegrid/enum.js","../src/es6/treegrid/models/page-settings.js","../src/es6/treegrid/models/summary.js","../src/es6/treegrid/models/edit-settings.js","../src/es6/treegrid/models/sort-settings.js","../src/es6/treegrid/actions/crud-actions.js","../src/es6/treegrid/models/infinite-scroll-settings.js","../src/es6/treegrid/base/treegrid.js","../src/es6/treegrid/actions/reorder.js","../src/es6/treegrid/actions/resize.js","../src/es6/treegrid/actions/rowdragdrop.js","../src/es6/treegrid/base/index.js","../src/es6/treegrid/models/rowdrop-settings.js","../src/es6/treegrid/models/index.js","../src/es6/treegrid/renderer/virtual-row-model-generator.js","../src/es6/treegrid/renderer/index.js","../src/es6/treegrid/actions/filter.js","../src/es6/treegrid/actions/excel-export.js","../src/es6/treegrid/actions/pdf-export.js","../src/es6/treegrid/actions/page.js","../src/es6/treegrid/actions/toolbar.js","../src/es6/treegrid/actions/summary.js","../src/es6/treegrid/actions/sort.js","../src/es6/treegrid/actions/column-menu.js","../src/es6/treegrid/actions/context-menu.js","../src/es6/treegrid/actions/batch-edit.js","../src/es6/treegrid/actions/edit.js","../src/es6/treegrid/actions/command-column.js","../src/es6/treegrid/actions/detail-row.js","../src/es6/treegrid/renderer/virtual-tree-content-render.js","../src/es6/treegrid/actions/virtual-scroll.js","../src/es6/treegrid/actions/freeze-column.js","../src/es6/treegrid/actions/column-chooser.js","../src/es6/treegrid/actions/infinite-scroll.js","../src/es6/treegrid/actions/index.js","../src/es6/treegrid/index.js","../src/es6/index.js"],"sourcesContent":["import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nexport class Column {\n constructor(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 setProperties(column) {\n //Angular two way binding\n const keys = Object.keys(column);\n for (let 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 const refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'][refreshReactColumnTemplateByUid](this.uid);\n }\n }\n }\n}\n","var __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 */\nexport class Predicate extends ChildProperty {\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/**\n * Configures the filtering behavior of the TreeGrid.\n */\nexport class FilterSettings extends ChildProperty {\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","var __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 */\nexport class TextWrapSettings extends ChildProperty {\n}\n__decorate([\n Property('Both')\n], TextWrapSettings.prototype, \"wrapMode\", void 0);\n","import { 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 */\nconst DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nconst BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst WARNING = '[EJ2TreeGrid.Warning]';\nconst ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst INFO = '[EJ2TreeGrid.Info]';\nlet IsRowDDEnabled = false;\nexport class Logger extends GridLogger {\n constructor(parent) {\n Grid.Inject(GridLogger);\n super(parent);\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n getModuleName() {\n return 'logger';\n }\n log(types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n const type = types;\n for (let i = 0; i < type.length; i++) {\n const item = detailLists[type[i]];\n const cOp = item.check(args, this.parent);\n if (cOp.success) {\n let 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 const index = message.indexOf('https');\n const 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 treeLog(types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n const type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter((column) => column.isPrimaryKey).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (let i = 0; i < type.length; i++) {\n const item = treeGridDetails[type[i]];\n const cOp = item.check(args, treeGrid);\n if (cOp.success) {\n const message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n}\nexport const treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check(args, parent) {\n let 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() {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n `${BASE_DOC_URL}/api/treegrid#childmapping` + '\\n' +\n `${BASE_DOC_URL}/api/treegrid#idmapping` + '\\n' +\n `${BASE_DOC_URL}/api/treegrid#$parentidmapping`;\n }\n }\n};\n","/**\n * @hidden\n */\nexport const load = 'load';\n/** @hidden */\nexport const rowDataBound = 'rowDataBound';\n/** @hidden */\nexport const dataBound = 'dataBound';\n/** @hidden */\nexport const queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport const beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport const actionBegin = 'actionBegin';\n/** @hidden */\nexport const dataStateChange = 'dataStateChange';\n/** @hidden */\nexport const actionComplete = 'actionComplete';\n/** @hidden */\nexport const rowSelecting = 'rowSelecting';\n/** @hidden */\nexport const rowSelected = 'rowSelected';\n/** @hidden */\nexport const checkboxChange = 'checkboxChange';\n/** @hidden */\nexport const rowDeselected = 'rowDeselected';\n/** @hidden */\nexport const toolbarClick = 'toolbarClick';\n/** @hidden */\nexport const beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport const beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport const resizeStop = 'resizeStop';\n/** @hidden */\nexport const expanded = 'expanded';\n/** @hidden */\nexport const expanding = 'expanding';\n/** @hidden */\nexport const collapsed = 'collapsed';\n/** @hidden */\nexport const collapsing = 'collapsing';\n/** @hidden */\nexport const remoteExpand = 'remoteExpand';\n/** @hidden */\nexport const localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport const pagingActions = 'pagingActions';\n/** @hidden */\nexport const printGridInit = 'printGrid-Init';\n/** @hidden */\nexport const contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport const contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport const beforeCopy = 'beforeCopy';\n/** @hidden */\nexport const beforePaste = 'beforePaste';\n/** @hidden */\nexport const savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport const crudAction = 'crudAction';\n/** @hidden */\nexport const beginEdit = 'beginEdit';\n/** @hidden */\nexport const beginAdd = 'beginAdd';\n/** @hidden */\nexport const recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport const cellSave = 'cellSave';\n/** @hidden */\nexport const cellSaved = 'cellSaved';\n/** @hidden */\nexport const cellEdit = 'cellEdit';\n/** @hidden */\nexport const batchDelete = 'batchDelete';\n/** @hidden */\nexport const batchCancel = 'batchCancel';\n/** @hidden */\nexport const batchAdd = 'batchAdd';\n/** @hidden */\nexport const beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport const beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport const beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport const batchSave = 'batchSave';\n/** @hidden */\nexport const keyPressed = 'key-pressed';\n/** @hidden */\nexport const updateData = 'update-data';\n/** @hidden */\nexport const doubleTap = 'double-tap';\n/** @hidden */\nexport const virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport const virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport const destroy = 'destroy';\n/** @hidden */\nexport const dataListener = 'data-listener';\n/** @hidden */\nexport const indexModifier = 'index-modifier';\n/** @hidden */\nexport const beforeStartEdit = 'edit-form';\n/** @hidden */\nexport const beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport const batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport const detailDataBound = 'detailDataBound';\n/** @hidden */\nexport const rowDrag = 'rowDrag';\n/** @hidden */\nexport const rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport const rowDrop = 'rowDrop';\n/** @hidden */\nexport const rowDragStart = 'rowDragStart';\n/** @hidden */\nexport const rowsAdd = 'rows-add';\n/** @hidden */\nexport const rowsRemove = 'rows-remove';\n/** @hidden */\nexport const rowdraging = 'row-draging';\n/** @hidden */\nexport const rowDropped = 'row-dropped';\n/** @hidden */\nexport const autoCol = 'auto-col';\n","import * 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 */\nexport class TreeClipboard extends GridClipboard {\n constructor(parent) {\n super(parent.grid);\n this.treeCopyContent = '';\n this.copiedUniqueIdCollection = [];\n this.treeGridParent = parent;\n }\n setCopyData(withHeader) {\n const copyContent = 'copyContent';\n const getCopyData = 'getCopyData';\n const isSelect = 'isSelect';\n const uniqueID = 'uniqueID';\n const currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n const rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n const selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort((a, b) => {\n return a - b;\n });\n for (let 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 const cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n const 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 const headerTextArray = [];\n for (let 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 const 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.setCopyData(withHeader);\n }\n }\n }\n parentContentData(currentRecords, selectedIndex, rows, withHeader, index) {\n const getCopyData = 'getCopyData';\n const copyContent = 'copyContent';\n const parentItem = 'parentItem';\n const uniqueID = 'uniqueID';\n const level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n const treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (let i = 0; i < treeLevel + 1; i++) {\n for (let j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n const cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n const 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 copy(withHeader) {\n super.copy(withHeader);\n }\n paste(data, rowIndex, colIndex) {\n super.paste(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 getModuleName() {\n return 'clipboard';\n }\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n super.destroy();\n }\n childContentData(currentRecords, selectedIndex, rows, withHeader) {\n const getCopyData = 'getCopyData';\n const copyContent = 'copyContent';\n const childRecords = 'childRecords';\n const hasChildRecords = 'hasChildRecords';\n const uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n const childData = currentRecords[selectedIndex][childRecords];\n for (let i = 0; i < childData.length; i++) {\n for (let 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 const cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n const 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}\n","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 const 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 (let 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 const datas = [];\n const recordsLength = Object.keys(records).length;\n for (let i = 0, len = recordsLength; i < len; i++) {\n const 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 const parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n let 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 let datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n const childRecords = records.childRecords;\n for (let i = 0, len = Object.keys(childRecords).length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = [...datas, ...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 const 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 const objArr = [];\n let obj;\n let keys;\n for (let i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (let 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 const idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n const 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 const style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\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 */\nexport class Selection {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'selection';\n }\n addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n checkboxSelection(args) {\n const target = getObject('target', args);\n const checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n let checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n const 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 const 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 triggerChkChangeEvent(checkBox, checkState, rowElement) {\n const data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n const 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 getCheckboxcolumnIndex() {\n let mappingUid;\n let columnIndex;\n const columns = (this.parent.columns);\n for (let col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = this.parent.columns[col].uid;\n }\n }\n const headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (let j = 0; j < headerCelllength; j++) {\n const 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 headerCheckbox() {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n const headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n const value = false;\n const rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n const 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 const checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n const checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n }\n renderColumnCheckbox(args) {\n const rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n const data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n const value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n const 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 const 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 columnCheckbox(container) {\n const checkWrap = this.renderColumnCheckbox(container);\n const 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 const spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n const data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n const 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 selectCheckboxes(rowIndexes) {\n for (let i = 0; i < rowIndexes.length; i++) {\n let record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n const flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n const checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n const keys = Object.keys(record);\n for (let 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 traverSelection(record, checkboxState, ischildItem) {\n let 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 let 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 (let 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 getFilteredChildRecords(childRecords) {\n const filteredChildRecords = childRecords.filter((e) => {\n return this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n }\n updateParentSelection(parentRecord) {\n let length = 0;\n let childRecords = [];\n const 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 let indeter = 0;\n let checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (let i = 0; i < childRecords.length; i++) {\n const currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n const checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n }\n headerSelection(checkAll) {\n let index = -1;\n let length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n const 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 let 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 (let 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((rec) => {\n rec.checkboxState = 'uncheck';\n this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n const 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 updateSelectedItems(currentRecord, checkState) {\n const record = this.parent.getCurrentViewRecords().filter((e) => {\n return e.uniqueID === currentRecord.uniqueID;\n });\n let checkedRecord;\n const recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n const checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n let checkbox;\n if (recordIndex > -1) {\n const tr = this.parent.getRows()[recordIndex];\n let movableTr;\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 const index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n const checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n const checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n }\n updateGridActions(args) {\n const requestType = args.requestType;\n let childData;\n let childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n const rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (let 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 let updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (let i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n const index = this.parent.flatData.indexOf(updatedData[i]);\n const 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((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 let child = findChildrenRecords(record);\n child = this.getFilteredChildRecords(child);\n for (let 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 getCheckedrecords() {\n return this.selectedItems;\n }\n getCheckedRowIndexes() {\n return this.selectedIndexes;\n }\n}\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 */\nexport class Print {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'print';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n }\n removeEventListener() {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n }\n printTreeGrid(printGrid) {\n const grid = getObject('printgrid', printGrid);\n const 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() {\n this.parent.grid.print();\n }\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n this.removeEventListener();\n }\n}\n","var __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 */\nexport class SearchSettings extends ChildProperty {\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","var __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 */\nexport class SelectionSettings extends ChildProperty {\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","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nexport class Render {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 RowModifier(args) {\n if (!args.data) {\n return;\n }\n const data = args.data;\n const 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 const 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 const proxy = this.parent;\n const parentrec = this.parent.getCurrentViewRecords().filter((rec) => {\n return getValue(proxy.idMapping, rec) === getValue(proxy.parentIdMapping, data);\n });\n if (parentrec.length > 0) {\n const 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 const 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 cellRender(args) {\n if (!args.data) {\n return;\n }\n const grid = this.parent.grid;\n const data = args.data;\n let index;\n const ispadfilter = isNullOrUndefined(data.filterLevel);\n const pad = ispadfilter ? data.level : data.filterLevel;\n let totalIconsWidth = 0;\n let cellElement;\n const column = this.parent.getColumnByUid(args.column.uid);\n const summaryRow = data.isSummaryRow;\n const frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n let columnIndex;\n const 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 const container = createElement('div', { className: 'e-treecolumn-container' });\n const emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (let n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n let 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 const expandIcon = createElement('span', { className: 'e-icons' });\n let expand;\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 const 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 const freezerightColumns = grid.getFrozenRightColumns();\n const freezeLeftColumns = grid.getFrozenLeftColumns();\n const 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 const checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n const 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 const 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 updateTreeCell(args, cellElement) {\n const columnModel = getValue('columnModel', this.parent);\n const treeColumn = columnModel[this.parent.treeColumnIndex];\n const templateFn = 'templateFn';\n const 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 const 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 let len = args.cell.children.length;\n const tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n const portals = 'portals';\n const 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 const str = 'isStringTemplate';\n const 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 (let 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 columnTemplateResult(args) {\n this.templateResult = args.template;\n }\n reactTemplateRender(args) {\n const renderReactTemplates = 'renderReactTemplates';\n const portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n destroy() {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n }\n}\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 */\nexport class DataManipulation {\n constructor(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 addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n isRemote() {\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 convertToFlatData(data) {\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 const 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 const filterKey = this.parent.query.params.filter((param) => 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 let qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then((e) => {\n this.parentItems = DataUtil.distinct(e.result, this.parent.parentIdMapping, false);\n const req = getObject('dataSource.requests', this.parent).filter((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 convertJSONData(data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n for (let i = 0; i < Object.keys(data).length; i++) {\n const 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 const selfData = [];\n const mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (let i = 0; i < mappingData.length; i++) {\n const groupData = mappingData[i];\n const index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n const childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push(...groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n const isGantt = 'isGantt';\n const 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 selfReferenceUpdate(selfData) {\n const result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n const 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 updateParentRemoteData(args) {\n const 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 (let 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 collectExpandingRecs(rowDetails, isChild) {\n let gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n const rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n let childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (let i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n const 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 let childRows = [];\n childRows = gridRows.filter((r) => r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1)));\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n const 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 fetchRemoteChildData(rowDetails) {\n const args = { row: rowDetails.parentRow, data: rowDetails.record };\n const dm = this.parent.dataSource;\n const qry = this.parent.grid.getDataModule().generateQuery();\n const clonequries = qry.queries.filter((e) => 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((e) => {\n const datas = this.parent.grid.currentViewData.slice();\n let inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n this.parent.grid.getRowsObject().forEach((rows) => {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n const haveChild = getObject('actual.nextLevel', e);\n const result = e.result;\n rowDetails.record.childRecords = result;\n for (let 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 const 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 let gridQuery = getObject('query', e);\n const result = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n const summaryQuery = gridQuery.queries.filter((q) => q.fn === 'onAggregates');\n e[result] = this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result], true);\n }\n }\n e.count = this.parent.grid.pageSettings.totalRecordsCount;\n const virtualArgs = {};\n if (this.parent.enableVirtualization) {\n this.remoteVirtualAction(virtualArgs);\n }\n const 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 remoteVirtualAction(virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n const contentModule = getValue('grid.contentModule', this.parent);\n const currentInfo = getValue('currentInfo', contentModule);\n const 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 beginSorting() {\n this.isSortAction = true;\n }\n createRecords(data, parentRecords) {\n const treeGridData = [];\n for (let i = 0, len = Object.keys(data).length; i < len; i++) {\n const currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n let level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n const 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 const 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 dataProcessor(args) {\n const isExport = getObject('isExport', args);\n const expresults = getObject('expresults', args);\n const exportType = getObject('exportType', args);\n const isPrinting = getObject('isPrinting', args);\n let dataObj;\n const actionArgs = getObject('actionArgs', args);\n let requestType = getObject('requestType', args);\n let actionData = getObject('data', args);\n let action = getObject('action', args);\n const actionAddArgs = actionArgs;\n const primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n const 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 let results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n let count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n const qry = new Query();\n let gridQuery = getObject('query', args);\n let filterQuery;\n let searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter((q) => q.fn === 'onWhere');\n searchQuery = gridQuery.queries.filter((q) => 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 const fltrQuery = gridQuery.queries.filter((q) => q.fn === 'onWhere');\n const srchQuery = gridQuery.queries.filter((q) => q.fn === 'onSearch');\n qry.queries = fltrQuery.concat(srchQuery);\n const 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 const 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 const summaryQuery = query.queries.filter((q) => 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 let gridQuery = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n const summaryQuery = gridQuery.queries.filter((q) => 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 const parentData = this.parent.parentData;\n const query = getObject('query', args);\n const srtQry = new Query();\n for (let srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n const getColumnByField = 'getColumnByField';\n const col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n const 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 const modifiedData = new DataManager(parentData).executeLocal(srtQry);\n const 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 const isSort = false;\n const query = getObject('query', args);\n const summaryQuery = query.queries.filter((q) => 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 const 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 paging(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 const 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 const isPdfExport = 'isPdfExport';\n const isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n const actualResults = [];\n for (let i = 0; i < results.length; i++) {\n const 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 const value = { result: results, count: count };\n return value;\n }\n updateData(dataResult) {\n this.dataResults = dataResult;\n }\n updateAction(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}\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __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 */\nexport class PageSettings extends ChildProperty {\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","var __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 */\nexport class AggregateColumn extends ChildProperty {\n constructor() {\n super(...arguments);\n this.intl = new Internationalization();\n this.templateFn = {};\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 setFormatter(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 getFormatFunction(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 getFormatter() {\n return this.formatFn;\n }\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n setTemplate(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 getTemplate(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 setPropertiesSilent(prop) {\n this.setProperties(prop, true);\n }\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);\nexport class AggregateRow extends ChildProperty {\n}\n__decorate([\n Collection([], AggregateColumn)\n], AggregateRow.prototype, \"columns\", void 0);\n__decorate([\n Property(true)\n], AggregateRow.prototype, \"showChildSummary\", void 0);\n","var __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 */\nexport class EditSettings extends ChildProperty {\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","var __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 */\nexport class SortDescriptor extends ChildProperty {\n}\n__decorate([\n Property()\n], SortDescriptor.prototype, \"field\", void 0);\n__decorate([\n Property()\n], SortDescriptor.prototype, \"direction\", void 0);\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nexport class SortSettings extends ChildProperty {\n}\n__decorate([\n Collection([], SortDescriptor)\n], SortSettings.prototype, \"columns\", void 0);\n__decorate([\n Property(true)\n], SortSettings.prototype, \"allowUnsort\", void 0);\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 let value = details.value;\n const action = details.action;\n const changedRecords = 'changedRecords';\n let i;\n let j;\n const addedRecords = 'addedRecords';\n let batchChanges;\n const key = control.grid.getPrimaryKeyFieldNames()[0];\n const treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n let modifiedData = [];\n const originalData = value;\n let 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 const 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 (let k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n const keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n while (i-- && i >= 0) {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n const currentData = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData[control.parentIdMapping])) {\n const parentData = control.flatData.filter((e) => e[control.idMapping] === currentData[control.parentIdMapping])[0];\n const childRecords = parentData ? parentData[control.childMapping] : [];\n for (let p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData[control.idMapping]) {\n parentData['childRecords'].splice(p, 1);\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n 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 const 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 let index;\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 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 }\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 let value;\n let isSkip = false;\n const 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 const primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n const 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 const 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 let isChildAll = false;\n let 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 const keys = Object.keys(modifiedData);\n const editedData = getParentData(control, modifiedData.uniqueID);\n for (let 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 const 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 const parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n const currentRecords = control.grid.getCurrentViewRecords();\n let index;\n currentRecords.map((e, i) => { if (e[key] === record[key]) {\n index = i;\n return;\n } });\n if (!isNullOrUndefined(index)) {\n record = currentRecords[index];\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((e) => {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n const childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index + 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 const primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n const data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (let 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 let row = control.getRowByIndex(index);\n if (control.editSettings.mode === 'Batch') {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n let movableRow;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n let index = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index = index + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index] ? row.cells[index]\n : movableRow.cells[index - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n }\n }\n}\n","var __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 */\nexport class InfiniteScrollSettings extends ChildProperty {\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","var __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};\nvar TreeGrid_1;\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { CellRenderer } from '@syncfusion/ej2-grids';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nlet TreeGrid = TreeGrid_1 = class TreeGrid extends Component {\n constructor(options, element) {\n super(options, element);\n this.dataResults = {};\n this.uniqueIDCollection = {};\n this.uniqueIDFilterCollection = {};\n this.changedRecords = 'changedRecords';\n this.deletedRecords = 'deletedRecords';\n this.addedRecords = 'addedRecords';\n this.objectEqualityChecker = (old, current) => {\n if (old) {\n const keys = Object.keys(old);\n let isEqual = true;\n const excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (let i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n const 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 const logger = 'Logger';\n if (!isNullOrUndefined(this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n this.grid = new Grid();\n }\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 excelExport(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 csvExport(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 pdfExport(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 getModuleName() {\n return 'treegrid';\n }\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n preRender() {\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 sortByColumn(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 clearSorting() {\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 removeSortColumn(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 search(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 autoFitColumns(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 reorderColumns(fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n }\n TreeGridLocale() {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n const locale = L10n.locale;\n const localeObject = {};\n setValue(this.locale, {}, localeObject);\n let gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n let 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 print() {\n this.printModule.print();\n }\n treeGridkeyActionHandler(e) {\n if (this.allowKeyboard) {\n let target;\n let parentTarget;\n let column;\n let row;\n let summaryElement;\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 const rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n const cellIndex = e.target.cellIndex;\n const row = summaryElement.children[cellIndex];\n addClass([row], 'e-focused');\n addClass([row], '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 const rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n const cIndex = e.target.cellIndex;\n const 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 findnextRowElement(summaryRowElement) {\n let 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 findPreviousRowElement(summaryRowElement) {\n let 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 initProperties() {\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 wireEvents() {\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 requiredModules() {\n const modules = [];\n const splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount()) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n }\n extendRequiredModules(modules) {\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n }\n isCommandColumn(columns) {\n return columns.some((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 unwireEvents() {\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 log(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 render() {\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 const 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 const gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n let modules = [];\n modules = gridRequiredModules.apply(this);\n for (let i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n this.grid.appendTo(gridContainer);\n this.wireEvents();\n this.renderComplete();\n const destroyTemplate = 'destroyTemplate';\n const destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = (args, index) => {\n destroyTemplateFn.apply(this.grid);\n const portals = 'portals';\n if (!(this.isReact && isNullOrUndefined(this[portals]))) {\n this.clearTemplate(args, index);\n }\n };\n }\n afterGridRender() {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n }\n convertTreeData(data) {\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((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 const 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 bindGridProperties() {\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 const templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n const isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n }\n triggerEvents(args) {\n this.trigger(getObject('name', args), args);\n }\n bindGridEvents() {\n this.grid.rowSelecting = (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 = (args) => {\n if (this.enableVirtualization && args.isHeaderCheckboxClicked &&\n this.grid.currentViewData.length !== this.grid.selectionModule.selectedRowIndexes.length) {\n const updateRowSelection = 'updateRowSelection';\n for (let 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 = (args) => {\n this.selectedRowIndex = this.grid.selectedRowIndex;\n this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = (args) => {\n this.updateColumnModel();\n this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = (args) => {\n this.notify('excelCellInfo', args);\n args = this.dataResults;\n };\n this.grid.pdfQueryCellInfo = (args) => {\n this.notify('pdfCellInfo', args);\n args = this.dataResults;\n };\n this.grid.checkBoxChange = (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 = (args) => {\n const rows = this.getRows();\n const 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 = () => {\n this.grid.on('initial-end', this.afterGridRender, this);\n if (!isNullOrUndefined(this.loggerModule)) {\n const 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 lastRowBorder(visiblerow, isAddBorder) {\n for (let 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 isPixelHeight() {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n extendedGridDataBoundEvent() {\n this.grid.dataBound = (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 const req = getObject('dataSource.requests', this).filter((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 const rows = this.getContentTable().rows;\n const totalRows = [].slice.call(rows);\n for (let 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 const action = 'action';\n if (this.enableVirtualization && this.selectionSettings.persistSelection && (this.dataResults[action] === 'expand' || this.dataResults[action] === 'collapse')) {\n const refreshPersistSelection = 'refreshPersistSelection';\n this.grid.selectionModule[refreshPersistSelection]();\n if (this.grid.selectionSettings.type === 'Single') {\n const updateRowSelection = 'updateRowSelection';\n const 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 const treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n const dataSource = 'dataSource';\n const 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 const 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 const callBackPromise = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, (beforeDataBoundArgs) => {\n callBackPromise.resolve(beforeDataBoundArgs);\n });\n return callBackPromise;\n }\n };\n this.grid.log = (type, args) => {\n if (this.loggerModule) {\n this.loggerModule.log(type, args);\n }\n };\n }\n bindCallBackEvents() {\n this.grid.toolbarClick = (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 const callBackPromise = new Deferred();\n this.trigger(events.toolbarClick, args, (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 = (args) => {\n const callBackPromise = new Deferred();\n this.trigger(getObject('name', args), args, (cellselectingArgs) => {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = (args) => {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n const callBackPromise = new Deferred();\n this.trigger(events.beginEdit, args, (begineditArgs) => {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n }\n extendedGridEditEvents() {\n this.grid.dataStateChange = (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 = (args) => {\n if (this.grid.isContextMenuOpen()) {\n const 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 const callBackPromise = new Deferred();\n this.trigger(events.cellSave, args, (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 = (args) => {\n this.trigger(events.cellSaved, args);\n this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = (args) => {\n const prom = 'promise';\n const promise = new Deferred();\n args[prom] = promise;\n this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = (args) => {\n this.trigger(events.batchAdd, args);\n this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = (args) => {\n this.trigger(events.beforeBatchSave, args);\n this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = (args) => {\n this.trigger(events.beforeBatchAdd, args);\n this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = (args) => {\n this.trigger(events.batchDelete, args);\n this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = (args) => {\n this.trigger(events.beforeBatchDelete, args);\n this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = (args) => {\n if (this.editSettings.mode !== 'Cell') {\n this.trigger(events.batchCancel, args);\n }\n this.notify(events.batchCancel, args);\n };\n }\n updateRowTemplate() {\n this.treeColumnRowTemplate();\n }\n bindedDataSource() {\n const dataSource = 'dataSource';\n const isDataAvailable = 'isDataAvailable';\n const adaptor = 'adaptor';\n const ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n const data = this.flatData;\n const 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 const proxy = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then((e) => {\n const dm = proxy.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 extendedGridActionEvents() {\n this.grid.actionBegin = (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 const 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 const callBackPromise = new Deferred();\n this.trigger(events.actionBegin, args, (actionArgs) => {\n if (!actionArgs.cancel) {\n this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise.resolve(actionArgs);\n });\n return callBackPromise;\n };\n this.grid.actionComplete = (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((ag) => ag.showChildSummary === true).length) {\n this.grid.refresh();\n }\n this.trigger(events.actionComplete, args);\n };\n }\n extendedGridEvents() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const treeGrid = this;\n this.grid.recordDoubleClick = (args) => {\n this.trigger(events.recordDoubleClick, args);\n this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = (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 = (args) => {\n this.notify(events.contextMenuClick, args);\n this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = (args) => {\n this.notify(events.contextMenuOpen, args);\n this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = (args) => {\n this.renderModule.cellRender(args);\n };\n }\n bindGridDragEvents() {\n this.grid.rowDragStartHelper = (args) => {\n this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = (args) => {\n this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = (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 = (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 loadGrid() {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n const 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 autoGenerateColumns() {\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 const record = this.dataSource[0];\n // }\n const keys = Object.keys(record);\n for (let 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 getGridEditSettings() {\n const edit = {};\n const 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 getContextMenu() {\n if (this.contextMenuItems) {\n const items = [];\n for (let i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n }\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n getGridToolbar() {\n if (this.toolbar) {\n const items = [];\n let tooltipText;\n for (let 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 getGridColumns(columns, isEmptyColumnModel = true, index = 0) {\n const column = columns;\n const stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n let treeGridColumn;\n let gridColumn;\n index = index === 0 ? -1 : index;\n const gridColumnCollection = [];\n for (let i = 0; i < column.length; i++) {\n index = index + 1;\n const 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 (const prop of Object.keys(column[i])) {\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n }\n return gridColumnCollection;\n }\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n onPropertyChanged(newProp) {\n const properties = Object.keys(newProp);\n let requireRefresh = false;\n for (const prop of properties) {\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 const count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n const data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n }\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n destroy() {\n const treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n const 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.destroy();\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n const 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 (let 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 dataBind() {\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.dataBind();\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 getPersistData() {\n const keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n const 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 const ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (let i = 0; i < keyEntity.length; i++) {\n const currentObject = this[keyEntity[i]];\n for (let k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n const objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n }\n ignoreInArrays(ignoreOnColumn, columns) {\n for (let 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 ignoreInColumn(ignoreOnColumn, column) {\n for (let i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n }\n mouseClickHandler(e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n const 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 getRows() {\n return this.grid.getRows();\n }\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n getPager() {\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 addRecord(data, index, position) {\n if (this.editModule) {\n const 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 closeEdit() {\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 saveCell() {\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 updateCell(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 updateRow(index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n const 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 deleteRecord(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 startEdit(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 editCell(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 enableToolbarItems(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 endEdit() {\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 openColumnChooser(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 deleteRow(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 getPrimaryKeyFieldNames() {\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 setCellValue(key, field, value) {\n this.grid.setCellValue(key, field, value);\n const rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n const 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 setRowData(key, rowData) {\n const currentRecords = this.getCurrentViewRecords();\n const primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n let level = 0;\n let record = {};\n currentRecords.some((value) => {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n }\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n goToPage(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 updateExternalMessage(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 getCellFromIndex(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 getColumnByField(field) {\n return iterateArrayOrObject(this.columnModel, (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 getColumnByUid(uid) {\n const Columns = this.initialRender ? this.grid.columns : this.columns;\n return iterateArrayOrObject(Columns, (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 getColumnFieldNames() {\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 getFooterContent() {\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 getFooterContentTable() {\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 showColumns(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 hideColumns(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 getColumnHeaderByField(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 getColumnHeaderByIndex(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 getColumnHeaderByUid(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 getColumnIndexByField(field) {\n return this.grid.getColumnIndexByField(field);\n }\n getVirtualColIndexByUid(uid) {\n const columnModel = 'columnModel';\n const index = iterateArrayOrObject(this.grid[columnModel], (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 getColumnIndexByUid(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 getColumns(isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n }\n updateColumnModel(column) {\n let temp;\n let field;\n const 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 let stackedHeader = false;\n let gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (let i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (const prop of Object.keys(gridColumns[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 const merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n stackedHeader = true;\n }\n if (!stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n }\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n refreshReactColumnTemplateByUid(columnUid) {\n if (this.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.clearTemplate(['columnTemplate'], undefined, () => {\n const cells = 'cells';\n const rowIdx = 'index';\n const rowsObj = this.grid.getRowsObject();\n const indent = this.grid.getIndentCount();\n const cellIndex = this.grid.getNormalizedColumnIndex(columnUid);\n for (let j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n const cell = rowsObj[j][cells][cellIndex];\n const cellRenderer = new CellRenderer(this.grid, this.grid.serviceLocator);\n const td = this.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n }\n }\n });\n }\n }\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n getContent() {\n return this.grid.getContent();\n }\n mergePersistTreeGridData() {\n const persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n }\n mergeColumns(storedColumn, columns) {\n const persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n }\n updateTreeGridModel() {\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 getContentTable() {\n return this.grid.getContentTable();\n }\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n getDataRows() {\n const dRows = [];\n const rows = this.grid.getDataRows();\n for (let 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 getCurrentViewRecords() {\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 getBatchChanges() {\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 getHeaderContent() {\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 getHeaderTable() {\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 getRowByIndex(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 getRowInfo(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 getUidByColumnField(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 getVisibleColumns() {\n const cols = [];\n for (const col of this.columnModel) {\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 showSpinner() {\n showSpinner(this.element);\n }\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n hideSpinner() {\n hideSpinner(this.element);\n }\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n refresh() {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ? this.flatData :\n new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n this.grid.refresh();\n }\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n getCheckedRecords() {\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 getVisibleRecords() {\n let visibleRecords = [];\n const currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (let 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 getCheckedRowIndexes() {\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 selectCheckboxes(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 refreshColumns(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 refreshHeader() {\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 expandCollapseRequest(target) {\n if (this.editSettings.mode === 'Batch') {\n const obj = 'dialogObj';\n const showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n const 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 const rowInfo = target.closest('.e-treerowcell').parentElement;\n const 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 const rowInfo = this.grid.getRowInfo(target);\n let 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 expandRow(row, record, key, level) {\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n const args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, (expandingArgs) => {\n if (!expandingArgs.cancel) {\n this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n const children = 'Children';\n if (!(isRemoteData(this) && !isOffline(this)) && (!isCountRequired(this) || !isNullOrUndefined(record[children]))) {\n const collapseArgs = { data: record, row: row };\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n }\n expandCollapseAllChildren(record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n const records = findChildrenRecords(record).filter((e) => {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (let i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n }\n setHeightForFrozenContent() {\n const 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 getCollapseExpandRecords(row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter((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 collapseRow(row, record, key) {\n record = this.getCollapseExpandRecords(row, record);\n const args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, (collapsingArgs) => {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n this.expandCollapseAllChildren(record, 'collapse', key);\n }\n this.expandCollapse('collapse', row, record);\n const collapseArgs = { data: record, row: row };\n if (!isRemoteData(this)) {\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, collapseArgs);\n if (this.enableInfiniteScrolling) {\n const scrollHeight = this.grid.getContent().firstElementChild.scrollHeight;\n const scrollTop = this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < this.grid.getRowHeight() + +this.height) {\n this.grid.getContent().firstElementChild.scrollBy(0, this.grid.getRowHeight());\n }\n }\n }\n }\n });\n }\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n expandAtLevel(level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n const rec = this.grid.dataSource.filter((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 const rec = this.getRecordDetails(level);\n const 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 expandByKey(key) {\n this.expandCollapseActionByKey(key, 'Expand');\n }\n expandAction(record, key, level, isPaging = false) {\n for (let i = 0; i < record.length; i++) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n const puniqueID = record[i].parentItem.uniqueID;\n let parentItem = this.flatData.filter((e) => {\n return e.uniqueID === puniqueID;\n });\n if (isRemoteData(this)) {\n parentItem = this.getCurrentViewRecords().filter((e) => {\n return e.uniqueID === puniqueID;\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, parentItem[0], this.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this.expandRow(null, record[i], key, level);\n }\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n }\n getRecordDetails(level) {\n const rows = this.getRows().filter((e) => {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n const records = this.getCurrentViewRecords().filter((e) => {\n return e.level === level && e.hasChildRecords;\n });\n const 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 collapseAtLevel(level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n const record = this.grid.dataSource.filter((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 const rec = this.getRecordDetails(level);\n const 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 collapseByKey(key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n }\n expandCollapseActionByKey(key, action) {\n const primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n const dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n const rec = dataSource.filter((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 collapseAction(record, key, isPaging = false) {\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (let 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 const 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 expandAll() {\n this.expandCollapseAll('expand');\n }\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n collapseAll() {\n this.expandCollapseAll('collapse');\n }\n expandCollapseAll(action) {\n const rows = this.getRows().filter((e) => {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n this.flatData.filter((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 const 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 (let 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 expandCollapse(action, row, record, isChild) {\n const expandingArgs = { row: row, data: record, childData: [], requestType: action };\n const childRecords = this.getCurrentViewRecords().filter((e) => {\n return e.parentUniqueID === record.uniqueID;\n });\n let targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n let gridRows = this.getRows();\n if (this.rowTemplate) {\n const rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n let rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n let displayAction;\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 const detailrows = gridRows.filter((r) => r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1)));\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 let totalRows = this.getRows();\n const rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (let i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n const table = this.getContentTable();\n const sHeight = table.scrollHeight;\n const 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 updateChildOnDemand(expandingArgs) {\n const deff = new Deferred();\n const childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n const record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(() => {\n if (expandingArgs.childData.length) {\n const currentData = (this.flatData);\n let index = 0;\n for (let i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n const data = getValue('result', this.dataSource);\n const childData = extendArray(expandingArgs.childData);\n const length = record[this.childMapping] ? record[this.childMapping].length > childData.length ?\n record[this.childMapping].length : childData.length : childData.length;\n for (let i = 0; i < length; i++) {\n if (record[this.childMapping]) {\n data.filter((e, i) => {\n if (e[this.parentIdMapping] === record[this.idMapping]) {\n data.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 (let j = 0; j < expandingArgs.childData.length; j++) {\n data.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 remoteExpand(action, row, record) {\n let gridRows = this.getRows();\n if (this.rowTemplate) {\n const rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n const args = { data: record, row: row };\n let rows = [];\n rows = gridRows.filter((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n const args = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n }\n localExpand(action, row, record) {\n let rows;\n const childRecords = this.getCurrentViewRecords().filter((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 let movableRows;\n let freezeRightRows;\n let gridRows = this.getRows();\n if (this.rowTemplate) {\n const rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n const displayAction = (action === 'expand') ? 'table-row' : 'none';\n const primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (let i = 0; i < childRecords.length; i++) {\n const rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n }\n const 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((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n }\n for (let i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if (!isNullOrUndefined(childRecords[i].childRecords) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n }\n updateAltRow(rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n let visibleRowCount = 0;\n for (let i = 0; rows && i < rows.length; i++) {\n const 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 treeColumnRowTemplate() {\n if (this.rowTemplate) {\n let rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (let i = 0; i < rows.length; i++) {\n const rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n const row = rows[i];\n const rowData = this.grid.getRowsObject()[i].data;\n const arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n }\n collapseRemoteChild(rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n const rows = rowDetails.rows;\n let row;\n let childRecord;\n let movablerows = [];\n let rightrows = [];\n const freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter((r) => r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1)));\n rightrows = this.getFrozenRightRows().filter((r) => r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1)));\n }\n for (let i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n const 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 const 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 const cRow = [];\n const eRows = this.getRows();\n for (let i = 0; i < eRows.length; i++) {\n if (eRows[i].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n }\n /**\n * @hidden\n * @returns {void}\n */\n addListener() {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n }\n updateResultModel(returnResult) {\n this.dataResults = returnResult;\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeListener() {\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 filterByColumn(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 clearFiltering() {\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 removeFilteredColsByField(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 selectRow(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 selectRows(rowIndexes) {\n this.grid.selectRows(rowIndexes);\n }\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n clearSelection() {\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 copy(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 paste(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 selectCell(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 getSelectedRows() {\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 getMovableCellFromIndex(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 getMovableDataRows() {\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 getMovableRowByIndex(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 getMovableRows() {\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 getFrozenRightRowByIndex(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 getFrozenRightRows() {\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 getFrozenRightDataRows() {\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 getFrozenRightCellFromIndex(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 getFrozenLeftColumnHeaderByIndex(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 getFrozenRightColumnHeaderByIndex(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 getMovableColumnHeaderByIndex(index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n }\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n getMovableColumnsCount() {\n return this.grid.getMovableColumnsCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n getFrozenLeftColumnsCount() {\n return this.grid.getFrozenLeftColumnsCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n getFrozenRightColumnsCount() {\n return this.grid.getFrozenRightColumnsCount();\n }\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n getFrozenLeftColumns() {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n }\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n getFrozenRightColumns() {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n }\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n getVisibleMovableCount() {\n return this.grid.getVisibleMovableCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n getVisibleFrozenRightCount() {\n return this.grid.getVisibleFrozenRightCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n getVisibleFrozenLeftCount() {\n return this.grid.getVisibleFrozenLeftCount();\n }\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n getMovableColumns() {\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 getFrozenColumns() {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n }\n getFrozenCount(cols, cnt) {\n for (let 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 getSelectedRowIndexes() {\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 getSelectedRowCellIndexes() {\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 getSelectedRecords() {\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 getDataModule() {\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 reorderRows(fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n }\n};\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);\nTreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n], TreeGrid);\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nexport class Reorder {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'reorder';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n }\n removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n getTreeColumn() {\n const columnModel = 'columnModel';\n const treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n let treeIndex;\n const updatedCols = this.parent.getColumns();\n for (let f = 0; f < updatedCols.length; f++) {\n const treeColumnfield = getObject('field', treeColumn);\n const 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}\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nexport class Resize {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 autoFitColumns(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 getModuleName() {\n return 'resize';\n }\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n destroy() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n }\n}\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nexport class RowDD {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n getChildrecordsByParentID(id) {\n let 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 const record = treeGridDataSource.filter((e) => {\n return e.uniqueID === id;\n });\n return record;\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 reorderRows(fromIndexes, toIndex, position) {\n const tObj = this.parent;\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n const data = [];\n for (let i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n const isByMethod = true;\n const args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n const index = this.parent.treeColumnIndex + 1;\n const row = this.parent.getRows()[fromIndexes[0]];\n const dropData = args.data[0];\n const totalRecord = [];\n const rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n const parentUniqueID = 'parentUniqueID';\n const parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n const parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n for (let i = 0; i < totalRecord.length; i++) {\n this.parent.renderModule.cellRender({\n data: totalRecord[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n }\n else {\n return;\n }\n }\n orderToIndex(currentData) {\n for (let i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n const updatedParent = currentData.filter((data) => {\n return data.uniqueID === currentData[i].parentUniqueID;\n })[0];\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n }\n rowsAdded(e) {\n let draggedRecord;\n const dragRecords = e.records;\n for (let i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n const record = dragRecords.filter((data) => {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n const index = record[0].childRecords.indexOf(draggedRecord);\n const 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 const tObj = this.parent;\n let draggedRecord;\n const dragRecords = e.records;\n const dragLength = e.records.length;\n for (let i = dragLength - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (!i && draggedRecord.hasChildRecords) {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n }\n const recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord.taskData, tObj.childMapping)) {\n draggedRecord.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord, tObj.childMapping) &&\n (draggedRecord[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n const childData = (draggedRecord[tObj.childMapping]);\n for (let j = 0; j < childData.length; j++) {\n if (dragRecords.indexOf(childData[j]) === -1) {\n dragRecords.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, tObj.parentIdMapping) && draggedRecord[tObj.parentIdMapping] != null\n && !this.isDraggedWithChild) {\n draggedRecord.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord.parentItem;\n delete draggedRecord.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (let i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n const 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((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 rowsRemoved(e) {\n for (let 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 refreshGridDataSource() {\n const draggedRecord = this.draggedRecord;\n const droppedRecord = this.droppedRecord;\n const proxy = this.parent;\n let tempDataSource;\n let idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n for (let i = 0; i < Object.keys(tempDataSource).length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n const record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n const childRecords = record.childRecords;\n for (let 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 removeFirstrowBorder(element) {\n const 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 removeLastrowBorder(element) {\n const isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n const islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n const 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 updateIcon(row, index, args) {\n const rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n let rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (let 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 const tObj = this.parent;\n let rowTop = 0;\n const roundOff = 0;\n const 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 const positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n const contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n const scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n const rowBottom = rowTop + row[0].offsetHeight;\n const difference = rowBottom - rowTop;\n const divide = difference / 3;\n const topRowSegment = rowTop + divide;\n const middleRowSegment = topRowSegment + divide;\n const bottomRowSegment = middleRowSegment + divide;\n const mouseEvent = getObject('originalEvent.event', args);\n const touchEvent = getObject('originalEvent.event', args);\n const posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n const isTopSegment = posy <= topRowSegment;\n const isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n const 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 let rowElement = [];\n const 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 removeChildBorder() {\n let 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 addFirstrowBorder(targetRow) {\n const node = this.parent.element;\n const tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n const div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n const gridheaderEle = this.parent.getHeaderContent();\n let toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n const 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 addLastRowborder(trElement) {\n const isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n const bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n const 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 getScrollWidth() {\n const scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n }\n addErrorElem() {\n const dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n const errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n const ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n const errorVal = dragelem.querySelector('.errorValue');\n let 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 const spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n }\n }\n removeErrorElem() {\n const errorelem = document.querySelector('.e-errorelem');\n if (errorelem) {\n errorelem.remove();\n }\n }\n topOrBottomBorder(target) {\n let rowElement = [];\n const 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 removetopOrBottomBorder() {\n let 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 addRemoveClasses(cells, add, className) {\n for (let 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 getOffset(element) {\n const box = element.getBoundingClientRect();\n const body = document.body;\n const docElem = document.documentElement;\n const scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n const clientTop = docElem.clientTop || body.clientTop || 0;\n const clientLeft = docElem.clientLeft || body.clientLeft || 0;\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n }\n Rowdraging(args) {\n const tObj = this.parent;\n const cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n const rowEle = args.target ? closest(args.target, 'tr') : null;\n const rowIdx = rowEle ? rowEle.rowIndex : -1;\n let dragRecords = [];\n const 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 const dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n const 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 const dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n }\n rowDropped(args) {\n const tObj = this.parent;\n const 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 let index = this.parent.treeColumnIndex;\n index = index + 1;\n const primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n let rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n const row = this.parent.getRows()[rowIndex];\n let data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n const record = [];\n const rows = [];\n record.push(data);\n rows.push(row);\n const parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n const parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (let 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 const 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 dragDropGrid(args) {\n const tObj = this.parent;\n const targetRow = closest(args.target, 'tr');\n const targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n const dropElement = parentsUntil(args.target, 'e-treegrid');\n let srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n let records = tObj.getSelectedRecords();\n const indexes = [];\n for (let i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n const data = srcControl.dataSource;\n if (this.parent.idMapping != null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n const actualData = [];\n for (let i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n const child = findChildrenRecords(records[i]);\n for (let i = 0; i < child.length; i++) {\n actualData.push(child[i]); // 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 const srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (let i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n const 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 getTargetIdx(targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n }\n getParentData(record) {\n const parentItem = record.parentItem;\n if (this.dropPosition === 'bottomSegment') {\n const selectedRecord = this.parent.getSelectedRecords()[0];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n const level = this.parent.getSelectedRecords()[0].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n }\n dropRows(args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n const tObj = this.parent;\n let draggedRecord;\n let droppedRecord;\n if (isNullOrUndefined(args.dropIndex)) {\n const rowIndex = tObj.getSelectedRowIndexes()[0] - 1;\n const record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n let dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n let count = 0;\n const 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 const dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n for (let i = 0; i < dragLength; i++) {\n draggedRecord = dragRecords[i];\n this.draggedRecord = draggedRecord;\n if (this.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this.deleteDragRow();\n }\n if (this.draggedRecord === this.droppedRecord) {\n let correctIndex = this.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this.droppedRecord = this.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this.dropPosition === 'middleSegment') {\n const parentRecords = tObj.parentData;\n const newParentIndex = parentRecords.indexOf(this.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n const recordIndex1 = this.treeGridData.indexOf(droppedRecord);\n this.dropAtTop(recordIndex1);\n if (this.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this.parent.parentIdMapping) {\n this.treeData.splice(recordIndex1 + 1, 0, this.draggedRecord.taskData);\n }\n this.treeGridData.splice(recordIndex1 + 1, 0, this.draggedRecord);\n }\n else {\n count = this.getChildCount(droppedRecord, 0);\n if (this.parent.parentIdMapping) {\n this.treeData.splice(recordIndex1 + count + 1, 0, this.draggedRecord.taskData);\n }\n this.treeGridData.splice(recordIndex1 + count + 1, 0, this.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord.parentItem;\n draggedRecord.level = 0;\n if (this.parent.parentIdMapping) {\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n const rec = this.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n const childRecords = rec[0].childRecords;\n const droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord);\n draggedRecord.parentItem = droppedRecord.parentItem;\n draggedRecord.parentUniqueID = droppedRecord.parentUniqueID;\n if (this.parent.parentIdMapping) {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.parentItem = droppedRecord.parentItem;\n draggedRecord.level = droppedRecord.level;\n }\n }\n if (draggedRecord.hasChildRecords) {\n const level = 1;\n this.updateChildRecordLevel(draggedRecord, level);\n this.updateChildRecord(draggedRecord, recordIndex1 + count + 1);\n }\n }\n this.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord.parentItem)) {\n const parentRecords = tObj.parentData;\n const newParentIndex = parentRecords.indexOf(this.droppedRecord);\n let nonRepeat = 0;\n parentRecords.filter((e) => {\n if (draggedRecord.uniqueID === e.uniqueID) {\n nonRepeat++;\n }\n });\n if (this.dropPosition === 'bottomSegment' && nonRepeat === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord);\n }\n else if (this.dropPosition === 'topSegment' && nonRepeat === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n }\n }\n }\n dropMiddle(recordIndex) {\n const tObj = this.parent;\n const childRecords = findChildrenRecords(this.droppedRecord);\n const 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 dropAtTop(recordIndex1) {\n const 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 const level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n const rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n const childRecords = rec[0].childRecords;\n const droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n }\n recordLevel() {\n const tObj = this.parent;\n const draggedRecord = this.draggedRecord;\n const droppedRecord = this.droppedRecord;\n const 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 const 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 const 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 const level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n }\n deleteDragRow() {\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 const 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 updateChildRecord(record, count) {\n let currentRecord;\n const tObj = this.parent;\n let length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (let 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 updateChildRecordLevel(record, level) {\n let length = 0;\n let currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (let i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n let parentData;\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 removeRecords(record) {\n const tObj = this.parent;\n let 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 const deletedRow = record;\n const isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n const flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n const childRecords = flatParentData ? flatParentData.childRecords : [];\n let childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n let idx;\n let idz;\n const treeGridData = dataSource;\n for (let 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 (let 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 let recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n const 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 const primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (let 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 const deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n }\n }\n removeChildItem(record) {\n let currentRecord;\n let idx;\n let idz;\n let 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 (let 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 let treeGridData;\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 (let i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (let i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i;\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 getChildCount(record, count) {\n let currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (let 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 ensuredropPosition(draggedRecords, currentRecord) {\n draggedRecords.filter((e) => {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n const 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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeEventListener() {\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 getModuleName() {\n return 'rowDragAndDrop';\n }\n}\n","/**\n * Base export\n */\nexport * from './treegrid';\nexport * from './constant';\nexport * from './data';\nexport * from '../actions/reorder';\nexport * from '../actions/resize';\nexport * from '../actions/rowdragdrop';\n","var __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 */\nexport class RowDropSettings extends ChildProperty {\n}\n__decorate([\n Property()\n], RowDropSettings.prototype, \"targetID\", void 0);\n","/**\n * Models export\n */\nexport * from './column';\nexport * from './edit-settings';\nexport * from './filter-settings';\nexport * from './page-settings';\nexport * from './search-settings';\nexport * from './selection-settings';\nexport * from './summary';\nexport * from './sort-settings';\nexport * from './rowdrop-settings';\nexport * from './infinite-scroll-settings';\n","import { 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 */\nexport class TreeVirtualRowModelGenerator extends VirtualRowModelGenerator {\n constructor(parent) {\n super(parent);\n this.addEventListener();\n }\n addEventListener() {\n this.parent.on(events.dataListener, this.getDatas, this);\n }\n getDatas(args) {\n this.visualData = args.data;\n }\n getDataInfo() {\n return super.getData();\n }\n generateRows(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 const 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.generateRows(data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n const rows = super.generateRows(data, notifyArgs);\n for (let r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n }\n checkAndResetCache(action) {\n const clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some((value) => 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 const model = 'model';\n const 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}\n","/**\n * Renderer export\n */\nexport * from './render';\nexport * from './virtual-row-model-generator';\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 */\nexport class Filter {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'filter';\n }\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 updatedFilteredRecord(dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (let f = 0; f < this.flatFilteredData.length; f++) {\n const rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n const 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 const ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n const parent = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent)) {\n const 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 updateParentFilteredRecord(record) {\n const parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n const 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 addParentRecord(record) {\n const parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n const 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 const hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n checkChildExsist(records) {\n const childRec = getObject('childRecords', records);\n let isExist = false;\n for (let count = 0; count < childRec.length; count++) {\n const ischild = childRec[count].childRecords;\n const 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 const 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 updateFilterLevel() {\n const record = this.filteredResult;\n const len = this.filteredResult.length;\n for (let c = 0; c < len; c++) {\n const parent = getParentData(this.parent, record[c].parentUniqueID);\n const isPrst = record.indexOf(parent) !== -1;\n if (isPrst) {\n const parent = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n }\n clearFilterLevel(data) {\n let count = 0;\n const flatData = data.flatData;\n const len = flatData.length;\n let currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n const 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}\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 */\nexport class ExcelExport {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'ExcelExport';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeEventListener() {\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 updateExcelResultModel(returnResult) {\n this.dataResults = returnResult;\n }\n Map(excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n const dataSource = this.parent.dataSource;\n const 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((resolve) => {\n const dm = this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : this.parent.dataSource;\n let 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((e) => {\n let 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((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 generateQuery(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 manipulateExportProperties(property, dtSrc, queryResult) {\n //count not required for this query\n let 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 const flatsData = this.parent.flatData;\n const 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 excelQueryCellInfo(args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n const style = {};\n const data = args.data;\n const ispadfilter = isNullOrUndefined(data.filterLevel);\n const 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 exportRowDataBound(excelRow) {\n if (excelRow.type === 'excel') {\n const excelrowobj = excelRow.rowObj.data;\n const filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n const rowlength = excelRow.excelRows.length;\n const rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n let expandedStatus = false;\n let sublevelState = false;\n const 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 finalPageSetup(workbook) {\n for (let i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n }\n isLocal() {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n }\n}\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 */\nexport class PdfExport {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'PdfExport';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n updatePdfResultModel(returnResult) {\n this.dataResults = returnResult;\n }\n Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n const dtSrc = this.parent.dataSource;\n const prop = Object();\n const isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise((resolve) => {\n const dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : this.parent.dataSource;\n let 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((e) => {\n let 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((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 generateQuery(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 manipulatePdfProperties(prop, dtSrc, queryResult) {\n let args = {};\n //count not required for this query\n const 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 const flatDatas = this.parent.flatData;\n const 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 pdfQueryCellInfo(args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n const style = {};\n const data = getObject('data', args);\n const ispadfilter = isNullOrUndefined(data.filterLevel);\n const 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}\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 */\nexport class Page {\n constructor(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 getModuleName() {\n return 'pager';\n }\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n refresh() {\n this.parent.grid.pagerModule.refresh();\n }\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\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 goToPage(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 updateExternalMessage(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 collapseExpandPagedchilds(rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n const primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n const record = this.parent.flatData.filter((e) => {\n return e[primaryKeyField] === rowDetails.record[primaryKeyField];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n const 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 const row = 'row';\n const action = 'action';\n let targetEle;\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 pageRoot(pagedResults, temp, result) {\n let newResults = isNullOrUndefined(result) ? [] : result;\n for (let t = 0; t < temp.length; t++) {\n newResults.push(temp[t]);\n let res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter((e) => {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this.pageRoot(pagedResults, res, newResults);\n }\n }\n return newResults;\n }\n pageAction(pageingDetails) {\n const dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n let temp = [];\n const propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n let query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n const size = this.parent.grid.pageSettings.pageSize;\n const current = this.parent.grid.pageSettings.currentPage;\n const skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n const newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n const dm = new DataManager(pageingDetails.result);\n const expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n const parents = dm.executeLocal(new Query().where(expanded));\n let visualData;\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;\n }\n else {\n visualData = parents.filter((e) => {\n return getExpandStatus(this.parent, e, parents);\n });\n }\n pageingDetails.count = visualData.length;\n let query = new Query();\n const size = this.parent.grid.pageSettings.pageSize;\n let 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 const skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n }\n}\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 */\nexport class Toolbar {\n constructor(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 getModuleName() {\n return 'toolbar';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeEventListener() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n }\n refreshToolbar(args) {\n const tObj = this.parent;\n if (args.row.rowIndex === 0 || tObj.getSelectedRecords().length > 1) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent', tObj.element.id + '_gridcontrol_outdent'], false);\n }\n else {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex])) {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex]) &&\n (tObj.getCurrentViewRecords()[args.row.rowIndex].level >\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level)) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n else {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level ===\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level === 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level !== 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n }\n if (args.row.rowIndex === 0 && !isNullOrUndefined(args.data.parentItem)) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n toolbarClickHandler(args) {\n const tObj = this.parent;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length) {\n const record = tObj.getCurrentViewRecords()[tObj.getSelectedRowIndexes()[0] - 1];\n let dropIndex;\n if (record.level > tObj.getSelectedRecords()[0].level) {\n for (let i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = tObj.getSelectedRowIndexes()[0] - 1;\n }\n tObj.reorderRows([tObj.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n const index = tObj.getSelectedRowIndexes()[0];\n let dropIndex;\n const parentItem = tObj.getSelectedRecords()[0].parentItem;\n for (let i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n tObj.reorderRows([index], dropIndex, 'below');\n }\n }\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n getToolbar() {\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 enableItems(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 destroy() {\n this.removeEventListener();\n }\n}\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 */\nexport class Aggregate {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'summary';\n }\n removeEventListener() {\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 calculateSummaryValue(summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n let parentRecord;\n const parentDataLength = Object.keys(filteredData).length;\n const parentData = [];\n for (let p = 0, len = parentDataLength; p < len; p++) {\n const summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n const parentRecords = findParentRecords(parentData);\n const flatRecords = parentData.slice();\n const summaryLength = Object.keys(this.parent.aggregates).length;\n const dataLength = Object.keys(parentRecords).length;\n let childRecordsLength;\n const columns = this.parent.getColumns();\n if (this.parent.aggregates.filter((x) => x.showChildSummary).length) {\n for (let i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n for (let summaryRowIndex = 1, len = summaryLength; summaryRowIndex <= len; summaryRowIndex++) {\n let item;\n item = {};\n for (let i = 0; i < columns.length; i++) {\n const field = (isNullOrUndefined(getObject('field', columns[i]))) ?\n columns[i] : getObject('field', (columns[i]));\n item[field] = null;\n }\n item = this.createSummaryItem(item, this.parent.aggregates[summaryRowIndex - 1]);\n if (this.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n let idx;\n flatRecords.map((e, i) => {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx = i;\n return;\n }\n });\n const currentIndex = idx + childRecordsLength + summaryRowIndex;\n const summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n const 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 const childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n continue;\n }\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n const items = {};\n for (let columnIndex = 0, length = columns.length; columnIndex < length; columnIndex++) {\n const fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (let summaryRowIndex = 1, length = summaryLength; summaryRowIndex <= length; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n }\n getChildRecordsLength(parentData, flatData) {\n const recordLength = Object.keys(flatData).length;\n let record;\n for (let i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n const parent = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter((e) => { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent) {\n this.flatChildRecords.push(record);\n const 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 createSummaryItem(itemData, summary) {\n const summaryColumnLength = Object.keys(summary.columns).length;\n for (let i = 0, len = summaryColumnLength; i < len; i++) {\n const displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n const keys = Object.keys(itemData);\n for (const key of keys) {\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 const 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 getSummaryValues(summaryColumn, summaryData) {\n const qry = new Query();\n const single = {};\n const helper = {};\n const 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 const formatFn = summaryColumn.getFormatter() || (() => (a) => a)();\n summaryColumn.setTemplate(helper);\n const tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n const sumData = new DataManager(summaryData).executeLocal(qry);\n let types = summaryColumn.type;\n let summaryKey;\n types = [summaryColumn.type];\n for (let i = 0; i < types.length; i++) {\n summaryKey = types[i];\n const key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n const val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n const disp = summaryColumn.columnName;\n const value = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n const cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n const 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 const value = single[summaryColumn.columnName][summaryKey];\n let 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 getFormatFromType(summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n let 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 destroy() {\n this.removeEventListener();\n }\n}\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 */\nexport class Sort {\n constructor(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 getModuleName() {\n return 'sort';\n }\n /**\n * @hidden\n */\n addEventListener() {\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 removeEventListener() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n }\n createdSortedRecords(sortParams) {\n const data = sortParams.modifiedData;\n const srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n }\n iterateSort(data, srtQry) {\n for (let 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 const childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n this.iterateSort(childSort, srtQry);\n }\n }\n }\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n sortColumn(columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n }\n removeSortColumn(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 updateModel() {\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 clearSorting() {\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 destroy() {\n this.removeEventListener();\n }\n}\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nexport class ColumnMenu {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n getColumnMenu() {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n }\n destroy() {\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 getModuleName() {\n return 'columnMenu';\n }\n}\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 */\nexport class ContextMenu {\n constructor(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n }\n contextMenuOpen(args) {\n const addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n const editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n }\n contextMenuClick(args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.addRecord();\n }\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n getModuleName() {\n return 'contextMenu';\n }\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n destroy() {\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 getContextMenu() {\n return this.parent.grid.contextMenuModule.getContextMenu();\n }\n}\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nexport class BatchEdit {\n constructor(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 addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n getBatchRecords() {\n return this.batchRecords;\n }\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n getAddRowIndex() {\n return this.addRowIndex;\n }\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n getSelectedIndex() {\n return this.selectedIndex;\n }\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n getBatchChildCount() {\n return this.batchChildCount;\n }\n batchPageAction() {\n const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (let i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map((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 cellSaved(args) {\n let actualCellIndex = args.cell.cellIndex;\n const frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n const freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n const 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 const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n let added;\n const level = 'level';\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let currentDataIndex;\n let indexvalue;\n const parentItem = 'parentItem';\n const uniqueID = 'uniqueID';\n const parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n let idMapping;\n let parentUniqueID;\n let parentIdMapping;\n let 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 const childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n let record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map((e) => { return e[primaryKey]; }).indexOf(record[primaryKey]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey, 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 const childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n let record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map((e) => { return e[primaryKey]; }).indexOf(record[primaryKey]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n const record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map((e) => { return e[primaryKey]; }).indexOf(record[primaryKey]);\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 beforeBatchAdd(e) {\n const isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n batchAdd(e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n let actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n let 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 const focusModule = getValue('focusModule', this.parent.grid);\n const 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 beforeBatchDelete(args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n const focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n const row = [];\n let records = [];\n const primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let data;\n let childs;\n let 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 const parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n const totalCount = parentRowIndex + childs.length;\n const firstChildIndex = parentRowIndex + 1;\n for (let 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 const parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n const 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 (let i = 0; i < records.length; i++) {\n const indexvalue = this.batchRecords.map((e) => { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (let i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n }\n updateRowIndex() {\n const rows = this.parent.grid.getDataRows();\n for (let i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n const 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 const mRows = this.parent.grid.getMovableDataRows();\n const freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (let 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 updateChildCount(records) {\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n const addedRecords = 'addedRecords';\n const parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (let 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 beforeBatchSave(e) {\n const changeRecords = 'changedRecords';\n const deleterecords = 'deletedRecords';\n const changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n let columnName;\n for (let 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 const deletedRecords = e.batchChanges[deleterecords];\n const record = deletedRecords;\n for (let i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n const childs = findChildrenRecords(record[i]);\n for (let c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = [...e.batchChanges[deleterecords], ...childs];\n }\n }\n this.isAdd = false;\n }\n deleteUniqueID(value) {\n const idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n const id = 'uniqueIDCollection';\n delete this.parent[id][value];\n }\n batchCancelAction() {\n const targetElement = 'targetElement';\n let index;\n const parentItem = 'parentItem';\n const indexvalue = 'index';\n const currentViewRecords = this.parent.grid.getCurrentViewRecords();\n const childRecords = 'childRecords';\n const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (let i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map((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((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 const children = currentViewRecords[index][childRecords];\n for (let 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 const row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (let i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map((e) => { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n const 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 batchSave(args) {\n if (this.parent.editSettings.mode === 'Batch') {\n let i;\n const batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n const deletedRecords = 'deletedRecords';\n const addedRecords = 'addedRecords';\n const index = 'index';\n const uniqueID = 'uniqueID';\n const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n let currentViewRecords = this.parent.grid.getCurrentViewRecords();\n const primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n const level = 'level';\n const addRecords = batchChanges[addedRecords];\n const parentItem = 'parentItem';\n let selectedIndex;\n let addRowIndex;\n let columnName;\n let addRowRecord;\n const childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n const totalRecords = extendArray(data);\n if (totalRecords.length) {\n const startIndex = totalRecords.map((e) => { return e[primarykey]; })\n .indexOf(currentViewRecords[0][primarykey]);\n const 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 const 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, 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 const indexValue = currentViewRecords.map((e) => { return e[primarykey]; })\n .indexOf(addRecords[i][parentItem][primarykey]);\n const children = currentViewRecords[indexValue][childRecords];\n for (let j = 0; j < children.length; j++) {\n if (children[j][primarykey] === addRecords[i][primarykey]) {\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 (let i = 0; i < data.length; i++) {\n data[i][index] = i;\n setValue('uniqueIDCollection.' + data[i][uniqueID] + '.index', i, this.parent);\n if (!data[i][level]) {\n this.parent.parentData.push(data[i]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n }\n getActualRowObjectIndex(index) {\n const 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 const 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 immutableBatchAction(e) {\n e.args.cancel = true;\n const changes = this.parent.grid.getBatchChanges();\n let addedRecords = [];\n const index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (let i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n }\n nextCellIndex(args) {\n const index = 'index';\n const rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n}\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 */\nexport class Edit {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'edit';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 gridDblClick(e) {\n this.doubleClickTarget = e.target;\n }\n getRowPosition(addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n }\n beforeStartEdit(args) {\n this.parent.trigger(events.actionBegin, args);\n }\n beforeBatchCancel(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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n applyFormValidation(cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n }\n editActionEvents(args) {\n const eventArgs = getObject('editAction', args);\n const eventName = getObject('name', eventArgs);\n const treeObj = this.parent;\n const 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 const rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n const 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 const paramsLength = treeObj.grid.query.params.length;\n for (let 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 infiniteAddAction(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 const rowObjects = this.parent.grid.getRowsObject();\n const newRowObject = rowObjects.splice(0, 1)[0];\n let newRowObjectIndex = this.addRowIndex;\n const 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 const newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n const movableRows = this.parent.grid.getMovableRows();\n const movableRowsObject = this.parent.grid.getMovableRowsObject();\n const 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 updateInfiniteCurrentViewData(newRecord, newRowIndex) {\n const infiniteData = 'infiniteCurrentViewData';\n const updateCurrentViewData = 'updateCurrentViewData';\n const size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n let page = size > 0 ? size : 1;\n let dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n const infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n let data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter((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 recordDoubleClick(args) {\n const 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 const 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 const 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 updateGridEditMode(mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n const updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n }\n resetIsOnBatch() {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n }\n keyPressed(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 deleteUniqueID(value) {\n const idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n const id = 'uniqueIDCollection';\n delete this.parent[id][value];\n }\n cellEdit(args) {\n const promise = 'promise';\n const prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex)) {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, (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 enableToolbarItems(request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n const 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 batchCancel() {\n if (this.parent.editSettings.mode === 'Cell') {\n const cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n const 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 customCellSave(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 cellSave(args) {\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n const editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n let row;\n if (isNullOrUndefined(args.cell)) {\n row = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row = args.cell.parentNode;\n }\n let rowIndex;\n const primaryKeys = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row)) {\n this.parent.grid.getCurrentViewRecords().filter((e, i) => {\n if (e[primaryKeys[0]] === args.rowData[primaryKeys[0]]) {\n rowIndex = i;\n return;\n }\n });\n }\n else {\n const freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row) !== -1) {\n rowIndex = this.parent.getRows().indexOf(row);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row) !== -1) {\n rowIndex = this.parent.getFrozenRightRows().indexOf(row);\n }\n else {\n rowIndex = this.parent.getMovableRows().indexOf(row);\n }\n }\n else {\n rowIndex = (this.parent.getRows().indexOf(row) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row) : this.parent.getRows().indexOf(row);\n }\n }\n const arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row = this.parent.grid.getRows()[row.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row.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 const eventPromise = 'eventPromise';\n const editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row,\n rowIndex: rowIndex, 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);\n this.afterCellSave(args, row, rowIndex);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n const query = this.parent.grid.query;\n let crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then((e) => {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n this.updateCell(args, rowIndex);\n this.afterCellSave(args, row, rowIndex);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n }\n afterCellSave(args, row, rowIndex) {\n let 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 const 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 const 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((ag) => ag.showChildSummary === true).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n }\n lastCellTab() {\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 updateCell(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 crudAction(details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n const data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (let i = 0; i < data.length; i++) {\n data[i].index = i;\n const 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 const adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n updateIndex(data, rows, records) {\n for (let j = 0; j < this.parent.getDataRows().length; j++) {\n const data1 = records[j];\n const index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n const parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n let count = -1;\n let treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n const cells = rows[0].querySelectorAll('.e-rowcell');\n for (let l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (let k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n const data2 = records[count];\n let index = data2.index;\n const level = data2.level;\n const row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n const treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (let l = 0; l < treecell.classList.length; l++) {\n const value = treecell.classList[l];\n const remove = /e-gridrowindex/i;\n const removed = /e-griddetailrowindex/i;\n const result = value.match(remove);\n const 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 beginAdd() {\n let position;\n let index = this.addRowIndex;\n let 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 const rows = this.parent.grid.getDataRows();\n const firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n const lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n const withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n const 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 const 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 const r = 'rows';\n const newRowObject = this.parent.grid.contentModule[r][0];\n const focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n const 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 const 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 const movableRows = this.parent.getMovableDataRows();\n const frows = 'freezeRows';\n const newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n const 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 const errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (let i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n }\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n beginEdit(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 const data = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n const primaryKeys = this.parent.getPrimaryKeyFieldNames();\n for (let i = 0; i < data.length; i++) {\n this.parent.flatData.filter((e) => {\n if (e[primaryKeys[0]] === args.data[i][primaryKeys[0]]) {\n data[i] = e;\n }\n });\n }\n }\n for (let i = 0; i < data.length; i++) {\n this.deleteUniqueID(data[i].uniqueID);\n const childs = findChildrenRecords(data[i]);\n for (let c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = [...args.data, ...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 let selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n let row;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n }\n savePreviousRowPosition() {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n }\n beginAddEdit(args) {\n const value = args.data;\n if (args.action === 'add') {\n const key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n const 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 let index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n let level = 0;\n let idMapping;\n let parentUniqueID;\n let parentItem;\n let parentIdMapping;\n const isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n const rows = this.parent.getRows();\n const firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n const lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n const 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 const childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n const 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 const childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n const 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 const 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 const deletedValues = args.data;\n for (let i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n const parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n const 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 addRecord(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 const addRecords = [];\n const previousEditMode = this.parent.editSettings.mode;\n const 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 const updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords, 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 editFormValidate() {\n return this.parent.grid.editModule.editFormValidate();\n }\n /**\n * @hidden\n * @returns {void}\n */\n destroyForm() {\n this.parent.grid.editModule.destroyForm();\n }\n contentready(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 editCell(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}\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nexport class CommandColumn {\n constructor(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 getModuleName() {\n return 'commandColumn';\n }\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n destroy() {\n //this.removeEventListener();\n }\n}\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 */\nexport class DetailRow {\n constructor(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 getModuleName() {\n return 'detailRow';\n }\n addEventListener() {\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 removeEventListener() {\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 setIndentVisibility(args) {\n const visible = 'visible';\n args[visible] = false;\n }\n dataBoundArg() {\n const detailele = this.parent.getRows().filter((e) => {\n return !e.classList.contains('e-detailrow');\n });\n for (let i = 0; i < detailele.length; i++) {\n const elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n const detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n const 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 childRowExpand(args) {\n const detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n }\n rowExpandCollapse(args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (let i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n }\n detaildataBound(args) {\n const data = args.data;\n const row = args.detailElement.parentElement.previousSibling;\n const index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n const expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n const classlist = row.querySelector('.' + expandClass).classList;\n const gridClas = [].slice.call(classlist).filter((gridclass) => (gridclass === expandClass));\n const newNo = gridClas[0].length;\n const slicedclas = gridClas.toString().slice(6, newNo);\n const detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n }\n actioncomplete(args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n const spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n const colum = parseInt(spann, 10) - 1;\n const updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n const focusElement = this.parent.grid.contentModule.getRows();\n for (let i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n const focusModule = getObject('focusModule', this.parent.grid);\n const 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 destroy() {\n this.removeEventListener();\n }\n}\n","import { 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';\nexport class VirtualTreeContentRenderer extends VirtualContentRenderer {\n constructor(parent, locator) {\n super(parent, locator);\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 }\n getModelGenerator() {\n return new TreeVirtualRowModelGenerator(this.parent);\n }\n getRowByIndex(index) {\n return this.parent.getDataRows().filter((e) => parseInt(e.getAttribute('aria-rowindex'), 10) === index)[0];\n }\n addEventListener() {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n }\n virtualOtherAction(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 indexModifier(args) {\n const 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 const nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n let 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 eventListener(action) {\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 = () => {\n this.observers.observes((scrollArgs) => 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.eventListener('on');\n }\n }\n cellFocus(e) {\n const virtualCellFocus = 'virtualCellFocus';\n super[virtualCellFocus](e);\n }\n onDataReady(e) {\n super.onDataReady(e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || this.isDataSourceChanged) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n }\n renderTable() {\n super.renderTable();\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 getTranslateY(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.getTranslateY(sTop, cHeight, info, isOnenter);\n return super.getTranslateY(sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return super.getTranslateY(sTop, cHeight, info, isOnenter);\n }\n }\n dataBoundEvent() {\n const dataBoundEve = 'dataBound';\n const initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n const rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n const 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[dataBoundEve]();\n }\n rowSelectedEvent(args) {\n const rowSelected = 'rowSelected';\n super[rowSelected](args);\n }\n toSelectVirtualRow(args) {\n if (this.parent.isEdit) {\n return;\n }\n const selectVirtualRow = 'selectVirtualRow';\n const 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[selectVirtualRow](args);\n }\n }\n refreshCell(rowObj) {\n rowObj.cells = this.generateCells();\n }\n generateCells() {\n const cells = [];\n for (let i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n }\n generateCell(col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n const 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 beginEdit(e) {\n const selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n const index = this.parent.getContent().querySelector(selector).rowIndex;\n const rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n }\n beginAdd(args) {\n const addAction = 'addActionBegin';\n const isAdd = 'isAdd';\n const 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 const rows = this.parent.getRows();\n const firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n const lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n const 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[addAction](args);\n }\n }\n restoreEditState() {\n const restoreEdit = 'restoreEdit';\n super[restoreEdit]();\n }\n resetIseditValue() {\n const resetIsEdit = 'resetIsedit';\n const isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n super[resetIsEdit]();\n }\n }\n virtualEditSuccess() {\n const isAdd = 'isAdd';\n const content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n }\n cancelEdit(args) {\n const editCancel = 'editCancel';\n super[editCancel](args);\n }\n toSelectRowOnContextOpen(args) {\n const selectRowOnContextOpen = 'selectRowOnContextOpen';\n super[selectRowOnContextOpen](args);\n }\n restoreNewRow() {\n const isAdd = 'isAdd';\n const 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 getData(data) {\n const getVirtualData = 'getVirtualData';\n super[getVirtualData](data);\n }\n onActionComplete(args) {\n if (args.requestType === 'add') {\n const 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 const actionComplete = 'actionComplete';\n super[actionComplete](args);\n }\n onEnteredAction() {\n return (element, current, direction, e, isWheel, check) => {\n const directVirtualRender = 'directVirtualRender';\n if (!this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n const preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !this[preventEvent]) {\n this.parent.showSpinner();\n }\n const xAxis = current.axis === 'X';\n let x = this.getColumnOffset(xAxis ? this.vgenerator.getColumnIndexes()[0] - 1 : this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n const idx = Object.keys(this.vgenerator.cOffsets).length - this.prevInfo.columnIndexes.length;\n const 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 scrollListeners(scrollArgs) {\n const info = scrollArgs.sentinel;\n const outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n const content = this.parent.getContent().querySelector('.e-content');\n const scrollHeight = outBuffer * this.parent.getRowHeight();\n const upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n const downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n const selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n const vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n let 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 const lastInx = this.totalRecords - 1;\n const 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 let rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n let firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n const attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n const 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 let nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n const 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 let lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n const 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 const 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 appendContent(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.appendContent(target, newChild, e);\n }\n else {\n const 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 const cBlock = (info.columnIndexes[0]) - 1;\n const cOffset = this.getColumnOffset(cBlock);\n let width;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n const 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 const 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 const focusCell = 'focusCell';\n const restoreAdd = 'restoreAdd';\n const ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n super[focusCell](e);\n const 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[restoreAdd]();\n super[ensureSelectedRowPosition]();\n }\n }\n removeEventListener() {\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}\nexport class TreeInterSectionObserver extends InterSectionObserver {\n constructor() {\n super(...arguments);\n this.isWheeling = false;\n this.newPos = 0;\n this.lastPos = 0;\n this.timer = 0;\n }\n observes(callback, onEnterCallback) {\n const containerRect = 'containerRect';\n super[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n }\n clear() {\n this.lastPos = null;\n }\n virtualScrollHandlers(callback, onEnterCallback) {\n const delay = Browser.info.name === 'chrome' ? 200 : 100;\n const options = 'options';\n const movableEle = 'movableEle';\n const element = 'element';\n const fromWheel = 'fromWheel';\n const debounced100 = debounce(callback, delay);\n const debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return (e) => {\n const top = this[options].movableContainer ? this[options].container.scrollTop : e.target.scrollTop;\n const left = this[options].movableContainer ? this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n let 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 const current = this.sentinelInfo[direction];\n let 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 const 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 let 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}\n","import { 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 */\nexport class VirtualScroll {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n returnVisualData(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 getModuleName() {\n return 'virtualScroll';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 collapseExpandVirtualchilds(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 const 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 const requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n }\n virtualPageAction(pageingDetails) {\n const dm = new DataManager(pageingDetails.result);\n const expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n const parents = dm.executeLocal(new Query().where(expanded));\n const visualData = parents.filter((e) => {\n return getExpandStatus(this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n const counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n let startIndex = counts.startIndex;\n let endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n let query = new Query();\n const size = this.parent.grid.pageSettings.pageSize;\n const current = this.parent.grid.pageSettings.currentPage;\n const 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 const requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n const resourceCount = this.parent.getRows();\n let sIndex = visualData.indexOf(this.expandCollapseRec);\n const 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 destroy() {\n this.removeEventListener();\n }\n}\nexport class TreeVirtual extends GridVirtualScroll {\n constructor(parent, locator) {\n super(parent, locator);\n getValue('parent', this).off('initial-load', getValue('instantiateRenderer', this), this);\n getValue('parent', this).on('initial-load', this.instantiateRenderers, this);\n }\n getModuleName() {\n return 'treeVirtualScroll';\n }\n instantiateRenderers() {\n const parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n const 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 ensurePageSize() {\n const parentGrid = getValue('parent', this);\n const 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 const vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n const blockSize = ~~(vHeight / rowHeight);\n const height = blockSize * 2;\n const size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n }\n}\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 */\nexport class Freeze {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n addEventListener() {\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 removeEventListener() {\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 rowExpandCollapse(args) {\n const movableRows = this.parent.getMovableDataRows();\n const frozenrows = this.parent.getRows();\n let rows;\n let frozenRightRows;\n const freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter((e) => e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1)));\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter((e) => e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1)));\n }\n else {\n rows = args.detailrows;\n }\n for (let i = 0; i < rows.length; i++) {\n const 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 const queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n const cRow = [];\n for (let i = 0; i < movableRows.length; i++) {\n if (movableRows[i].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n }\n dblClickHandler(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 dataBoundArg() {\n const checkboxColumn = this.parent.getColumns().filter((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 destroy() {\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 getModuleName() {\n return 'freeze';\n }\n}\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nexport class ColumnChooser {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n constructor(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 openColumnChooser(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 destroy() {\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 getModuleName() {\n return 'ColumnChooser';\n }\n}\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nexport class InfiniteScroll {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'infiniteScroll';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeEventListener() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n }\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n infiniteRemoteExpand(args) {\n const rowObjects = this.parent.grid.getRowsObject();\n const locator = 'serviceLocator';\n const generateRows = 'generateRows';\n const serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n const rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n const rows = this.parent.getRows();\n const position = args.index === rows.length - 1 ? 'after' : 'before';\n const cols = this.parent.grid.getColumns();\n const childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n const childRowElements = [];\n for (let i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice(args.index + 1, 0, ...childRowObjects);\n for (let 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 contentready() {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n const updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n infinitePageAction(pageingDetails) {\n const dm = new DataManager(pageingDetails.result);\n const expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n const visualData = dm.executeLocal(new Query().where(expanded));\n const actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n const actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n const initial = actions.some((value) => { return value === actionArgs.requestType; });\n const 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 let query = new Query();\n const 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 const size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n const current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n const lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n const firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n const skip = lastIndex - actionArgs.data.length + 1;\n const take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n }\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n infiniteEditHandler(args) {\n const infiniteData = 'infiniteCurrentViewData';\n const infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n const keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (let 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 infiniteDeleteHandler(args) {\n if (args.requestType === 'delete') {\n const rows = this.parent.grid.getRowsObject();\n const rowElms = this.parent.getRows();\n const data = args.data instanceof Array ? args.data : [args.data];\n const keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n const mRows = this.parent.grid.getMovableRowsObject();\n const 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 removeRows(rowElms, rows, data, keyField, isFrozen) {\n const resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n for (let i = 0; i < data.length; i++) {\n rows.filter((e, index) => {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n const 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 }\n /**\n * Handles the row objects for Add operation.\n */\n createRows(eventArgs) {\n const locator = 'serviceLocator';\n const actionArgs = eventArgs.args.e;\n const row = eventArgs.row;\n const serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n const rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n let tbody;\n const currentData = this.parent.getCurrentViewRecords();\n const 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 let position;\n const addRowIndex = 'addRowIndex';\n let newRowIndex = this.parent.editModule[addRowIndex];\n for (let i = 0; i < row.length; i++) {\n const newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex + 1]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n }\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n this.removeEventListener();\n }\n}\n","/**\n * actions export\n */\nexport * from './filter';\nexport * from './excel-export';\nexport * from './pdf-export';\nexport * from './page';\nexport * from './toolbar';\nexport * from './summary';\nexport * from './sort';\nexport * from './reorder';\nexport * from './resize';\nexport * from './clipboard';\nexport * from './column-menu';\nexport * from './context-menu';\nexport * from './edit';\nexport * from './command-column';\nexport * from './selection';\nexport * from './detail-row';\nexport * from './virtual-scroll';\nexport * from './freeze-column';\nexport * from './column-chooser';\nexport * from './logger';\nexport * from './infinite-scroll';\n","/**\n * TreeGrid component exported items\n */\nexport * from './base';\nexport * from './models';\nexport * from './renderer';\nexport * from './utils';\nexport * from './enum';\nexport * from './actions';\n","/**\n * Export TreeGrid component\n */\nexport * from './treegrid/index';\n"],"names":["__decorate","this","Predicate","Logger","GridLogger","GridClipboard","events.beforeCopy","events.checkboxChange","Print","GridPrint","events.printGridInit","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","collapsed","extend","events.remoteExpand","events.actionComplete","events.expanded","events.pagingActions","events.crudAction","events.batchSave","TreeGridSelection","events.load","events.rowSelecting","events.rowSelected","events.rowDeselected","events.resizeStop","events.beforePaste","TreeLogger","events.dataBound","events.toolbarClick","events.beginEdit","events.dataStateChange","events.cellSave","events.cellSaved","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","events.actionBegin","events.beginAdd","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","events.rowDragStart","events.rowdraging","events.rowDrag","events.rowDropped","merge","events.expanding","events.collapsing","events.collapsed","events.localPagedExpandCollapse","Reorder","GridReorder","Resize","GridResize","RowDD","GridDragDrop","events.rowsAdd","events.rowsRemove","events.rowDrop","RowDropSettings","events.dataListener","Filter","GridFilter","ExcelExport","GridExcel","event.beforeExcelExport","PdfExport","GridPdf","event.beforePdfExport","Page","GridPage","expanded","Toolbar","tool","Aggregate","GridAggregate","Sort","GridSort","ColumnMenu","GridColumnMenu","ContextMenu","cmenu","Edit","GridEdit","events.keyPressed","events.doubleTap","events.beforeStartEdit","events.beforeBatchCancel","remove","CommandColumn","Command","DetailRow","detailrow","events.virtualActionArgs","events.indexModifier","rowSelected","actionComplete","events.autoCol","VirtualScroll","events.destroy","GridVirtualScroll","Freeze","FreezeColumn","ColumnChooser","GridColumnChooser","InfiniteScroll","GridInfiniteScroll"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-treegrid.es2015.js","sources":["../src/es6/treegrid/models/column.js","../src/es6/treegrid/models/filter-settings.js","../src/es6/treegrid/models/textwrap-settings.js","../src/es6/treegrid/actions/logger.js","../src/es6/treegrid/base/constant.js","../src/es6/treegrid/actions/clipboard.js","../src/es6/treegrid/utils.js","../src/es6/treegrid/actions/selection.js","../src/es6/treegrid/actions/print.js","../src/es6/treegrid/models/search-settings.js","../src/es6/treegrid/models/selection-settings.js","../src/es6/treegrid/renderer/render.js","../src/es6/treegrid/base/data.js","../src/es6/treegrid/enum.js","../src/es6/treegrid/models/page-settings.js","../src/es6/treegrid/models/summary.js","../src/es6/treegrid/models/edit-settings.js","../src/es6/treegrid/models/sort-settings.js","../src/es6/treegrid/actions/crud-actions.js","../src/es6/treegrid/models/infinite-scroll-settings.js","../src/es6/treegrid/base/treegrid.js","../src/es6/treegrid/actions/reorder.js","../src/es6/treegrid/actions/resize.js","../src/es6/treegrid/actions/rowdragdrop.js","../src/es6/treegrid/base/index.js","../src/es6/treegrid/models/rowdrop-settings.js","../src/es6/treegrid/models/index.js","../src/es6/treegrid/renderer/virtual-row-model-generator.js","../src/es6/treegrid/renderer/index.js","../src/es6/treegrid/actions/filter.js","../src/es6/treegrid/actions/excel-export.js","../src/es6/treegrid/actions/pdf-export.js","../src/es6/treegrid/actions/page.js","../src/es6/treegrid/actions/toolbar.js","../src/es6/treegrid/actions/summary.js","../src/es6/treegrid/actions/sort.js","../src/es6/treegrid/actions/column-menu.js","../src/es6/treegrid/actions/context-menu.js","../src/es6/treegrid/actions/batch-edit.js","../src/es6/treegrid/actions/edit.js","../src/es6/treegrid/actions/command-column.js","../src/es6/treegrid/actions/detail-row.js","../src/es6/treegrid/renderer/virtual-tree-content-render.js","../src/es6/treegrid/actions/virtual-scroll.js","../src/es6/treegrid/actions/freeze-column.js","../src/es6/treegrid/actions/column-chooser.js","../src/es6/treegrid/actions/infinite-scroll.js","../src/es6/treegrid/actions/index.js","../src/es6/treegrid/index.js","../src/es6/index.js"],"sourcesContent":["import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nexport class Column {\n constructor(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 setProperties(column) {\n //Angular two way binding\n const keys = Object.keys(column);\n for (let 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 const refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'][refreshReactColumnTemplateByUid](this.uid);\n }\n }\n }\n}\n","var __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 */\nexport class Predicate extends ChildProperty {\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/**\n * Configures the filtering behavior of the TreeGrid.\n */\nexport class FilterSettings extends ChildProperty {\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","var __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 */\nexport class TextWrapSettings extends ChildProperty {\n}\n__decorate([\n Property('Both')\n], TextWrapSettings.prototype, \"wrapMode\", void 0);\n","import { 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 */\nconst DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nconst BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst WARNING = '[EJ2TreeGrid.Warning]';\nconst ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst INFO = '[EJ2TreeGrid.Info]';\nlet IsRowDDEnabled = false;\nexport class Logger extends GridLogger {\n constructor(parent) {\n Grid.Inject(GridLogger);\n super(parent);\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n getModuleName() {\n return 'logger';\n }\n log(types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n const type = types;\n for (let i = 0; i < type.length; i++) {\n const item = detailLists[type[i]];\n const cOp = item.check(args, this.parent);\n if (cOp.success) {\n let 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 const index = message.indexOf('https');\n const 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 treeLog(types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n const type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter((column) => column.isPrimaryKey).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (let i = 0; i < type.length; i++) {\n const item = treeGridDetails[type[i]];\n const cOp = item.check(args, treeGrid);\n if (cOp.success) {\n const message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n}\nexport const treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check(args, parent) {\n let 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() {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n `${BASE_DOC_URL}/api/treegrid#childmapping` + '\\n' +\n `${BASE_DOC_URL}/api/treegrid#idmapping` + '\\n' +\n `${BASE_DOC_URL}/api/treegrid#$parentidmapping`;\n }\n }\n};\n","/**\n * @hidden\n */\nexport const load = 'load';\n/** @hidden */\nexport const rowDataBound = 'rowDataBound';\n/** @hidden */\nexport const dataBound = 'dataBound';\n/** @hidden */\nexport const queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport const beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport const actionBegin = 'actionBegin';\n/** @hidden */\nexport const dataStateChange = 'dataStateChange';\n/** @hidden */\nexport const actionComplete = 'actionComplete';\n/** @hidden */\nexport const rowSelecting = 'rowSelecting';\n/** @hidden */\nexport const rowSelected = 'rowSelected';\n/** @hidden */\nexport const checkboxChange = 'checkboxChange';\n/** @hidden */\nexport const rowDeselected = 'rowDeselected';\n/** @hidden */\nexport const toolbarClick = 'toolbarClick';\n/** @hidden */\nexport const beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport const beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport const resizeStop = 'resizeStop';\n/** @hidden */\nexport const expanded = 'expanded';\n/** @hidden */\nexport const expanding = 'expanding';\n/** @hidden */\nexport const collapsed = 'collapsed';\n/** @hidden */\nexport const collapsing = 'collapsing';\n/** @hidden */\nexport const remoteExpand = 'remoteExpand';\n/** @hidden */\nexport const localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport const pagingActions = 'pagingActions';\n/** @hidden */\nexport const printGridInit = 'printGrid-Init';\n/** @hidden */\nexport const contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport const contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport const beforeCopy = 'beforeCopy';\n/** @hidden */\nexport const beforePaste = 'beforePaste';\n/** @hidden */\nexport const savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport const crudAction = 'crudAction';\n/** @hidden */\nexport const beginEdit = 'beginEdit';\n/** @hidden */\nexport const beginAdd = 'beginAdd';\n/** @hidden */\nexport const recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport const cellSave = 'cellSave';\n/** @hidden */\nexport const cellSaved = 'cellSaved';\n/** @hidden */\nexport const cellEdit = 'cellEdit';\n/** @hidden */\nexport const batchDelete = 'batchDelete';\n/** @hidden */\nexport const batchCancel = 'batchCancel';\n/** @hidden */\nexport const batchAdd = 'batchAdd';\n/** @hidden */\nexport const beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport const beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport const beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport const batchSave = 'batchSave';\n/** @hidden */\nexport const keyPressed = 'key-pressed';\n/** @hidden */\nexport const updateData = 'update-data';\n/** @hidden */\nexport const doubleTap = 'double-tap';\n/** @hidden */\nexport const virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport const virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport const destroy = 'destroy';\n/** @hidden */\nexport const dataListener = 'data-listener';\n/** @hidden */\nexport const indexModifier = 'index-modifier';\n/** @hidden */\nexport const beforeStartEdit = 'edit-form';\n/** @hidden */\nexport const beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport const batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport const detailDataBound = 'detailDataBound';\n/** @hidden */\nexport const rowDrag = 'rowDrag';\n/** @hidden */\nexport const rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport const rowDrop = 'rowDrop';\n/** @hidden */\nexport const rowDragStart = 'rowDragStart';\n/** @hidden */\nexport const rowsAdd = 'rows-add';\n/** @hidden */\nexport const rowsRemove = 'rows-remove';\n/** @hidden */\nexport const rowdraging = 'row-draging';\n/** @hidden */\nexport const rowDropped = 'row-dropped';\n/** @hidden */\nexport const autoCol = 'auto-col';\n","import * 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 */\nexport class TreeClipboard extends GridClipboard {\n constructor(parent) {\n super(parent.grid);\n this.treeCopyContent = '';\n this.copiedUniqueIdCollection = [];\n this.treeGridParent = parent;\n }\n setCopyData(withHeader) {\n const copyContent = 'copyContent';\n const getCopyData = 'getCopyData';\n const isSelect = 'isSelect';\n const uniqueID = 'uniqueID';\n const currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n const rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n const selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort((a, b) => {\n return a - b;\n });\n for (let 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 const cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n const 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 const headerTextArray = [];\n for (let 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 const 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.setCopyData(withHeader);\n }\n }\n }\n parentContentData(currentRecords, selectedIndex, rows, withHeader, index) {\n const getCopyData = 'getCopyData';\n const copyContent = 'copyContent';\n const parentItem = 'parentItem';\n const uniqueID = 'uniqueID';\n const level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n const treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (let i = 0; i < treeLevel + 1; i++) {\n for (let j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n const cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n const 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 copy(withHeader) {\n super.copy(withHeader);\n }\n paste(data, rowIndex, colIndex) {\n super.paste(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 getModuleName() {\n return 'clipboard';\n }\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n super.destroy();\n }\n childContentData(currentRecords, selectedIndex, rows, withHeader) {\n const getCopyData = 'getCopyData';\n const copyContent = 'copyContent';\n const childRecords = 'childRecords';\n const hasChildRecords = 'hasChildRecords';\n const uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n const childData = currentRecords[selectedIndex][childRecords];\n for (let i = 0; i < childData.length; i++) {\n for (let 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 const cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n const 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}\n","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 const 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 (let 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 const datas = [];\n const recordsLength = Object.keys(records).length;\n for (let i = 0, len = recordsLength; i < len; i++) {\n const 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 const parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n let 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 let datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n const childRecords = records.childRecords;\n for (let i = 0, len = Object.keys(childRecords).length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = [...datas, ...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 const 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 const objArr = [];\n let obj;\n let keys;\n for (let i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (let 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 const idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n const 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 const style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\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 */\nexport class Selection {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'selection';\n }\n addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n checkboxSelection(args) {\n const target = getObject('target', args);\n const checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n let checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n const 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 const 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 triggerChkChangeEvent(checkBox, checkState, rowElement) {\n const data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n const 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 getCheckboxcolumnIndex() {\n let mappingUid;\n let columnIndex;\n const columns = (this.parent.columns);\n for (let col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = this.parent.columns[col].uid;\n }\n }\n const headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (let j = 0; j < headerCelllength; j++) {\n const 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 headerCheckbox() {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n const headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n const value = false;\n const rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n const 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 const checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n const checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n }\n renderColumnCheckbox(args) {\n const rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n const data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n const value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n const 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 const 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 columnCheckbox(container) {\n const checkWrap = this.renderColumnCheckbox(container);\n const 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 const spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n const data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n const 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 selectCheckboxes(rowIndexes) {\n for (let i = 0; i < rowIndexes.length; i++) {\n let record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n const flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n const checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n const keys = Object.keys(record);\n for (let 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 traverSelection(record, checkboxState, ischildItem) {\n let 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 let 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 (let 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 getFilteredChildRecords(childRecords) {\n const filteredChildRecords = childRecords.filter((e) => {\n return this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n }\n updateParentSelection(parentRecord) {\n let length = 0;\n let childRecords = [];\n const 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 let indeter = 0;\n let checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (let i = 0; i < childRecords.length; i++) {\n const currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n const checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n }\n headerSelection(checkAll) {\n let index = -1;\n let length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n const 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 let 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 (let 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((rec) => {\n rec.checkboxState = 'uncheck';\n this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n const 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 updateSelectedItems(currentRecord, checkState) {\n const record = this.parent.getCurrentViewRecords().filter((e) => {\n return e.uniqueID === currentRecord.uniqueID;\n });\n let checkedRecord;\n const recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n const checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n let checkbox;\n if (recordIndex > -1) {\n const tr = this.parent.getRows()[recordIndex];\n let movableTr;\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 const index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n const checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n const checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n }\n updateGridActions(args) {\n const requestType = args.requestType;\n let childData;\n let childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n const rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (let 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 let updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (let i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n const index = this.parent.flatData.indexOf(updatedData[i]);\n const 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((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 let child = findChildrenRecords(record);\n child = this.getFilteredChildRecords(child);\n for (let 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 getCheckedrecords() {\n return this.selectedItems;\n }\n getCheckedRowIndexes() {\n return this.selectedIndexes;\n }\n}\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 */\nexport class Print {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'print';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n }\n removeEventListener() {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n }\n printTreeGrid(printGrid) {\n const grid = getObject('printgrid', printGrid);\n const 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() {\n this.parent.grid.print();\n }\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n this.removeEventListener();\n }\n}\n","var __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 */\nexport class SearchSettings extends ChildProperty {\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","var __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 */\nexport class SelectionSettings extends ChildProperty {\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","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nexport class Render {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 RowModifier(args) {\n if (!args.data) {\n return;\n }\n const data = args.data;\n const 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 const 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 const proxy = this.parent;\n const parentrec = this.parent.getCurrentViewRecords().filter((rec) => {\n return getValue(proxy.idMapping, rec) === getValue(proxy.parentIdMapping, data);\n });\n if (parentrec.length > 0) {\n const 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 const 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 cellRender(args) {\n if (!args.data) {\n return;\n }\n const grid = this.parent.grid;\n const data = args.data;\n let index;\n const ispadfilter = isNullOrUndefined(data.filterLevel);\n const pad = ispadfilter ? data.level : data.filterLevel;\n let totalIconsWidth = 0;\n let cellElement;\n const column = this.parent.getColumnByUid(args.column.uid);\n const summaryRow = data.isSummaryRow;\n const frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n let columnIndex;\n const 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 const container = createElement('div', { className: 'e-treecolumn-container' });\n const emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (let n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n let 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 const expandIcon = createElement('span', { className: 'e-icons' });\n let expand;\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 const 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 const freezerightColumns = grid.getFrozenRightColumns();\n const freezeLeftColumns = grid.getFrozenLeftColumns();\n const 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 const checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n const 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 const 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 updateTreeCell(args, cellElement) {\n const columnModel = getValue('columnModel', this.parent);\n const treeColumn = columnModel[this.parent.treeColumnIndex];\n const templateFn = 'templateFn';\n const 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 const 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 let len = args.cell.children.length;\n const tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n const portals = 'portals';\n const 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 const str = 'isStringTemplate';\n const 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 (let 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 columnTemplateResult(args) {\n this.templateResult = args.template;\n }\n reactTemplateRender(args) {\n const renderReactTemplates = 'renderReactTemplates';\n const portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n destroy() {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n }\n}\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 */\nexport class DataManipulation {\n constructor(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 addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n isRemote() {\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 convertToFlatData(data) {\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 const 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 const filterKey = this.parent.query.params.filter((param) => 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 let qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then((e) => {\n this.parentItems = DataUtil.distinct(e.result, this.parent.parentIdMapping, false);\n const req = getObject('dataSource.requests', this.parent).filter((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 convertJSONData(data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n for (let i = 0; i < Object.keys(data).length; i++) {\n const 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 const selfData = [];\n const mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (let i = 0; i < mappingData.length; i++) {\n const groupData = mappingData[i];\n const index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n const childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push(...groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n const isGantt = 'isGantt';\n const 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 selfReferenceUpdate(selfData) {\n const result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n const 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 updateParentRemoteData(args) {\n const 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 (let 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 collectExpandingRecs(rowDetails, isChild) {\n let gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n const rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n let childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (let i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n const 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 let childRows = [];\n childRows = gridRows.filter((r) => r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1)));\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n const 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 fetchRemoteChildData(rowDetails) {\n const args = { row: rowDetails.parentRow, data: rowDetails.record };\n const dm = this.parent.dataSource;\n const qry = this.parent.grid.getDataModule().generateQuery();\n const clonequries = qry.queries.filter((e) => 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((e) => {\n const datas = this.parent.grid.currentViewData.slice();\n let inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n this.parent.grid.getRowsObject().forEach((rows) => {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n const haveChild = getObject('actual.nextLevel', e);\n const result = e.result;\n rowDetails.record.childRecords = result;\n for (let 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 const 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 let gridQuery = getObject('query', e);\n const result = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n const summaryQuery = gridQuery.queries.filter((q) => q.fn === 'onAggregates');\n e[result] = this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result], true);\n }\n }\n e.count = this.parent.grid.pageSettings.totalRecordsCount;\n const virtualArgs = {};\n if (this.parent.enableVirtualization) {\n this.remoteVirtualAction(virtualArgs);\n }\n const 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 remoteVirtualAction(virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n const contentModule = getValue('grid.contentModule', this.parent);\n const currentInfo = getValue('currentInfo', contentModule);\n const 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 beginSorting() {\n this.isSortAction = true;\n }\n createRecords(data, parentRecords) {\n const treeGridData = [];\n for (let i = 0, len = Object.keys(data).length; i < len; i++) {\n const currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n let level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n const 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 const 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 dataProcessor(args) {\n const isExport = getObject('isExport', args);\n const expresults = getObject('expresults', args);\n const exportType = getObject('exportType', args);\n const isPrinting = getObject('isPrinting', args);\n let dataObj;\n const actionArgs = getObject('actionArgs', args);\n let requestType = getObject('requestType', args);\n let actionData = getObject('data', args);\n let action = getObject('action', args);\n const actionAddArgs = actionArgs;\n const primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n const 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 let results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n let count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n const qry = new Query();\n let gridQuery = getObject('query', args);\n let filterQuery;\n let searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter((q) => q.fn === 'onWhere');\n searchQuery = gridQuery.queries.filter((q) => 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 const fltrQuery = gridQuery.queries.filter((q) => q.fn === 'onWhere');\n const srchQuery = gridQuery.queries.filter((q) => q.fn === 'onSearch');\n qry.queries = fltrQuery.concat(srchQuery);\n const 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 const 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 const summaryQuery = query.queries.filter((q) => 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 let gridQuery = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n const summaryQuery = gridQuery.queries.filter((q) => 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 const parentData = this.parent.parentData;\n const query = getObject('query', args);\n const srtQry = new Query();\n for (let srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n const getColumnByField = 'getColumnByField';\n const col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n const 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 const modifiedData = new DataManager(parentData).executeLocal(srtQry);\n const 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 const isSort = false;\n const query = getObject('query', args);\n const summaryQuery = query.queries.filter((q) => 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 const 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 paging(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 const 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 const isPdfExport = 'isPdfExport';\n const isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n const actualResults = [];\n for (let i = 0; i < results.length; i++) {\n const 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 const value = { result: results, count: count };\n return value;\n }\n updateData(dataResult) {\n this.dataResults = dataResult;\n }\n updateAction(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}\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __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 */\nexport class PageSettings extends ChildProperty {\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","var __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 */\nexport class AggregateColumn extends ChildProperty {\n constructor() {\n super(...arguments);\n this.intl = new Internationalization();\n this.templateFn = {};\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 setFormatter(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 getFormatFunction(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 getFormatter() {\n return this.formatFn;\n }\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n setTemplate(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 getTemplate(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 setPropertiesSilent(prop) {\n this.setProperties(prop, true);\n }\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);\nexport class AggregateRow extends ChildProperty {\n}\n__decorate([\n Collection([], AggregateColumn)\n], AggregateRow.prototype, \"columns\", void 0);\n__decorate([\n Property(true)\n], AggregateRow.prototype, \"showChildSummary\", void 0);\n","var __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 */\nexport class EditSettings extends ChildProperty {\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","var __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 */\nexport class SortDescriptor extends ChildProperty {\n}\n__decorate([\n Property()\n], SortDescriptor.prototype, \"field\", void 0);\n__decorate([\n Property()\n], SortDescriptor.prototype, \"direction\", void 0);\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nexport class SortSettings extends ChildProperty {\n}\n__decorate([\n Collection([], SortDescriptor)\n], SortSettings.prototype, \"columns\", void 0);\n__decorate([\n Property(true)\n], SortSettings.prototype, \"allowUnsort\", void 0);\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 let value = details.value;\n const action = details.action;\n const changedRecords = 'changedRecords';\n let i;\n let j;\n const addedRecords = 'addedRecords';\n let batchChanges;\n const key = control.grid.getPrimaryKeyFieldNames()[0];\n const treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n let modifiedData = [];\n const originalData = value;\n let 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 const 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 (let k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n const keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n while (i-- && i >= 0) {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n const currentData = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData[control.parentIdMapping])) {\n const parentData = control.flatData.filter((e) => e[control.idMapping] === currentData[control.parentIdMapping])[0];\n const childRecords = parentData ? parentData[control.childMapping] : [];\n for (let p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData[control.idMapping]) {\n parentData['childRecords'].splice(p, 1);\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n 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 const 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 let index;\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 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 }\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 let value;\n let isSkip = false;\n const 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 const primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n const 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 const 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 let isChildAll = false;\n let 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 const keys = Object.keys(modifiedData);\n const editedData = getParentData(control, modifiedData.uniqueID);\n for (let 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 const 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 const parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n const currentRecords = control.grid.getCurrentViewRecords();\n let index;\n currentRecords.map((e, i) => { if (e[key] === record[key]) {\n index = i;\n return;\n } });\n if (!isNullOrUndefined(index)) {\n record = currentRecords[index];\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((e) => {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n const childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index + 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 const primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n const data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (let 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 let row = control.getRowByIndex(index);\n if (control.editSettings.mode === 'Batch') {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n let movableRow;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n let index = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index = index + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index] ? row.cells[index]\n : movableRow.cells[index - 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","var __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 */\nexport class InfiniteScrollSettings extends ChildProperty {\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","var __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};\nvar TreeGrid_1;\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { CellRenderer } from '@syncfusion/ej2-grids';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nlet TreeGrid = TreeGrid_1 = class TreeGrid extends Component {\n constructor(options, element) {\n super(options, element);\n this.dataResults = {};\n this.uniqueIDCollection = {};\n this.uniqueIDFilterCollection = {};\n this.changedRecords = 'changedRecords';\n this.deletedRecords = 'deletedRecords';\n this.addedRecords = 'addedRecords';\n this.objectEqualityChecker = (old, current) => {\n if (old) {\n const keys = Object.keys(old);\n let isEqual = true;\n const excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (let i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n const 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 const logger = 'Logger';\n if (!isNullOrUndefined(this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n this.grid = new Grid();\n }\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 excelExport(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 csvExport(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 pdfExport(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 getModuleName() {\n return 'treegrid';\n }\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n preRender() {\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 sortByColumn(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 clearSorting() {\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 removeSortColumn(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 search(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 autoFitColumns(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 reorderColumns(fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n }\n TreeGridLocale() {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n const locale = L10n.locale;\n const localeObject = {};\n setValue(this.locale, {}, localeObject);\n let gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n let 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 print() {\n this.printModule.print();\n }\n treeGridkeyActionHandler(e) {\n if (this.allowKeyboard) {\n let target;\n let parentTarget;\n let column;\n let row;\n let summaryElement;\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 const rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n const cellIndex = e.target.cellIndex;\n const row = summaryElement.children[cellIndex];\n addClass([row], 'e-focused');\n addClass([row], '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 const rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n const cIndex = e.target.cellIndex;\n const 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 findnextRowElement(summaryRowElement) {\n let 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 findPreviousRowElement(summaryRowElement) {\n let 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 initProperties() {\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 wireEvents() {\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 requiredModules() {\n const modules = [];\n const splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount()) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n }\n extendRequiredModules(modules) {\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n }\n isCommandColumn(columns) {\n return columns.some((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 unwireEvents() {\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 log(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 render() {\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 const 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 const gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n let modules = [];\n modules = gridRequiredModules.apply(this);\n for (let i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n this.grid.appendTo(gridContainer);\n this.wireEvents();\n this.renderComplete();\n const destroyTemplate = 'destroyTemplate';\n const destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = (args, index) => {\n destroyTemplateFn.apply(this.grid);\n const portals = 'portals';\n if (!(this.isReact && isNullOrUndefined(this[portals]))) {\n this.clearTemplate(args, index);\n }\n };\n }\n afterGridRender() {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n }\n convertTreeData(data) {\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((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 const 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 bindGridProperties() {\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 const templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n const isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n }\n triggerEvents(args) {\n this.trigger(getObject('name', args), args);\n }\n bindGridEvents() {\n this.grid.rowSelecting = (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 = (args) => {\n if (this.enableVirtualization && args.isHeaderCheckboxClicked &&\n this.grid.currentViewData.length !== this.grid.selectionModule.selectedRowIndexes.length) {\n const updateRowSelection = 'updateRowSelection';\n for (let 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 = (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 = (args) => {\n this.updateColumnModel();\n this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = (args) => {\n this.notify('excelCellInfo', args);\n args = this.dataResults;\n };\n this.grid.pdfQueryCellInfo = (args) => {\n this.notify('pdfCellInfo', args);\n args = this.dataResults;\n };\n this.grid.checkBoxChange = (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 = (args) => {\n const rows = this.getRows();\n const 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 = () => {\n this.grid.on('initial-end', this.afterGridRender, this);\n if (!isNullOrUndefined(this.loggerModule)) {\n const 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 lastRowBorder(visiblerow, isAddBorder) {\n for (let 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 isPixelHeight() {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n extendedGridDataBoundEvent() {\n this.grid.dataBound = (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 const req = getObject('dataSource.requests', this).filter((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 const rows = this.getContentTable().rows;\n const totalRows = [].slice.call(rows);\n for (let 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 const action = 'action';\n if (this.enableVirtualization && this.selectionSettings.persistSelection && (this.dataResults[action] === 'expand' || this.dataResults[action] === 'collapse')) {\n const refreshPersistSelection = 'refreshPersistSelection';\n this.grid.selectionModule[refreshPersistSelection]();\n if (this.grid.selectionSettings.type === 'Single') {\n const updateRowSelection = 'updateRowSelection';\n const 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 const treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n const dataSource = 'dataSource';\n const 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 const 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 const callBackPromise = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, (beforeDataBoundArgs) => {\n callBackPromise.resolve(beforeDataBoundArgs);\n });\n return callBackPromise;\n }\n };\n this.grid.log = (type, args) => {\n if (this.loggerModule) {\n this.loggerModule.log(type, args);\n }\n };\n }\n bindCallBackEvents() {\n this.grid.toolbarClick = (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 const callBackPromise = new Deferred();\n this.trigger(events.toolbarClick, args, (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 = (args) => {\n const callBackPromise = new Deferred();\n this.trigger(getObject('name', args), args, (cellselectingArgs) => {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = (args) => {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n const callBackPromise = new Deferred();\n this.trigger(events.beginEdit, args, (begineditArgs) => {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n }\n extendedGridEditEvents() {\n this.grid.dataStateChange = (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 = (args) => {\n if (this.grid.isContextMenuOpen()) {\n const 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 const callBackPromise = new Deferred();\n this.trigger(events.cellSave, args, (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 = (args) => {\n this.trigger(events.cellSaved, args);\n this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = (args) => {\n const prom = 'promise';\n const promise = new Deferred();\n args[prom] = promise;\n this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = (args) => {\n this.trigger(events.batchAdd, args);\n this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = (args) => {\n this.trigger(events.beforeBatchSave, args);\n this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = (args) => {\n this.trigger(events.beforeBatchAdd, args);\n this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = (args) => {\n this.trigger(events.batchDelete, args);\n this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = (args) => {\n this.trigger(events.beforeBatchDelete, args);\n this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = (args) => {\n if (this.editSettings.mode !== 'Cell') {\n this.trigger(events.batchCancel, args);\n }\n this.notify(events.batchCancel, args);\n };\n }\n updateRowTemplate() {\n this.treeColumnRowTemplate();\n }\n bindedDataSource() {\n const dataSource = 'dataSource';\n const isDataAvailable = 'isDataAvailable';\n const adaptor = 'adaptor';\n const ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n const data = this.flatData;\n const 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 const proxy = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then((e) => {\n const dm = proxy.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 extendedGridActionEvents() {\n this.grid.actionBegin = (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 const 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 const callBackPromise = new Deferred();\n this.trigger(events.actionBegin, args, (actionArgs) => {\n if (!actionArgs.cancel) {\n this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise.resolve(actionArgs);\n });\n return callBackPromise;\n }\n };\n this.grid.actionComplete = (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((ag) => 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 const actionArgs = {\n requestType: this.action,\n data: this.selectedRecords,\n row: this.selectedRows\n };\n this.trigger(events.actionComplete, actionArgs);\n this.action = '';\n this.selectedRecords = this.selectedRows = [];\n }\n else {\n this.trigger(events.actionComplete, args);\n }\n };\n }\n extendedGridEvents() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const treeGrid = this;\n this.grid.recordDoubleClick = (args) => {\n this.trigger(events.recordDoubleClick, args);\n this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = (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 = (args) => {\n this.notify(events.contextMenuClick, args);\n this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = (args) => {\n this.notify(events.contextMenuOpen, args);\n this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = (args) => {\n this.renderModule.cellRender(args);\n };\n }\n bindGridDragEvents() {\n this.grid.rowDragStartHelper = (args) => {\n this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = (args) => {\n this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = (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 = (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 loadGrid() {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n const 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 autoGenerateColumns() {\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 const record = this.dataSource[0];\n // }\n const keys = Object.keys(record);\n for (let 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 getGridEditSettings() {\n const edit = {};\n const 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 getContextMenu() {\n if (this.contextMenuItems) {\n const items = [];\n for (let i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n }\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n getGridToolbar() {\n if (this.toolbar) {\n const items = [];\n let tooltipText;\n for (let i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText, disabled: true,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText, disabled: true,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n }\n getGridColumns(columns, isEmptyColumnModel = true, index = 0) {\n const column = columns;\n const stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n let treeGridColumn;\n let gridColumn;\n index = index === 0 ? -1 : index;\n const gridColumnCollection = [];\n for (let i = 0; i < column.length; i++) {\n index = index + 1;\n const 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 (const prop of Object.keys(column[i])) {\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n }\n return gridColumnCollection;\n }\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n onPropertyChanged(newProp) {\n const properties = Object.keys(newProp);\n let requireRefresh = false;\n for (const prop of properties) {\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 const count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n const data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n }\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n destroy() {\n const treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n const 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.destroy();\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n const 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 (let 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 dataBind() {\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.dataBind();\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 getPersistData() {\n const keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n const 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 const ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (let i = 0; i < keyEntity.length; i++) {\n const currentObject = this[keyEntity[i]];\n for (let k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n const objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n }\n ignoreInArrays(ignoreOnColumn, columns) {\n for (let 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 ignoreInColumn(ignoreOnColumn, column) {\n for (let i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n }\n mouseClickHandler(e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n const 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 getRows() {\n return this.grid.getRows();\n }\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n getPager() {\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 addRecord(data, index, position) {\n if (this.editModule) {\n const 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 closeEdit() {\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 saveCell() {\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 updateCell(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 updateRow(index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n const 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 deleteRecord(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 startEdit(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 editCell(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 enableToolbarItems(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 endEdit() {\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 openColumnChooser(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 deleteRow(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 getPrimaryKeyFieldNames() {\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 setCellValue(key, field, value) {\n this.grid.setCellValue(key, field, value);\n const rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n const 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 setRowData(key, rowData) {\n const currentRecords = this.getCurrentViewRecords();\n const primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n let level = 0;\n let record = {};\n currentRecords.some((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 const table = this.getContentTable();\n const sHeight = table.scrollHeight;\n const clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[record.index], sHeight <= clientHeight);\n }\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n goToPage(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 updateExternalMessage(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 getCellFromIndex(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 getColumnByField(field) {\n return iterateArrayOrObject(this.columnModel, (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 getColumnByUid(uid) {\n const Columns = this.initialRender ? this.grid.columns : this.columns;\n return iterateArrayOrObject(Columns, (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 getColumnFieldNames() {\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 getFooterContent() {\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 getFooterContentTable() {\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 showColumns(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 hideColumns(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 getColumnHeaderByField(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 getColumnHeaderByIndex(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 getColumnHeaderByUid(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 getColumnIndexByField(field) {\n return this.grid.getColumnIndexByField(field);\n }\n getVirtualColIndexByUid(uid) {\n const columnModel = 'columnModel';\n const index = iterateArrayOrObject(this.grid[columnModel], (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 getColumnIndexByUid(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 getColumns(isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n }\n updateColumnModel(column) {\n let temp;\n let field;\n const 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 let stackedHeader = false;\n let gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (let i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (const prop of Object.keys(gridColumns[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 const merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n stackedHeader = true;\n }\n if (!stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n }\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n refreshReactColumnTemplateByUid(columnUid) {\n if (this.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.clearTemplate(['columnTemplate'], undefined, () => {\n const cells = 'cells';\n const rowIdx = 'index';\n const rowsObj = this.grid.getRowsObject();\n const indent = this.grid.getIndentCount();\n const cellIndex = this.grid.getNormalizedColumnIndex(columnUid);\n for (let j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n const cell = rowsObj[j][cells][cellIndex];\n const cellRenderer = new CellRenderer(this.grid, this.grid.serviceLocator);\n const td = this.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n }\n }\n });\n }\n }\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n getContent() {\n return this.grid.getContent();\n }\n mergePersistTreeGridData() {\n const persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n }\n mergeColumns(storedColumn, columns) {\n const persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n }\n updateTreeGridModel() {\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 getContentTable() {\n return this.grid.getContentTable();\n }\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n getDataRows() {\n const dRows = [];\n const rows = this.grid.getDataRows();\n for (let 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 getCurrentViewRecords() {\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 getBatchChanges() {\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 getHeaderContent() {\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 getHeaderTable() {\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 getRowByIndex(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 getRowInfo(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 getUidByColumnField(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 getVisibleColumns() {\n const cols = [];\n for (const col of this.columnModel) {\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 showSpinner() {\n showSpinner(this.element);\n }\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n hideSpinner() {\n hideSpinner(this.element);\n }\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n refresh() {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ? this.flatData :\n new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n this.grid.refresh();\n }\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n getCheckedRecords() {\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 getVisibleRecords() {\n let visibleRecords = [];\n const currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (let 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 getCheckedRowIndexes() {\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 selectCheckboxes(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 refreshColumns(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 refreshHeader() {\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 expandCollapseRequest(target) {\n if (this.editSettings.mode === 'Batch') {\n const obj = 'dialogObj';\n const showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n const 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 const rowInfo = target.closest('.e-treerowcell').parentElement;\n const 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 const rowInfo = this.grid.getRowInfo(target);\n let 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 expandRow(row, record, key, level) {\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n const args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, (expandingArgs) => {\n if (!expandingArgs.cancel) {\n this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n const children = 'Children';\n if (!(isRemoteData(this) && !isOffline(this)) && (!isCountRequired(this) || !isNullOrUndefined(record[children]))) {\n const collapseArgs = { data: record, row: row };\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n }\n expandCollapseAllChildren(record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n const records = findChildrenRecords(record).filter((e) => {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (let i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n }\n setHeightForFrozenContent() {\n const 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 getCollapseExpandRecords(row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter((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 collapseRow(row, record, key) {\n record = this.getCollapseExpandRecords(row, record);\n const args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, (collapsingArgs) => {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n this.expandCollapseAllChildren(record, 'collapse', key);\n }\n this.expandCollapse('collapse', row, record);\n const collapseArgs = { data: record, row: row };\n if (!isRemoteData(this)) {\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, collapseArgs);\n if (this.enableInfiniteScrolling) {\n const scrollHeight = this.grid.getContent().firstElementChild.scrollHeight;\n const scrollTop = this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < this.grid.getRowHeight() + +this.height) {\n this.grid.getContent().firstElementChild.scrollBy(0, this.grid.getRowHeight());\n }\n }\n }\n }\n });\n }\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n expandAtLevel(level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n const rec = this.grid.dataSource.filter((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 const rec = this.getRecordDetails(level);\n const 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 expandByKey(key) {\n this.expandCollapseActionByKey(key, 'Expand');\n }\n expandAction(record, key, level, isPaging = false) {\n for (let i = 0; i < record.length; i++) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n const puniqueID = record[i].parentItem.uniqueID;\n let parentItem = this.flatData.filter((e) => {\n return e.uniqueID === puniqueID;\n });\n if (isRemoteData(this)) {\n parentItem = this.getCurrentViewRecords().filter((e) => {\n return e.uniqueID === puniqueID;\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, parentItem[0], this.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this.expandRow(null, record[i], key, level);\n }\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n }\n getRecordDetails(level) {\n const rows = this.getRows().filter((e) => {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n const records = this.getCurrentViewRecords().filter((e) => {\n return e.level === level && e.hasChildRecords;\n });\n const 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 collapseAtLevel(level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n const record = this.grid.dataSource.filter((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 const rec = this.getRecordDetails(level);\n const 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 collapseByKey(key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n }\n expandCollapseActionByKey(key, action) {\n const primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n const dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n const rec = dataSource.filter((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 collapseAction(record, key, isPaging = false) {\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (let 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 const 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 expandAll() {\n this.expandCollapseAll('expand');\n }\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n collapseAll() {\n this.expandCollapseAll('collapse');\n }\n expandCollapseAll(action) {\n const rows = this.getRows().filter((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((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 const 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 (let 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 expandCollapse(action, row, record, isChild) {\n const expandingArgs = { row: row, data: record, childData: [], requestType: action };\n const childRecords = this.getCurrentViewRecords().filter((e) => {\n return e.parentUniqueID === record.uniqueID;\n });\n let targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n let gridRows = this.getRows();\n if (this.rowTemplate) {\n const rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n let 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 let displayAction;\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 const detailrows = gridRows.filter((r) => r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1)));\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 let totalRows = this.getRows();\n const rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (let i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n const table = this.getContentTable();\n const sHeight = table.scrollHeight;\n const 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 updateChildOnDemand(expandingArgs) {\n const deff = new Deferred();\n const childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n const record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(() => {\n if (expandingArgs.childData.length) {\n const currentData = (this.flatData);\n let index = 0;\n for (let i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n const data = getValue('result', this.dataSource);\n const childData = extendArray(expandingArgs.childData);\n const length = record[this.childMapping] ? record[this.childMapping].length > childData.length ?\n record[this.childMapping].length : childData.length : childData.length;\n for (let i = 0; i < length; i++) {\n if (record[this.childMapping]) {\n data.filter((e, i) => {\n if (e[this.parentIdMapping] === record[this.idMapping]) {\n data.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 (let j = 0; j < expandingArgs.childData.length; j++) {\n data.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 remoteExpand(action, row, record) {\n let gridRows = this.getRows();\n if (this.rowTemplate) {\n const rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n const args = { data: record, row: row };\n let rows = [];\n rows = gridRows.filter((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n const args = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n }\n localExpand(action, row, record) {\n let rows;\n const childRecords = this.getCurrentViewRecords().filter((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 let movableRows;\n let freezeRightRows;\n let gridRows = this.getRows();\n if (this.rowTemplate) {\n const rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n const displayAction = (action === 'expand') ? 'table-row' : 'none';\n const primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (let i = 0; i < childRecords.length; i++) {\n const rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n }\n const 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((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter((r) => r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1)));\n }\n for (let i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if (!isNullOrUndefined(childRecords[i].childRecords) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n }\n updateAltRow(rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n let visibleRowCount = 0;\n for (let i = 0; rows && i < rows.length; i++) {\n const 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 treeColumnRowTemplate() {\n if (this.rowTemplate) {\n let rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (let i = 0; i < rows.length; i++) {\n const rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n const row = rows[i];\n const rowData = this.grid.getRowsObject()[i].data;\n const arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n }\n collapseRemoteChild(rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n const rows = rowDetails.rows;\n let row;\n let childRecord;\n let movablerows = [];\n let rightrows = [];\n const freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter((r) => r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1)));\n rightrows = this.getFrozenRightRows().filter((r) => r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1)));\n }\n for (let i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n const 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 const 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 const cRow = [];\n const eRows = this.getRows();\n for (let i = 0; i < eRows.length; i++) {\n if (eRows[i].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n }\n /**\n * @hidden\n * @returns {void}\n */\n addListener() {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n }\n updateResultModel(returnResult) {\n this.dataResults = returnResult;\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeListener() {\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 filterByColumn(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 clearFiltering() {\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 removeFilteredColsByField(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 selectRow(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 selectRows(rowIndexes) {\n this.grid.selectRows(rowIndexes);\n }\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n clearSelection() {\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 copy(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 paste(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 selectCell(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 getSelectedRows() {\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 getMovableCellFromIndex(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 getMovableDataRows() {\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 getMovableRowByIndex(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 getMovableRows() {\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 getFrozenRightRowByIndex(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 getFrozenRightRows() {\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 getFrozenRightDataRows() {\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 getFrozenRightCellFromIndex(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 getFrozenLeftColumnHeaderByIndex(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 getFrozenRightColumnHeaderByIndex(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 getMovableColumnHeaderByIndex(index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n }\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n getMovableColumnsCount() {\n return this.grid.getMovableColumnsCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n getFrozenLeftColumnsCount() {\n return this.grid.getFrozenLeftColumnsCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n getFrozenRightColumnsCount() {\n return this.grid.getFrozenRightColumnsCount();\n }\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n getFrozenLeftColumns() {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n }\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n getFrozenRightColumns() {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n }\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n getVisibleMovableCount() {\n return this.grid.getVisibleMovableCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n getVisibleFrozenRightCount() {\n return this.grid.getVisibleFrozenRightCount();\n }\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n getVisibleFrozenLeftCount() {\n return this.grid.getVisibleFrozenLeftCount();\n }\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n getMovableColumns() {\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 getFrozenColumns() {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n }\n getFrozenCount(cols, cnt) {\n for (let 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 getSelectedRowIndexes() {\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 getSelectedRowCellIndexes() {\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 getSelectedRecords() {\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 getDataModule() {\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 reorderRows(fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n }\n};\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);\nTreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n], TreeGrid);\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nexport class Reorder {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'reorder';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n }\n removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n getTreeColumn() {\n const columnModel = 'columnModel';\n const treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n let treeIndex;\n const updatedCols = this.parent.getColumns();\n for (let f = 0; f < updatedCols.length; f++) {\n const treeColumnfield = getObject('field', treeColumn);\n const 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}\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nexport class Resize {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 autoFitColumns(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 getModuleName() {\n return 'resize';\n }\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n destroy() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n }\n}\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nexport class RowDD {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n getChildrecordsByParentID(id) {\n let 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 const record = treeGridDataSource.filter((e) => {\n return e.uniqueID === id;\n });\n return record;\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 reorderRows(fromIndexes, toIndex, position) {\n const tObj = this.parent;\n const action = 'action';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n const data = [];\n for (let i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n const isByMethod = true;\n const 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 const index = this.parent.treeColumnIndex + 1;\n const row = this.parent.getRows()[fromIndexes[0]];\n const dropData = args.data[0];\n const totalRecord = [];\n const rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n const parentUniqueID = 'parentUniqueID';\n const parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n const parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n for (let i = 0; i < totalRecord.length; i++) {\n this.parent.renderModule.cellRender({\n data: totalRecord[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this.parent[action] === 'indenting' || this.parent[action] === 'outdenting') {\n this.parent.renderModule.RowModifier({\n data: totalRecord[i], row: rows[i]\n });\n }\n }\n }\n }\n else {\n return;\n }\n }\n orderToIndex(currentData) {\n for (let i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n const updatedParent = currentData.filter((data) => {\n return data.uniqueID === currentData[i].parentUniqueID;\n })[0];\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n }\n rowsAdded(e) {\n let draggedRecord;\n const dragRecords = e.records;\n for (let i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n const record = dragRecords.filter((data) => {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n const index = record[0].childRecords.indexOf(draggedRecord);\n const 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 const tObj = this.parent;\n let draggedRecord;\n const dragRecords = e.records;\n const dragLength = e.records.length;\n for (let i = dragLength - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (!i && draggedRecord.hasChildRecords) {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n }\n const recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord.taskData, tObj.childMapping)) {\n draggedRecord.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord, tObj.childMapping) &&\n (draggedRecord[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n const childData = (draggedRecord[tObj.childMapping]);\n for (let j = 0; j < childData.length; j++) {\n if (dragRecords.indexOf(childData[j]) === -1) {\n dragRecords.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, tObj.parentIdMapping) && draggedRecord[tObj.parentIdMapping] != null\n && !this.isDraggedWithChild) {\n draggedRecord.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord.parentItem;\n delete draggedRecord.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (let i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n const 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((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 rowsRemoved(e) {\n for (let 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 refreshGridDataSource() {\n const draggedRecord = this.draggedRecord;\n const droppedRecord = this.droppedRecord;\n const proxy = this.parent;\n let tempDataSource;\n let idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n for (let i = 0; i < Object.keys(tempDataSource).length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n const record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n const childRecords = record.childRecords;\n for (let 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 removeFirstrowBorder(element) {\n const 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 removeLastrowBorder(element) {\n const isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n const islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n const 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 updateIcon(row, index, args) {\n const rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n let rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (let 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 const tObj = this.parent;\n let rowTop = 0;\n const roundOff = 0;\n const 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 const positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n const contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n const scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n const rowBottom = rowTop + row[0].offsetHeight;\n const difference = rowBottom - rowTop;\n const divide = difference / 3;\n const topRowSegment = rowTop + divide;\n const middleRowSegment = topRowSegment + divide;\n const bottomRowSegment = middleRowSegment + divide;\n const mouseEvent = getObject('originalEvent.event', args);\n const touchEvent = getObject('originalEvent.event', args);\n const posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n const isTopSegment = posy <= topRowSegment;\n const isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n const 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 let rowElement = [];\n const 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 removeChildBorder() {\n let 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 addFirstrowBorder(targetRow) {\n const node = this.parent.element;\n const tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n const div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n const gridheaderEle = this.parent.getHeaderContent();\n let toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n const 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 addLastRowborder(trElement) {\n const isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n const bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n const 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 getScrollWidth() {\n const scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n }\n addErrorElem() {\n const dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n const errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n const ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n const errorVal = dragelem.querySelector('.errorValue');\n let 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 const spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n }\n }\n removeErrorElem() {\n const errorelem = document.querySelector('.e-errorelem');\n if (errorelem) {\n errorelem.remove();\n }\n }\n topOrBottomBorder(target) {\n let rowElement = [];\n const 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 removetopOrBottomBorder() {\n let 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 addRemoveClasses(cells, add, className) {\n for (let 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 getOffset(element) {\n const box = element.getBoundingClientRect();\n const body = document.body;\n const docElem = document.documentElement;\n const scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n const clientTop = docElem.clientTop || body.clientTop || 0;\n const clientLeft = docElem.clientLeft || body.clientLeft || 0;\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n }\n Rowdraging(args) {\n const tObj = this.parent;\n const cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n const rowEle = args.target ? closest(args.target, 'tr') : null;\n const rowIdx = rowEle ? rowEle.rowIndex : -1;\n let dragRecords = [];\n const 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 const dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n const 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 const dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n }\n rowDropped(args) {\n const tObj = this.parent;\n const 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 let index = this.parent.treeColumnIndex;\n index = index + 1;\n const primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n let rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n const row = this.parent.getRows()[rowIndex];\n let data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n const record = [];\n const rows = [];\n record.push(data);\n rows.push(row);\n const parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n const parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (let 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 const 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 dragDropGrid(args) {\n const tObj = this.parent;\n const targetRow = closest(args.target, 'tr');\n const targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n const dropElement = parentsUntil(args.target, 'e-treegrid');\n let srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n let records = tObj.getSelectedRecords();\n const indexes = [];\n for (let i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n const data = srcControl.dataSource;\n if (this.parent.idMapping != null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n const actualData = [];\n for (let i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n const child = findChildrenRecords(records[i]);\n for (let i = 0; i < child.length; i++) {\n actualData.push(child[i]); // 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 const srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (let i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n const 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 getTargetIdx(targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n }\n getParentData(record) {\n const parentItem = record.parentItem;\n if (this.dropPosition === 'bottomSegment') {\n const selectedRecord = this.parent.getSelectedRecords()[0];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n const level = this.parent.getSelectedRecords()[0].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n }\n dropRows(args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n const tObj = this.parent;\n let draggedRecord;\n let droppedRecord;\n if (isNullOrUndefined(args.dropIndex)) {\n const rowIndex = tObj.getSelectedRowIndexes()[0] - 1;\n const record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n let dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n let count = 0;\n const 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 const dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n for (let i = 0; i < dragLength; i++) {\n draggedRecord = dragRecords[i];\n this.draggedRecord = draggedRecord;\n if (this.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this.deleteDragRow();\n }\n if (this.draggedRecord === this.droppedRecord) {\n let correctIndex = this.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this.droppedRecord = this.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this.dropPosition === 'middleSegment') {\n const parentRecords = tObj.parentData;\n const newParentIndex = parentRecords.indexOf(this.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n const recordIndex1 = this.treeGridData.indexOf(droppedRecord);\n this.dropAtTop(recordIndex1);\n if (this.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this.parent.parentIdMapping) {\n this.treeData.splice(recordIndex1 + 1, 0, this.draggedRecord.taskData);\n }\n this.treeGridData.splice(recordIndex1 + 1, 0, this.draggedRecord);\n }\n else {\n count = this.getChildCount(droppedRecord, 0);\n if (this.parent.parentIdMapping) {\n this.treeData.splice(recordIndex1 + count + 1, 0, this.draggedRecord.taskData);\n }\n this.treeGridData.splice(recordIndex1 + count + 1, 0, this.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord.parentItem;\n draggedRecord.level = 0;\n if (this.parent.parentIdMapping) {\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n const rec = this.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n const childRecords = rec[0].childRecords;\n const droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord);\n draggedRecord.parentItem = droppedRecord.parentItem;\n draggedRecord.parentUniqueID = droppedRecord.parentUniqueID;\n if (this.parent.parentIdMapping) {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.parentItem = droppedRecord.parentItem;\n draggedRecord.level = droppedRecord.level;\n }\n }\n if (draggedRecord.hasChildRecords) {\n const level = 1;\n this.updateChildRecordLevel(draggedRecord, level);\n this.updateChildRecord(draggedRecord, recordIndex1 + count + 1);\n }\n }\n this.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord.parentItem)) {\n const parentRecords = tObj.parentData;\n const newParentIndex = parentRecords.indexOf(this.droppedRecord);\n let nonRepeat = 0;\n parentRecords.filter((e) => {\n if (draggedRecord.uniqueID === e.uniqueID) {\n nonRepeat++;\n }\n });\n if (this.dropPosition === 'bottomSegment' && nonRepeat === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord);\n }\n else if (this.dropPosition === 'topSegment' && nonRepeat === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n }\n }\n }\n dropMiddle(recordIndex) {\n const tObj = this.parent;\n const childRecords = findChildrenRecords(this.droppedRecord);\n const 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 dropAtTop(recordIndex1) {\n const 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 const level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n const rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n const childRecords = rec[0].childRecords;\n const droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n }\n recordLevel() {\n const tObj = this.parent;\n const draggedRecord = this.draggedRecord;\n const droppedRecord = this.droppedRecord;\n const 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 const 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 const 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 const level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n }\n deleteDragRow() {\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 const 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 updateChildRecord(record, count) {\n let currentRecord;\n const tObj = this.parent;\n let length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (let 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 updateChildRecordLevel(record, level) {\n let length = 0;\n let currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (let i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n let parentData;\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 removeRecords(record) {\n const tObj = this.parent;\n let 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 const deletedRow = record;\n const isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n const flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n const childRecords = flatParentData ? flatParentData.childRecords : [];\n let childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n let idx;\n let idz;\n const treeGridData = dataSource;\n for (let 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 (let 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 let recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n const 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 const primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (let 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 const deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n }\n }\n removeChildItem(record) {\n let currentRecord;\n let idx;\n let idz;\n let 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 (let 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 let treeGridData;\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 (let i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (let i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i;\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 getChildCount(record, count) {\n let currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (let 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 ensuredropPosition(draggedRecords, currentRecord) {\n draggedRecords.filter((e) => {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n const 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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeEventListener() {\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 getModuleName() {\n return 'rowDragAndDrop';\n }\n}\n","/**\n * Base export\n */\nexport * from './treegrid';\nexport * from './constant';\nexport * from './data';\nexport * from '../actions/reorder';\nexport * from '../actions/resize';\nexport * from '../actions/rowdragdrop';\n","var __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 */\nexport class RowDropSettings extends ChildProperty {\n}\n__decorate([\n Property()\n], RowDropSettings.prototype, \"targetID\", void 0);\n","/**\n * Models export\n */\nexport * from './column';\nexport * from './edit-settings';\nexport * from './filter-settings';\nexport * from './page-settings';\nexport * from './search-settings';\nexport * from './selection-settings';\nexport * from './summary';\nexport * from './sort-settings';\nexport * from './rowdrop-settings';\nexport * from './infinite-scroll-settings';\n","import { 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 */\nexport class TreeVirtualRowModelGenerator extends VirtualRowModelGenerator {\n constructor(parent) {\n super(parent);\n this.addEventListener();\n }\n addEventListener() {\n this.parent.on(events.dataListener, this.getDatas, this);\n }\n getDatas(args) {\n this.visualData = args.data;\n }\n getDataInfo() {\n return super.getData();\n }\n generateRows(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 const 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.generateRows(data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n const rows = super.generateRows(data, notifyArgs);\n for (let r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n }\n checkAndResetCache(action) {\n const clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some((value) => 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 const model = 'model';\n const 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}\n","/**\n * Renderer export\n */\nexport * from './render';\nexport * from './virtual-row-model-generator';\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 */\nexport class Filter {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'filter';\n }\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 updatedFilteredRecord(dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (let f = 0; f < this.flatFilteredData.length; f++) {\n const rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n const 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 const ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n const parent = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent)) {\n const 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 updateParentFilteredRecord(record) {\n const parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n const 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 addParentRecord(record) {\n const parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n const 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 const hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n checkChildExsist(records) {\n const childRec = getObject('childRecords', records);\n let isExist = false;\n for (let count = 0; count < childRec.length; count++) {\n const ischild = childRec[count].childRecords;\n const 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 const 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 updateFilterLevel() {\n const record = this.filteredResult;\n const len = this.filteredResult.length;\n for (let c = 0; c < len; c++) {\n const parent = getParentData(this.parent, record[c].parentUniqueID);\n const isPrst = record.indexOf(parent) !== -1;\n if (isPrst) {\n const parent = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n }\n clearFilterLevel(data) {\n let count = 0;\n const flatData = data.flatData;\n const len = flatData.length;\n let currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n const 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}\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 */\nexport class ExcelExport {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'ExcelExport';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n removeEventListener() {\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 updateExcelResultModel(returnResult) {\n this.dataResults = returnResult;\n }\n Map(excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n const dataSource = this.parent.dataSource;\n const 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((resolve) => {\n const dm = this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : this.parent.dataSource;\n let 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((e) => {\n let 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((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 generateQuery(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 manipulateExportProperties(property, dtSrc, queryResult) {\n //count not required for this query\n let 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 const flatsData = this.parent.flatData;\n const 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 excelQueryCellInfo(args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n const style = {};\n const data = args.data;\n const ispadfilter = isNullOrUndefined(data.filterLevel);\n const 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 exportRowDataBound(excelRow) {\n if (excelRow.type === 'excel') {\n const excelrowobj = excelRow.rowObj.data;\n const filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n const rowlength = excelRow.excelRows.length;\n const rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n let expandedStatus = false;\n let sublevelState = false;\n const 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 finalPageSetup(workbook) {\n for (let i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n }\n isLocal() {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n }\n}\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 */\nexport class PdfExport {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'PdfExport';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n updatePdfResultModel(returnResult) {\n this.dataResults = returnResult;\n }\n Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n const dtSrc = this.parent.dataSource;\n const prop = Object();\n const isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise((resolve) => {\n const dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : this.parent.dataSource;\n let 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((e) => {\n let 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((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 generateQuery(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 manipulatePdfProperties(prop, dtSrc, queryResult) {\n let args = {};\n //count not required for this query\n const 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 const flatDatas = this.parent.flatData;\n const 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 pdfQueryCellInfo(args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n const style = {};\n const data = getObject('data', args);\n const ispadfilter = isNullOrUndefined(data.filterLevel);\n const 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}\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 */\nexport class Page {\n constructor(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 getModuleName() {\n return 'pager';\n }\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n refresh() {\n this.parent.grid.pagerModule.refresh();\n }\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\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 goToPage(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 updateExternalMessage(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 collapseExpandPagedchilds(rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n const primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n const record = this.parent.flatData.filter((e) => {\n return e[primaryKeyField] === rowDetails.record[primaryKeyField];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n const 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 const row = 'row';\n const action = 'action';\n let targetEle;\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 pageRoot(pagedResults, temp, result) {\n let newResults = isNullOrUndefined(result) ? [] : result;\n for (let t = 0; t < temp.length; t++) {\n newResults.push(temp[t]);\n let res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter((e) => {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this.pageRoot(pagedResults, res, newResults);\n }\n }\n return newResults;\n }\n pageAction(pageingDetails) {\n const dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n let temp = [];\n const propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n let query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n const size = this.parent.grid.pageSettings.pageSize;\n const current = this.parent.grid.pageSettings.currentPage;\n const skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n const newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n const dm = new DataManager(pageingDetails.result);\n const expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n const parents = dm.executeLocal(new Query().where(expanded));\n let visualData;\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;\n }\n else {\n visualData = parents.filter((e) => {\n return getExpandStatus(this.parent, e, parents);\n });\n }\n pageingDetails.count = visualData.length;\n let query = new Query();\n const size = this.parent.grid.pageSettings.pageSize;\n let 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 const skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n }\n}\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 */\nexport class Toolbar {\n constructor(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 getModuleName() {\n return 'toolbar';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 refreshToolbar(args) {\n const tObj = this.parent;\n if (args.row.rowIndex === 0 || tObj.getSelectedRecords().length > 1) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent', tObj.element.id + '_gridcontrol_outdent'], false);\n }\n else if (args['name'] !== \"rowDeselected\") {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex])) {\n if (!isNullOrUndefined(tObj.getCurrentViewRecords()[args.row.rowIndex]) &&\n (tObj.getCurrentViewRecords()[args.row.rowIndex].level >\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level)) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n else {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level ===\n tObj.getCurrentViewRecords()[args.row.rowIndex - 1].level) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], true);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level === 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n if (tObj.getCurrentViewRecords()[args.row.rowIndex].level !== 0) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n }\n if (args['name'] === \"rowDeselected\") {\n if (this.parent.toolbar['includes']('Indent')) {\n this.enableItems([tObj.element.id + '_gridcontrol_indent'], false);\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], false);\n }\n }\n if (args.row.rowIndex === 0 && !isNullOrUndefined(args.data.parentItem)) {\n this.enableItems([tObj.element.id + '_gridcontrol_outdent'], true);\n }\n }\n toolbarClickHandler(args) {\n const tObj = this.parent;\n const action = 'action';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length) {\n const record = tObj.getCurrentViewRecords()[tObj.getSelectedRowIndexes()[0] - 1];\n let dropIndex;\n if (record.level > tObj.getSelectedRecords()[0].level) {\n for (let i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = tObj.getSelectedRowIndexes()[0] - 1;\n }\n this.parent[action] = 'indenting';\n this.eventTrigger('indenting', dropIndex);\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length) {\n let dropIndex;\n const parentItem = tObj.getSelectedRecords()[0].parentItem;\n for (let i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n this.parent[action] = 'outdenting';\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n eventTrigger(action, dropIndex) {\n const selectedRecords = 'selectedRecords';\n const selectedRows = 'selectedRows';\n this.parent[selectedRows] = this.parent.getSelectedRows();\n this.parent[selectedRecords] = this.parent.getSelectedRecords();\n const actionArgs = {\n requestType: action,\n data: this.parent.getSelectedRecords(),\n row: this.parent.getSelectedRows(),\n cancel: false\n };\n this.parent.trigger(events.actionBegin, actionArgs, (actionArgs) => {\n if (!actionArgs.cancel) {\n if (actionArgs.requestType === 'indenting') {\n this.parent.reorderRows([this.parent.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n else if (actionArgs.requestType === 'outdenting') {\n this.parent.reorderRows([this.parent.getSelectedRowIndexes()[0]], dropIndex, 'below');\n }\n }\n });\n }\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n getToolbar() {\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 enableItems(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 destroy() {\n this.removeEventListener();\n }\n}\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 */\nexport class Aggregate {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'summary';\n }\n removeEventListener() {\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 calculateSummaryValue(summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n let parentRecord;\n const parentDataLength = Object.keys(filteredData).length;\n const parentData = [];\n for (let p = 0, len = parentDataLength; p < len; p++) {\n const summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n const parentRecords = findParentRecords(parentData);\n const flatRecords = parentData.slice();\n const summaryLength = Object.keys(this.parent.aggregates).length;\n const dataLength = Object.keys(parentRecords).length;\n let childRecordsLength;\n const columns = this.parent.getColumns();\n if (this.parent.aggregates.filter((x) => x.showChildSummary).length) {\n for (let i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n for (let summaryRowIndex = 1, len = summaryLength; summaryRowIndex <= len; summaryRowIndex++) {\n let item;\n item = {};\n for (let i = 0; i < columns.length; i++) {\n const field = (isNullOrUndefined(getObject('field', columns[i]))) ?\n columns[i] : getObject('field', (columns[i]));\n item[field] = null;\n }\n item = this.createSummaryItem(item, this.parent.aggregates[summaryRowIndex - 1]);\n if (this.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n let idx;\n flatRecords.map((e, i) => {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx = i;\n return;\n }\n });\n const currentIndex = idx + childRecordsLength + summaryRowIndex;\n const summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n const 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 const childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n continue;\n }\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n const items = {};\n for (let columnIndex = 0, length = columns.length; columnIndex < length; columnIndex++) {\n const fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (let summaryRowIndex = 1, length = summaryLength; summaryRowIndex <= length; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n }\n getChildRecordsLength(parentData, flatData) {\n const recordLength = Object.keys(flatData).length;\n let record;\n for (let i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n const parent = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter((e) => { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent) {\n this.flatChildRecords.push(record);\n const 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 createSummaryItem(itemData, summary) {\n const summaryColumnLength = Object.keys(summary.columns).length;\n for (let i = 0, len = summaryColumnLength; i < len; i++) {\n const displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n const keys = Object.keys(itemData);\n for (const key of keys) {\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 const 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 getSummaryValues(summaryColumn, summaryData) {\n const qry = new Query();\n const single = {};\n const helper = {};\n const 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 const formatFn = summaryColumn.getFormatter() || (() => (a) => a)();\n summaryColumn.setTemplate(helper);\n const tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n const sumData = new DataManager(summaryData).executeLocal(qry);\n let types = summaryColumn.type;\n let summaryKey;\n types = [summaryColumn.type];\n for (let i = 0; i < types.length; i++) {\n summaryKey = types[i];\n const key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n const val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n const disp = summaryColumn.columnName;\n const value = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n const cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n const 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 const value = single[summaryColumn.columnName][summaryKey];\n let 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 getFormatFromType(summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n let 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 destroy() {\n this.removeEventListener();\n }\n}\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 */\nexport class Sort {\n constructor(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 getModuleName() {\n return 'sort';\n }\n /**\n * @hidden\n */\n addEventListener() {\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 removeEventListener() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n }\n createdSortedRecords(sortParams) {\n const data = sortParams.modifiedData;\n const srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n }\n iterateSort(data, srtQry) {\n for (let 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 const childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n this.iterateSort(childSort, srtQry);\n }\n }\n }\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n sortColumn(columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n }\n removeSortColumn(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 updateModel() {\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 clearSorting() {\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 destroy() {\n this.removeEventListener();\n }\n}\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nexport class ColumnMenu {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n getColumnMenu() {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n }\n destroy() {\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 getModuleName() {\n return 'columnMenu';\n }\n}\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 */\nexport class ContextMenu {\n constructor(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n }\n contextMenuOpen(args) {\n const addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n const editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n }\n contextMenuClick(args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.addRecord();\n }\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n getModuleName() {\n return 'contextMenu';\n }\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n destroy() {\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 getContextMenu() {\n return this.parent.grid.contextMenuModule.getContextMenu();\n }\n}\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nexport class BatchEdit {\n constructor(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 addEventListener() {\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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n getBatchRecords() {\n return this.batchRecords;\n }\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n getAddRowIndex() {\n return this.addRowIndex;\n }\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n getSelectedIndex() {\n return this.selectedIndex;\n }\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n getBatchChildCount() {\n return this.batchChildCount;\n }\n batchPageAction() {\n const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (let i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map((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 cellSaved(args) {\n let actualCellIndex = args.cell.cellIndex;\n const frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n const freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n const 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 const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n let added;\n const level = 'level';\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let currentDataIndex;\n let indexvalue;\n const parentItem = 'parentItem';\n const uniqueID = 'uniqueID';\n const parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n let idMapping;\n let parentUniqueID;\n let parentIdMapping;\n let 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 const childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n let record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map((e) => { return e[primaryKey]; }).indexOf(record[primaryKey]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey, 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 const childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n let record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map((e) => { return e[primaryKey]; }).indexOf(record[primaryKey]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n const record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map((e) => { return e[primaryKey]; }).indexOf(record[primaryKey]);\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 beforeBatchAdd(e) {\n const isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n batchAdd(e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n let actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n let 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 const focusModule = getValue('focusModule', this.parent.grid);\n const 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 beforeBatchDelete(args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n const focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n const row = [];\n let records = [];\n const primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let data;\n let childs;\n let 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 const parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n const totalCount = parentRowIndex + childs.length;\n const firstChildIndex = parentRowIndex + 1;\n for (let 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 const parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n const 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 (let i = 0; i < records.length; i++) {\n const indexvalue = this.batchRecords.map((e) => { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (let i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n }\n updateRowIndex() {\n const rows = this.parent.grid.getDataRows();\n for (let i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n const 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 const mRows = this.parent.grid.getMovableDataRows();\n const freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (let 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 updateChildCount(records) {\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n const addedRecords = 'addedRecords';\n const parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (let 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 beforeBatchSave(e) {\n const changeRecords = 'changedRecords';\n const deleterecords = 'deletedRecords';\n const changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n let columnName;\n for (let 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 const deletedRecords = e.batchChanges[deleterecords];\n const record = deletedRecords;\n for (let i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n const childs = findChildrenRecords(record[i]);\n for (let c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = [...e.batchChanges[deleterecords], ...childs];\n }\n }\n this.isAdd = false;\n }\n deleteUniqueID(value) {\n const idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n const id = 'uniqueIDCollection';\n delete this.parent[id][value];\n }\n batchCancelAction() {\n const targetElement = 'targetElement';\n let index;\n const parentItem = 'parentItem';\n const indexvalue = 'index';\n const currentViewRecords = this.parent.grid.getCurrentViewRecords();\n const childRecords = 'childRecords';\n const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n const primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (let i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map((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((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 const children = currentViewRecords[index][childRecords];\n for (let 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 const row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (let i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map((e) => { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n const 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 batchSave(args) {\n if (this.parent.editSettings.mode === 'Batch') {\n let i;\n const batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n const deletedRecords = 'deletedRecords';\n const addedRecords = 'addedRecords';\n const index = 'index';\n const uniqueID = 'uniqueID';\n const data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n let currentViewRecords = this.parent.grid.getCurrentViewRecords();\n const primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n const level = 'level';\n const addRecords = batchChanges[addedRecords];\n const parentItem = 'parentItem';\n let selectedIndex;\n let addRowIndex;\n let columnName;\n let addRowRecord;\n const childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n const totalRecords = extendArray(data);\n if (totalRecords.length) {\n const startIndex = totalRecords.map((e) => { return e[primarykey]; })\n .indexOf(currentViewRecords[0][primarykey]);\n const 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 const 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, 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 const indexValue = currentViewRecords.map((e) => { return e[primarykey]; })\n .indexOf(addRecords[i][parentItem][primarykey]);\n const children = currentViewRecords[indexValue][childRecords];\n for (let j = 0; j < children.length; j++) {\n if (children[j][primarykey] === addRecords[i][primarykey]) {\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 (let i = 0; i < data.length; i++) {\n data[i][index] = i;\n setValue('uniqueIDCollection.' + data[i][uniqueID] + '.index', i, this.parent);\n if (!data[i][level]) {\n this.parent.parentData.push(data[i]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n }\n getActualRowObjectIndex(index) {\n const 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 const 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 immutableBatchAction(e) {\n e.args.cancel = true;\n const changes = this.parent.grid.getBatchChanges();\n let addedRecords = [];\n const index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (let i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n }\n nextCellIndex(args) {\n const index = 'index';\n const rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n}\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 */\nexport class Edit {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'edit';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 gridDblClick(e) {\n this.doubleClickTarget = e.target;\n }\n getRowPosition(addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n }\n beforeStartEdit(args) {\n this.parent.trigger(events.actionBegin, args);\n }\n beforeBatchCancel(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 removeEventListener() {\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 destroy() {\n this.removeEventListener();\n }\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n applyFormValidation(cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n }\n editActionEvents(args) {\n const eventArgs = getObject('editAction', args);\n const eventName = getObject('name', eventArgs);\n const treeObj = this.parent;\n const 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 const rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n const 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 const paramsLength = treeObj.grid.query.params.length;\n for (let 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 infiniteAddAction(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 const rowObjects = this.parent.grid.getRowsObject();\n const newRowObject = rowObjects.splice(0, 1)[0];\n let newRowObjectIndex = this.addRowIndex;\n const 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 const newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n const movableRows = this.parent.grid.getMovableRows();\n const movableRowsObject = this.parent.grid.getMovableRowsObject();\n const 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 updateInfiniteCurrentViewData(newRecord, newRowIndex) {\n const infiniteData = 'infiniteCurrentViewData';\n const updateCurrentViewData = 'updateCurrentViewData';\n const size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n let page = size > 0 ? size : 1;\n let dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n const infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n let data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter((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 recordDoubleClick(args) {\n const 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 const 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 const 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 updateGridEditMode(mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n const updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n }\n resetIsOnBatch() {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n }\n keyPressed(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 deleteUniqueID(value) {\n const idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n const id = 'uniqueIDCollection';\n delete this.parent[id][value];\n }\n cellEdit(args) {\n const promise = 'promise';\n const prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex)) {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, (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 enableToolbarItems(request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n const 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 batchCancel() {\n if (this.parent.editSettings.mode === 'Cell') {\n const cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n const 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 customCellSave(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 cellSave(args) {\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n const editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n let row;\n if (isNullOrUndefined(args.cell)) {\n row = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row = args.cell.parentNode;\n }\n let rowIndex;\n const primaryKeys = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row)) {\n this.parent.grid.getCurrentViewRecords().filter((e, i) => {\n if (e[primaryKeys[0]] === args.rowData[primaryKeys[0]]) {\n rowIndex = i;\n return;\n }\n });\n }\n else {\n const freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row) !== -1) {\n rowIndex = this.parent.getRows().indexOf(row);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row) !== -1) {\n rowIndex = this.parent.getFrozenRightRows().indexOf(row);\n }\n else {\n rowIndex = this.parent.getMovableRows().indexOf(row);\n }\n }\n else {\n rowIndex = (this.parent.getRows().indexOf(row) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row) : this.parent.getRows().indexOf(row);\n }\n }\n const arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row = this.parent.grid.getRows()[row.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row.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 const eventPromise = 'eventPromise';\n const editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row,\n rowIndex: rowIndex, 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);\n this.afterCellSave(args, row, rowIndex);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n const query = this.parent.grid.query;\n let crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then((e) => {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n this.updateCell(args, rowIndex);\n this.afterCellSave(args, row, rowIndex);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n }\n afterCellSave(args, row, rowIndex) {\n let 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 const 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 const 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((ag) => ag.showChildSummary === true).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n }\n lastCellTab() {\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 updateCell(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 crudAction(details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n const data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (let i = 0; i < data.length; i++) {\n data[i].index = i;\n const 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 const adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n updateIndex(data, rows, records) {\n for (let j = 0; j < this.parent.getDataRows().length; j++) {\n const data1 = records[j];\n const index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n const parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n let count = -1;\n let treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n const cells = rows[0].querySelectorAll('.e-rowcell');\n for (let l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (let k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n const data2 = records[count];\n let index = data2.index;\n const level = data2.level;\n const row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n const treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (let l = 0; l < treecell.classList.length; l++) {\n const value = treecell.classList[l];\n const remove = /e-gridrowindex/i;\n const removed = /e-griddetailrowindex/i;\n const result = value.match(remove);\n const 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 beginAdd() {\n let position;\n let index = this.addRowIndex;\n let 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 const rows = this.parent.grid.getDataRows();\n const firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n const lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n const withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n const 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 const 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 const r = 'rows';\n const newRowObject = this.parent.grid.contentModule[r][0];\n const focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n const 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 const 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 const movableRows = this.parent.getMovableDataRows();\n const frows = 'freezeRows';\n const newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n const 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 const errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (let i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n }\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n beginEdit(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 const data = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n const primaryKeys = this.parent.getPrimaryKeyFieldNames();\n for (let i = 0; i < data.length; i++) {\n this.parent.flatData.filter((e) => {\n if (e[primaryKeys[0]] === args.data[i][primaryKeys[0]]) {\n data[i] = e;\n }\n });\n }\n }\n for (let i = 0; i < data.length; i++) {\n this.deleteUniqueID(data[i].uniqueID);\n const childs = findChildrenRecords(data[i]);\n for (let c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = [...args.data, ...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 let selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n let row;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n }\n savePreviousRowPosition() {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n }\n beginAddEdit(args) {\n const value = args.data;\n if (args.action === 'add') {\n const key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n let position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n const 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 let index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n let level = 0;\n let idMapping;\n let parentUniqueID;\n let parentItem;\n let parentIdMapping;\n const isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n const rows = this.parent.getRows();\n const firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n const lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n const 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 const childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n const 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 const childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n const 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 const 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 const deletedValues = args.data;\n for (let i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n const parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n const 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 addRecord(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 const addRecords = [];\n const previousEditMode = this.parent.editSettings.mode;\n const 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 const updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords, 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 editFormValidate() {\n return this.parent.grid.editModule.editFormValidate();\n }\n /**\n * @hidden\n * @returns {void}\n */\n destroyForm() {\n this.parent.grid.editModule.destroyForm();\n }\n contentready(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 editCell(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}\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nexport class CommandColumn {\n constructor(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 getModuleName() {\n return 'commandColumn';\n }\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n destroy() {\n //this.removeEventListener();\n }\n}\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 */\nexport class DetailRow {\n constructor(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 getModuleName() {\n return 'detailRow';\n }\n addEventListener() {\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 removeEventListener() {\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 setIndentVisibility(args) {\n const visible = 'visible';\n args[visible] = false;\n }\n dataBoundArg() {\n const detailele = this.parent.getRows().filter((e) => {\n return !e.classList.contains('e-detailrow');\n });\n for (let i = 0; i < detailele.length; i++) {\n const elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n const detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n const 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 childRowExpand(args) {\n const detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n }\n rowExpandCollapse(args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (let i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n }\n detaildataBound(args) {\n const data = args.data;\n const row = args.detailElement.parentElement.previousSibling;\n const index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n const expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n const classlist = row.querySelector('.' + expandClass).classList;\n const gridClas = [].slice.call(classlist).filter((gridclass) => (gridclass === expandClass));\n const newNo = gridClas[0].length;\n const slicedclas = gridClas.toString().slice(6, newNo);\n const detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n }\n actioncomplete(args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n const spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n const colum = parseInt(spann, 10) - 1;\n const updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n const focusElement = this.parent.grid.contentModule.getRows();\n for (let i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n const focusModule = getObject('focusModule', this.parent.grid);\n const 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 destroy() {\n this.removeEventListener();\n }\n}\n","import { 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';\nexport class VirtualTreeContentRenderer extends VirtualContentRenderer {\n constructor(parent, locator) {\n super(parent, locator);\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 }\n getModelGenerator() {\n return new TreeVirtualRowModelGenerator(this.parent);\n }\n getRowByIndex(index) {\n return this.parent.getDataRows().filter((e) => parseInt(e.getAttribute('aria-rowindex'), 10) === index)[0];\n }\n addEventListener() {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n }\n virtualOtherAction(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 indexModifier(args) {\n const 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 const nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n let 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 eventListener(action) {\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 = () => {\n this.observers.observes((scrollArgs) => 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.eventListener('on');\n }\n }\n cellFocus(e) {\n const virtualCellFocus = 'virtualCellFocus';\n super[virtualCellFocus](e);\n }\n onDataReady(e) {\n super.onDataReady(e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || this.isDataSourceChanged) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n }\n renderTable() {\n super.renderTable();\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 getTranslateY(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.getTranslateY(sTop, cHeight, info, isOnenter);\n return super.getTranslateY(sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return super.getTranslateY(sTop, cHeight, info, isOnenter);\n }\n }\n dataBoundEvent() {\n const dataBoundEve = 'dataBound';\n const initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n const rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n const 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[dataBoundEve]();\n }\n rowSelectedEvent(args) {\n const rowSelected = 'rowSelected';\n super[rowSelected](args);\n }\n toSelectVirtualRow(args) {\n if (this.parent.isEdit) {\n return;\n }\n const selectVirtualRow = 'selectVirtualRow';\n const 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[selectVirtualRow](args);\n }\n }\n refreshCell(rowObj) {\n rowObj.cells = this.generateCells();\n }\n generateCells() {\n const cells = [];\n for (let i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n }\n generateCell(col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n const 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 beginEdit(e) {\n const selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n const index = this.parent.getContent().querySelector(selector).rowIndex;\n const rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n }\n beginAdd(args) {\n const addAction = 'addActionBegin';\n const isAdd = 'isAdd';\n const 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 const rows = this.parent.getRows();\n const firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n const lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n const 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[addAction](args);\n }\n }\n restoreEditState() {\n const restoreEdit = 'restoreEdit';\n super[restoreEdit]();\n }\n resetIseditValue() {\n const resetIsEdit = 'resetIsedit';\n const isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n super[resetIsEdit]();\n }\n }\n virtualEditSuccess() {\n const isAdd = 'isAdd';\n const content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n }\n cancelEdit(args) {\n const editCancel = 'editCancel';\n super[editCancel](args);\n }\n toSelectRowOnContextOpen(args) {\n const selectRowOnContextOpen = 'selectRowOnContextOpen';\n super[selectRowOnContextOpen](args);\n }\n restoreNewRow() {\n const isAdd = 'isAdd';\n const 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 getData(data) {\n const getVirtualData = 'getVirtualData';\n super[getVirtualData](data);\n }\n onActionComplete(args) {\n if (args.requestType === 'add') {\n const 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 const actionComplete = 'actionComplete';\n super[actionComplete](args);\n }\n onEnteredAction() {\n return (element, current, direction, e, isWheel, check) => {\n const directVirtualRender = 'directVirtualRender';\n if (!this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n const preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !this[preventEvent]) {\n this.parent.showSpinner();\n }\n const xAxis = current.axis === 'X';\n let x = this.getColumnOffset(xAxis ? this.vgenerator.getColumnIndexes()[0] - 1 : this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n const idx = Object.keys(this.vgenerator.cOffsets).length - this.prevInfo.columnIndexes.length;\n const 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 scrollListeners(scrollArgs) {\n const info = scrollArgs.sentinel;\n const outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n const content = this.parent.getContent().querySelector('.e-content');\n const scrollHeight = outBuffer * this.parent.getRowHeight();\n const upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n const downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n const selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n const vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n let 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 const lastInx = this.totalRecords - 1;\n const 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 let rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n let firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n const attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n const 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 let nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n const 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 let lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n const 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 const 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 appendContent(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.appendContent(target, newChild, e);\n }\n else {\n const 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 const cBlock = (info.columnIndexes[0]) - 1;\n const cOffset = this.getColumnOffset(cBlock);\n let width;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n const 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 const 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 const focusCell = 'focusCell';\n const restoreAdd = 'restoreAdd';\n const ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n super[focusCell](e);\n const 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[restoreAdd]();\n super[ensureSelectedRowPosition]();\n }\n }\n removeEventListener() {\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}\nexport class TreeInterSectionObserver extends InterSectionObserver {\n constructor() {\n super(...arguments);\n this.isWheeling = false;\n this.newPos = 0;\n this.lastPos = 0;\n this.timer = 0;\n }\n observes(callback, onEnterCallback) {\n const containerRect = 'containerRect';\n super[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n }\n clear() {\n this.lastPos = null;\n }\n virtualScrollHandlers(callback, onEnterCallback) {\n const delay = Browser.info.name === 'chrome' ? 200 : 100;\n const options = 'options';\n const movableEle = 'movableEle';\n const element = 'element';\n const fromWheel = 'fromWheel';\n const debounced100 = debounce(callback, delay);\n const debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return (e) => {\n const top = this[options].movableContainer ? this[options].container.scrollTop : e.target.scrollTop;\n const left = this[options].movableContainer ? this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n let 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 const current = this.sentinelInfo[direction];\n let 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 const 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 let 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}\n","import { 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 */\nexport class VirtualScroll {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n returnVisualData(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 getModuleName() {\n return 'virtualScroll';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 collapseExpandVirtualchilds(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 const 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 const requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n }\n virtualPageAction(pageingDetails) {\n const dm = new DataManager(pageingDetails.result);\n const expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n const parents = dm.executeLocal(new Query().where(expanded));\n const visualData = parents.filter((e) => {\n return getExpandStatus(this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n const counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n let startIndex = counts.startIndex;\n let endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n let query = new Query();\n const size = this.parent.grid.pageSettings.pageSize;\n const current = this.parent.grid.pageSettings.currentPage;\n const 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 const requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n const resourceCount = this.parent.getRows();\n let sIndex = visualData.indexOf(this.expandCollapseRec);\n const 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 destroy() {\n this.removeEventListener();\n }\n}\nexport class TreeVirtual extends GridVirtualScroll {\n constructor(parent, locator) {\n super(parent, locator);\n getValue('parent', this).off('initial-load', getValue('instantiateRenderer', this), this);\n getValue('parent', this).on('initial-load', this.instantiateRenderers, this);\n }\n getModuleName() {\n return 'treeVirtualScroll';\n }\n instantiateRenderers() {\n const parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n const 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 ensurePageSize() {\n const parentGrid = getValue('parent', this);\n const 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 const vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n const blockSize = ~~(vHeight / rowHeight);\n const height = blockSize * 2;\n const size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n }\n}\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 */\nexport class Freeze {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n addEventListener() {\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 removeEventListener() {\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 rowExpandCollapse(args) {\n const movableRows = this.parent.getMovableDataRows();\n const frozenrows = this.parent.getRows();\n let rows;\n let frozenRightRows;\n const freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter((e) => e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1)));\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter((e) => e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1)));\n }\n else {\n rows = args.detailrows;\n }\n for (let i = 0; i < rows.length; i++) {\n const 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 const queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n const cRow = [];\n for (let i = 0; i < movableRows.length; i++) {\n if (movableRows[i].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n }\n dblClickHandler(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 dataBoundArg() {\n const checkboxColumn = this.parent.getColumns().filter((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 destroy() {\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 getModuleName() {\n return 'freeze';\n }\n}\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nexport class ColumnChooser {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n constructor(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 openColumnChooser(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 destroy() {\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 getModuleName() {\n return 'ColumnChooser';\n }\n}\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 */\nexport class InfiniteScroll {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n constructor(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 getModuleName() {\n return 'infiniteScroll';\n }\n /**\n * @hidden\n * @returns {void}\n */\n addEventListener() {\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 removeEventListener() {\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 infiniteRemoteExpand(args) {\n const rowObjects = this.parent.grid.getRowsObject();\n const locator = 'serviceLocator';\n const generateRows = 'generateRows';\n const serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n const rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n const rows = this.parent.getRows();\n const position = args.index === rows.length - 1 ? 'after' : 'before';\n const cols = this.parent.grid.getColumns();\n const childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n const childRowElements = [];\n for (let i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice(args.index + 1, 0, ...childRowObjects);\n for (let 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 contentready() {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n const 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 collapseExpandInfinitechilds(row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n const 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 const 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 infinitePageAction(pageingDetails) {\n const dm = new DataManager(pageingDetails.result);\n const expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n const infiniteParents = dm.executeLocal(new Query().where(expanded));\n const visualData = infiniteParents.filter((e) => {\n return getExpandStatus(this.parent, e, infiniteParents);\n });\n const actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n const actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n const initial = actions.some((value) => { return value === actionArgs.requestType; });\n const 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 let query = new Query();\n const 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 let size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n let current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n const lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n const firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n const skip = lastIndex - actionArgs.data.length + 1;\n const 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 infiniteEditHandler(args) {\n const infiniteData = 'infiniteCurrentViewData';\n const infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n const keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (let 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 infiniteDeleteHandler(args) {\n if (args.requestType === 'delete') {\n const rows = this.parent.grid.getRowsObject();\n const rowElms = this.parent.getRows();\n const data = args.data instanceof Array ? args.data : [args.data];\n const keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n const mRows = this.parent.grid.getMovableRowsObject();\n const 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 removeRows(rowElms, rows, data, keyField, isFrozen) {\n const resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n for (let i = 0; i < data.length; i++) {\n rows.filter((e, index) => {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n const 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 }\n /**\n * Handles the row objects for Add operation.\n */\n createRows(eventArgs) {\n const locator = 'serviceLocator';\n const actionArgs = eventArgs.args.e;\n const row = eventArgs.row;\n const serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n const rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n let tbody;\n const currentData = this.parent.getCurrentViewRecords();\n const 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 let position;\n const addRowIndex = 'addRowIndex';\n let newRowIndex = this.parent.editModule[addRowIndex];\n for (let i = 0; i < row.length; i++) {\n const newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex + 1]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n }\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n destroy() {\n this.removeEventListener();\n }\n}\n","/**\n * actions export\n */\nexport * from './filter';\nexport * from './excel-export';\nexport * from './pdf-export';\nexport * from './page';\nexport * from './toolbar';\nexport * from './summary';\nexport * from './sort';\nexport * from './reorder';\nexport * from './resize';\nexport * from './clipboard';\nexport * from './column-menu';\nexport * from './context-menu';\nexport * from './edit';\nexport * from './command-column';\nexport * from './selection';\nexport * from './detail-row';\nexport * from './virtual-scroll';\nexport * from './freeze-column';\nexport * from './column-chooser';\nexport * from './logger';\nexport * from './infinite-scroll';\n","/**\n * TreeGrid component exported items\n */\nexport * from './base';\nexport * from './models';\nexport * from './renderer';\nexport * from './utils';\nexport * from './enum';\nexport * from './actions';\n","/**\n * Export TreeGrid component\n */\nexport * from './treegrid/index';\n"],"names":["__decorate","this","Predicate","Logger","GridLogger","GridClipboard","events.beforeCopy","events.checkboxChange","Print","GridPrint","events.printGridInit","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","collapsed","extend","events.remoteExpand","events.actionComplete","events.expanded","events.pagingActions","events.crudAction","events.batchSave","TreeGridSelection","events.load","events.rowSelecting","events.rowSelected","events.rowDeselected","events.resizeStop","events.beforePaste","TreeLogger","events.dataBound","events.toolbarClick","events.beginEdit","events.dataStateChange","events.cellSave","events.cellSaved","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","events.actionBegin","events.beginAdd","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","events.rowDragStart","events.rowdraging","events.rowDrag","events.rowDropped","merge","events.expanding","events.collapsing","events.collapsed","events.localPagedExpandCollapse","Reorder","GridReorder","Resize","GridResize","RowDD","GridDragDrop","events.rowsAdd","events.rowsRemove","events.rowDrop","RowDropSettings","events.dataListener","Filter","GridFilter","ExcelExport","GridExcel","event.beforeExcelExport","PdfExport","GridPdf","event.beforePdfExport","Page","GridPage","expanded","Toolbar","tool","Aggregate","GridAggregate","Sort","GridSort","ColumnMenu","GridColumnMenu","ContextMenu","cmenu","Edit","GridEdit","events.keyPressed","events.doubleTap","events.beforeStartEdit","events.beforeBatchCancel","remove","CommandColumn","Command","DetailRow","detailrow","events.virtualActionArgs","events.indexModifier","rowSelected","actionComplete","events.autoCol","VirtualScroll","events.destroy","GridVirtualScroll","Freeze","FreezeColumn","ColumnChooser","GridColumnChooser","InfiniteScroll","GridInfiniteScroll"],"mappings":"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"}
|