@syncfusion/ej2-treegrid 32.2.9 → 33.1.45

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.
Files changed (33) hide show
  1. package/dist/ej2-treegrid.min.js +2 -2
  2. package/dist/ej2-treegrid.umd.min.js +2 -2
  3. package/dist/ej2-treegrid.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-treegrid.es2015.js +237 -70
  5. package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
  6. package/dist/es6/ej2-treegrid.es5.js +244 -71
  7. package/dist/es6/ej2-treegrid.es5.js.map +1 -1
  8. package/dist/global/ej2-treegrid.min.js +2 -2
  9. package/dist/global/ej2-treegrid.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +5 -5
  12. package/src/treegrid/actions/batch-edit.js +1 -1
  13. package/src/treegrid/actions/edit.js +3 -0
  14. package/src/treegrid/actions/filter.js +20 -0
  15. package/src/treegrid/actions/rowdragdrop.js +17 -4
  16. package/src/treegrid/actions/virtual-scroll.js +2 -1
  17. package/src/treegrid/base/data.js +2 -33
  18. package/src/treegrid/base/treegrid-model.d.ts +1 -1
  19. package/src/treegrid/base/treegrid.d.ts +34 -0
  20. package/src/treegrid/base/treegrid.js +124 -4
  21. package/src/treegrid/renderer/render.js +15 -0
  22. package/src/treegrid/renderer/virtual-tree-content-render.d.ts +4 -5
  23. package/src/treegrid/renderer/virtual-tree-content-render.js +62 -29
  24. package/styles/fluent2.css +1 -0
  25. package/styles/material3-dark-lite.css +2 -2
  26. package/styles/material3-dark.css +2 -2
  27. package/styles/material3-lite.css +2 -2
  28. package/styles/material3.css +2 -2
  29. package/styles/treegrid/_bigger.scss +3 -0
  30. package/styles/treegrid/fluent2.css +1 -0
  31. package/styles/treegrid/icons/_material3.scss +2 -2
  32. package/styles/treegrid/material3-dark.css +2 -2
  33. package/styles/treegrid/material3.css +2 -2
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 32.2.9
3
+ * version : 33.1.45
4
4
  * Copyright Syncfusion Inc. 2001 - 2025. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncfusion/ej2-treegrid",
3
- "version": "32.2.9",
3
+ "version": "33.1.45",
4
4
  "description": "Essential JS 2 TreeGrid Component",
5
5
  "author": "Syncfusion Inc.",
6
6
  "license": "SEE LICENSE IN license",
@@ -8,10 +8,10 @@
8
8
  "module": "./index.js",
9
9
  "es2015": "./dist/es6/ej2-treegrid.es5.js",
10
10
  "dependencies": {
11
- "@syncfusion/ej2-base": "~32.2.9",
12
- "@syncfusion/ej2-data": "~32.2.3",
13
- "@syncfusion/ej2-grids": "~32.2.9",
14
- "@syncfusion/ej2-popups": "~32.2.8"
11
+ "@syncfusion/ej2-base": "~33.1.45",
12
+ "@syncfusion/ej2-data": "~33.1.45",
13
+ "@syncfusion/ej2-grids": "~33.1.45",
14
+ "@syncfusion/ej2-popups": "~33.1.44"
15
15
  },
16
16
  "devDependencies": {},
17
17
  "keywords": [
@@ -202,7 +202,7 @@ var BatchEdit = /** @class */ (function () {
202
202
  added.childRecords = [];
203
203
  this.batchRecords.splice(added.index, 0, added);
204
204
  this.currentViewRecords.splice(added.index, 0, added);
205
- if (currentDataIndex) {
205
+ if (currentDataIndex > -1) {
206
206
  indexvalue = currentDataIndex;
207
207
  }
208
208
  else {
@@ -170,6 +170,9 @@ var Edit = /** @class */ (function () {
170
170
  }
171
171
  }
172
172
  }
173
+ if (eventName === 'actionComplete' && eventArgs.requestType === 'save') {
174
+ this.addRowRecord = null;
175
+ }
173
176
  if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {
174
177
  this.infiniteAddAction(eventArgs);
175
178
  }
@@ -1,5 +1,6 @@
1
1
  import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';
2
2
  import { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';
3
+ import { getExpandStatus } from '../utils';
3
4
  import { getParentData } from '../utils';
4
5
  /**
5
6
  * TreeGrid Filter module will handle filtering action
@@ -97,6 +98,25 @@ var Filter = /** @class */ (function () {
97
98
  if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {
98
99
  this.updateFilterLevel();
99
100
  }
101
+ var _loop_1 = function (i) {
102
+ var record = this_1.filteredResult[parseInt(i.toString(), 10)];
103
+ if (!isNullOrUndefined(record.parentItem)) {
104
+ var parentUID_1 = record.parentItem.uniqueID;
105
+ var parentPresent = this_1.filteredResult.some(function (r) {
106
+ return !isNullOrUndefined(r.uniqueID) && r.uniqueID === parentUID_1;
107
+ });
108
+ if (parentPresent) {
109
+ record.isCollapsedChild = !getExpandStatus(this_1.parent, record, this_1.parent.parentData);
110
+ }
111
+ else {
112
+ record.isCollapsedChild = false;
113
+ }
114
+ }
115
+ };
116
+ var this_1 = this;
117
+ for (var i = 0; i < this.filteredResult.length; i++) {
118
+ _loop_1(i);
119
+ }
100
120
  this.parent.notify('updateAction', { result: this.filteredResult });
101
121
  };
102
122
  Filter.prototype.updateParentFilteredRecord = function (record) {
@@ -497,8 +497,10 @@ var RowDD = /** @class */ (function () {
497
497
  var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];
498
498
  var childRecords = record.childRecords;
499
499
  for (var i = 0; i < childRecords.length; i++) {
500
- droppedRecord.parentItem.taskData[this.parent.childMapping][parseInt(i.toString(), 10)]
501
- = childRecords[parseInt(i.toString(), 10)].taskData;
500
+ if (!isNullOrUndefined(childRecords[parseInt(i.toString(), 10)].taskData)) {
501
+ droppedRecord.parentItem.taskData[this.parent.childMapping][parseInt(i.toString(), 10)]
502
+ = childRecords[parseInt(i.toString(), 10)].taskData;
503
+ }
502
504
  }
503
505
  }
504
506
  }
@@ -1084,6 +1086,11 @@ var RowDD = /** @class */ (function () {
1084
1086
  * @returns {void} This function does not return a value.
1085
1087
  */
1086
1088
  RowDD.prototype.rowDropped = function (args) {
1089
+ if (!isNullOrUndefined(this.parent.aggregates[0]) && this.parent.aggregates[0].showChildSummary) {
1090
+ var records = this.parent.grid.getCurrentViewRecords();
1091
+ args.fromIndex = records[args.fromIndex].index;
1092
+ args.dropIndex = records[args.dropIndex].index;
1093
+ }
1087
1094
  var tObj = this.parent;
1088
1095
  var parentItem = 'parentItem';
1089
1096
  if (!tObj.rowDropSettings.targetID) {
@@ -1308,10 +1315,16 @@ var RowDD = /** @class */ (function () {
1308
1315
  var droppedRecord = void 0;
1309
1316
  if (isNullOrUndefined(args.dropIndex)) {
1310
1317
  var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];
1311
- var rowIndex = tObj.selectedRowIndex === -1 ?
1318
+ var rowIndex_1 = tObj.selectedRowIndex === -1 ?
1312
1319
  (this.parent.grid.getRowIndexByPrimaryKey(args.data[0]["" + primaryKeyField])) - 1
1313
1320
  : tObj.getSelectedRowIndexes()[0] - 1;
1314
- var record = tObj.getCurrentViewRecords()[parseInt(rowIndex.toString(), 10)];
1321
+ var record = void 0;
1322
+ if (this.parent.enableVirtualization) {
1323
+ record = tObj.getCurrentViewRecords().find(function (e) { return e.index === rowIndex_1; });
1324
+ }
1325
+ else {
1326
+ record = tObj.getCurrentViewRecords()[parseInt(rowIndex_1.toString(), 10)];
1327
+ }
1315
1328
  this.getParentData(record, args.data);
1316
1329
  }
1317
1330
  else {
@@ -130,7 +130,8 @@ var VirtualScroll = /** @class */ (function () {
130
130
  var dm = new DataManager(pageingDetails.result);
131
131
  var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);
132
132
  var parents = dm.executeLocal(new Query().where(expanded));
133
- var isFiltering = pageingDetails.actionArgs.requestType === 'filtering';
133
+ var isFiltering = (pageingDetails.actionArgs.requestType === 'filtering' && pageingDetails.actionArgs.action !== 'clear-filter') ||
134
+ (!isNullOrUndefined(this.parent['filterModule']) && (this.parent['filterModule'].filteredResult && this.parent['filterModule'].filteredResult.length > 0));
134
135
  var isFlatHierarchy = this.parent.filterSettings.hierarchyMode === 'Child' ||
135
136
  this.parent.filterSettings.hierarchyMode === 'None';
136
137
  var visualData = isFiltering && isFlatHierarchy
@@ -773,7 +773,6 @@ var DataManipulation = /** @class */ (function () {
773
773
  var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;
774
774
  var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)
775
775
  : results.length;
776
- var qry = new Query();
777
776
  var gridQuery = getObject('query', args);
778
777
  var filterQuery;
779
778
  var searchQuery;
@@ -789,11 +788,7 @@ var DataManipulation = /** @class */ (function () {
789
788
  gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);
790
789
  gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);
791
790
  }
792
- var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });
793
- var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });
794
- qry.queries = fltrQuery.concat(srchQuery);
795
- var filteredData = new DataManager(results).executeLocal(qry);
796
- this.parent.notify('updateFilterRecs', { data: filteredData });
791
+ this.parent.getData({ query: gridQuery, isFilter: true });
797
792
  results = this.dataResults.result;
798
793
  this.dataResults.result = null;
799
794
  if (this.parent.grid.aggregates.length > 0) {
@@ -818,34 +813,8 @@ var DataManipulation = /** @class */ (function () {
818
813
  }
819
814
  if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {
820
815
  this.isSortAction = false;
821
- var parentData = this.parent.parentData;
822
816
  var query = getObject('query', args);
823
- var srtQry = new Query();
824
- for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {
825
- var getColumnByField = 'getColumnByField';
826
- var col = this.parent.grid.renderModule.data["" + getColumnByField](this.parent.grid.
827
- sortSettings.columns[parseInt(srt.toString(), 10)].field);
828
- var compFun = col.sortComparer && isOffline(this.parent) ?
829
- col.sortComparer.bind(col) :
830
- this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].direction;
831
- srtQry.sortBy(this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].field, compFun);
832
- }
833
- var modifiedData = new DataManager(parentData).executeLocal(srtQry);
834
- if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&
835
- this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {
836
- var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);
837
- modifiedData.splice(dragdIndex, 1);
838
- var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);
839
- if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {
840
- modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);
841
- }
842
- else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {
843
- modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);
844
- }
845
- }
846
- var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };
847
- this.parent.notify('createSort', sortArgs);
848
- results = sortArgs.modifiedData;
817
+ results = this.parent.getData({ query: query, isSort: true });
849
818
  this.dataResults.result = null;
850
819
  this.sortedData = results;
851
820
  this.parent.notify('updateModel', {});
@@ -1,4 +1,4 @@
1
- import { Component, addClass, createElement, EventHandler, isNullOrUndefined, ModuleDeclaration, extend, merge, SanitizeHtmlHelper} from '@syncfusion/ej2-base';import { removeClass, EmitType, Complex, Collection, KeyboardEventArgs, getValue, NumberFormatOptions, DateFormatOptions } from '@syncfusion/ej2-base';import {Event, Property, NotifyPropertyChanges, INotifyPropertyChanged, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';import { Column, ColumnModel } from '../models/column';import { BeforeBatchSaveArgs, BeforeBatchAddArgs, BatchDeleteArgs, BeforeBatchDeleteArgs, Row, getNumberFormat, RowSelectable } from '@syncfusion/ej2-grids';import { GridModel, ColumnQueryModeType, HeaderCellInfoEventArgs, EditSettingsModel as GridEditModel, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';import { RowDragEventArgs, RowDropEventArgs, RowDropSettingsModel, RowDropSettings, getUid, parentsUntil } from '@syncfusion/ej2-grids';import { LoadingIndicator } from '../models/loading-indicator';import { LoadingIndicatorModel } from '../models/loading-indicator-model';import { TextAlign } from'@syncfusion/ej2-grids';import { DetailDataBoundEventArgs, ClipMode, ColumnChooser} from '@syncfusion/ej2-grids';import { SearchEventArgs, AddEventArgs, EditEventArgs, DeleteEventArgs} from '@syncfusion/ej2-grids';import { SaveEventArgs, CellSaveArgs, BatchAddArgs, BatchCancelArgs, BeginEditArgs, CellEditArgs} from '@syncfusion/ej2-grids';import { FilterSettings } from '../models/filter-settings';import { TextWrapSettings } from '../models/textwrap-settings';import { TextWrapSettingsModel } from '../models/textwrap-settings-model';import {Filter} from '../actions/filter';import { Logger as TreeLogger } from '../actions/logger';import { BeforeCopyEventArgs, BeforePasteEventArgs } from '@syncfusion/ej2-grids';import { TreeClipboard } from '../actions/clipboard';import {Aggregate} from '../actions/summary';import { Reorder } from '../actions/reorder';import { Resize } from '../actions/resize';import { Selection as TreeGridSelection } from '../actions/selection';import { ColumnMenu } from '../actions/column-menu';import { DetailRow } from '../actions/detail-row';import { Freeze } from '../actions/freeze-column';import { Print } from '../actions/print';import * as events from '../base/constant';import { FilterSettingsModel } from '../models/filter-settings-model';import { SearchSettings} from '../models/search-settings';import { SearchSettingsModel } from '../models/search-settings-model';import {RowInfo, RowDataBoundEventArgs, PageEventArgs, FilterEventArgs, FailureEventArgs, SortEventArgs } from '@syncfusion/ej2-grids';import { RowSelectingEventArgs, RowSelectEventArgs, RowDeselectingEventArgs, RowDeselectEventArgs, IIndex, ISelectedCell } from '@syncfusion/ej2-grids';import {ColumnModel as GridColumnModel, Column as GridColumn, CellSelectEventArgs, CellDeselectEventArgs } from '@syncfusion/ej2-grids';import { SelectionSettings } from '../models/selection-settings';import { SelectionSettingsModel } from '../models/selection-settings-model';import {getActualProperties, SortDirection, getObject, ColumnDragEventArgs } from '@syncfusion/ej2-grids';import { PrintMode, Data, IGrid, ContextMenuItemModel } from '@syncfusion/ej2-grids';import { ColumnMenuItem, ColumnMenuItemModel, CheckBoxChangeEventArgs } from '@syncfusion/ej2-grids';import { ExcelExportCompleteArgs, ExcelHeaderQueryCellInfoEventArgs, ExcelQueryCellInfoEventArgs, AggregateQueryCellInfoEventArgs } from '@syncfusion/ej2-grids';import { PdfExportCompleteArgs, PdfHeaderQueryCellInfoEventArgs, PdfQueryCellInfoEventArgs } from '@syncfusion/ej2-grids';import { ExcelExportProperties, PdfExportProperties, CellSelectingEventArgs, PrintEventArgs } from '@syncfusion/ej2-grids';import { ColumnMenuOpenEventArgs } from '@syncfusion/ej2-grids';import {BeforeDataBoundArgs} from '@syncfusion/ej2-grids';import { DataManager, ReturnOption, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred, UrlAdaptor, Middlewares } from '@syncfusion/ej2-data';import { createSpinner, hideSpinner, showSpinner, Dialog } from '@syncfusion/ej2-popups';import { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';import { Grid, QueryCellInfoEventArgs, Logger } from '@syncfusion/ej2-grids';import { Render } from '../renderer/render';import { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';import { DataManipulation } from './data';import { RowDD } from '../actions/rowdragdrop';import { Sort } from '../actions/sort';import { ITreeData, RowExpandedEventArgs, RowCollapsedEventArgs, RowCollapsingEventArgs, TreeGridExcelExportProperties, ActionEventArgs } from './interface';import { DataStateChangeEventArgs, RowExpandingEventArgs, TreeGridPdfExportProperties } from './interface';import { iterateArrayOrObject, GridLine } from '@syncfusion/ej2-grids';import { DataSourceChangedEventArgs, RecordDoubleClickEventArgs, ResizeArgs } from '@syncfusion/ej2-grids';import { ToolbarItems, ToolbarItem, ContextMenuItem, ContextMenuItems, RowPosition, CopyHierarchyType } from '../enum';import { ItemModel, ClickEventArgs, BeforeOpenCloseMenuEventArgs, MenuEventArgs } from '@syncfusion/ej2-navigations';import { PageSettings } from '../models/page-settings';import { PageSettingsModel } from '../models/page-settings-model';import { AggregateRow } from '../models/summary';import { AggregateRowModel } from '../models/summary-model';import { ExcelExport } from '../actions/excel-export';import { PdfExport } from '../actions/pdf-export';import { Toolbar } from '../actions/toolbar';import { Page } from '../actions/page';import { ContextMenu } from '../actions/context-menu';import { EditSettings } from '../models/edit-settings';import { EditSettingsModel } from '../models/edit-settings-model';import { Edit} from '../actions/edit';import { SortSettings } from '../models/sort-settings';import { SortSettingsModel } from '../models/sort-settings-model';import { isHidden, getExpandStatus } from '../utils';import { editAction } from '../actions/crud-actions';import { InfiniteScrollSettings } from '../models/infinite-scroll-settings';import { InfiniteScrollSettingsModel } from '../models/infinite-scroll-settings-model';import { TreeActionEventArgs } from '..';import * as literals from '../base/constant';import { ColumnChooserSettings } from '../models/column-chooser-settings';import { ColumnChooserSettingsModel } from '../models/column-chooser-settings-model';
1
+ import { Component, addClass, createElement, EventHandler, isNullOrUndefined, ModuleDeclaration, extend, merge, SanitizeHtmlHelper} from '@syncfusion/ej2-base';import { removeClass, EmitType, Complex, Collection, KeyboardEventArgs, getValue, NumberFormatOptions, DateFormatOptions } from '@syncfusion/ej2-base';import {Event, Property, NotifyPropertyChanges, INotifyPropertyChanged, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';import { Column, ColumnModel } from '../models/column';import { BeforeBatchSaveArgs, BeforeBatchAddArgs, BatchDeleteArgs, BeforeBatchDeleteArgs, Row, getNumberFormat, RowSelectable, LoadEventArgs, setEnableSeamlessScrolling } from '@syncfusion/ej2-grids';import { GridModel, ColumnQueryModeType, HeaderCellInfoEventArgs, EditSettingsModel as GridEditModel, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';import { RowDragEventArgs, RowDropEventArgs, RowDropSettingsModel, RowDropSettings, getUid, parentsUntil } from '@syncfusion/ej2-grids';import { LoadingIndicator } from '../models/loading-indicator';import { LoadingIndicatorModel } from '../models/loading-indicator-model';import { TextAlign } from'@syncfusion/ej2-grids';import { DetailDataBoundEventArgs, ClipMode, ColumnChooser} from '@syncfusion/ej2-grids';import { SearchEventArgs, AddEventArgs, EditEventArgs, DeleteEventArgs} from '@syncfusion/ej2-grids';import { SaveEventArgs, CellSaveArgs, BatchAddArgs, BatchCancelArgs, BeginEditArgs, CellEditArgs} from '@syncfusion/ej2-grids';import { FilterSettings } from '../models/filter-settings';import { TextWrapSettings } from '../models/textwrap-settings';import { TextWrapSettingsModel } from '../models/textwrap-settings-model';import {Filter} from '../actions/filter';import { Logger as TreeLogger } from '../actions/logger';import { BeforeCopyEventArgs, BeforePasteEventArgs } from '@syncfusion/ej2-grids';import { TreeClipboard } from '../actions/clipboard';import {Aggregate} from '../actions/summary';import { Reorder } from '../actions/reorder';import { Resize } from '../actions/resize';import { Selection as TreeGridSelection } from '../actions/selection';import { ColumnMenu } from '../actions/column-menu';import { DetailRow } from '../actions/detail-row';import { Freeze } from '../actions/freeze-column';import { Print } from '../actions/print';import * as events from '../base/constant';import { FilterSettingsModel } from '../models/filter-settings-model';import { SearchSettings} from '../models/search-settings';import { SearchSettingsModel } from '../models/search-settings-model';import {RowInfo, RowDataBoundEventArgs, PageEventArgs, FilterEventArgs, FailureEventArgs, SortEventArgs } from '@syncfusion/ej2-grids';import { RowSelectingEventArgs, RowSelectEventArgs, RowDeselectingEventArgs, RowDeselectEventArgs, IIndex, ISelectedCell } from '@syncfusion/ej2-grids';import {ColumnModel as GridColumnModel, Column as GridColumn, CellSelectEventArgs, CellDeselectEventArgs } from '@syncfusion/ej2-grids';import { SelectionSettings } from '../models/selection-settings';import { SelectionSettingsModel } from '../models/selection-settings-model';import {getActualProperties, SortDirection, getObject, ColumnDragEventArgs } from '@syncfusion/ej2-grids';import { PrintMode, Data, IGrid, ContextMenuItemModel } from '@syncfusion/ej2-grids';import { ColumnMenuItem, ColumnMenuItemModel, CheckBoxChangeEventArgs } from '@syncfusion/ej2-grids';import { ExcelExportCompleteArgs, ExcelHeaderQueryCellInfoEventArgs, ExcelQueryCellInfoEventArgs, AggregateQueryCellInfoEventArgs } from '@syncfusion/ej2-grids';import { PdfExportCompleteArgs, PdfHeaderQueryCellInfoEventArgs, PdfQueryCellInfoEventArgs } from '@syncfusion/ej2-grids';import { ExcelExportProperties, PdfExportProperties, CellSelectingEventArgs, PrintEventArgs } from '@syncfusion/ej2-grids';import { ColumnMenuOpenEventArgs } from '@syncfusion/ej2-grids';import {BeforeDataBoundArgs} from '@syncfusion/ej2-grids';import { DataManager, ReturnOption, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred, UrlAdaptor, Middlewares, QueryOptions, Predicate } from '@syncfusion/ej2-data';import { createSpinner, hideSpinner, showSpinner, Dialog } from '@syncfusion/ej2-popups';import { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';import { Grid, QueryCellInfoEventArgs, Logger } from '@syncfusion/ej2-grids';import { Render } from '../renderer/render';import { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';import { DataManipulation } from './data';import { RowDD } from '../actions/rowdragdrop';import { Sort } from '../actions/sort';import { ITreeData, RowExpandedEventArgs, RowCollapsedEventArgs, RowCollapsingEventArgs, TreeGridExcelExportProperties, ActionEventArgs } from './interface';import { DataStateChangeEventArgs, RowExpandingEventArgs, TreeGridPdfExportProperties } from './interface';import { iterateArrayOrObject, GridLine } from '@syncfusion/ej2-grids';import { DataSourceChangedEventArgs, RecordDoubleClickEventArgs, ResizeArgs } from '@syncfusion/ej2-grids';import { ToolbarItems, ToolbarItem, ContextMenuItem, ContextMenuItems, RowPosition, CopyHierarchyType } from '../enum';import { ItemModel, ClickEventArgs, BeforeOpenCloseMenuEventArgs, MenuEventArgs } from '@syncfusion/ej2-navigations';import { PageSettings } from '../models/page-settings';import { PageSettingsModel } from '../models/page-settings-model';import { AggregateRow } from '../models/summary';import { AggregateRowModel } from '../models/summary-model';import { ExcelExport } from '../actions/excel-export';import { PdfExport } from '../actions/pdf-export';import { Toolbar } from '../actions/toolbar';import { Page } from '../actions/page';import { ContextMenu } from '../actions/context-menu';import { EditSettings } from '../models/edit-settings';import { EditSettingsModel } from '../models/edit-settings-model';import { Edit} from '../actions/edit';import { SortSettings } from '../models/sort-settings';import { SortSettingsModel } from '../models/sort-settings-model';import { isHidden, getExpandStatus } from '../utils';import { editAction } from '../actions/crud-actions';import { InfiniteScrollSettings } from '../models/infinite-scroll-settings';import { InfiniteScrollSettingsModel } from '../models/infinite-scroll-settings-model';import { TreeActionEventArgs } from '..';import * as literals from '../base/constant';import { ColumnChooserSettings } from '../models/column-chooser-settings';import { ColumnChooserSettingsModel } from '../models/column-chooser-settings-model';
2
2
  import {ComponentModel} from '@syncfusion/ej2-base';
3
3
 
4
4
  /**
@@ -142,6 +142,8 @@ export declare class TreeGrid extends Component<HTMLElement> implements INotifyP
142
142
  isLocalData: boolean;
143
143
  /** @hidden */
144
144
  parentData: Object[];
145
+ /** @hidden */
146
+ enableSeamlessScrolling: boolean;
145
147
  /**
146
148
  * @hidden
147
149
  */
@@ -1490,6 +1492,38 @@ export declare class TreeGrid extends Component<HTMLElement> implements INotifyP
1490
1492
  private ignoreInArrays;
1491
1493
  private ignoreInColumn;
1492
1494
  private mouseClickHandler;
1495
+ /**
1496
+ * Retrieves all records that match the current search criteria and are sorted according to the active sort settings.
1497
+ *
1498
+ * This method processes the data source by applying search filters and sort operations,
1499
+ * returning the searched and sorted records excluding summary rows.
1500
+ *
1501
+ * @param {Object} args - Optional arguments object to control query execution behavior.
1502
+ * @param {Query} args.query - Optional custom Query object to override the default generated query.
1503
+ * @param {boolean} args.isFilter - Optional flag to include only filtered records without sorting (default: false).
1504
+ * @param {boolean} args.isSort - Optional flag to apply only sorting without filtering (default: false).
1505
+ *
1506
+ * @returns {ITreeData[]} - Array of searched and sorted TreeGrid records with summary rows excluded.
1507
+ * @hidden
1508
+ */
1509
+ getData(args?: {
1510
+ query?: Query;
1511
+ isFilter?: boolean;
1512
+ isSort?: boolean;
1513
+ }): ITreeData[];
1514
+ /**
1515
+ * Retrieves the processed Tree Grid data based on current operations such as
1516
+ * sorting, filtering, and searching. Maintains hierarchy and current structure.
1517
+ *
1518
+ * For local data: when skipPage is true (the default), it returns all available records;
1519
+ * when skipPage is false, it returns only the records for the current page.
1520
+ * For remote data: it always returns only the records for the current page.
1521
+ *
1522
+ * @param {boolean} skipPage - if set to false, returns only the records for the current page.
1523
+ * @returns {ITreeData[]} - Array of tree records (summary rows excluded).
1524
+ * @hidden
1525
+ */
1526
+ getProcessedRecords(skipPage?: boolean): ITreeData[];
1493
1527
  /**
1494
1528
  * Retrieves all the TreeGrid row elements.
1495
1529
  *
@@ -21,7 +21,7 @@ import { Component, addClass, createElement, EventHandler, isNullOrUndefined, ex
21
21
  import { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';
22
22
  import { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';
23
23
  import { Column } from '../models/column';
24
- import { getNumberFormat } from '@syncfusion/ej2-grids';
24
+ import { getNumberFormat, setEnableSeamlessScrolling } from '@syncfusion/ej2-grids';
25
25
  import { Freeze as FreezeColumn } from '@syncfusion/ej2-grids';
26
26
  import { RowDropSettings, getUid, parentsUntil } from '@syncfusion/ej2-grids';
27
27
  import { LoadingIndicator } from '../models/loading-indicator';
@@ -35,7 +35,7 @@ import * as events from '../base/constant';
35
35
  import { SearchSettings } from '../models/search-settings';
36
36
  import { SelectionSettings } from '../models/selection-settings';
37
37
  import { getActualProperties, getObject } from '@syncfusion/ej2-grids';
38
- import { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';
38
+ import { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred, UrlAdaptor, Predicate } from '@syncfusion/ej2-data';
39
39
  import { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';
40
40
  import { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';
41
41
  import { Grid, Logger } from '@syncfusion/ej2-grids';
@@ -83,6 +83,8 @@ var TreeGrid = /** @class */ (function (_super) {
83
83
  _this.isComponentRefresh = false;
84
84
  _this.isVirtualExpandCollapse = false;
85
85
  _this.isInfiniteCollapse = false;
86
+ /** @hidden */
87
+ _this.enableSeamlessScrolling = false;
86
88
  _this.objectEqualityChecker = function (old, current) {
87
89
  if (old) {
88
90
  var keys = Object.keys(old);
@@ -830,7 +832,15 @@ var TreeGrid = /** @class */ (function (_super) {
830
832
  this.renderModule = new Render(this);
831
833
  this.dataModule = new DataManipulation(this);
832
834
  this.printModule = new Print(this);
833
- this.trigger(events.load);
835
+ if (this.enableVirtualization || this.enableColumnVirtualization) {
836
+ var args = { enableSeamlessScrolling: this.enableSeamlessScrolling };
837
+ this.trigger(events.load, args);
838
+ this.enableSeamlessScrolling = args.enableSeamlessScrolling;
839
+ setEnableSeamlessScrolling(this.enableSeamlessScrolling);
840
+ }
841
+ else {
842
+ this.trigger(events.load);
843
+ }
834
844
  this.autoGenerateColumns();
835
845
  this.initialRender = true;
836
846
  if (!isNullOrUndefined(this.dataSource)) {
@@ -1103,6 +1113,7 @@ var TreeGrid = /** @class */ (function (_super) {
1103
1113
  this.grid.clipMode = getActualProperties(this.clipMode);
1104
1114
  this.grid.enableColumnSpan = this.enableColumnSpan;
1105
1115
  this.grid.enableRowSpan = this.enableRowSpan;
1116
+ this.grid.enableSeamlessScrolling = this.enableSeamlessScrolling;
1106
1117
  var templateInstance = 'templateDotnetInstance';
1107
1118
  this.grid["" + templateInstance] = this["" + templateInstance];
1108
1119
  var isJsComponent = 'isJsComponent';
@@ -1580,7 +1591,7 @@ var TreeGrid = /** @class */ (function (_super) {
1580
1591
  }
1581
1592
  _this.notify('updateGridActions', args);
1582
1593
  _this.isVirtualExpandCollapse = false;
1583
- if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {
1594
+ if (args.requestType === 'save' && _this.aggregates.some(function (ag) { return ag.showChildSummary === true; })) {
1584
1595
  _this.grid.refresh();
1585
1596
  }
1586
1597
  if ((args.action === 'clearFilter' || args.action === 'clear-filter' || args.requestType === 'sorting') && _this.enableInfiniteScrolling) {
@@ -2326,6 +2337,115 @@ var TreeGrid = /** @class */ (function (_super) {
2326
2337
  }
2327
2338
  }
2328
2339
  };
2340
+ /**
2341
+ * Retrieves all records that match the current search criteria and are sorted according to the active sort settings.
2342
+ *
2343
+ * This method processes the data source by applying search filters and sort operations,
2344
+ * returning the searched and sorted records excluding summary rows.
2345
+ *
2346
+ * @param {Object} args - Optional arguments object to control query execution behavior.
2347
+ * @param {Query} args.query - Optional custom Query object to override the default generated query.
2348
+ * @param {boolean} args.isFilter - Optional flag to include only filtered records without sorting (default: false).
2349
+ * @param {boolean} args.isSort - Optional flag to apply only sorting without filtering (default: false).
2350
+ *
2351
+ * @returns {ITreeData[]} - Array of searched and sorted TreeGrid records with summary rows excluded.
2352
+ * @hidden
2353
+ */
2354
+ TreeGrid.prototype.getData = function (args) {
2355
+ var dataObj = isCountRequired(this) ? getValue('result', this.grid.dataSource)
2356
+ : this.grid.dataSource;
2357
+ var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;
2358
+ var gridQuery = (!isNullOrUndefined(args) && args.query) ? args.query : this.getDataModule().baseModule.generateQuery();
2359
+ var filterQuery;
2360
+ var searchQuery;
2361
+ if (!isNullOrUndefined(gridQuery)) {
2362
+ filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });
2363
+ searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });
2364
+ }
2365
+ var skipFilterSearch = (!isNullOrUndefined(args) && args.isSort);
2366
+ if (!skipFilterSearch && (this.grid.allowFiltering && this.grid.filterSettings.columns.length) ||
2367
+ (this.grid.searchSettings.key.length > 0) && (!isNullOrUndefined(gridQuery))
2368
+ || ((filterQuery && filterQuery.length > 0) || (searchQuery && searchQuery.length > 0))) {
2369
+ var filterQuery_1 = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });
2370
+ var searchQuery_1 = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });
2371
+ var query = new Query();
2372
+ query.queries = filterQuery_1.concat(searchQuery_1);
2373
+ var filteredData = new DataManager(results).executeLocal(query);
2374
+ this.notify('updateFilterRecs', { data: filteredData });
2375
+ results = isRemoteData(this) ? this.dataResults : this.filterModule.filteredResult;
2376
+ if (!isNullOrUndefined(args) && args.isFilter) {
2377
+ return isRemoteData(this) ? results.result.filter(function (item) { return !item.isSummaryRow; })
2378
+ : results.filter(function (item) { return !item.isSummaryRow; });
2379
+ }
2380
+ }
2381
+ var sortQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSortBy'; });
2382
+ if (this.grid.sortSettings.columns.length > 0 || sortQuery.length) {
2383
+ var parentData = this.parentData;
2384
+ var query = new Query();
2385
+ query.queries = sortQuery;
2386
+ var modifiedData = new DataManager(parentData).executeLocal(query);
2387
+ if (this.allowRowDragAndDrop && !isNullOrUndefined(this.rowDragAndDropModule['draggedRecord']) &&
2388
+ this.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {
2389
+ var dragdIndex = modifiedData.indexOf(this.rowDragAndDropModule['draggedRecord']);
2390
+ modifiedData.splice(dragdIndex, 1);
2391
+ var dropdIndex = modifiedData.indexOf(this.rowDragAndDropModule['droppedRecord']);
2392
+ if (this.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.rowDragAndDropModule['dropPosition'] === 'topSegment') {
2393
+ modifiedData.splice(dropdIndex, 0, this.rowDragAndDropModule['draggedRecord']);
2394
+ }
2395
+ else if (this.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {
2396
+ modifiedData.splice(dropdIndex + 1, 0, this.rowDragAndDropModule['draggedRecord']);
2397
+ }
2398
+ }
2399
+ var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: query };
2400
+ this.notify('createSort', sortArgs);
2401
+ results = isRemoteData(this) ? this.dataResults : sortArgs.modifiedData;
2402
+ }
2403
+ return isRemoteData(this) ? this.dataResults.result.filter(function (item) { return !item.isSummaryRow; })
2404
+ : results.filter(function (item) { return !item.isSummaryRow; });
2405
+ };
2406
+ /**
2407
+ * Retrieves the processed Tree Grid data based on current operations such as
2408
+ * sorting, filtering, and searching. Maintains hierarchy and current structure.
2409
+ *
2410
+ * For local data: when skipPage is true (the default), it returns all available records;
2411
+ * when skipPage is false, it returns only the records for the current page.
2412
+ * For remote data: it always returns only the records for the current page.
2413
+ *
2414
+ * @param {boolean} skipPage - if set to false, returns only the records for the current page.
2415
+ * @returns {ITreeData[]} - Array of tree records (summary rows excluded).
2416
+ * @hidden
2417
+ */
2418
+ TreeGrid.prototype.getProcessedRecords = function (skipPage) {
2419
+ var _this = this;
2420
+ var result;
2421
+ if (skipPage !== true || isRemoteData(this)) {
2422
+ result = this.getData();
2423
+ var dm = new DataManager(result);
2424
+ var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);
2425
+ var parents_1 = dm.executeLocal(new Query().where(expanded));
2426
+ var visualData = parents_1.filter(function (e) {
2427
+ return getExpandStatus(_this, e, parents_1);
2428
+ });
2429
+ var query = new Query();
2430
+ if (this.allowPaging || this.enableVirtualization || this.enableInfiniteScrolling) {
2431
+ var pageSize = this.grid.pageSettings.pageSize;
2432
+ var currentPage = this.grid.pageSettings.currentPage;
2433
+ if (visualData.length < (currentPage * pageSize)) {
2434
+ currentPage = (Math.floor(visualData.length / pageSize)) + ((visualData.length % pageSize) ? 1 : 0);
2435
+ currentPage = currentPage ? currentPage : 1;
2436
+ this.grid.setProperties({ pageSettings: { currentPage: currentPage } }, true);
2437
+ }
2438
+ var skip = pageSize * (currentPage - 1);
2439
+ query = query.skip(skip).take(pageSize);
2440
+ }
2441
+ dm.dataSource.json = visualData;
2442
+ result = dm.executeLocal(query);
2443
+ }
2444
+ else {
2445
+ result = this.getData();
2446
+ }
2447
+ return result;
2448
+ };
2329
2449
  /**
2330
2450
  * Retrieves all the TreeGrid row elements.
2331
2451
  *
@@ -32,6 +32,16 @@ var Render = /** @class */ (function () {
32
32
  }
33
33
  var data = args.data;
34
34
  var parentData = data.parentItem;
35
+ if (!isNullOrUndefined(parentData) && data.isCollapsedChild && !isNullOrUndefined(args.row)) {
36
+ this.parent['toggleRowVisibility'](args.row, 'e-childrow-hidden');
37
+ var rowsObj = this.parent.grid.getRowsObject();
38
+ if (!this.parent.grid.isFrozenGrid() && !isNullOrUndefined(args.row.getAttribute('data-uid'))) {
39
+ var row = rowsObj.filter(function (e) { return e.uid === args.row.getAttribute('data-uid'); })[0];
40
+ if (row) {
41
+ row.visible = false;
42
+ }
43
+ }
44
+ }
35
45
  if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&
36
46
  (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||
37
47
  (isRemoteData(this.parent) && !isOffline(this.parent)))) {
@@ -60,6 +70,11 @@ var Render = /** @class */ (function () {
60
70
  var summaryRow = getObject('isSummaryRow', args.data);
61
71
  if (summaryRow) {
62
72
  addClass([args.row], 'e-summaryrow');
73
+ var isDragandDropCell = args.row.querySelector('.e-rowdragdrop') || args.row.querySelector('.e-rowdragdrop.e-dragging');
74
+ if (isDragandDropCell) {
75
+ args.row.cells[0].className = 'e-rowcell e-summarycell';
76
+ args.row.cells[0].innerHTML = '';
77
+ }
63
78
  }
64
79
  if (!isNullOrUndefined(args.row)) {
65
80
  if (args.row.querySelector('.e-treegridexpand')) {
@@ -96,6 +96,7 @@ export declare class VirtualTreeContentRenderer extends VirtualContentRenderer {
96
96
  * @returns {void}
97
97
  */
98
98
  private cellFocus;
99
+ private updateScrollbar;
99
100
  /**
100
101
  * Handles the data ready event for the virtual tree grid content renderer.
101
102
  *
@@ -317,16 +318,14 @@ export declare class VirtualTreeContentRenderer extends VirtualContentRenderer {
317
318
  * @returns {void}
318
319
  */
319
320
  removeEventListener(): void;
321
+ destroy(): void;
320
322
  }
321
323
  export declare class TreeInterSectionObserver extends InterSectionObserver {
322
324
  private isWheeling;
323
325
  private newPos;
324
326
  private lastPos;
325
327
  private timer;
326
- private containerEl;
327
- private movableContainerEl;
328
- private containerScrollHandler;
329
- private movableScrollHandler;
328
+ private onWheelEvent;
330
329
  /**
331
330
  * Sets up observers to monitor scroll events on a given container
332
331
  * and its movable companion within a virtual grid setup.
@@ -337,7 +336,7 @@ export declare class TreeInterSectionObserver extends InterSectionObserver {
337
336
  * @returns {void}
338
337
  */
339
338
  observes(callback: Function, onEnterCallback: Function, instance: IGrid): void;
340
- disconnect(): void;
339
+ private onVirtualContentScrolling;
341
340
  /**
342
341
  * Clears the last known position.
343
342
  *