@syncfusion/ej2-treegrid 30.1.38 → 31.1.17
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/aceconfig.js +17 -0
- package/dist/ej2-treegrid.min.js +2 -2
- 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 +265 -159
- package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
- package/dist/es6/ej2-treegrid.es5.js +293 -169
- 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/dist/ts/index.d.ts +4 -0
- package/dist/ts/index.ts +4 -0
- package/dist/ts/treegrid/actions/batch-edit.d.ts +74 -0
- package/dist/ts/treegrid/actions/batch-edit.ts +627 -0
- package/dist/ts/treegrid/actions/clipboard.d.ts +36 -0
- package/dist/ts/treegrid/actions/clipboard.ts +174 -0
- package/dist/ts/treegrid/actions/column-chooser.d.ts +37 -0
- package/dist/ts/treegrid/actions/column-chooser.ts +55 -0
- package/dist/ts/treegrid/actions/column-menu.d.ts +24 -0
- package/dist/ts/treegrid/actions/column-menu.ts +39 -0
- package/dist/ts/treegrid/actions/command-column.d.ts +24 -0
- package/dist/ts/treegrid/actions/command-column.ts +32 -0
- package/dist/ts/treegrid/actions/context-menu.d.ts +42 -0
- package/dist/ts/treegrid/actions/context-menu.ts +149 -0
- package/dist/ts/treegrid/actions/crud-actions.d.ts +66 -0
- package/dist/ts/treegrid/actions/crud-actions.ts +388 -0
- package/dist/ts/treegrid/actions/detail-row.d.ts +39 -0
- package/dist/ts/treegrid/actions/detail-row.ts +124 -0
- package/dist/ts/treegrid/actions/edit.d.ts +121 -0
- package/dist/ts/treegrid/actions/edit.ts +1083 -0
- package/dist/ts/treegrid/actions/excel-export.d.ts +67 -0
- package/dist/ts/treegrid/actions/excel-export.ts +240 -0
- package/dist/ts/treegrid/actions/filter.d.ts +57 -0
- package/dist/ts/treegrid/actions/filter.ts +231 -0
- package/dist/ts/treegrid/actions/freeze-column.d.ts +28 -0
- package/dist/ts/treegrid/actions/freeze-column.ts +119 -0
- package/dist/ts/treegrid/actions/index.d.ts +24 -0
- package/dist/ts/treegrid/actions/index.ts +24 -0
- package/dist/ts/treegrid/actions/infinite-scroll.d.ts +96 -0
- package/dist/ts/treegrid/actions/infinite-scroll.ts +320 -0
- package/dist/ts/treegrid/actions/logger.d.ts +25 -0
- package/dist/ts/treegrid/actions/logger.ts +136 -0
- package/dist/ts/treegrid/actions/page.d.ts +67 -0
- package/dist/ts/treegrid/actions/page.ts +212 -0
- package/dist/ts/treegrid/actions/pdf-export.d.ts +63 -0
- package/dist/ts/treegrid/actions/pdf-export.ts +182 -0
- package/dist/ts/treegrid/actions/print.d.ts +37 -0
- package/dist/ts/treegrid/actions/print.ts +69 -0
- package/dist/ts/treegrid/actions/reorder.d.ts +36 -0
- package/dist/ts/treegrid/actions/reorder.ts +60 -0
- package/dist/ts/treegrid/actions/resize.d.ts +36 -0
- package/dist/ts/treegrid/actions/resize.ts +54 -0
- package/dist/ts/treegrid/actions/rowdragdrop.d.ts +405 -0
- package/dist/ts/treegrid/actions/rowdragdrop.ts +1896 -0
- package/dist/ts/treegrid/actions/selection.d.ts +51 -0
- package/dist/ts/treegrid/actions/selection.ts +530 -0
- package/dist/ts/treegrid/actions/sort.d.ts +63 -0
- package/dist/ts/treegrid/actions/sort.ts +149 -0
- package/dist/ts/treegrid/actions/summary.d.ts +47 -0
- package/dist/ts/treegrid/actions/summary.ts +231 -0
- package/dist/ts/treegrid/actions/toolbar.d.ts +52 -0
- package/dist/ts/treegrid/actions/toolbar.ts +154 -0
- package/dist/ts/treegrid/actions/virtual-scroll.d.ts +90 -0
- package/dist/ts/treegrid/actions/virtual-scroll.ts +306 -0
- package/dist/ts/treegrid/base/constant.d.ts +158 -0
- package/dist/ts/treegrid/base/constant.ts +158 -0
- package/dist/ts/treegrid/base/data.d.ts +90 -0
- package/dist/ts/treegrid/base/data.ts +904 -0
- package/dist/ts/treegrid/base/index.d.ts +11 -0
- package/dist/ts/treegrid/base/index.ts +11 -0
- package/dist/ts/treegrid/base/interface.d.ts +186 -0
- package/dist/ts/treegrid/base/interface.ts +191 -0
- package/dist/ts/treegrid/base/treegrid-model.d.ts +1100 -0
- package/dist/ts/treegrid/base/treegrid.d.ts +2422 -0
- package/dist/ts/treegrid/base/treegrid.ts +5962 -0
- package/dist/ts/treegrid/enum.d.ts +152 -0
- package/dist/ts/treegrid/enum.ts +217 -0
- package/dist/ts/treegrid/index.d.ts +9 -0
- package/dist/ts/treegrid/index.ts +9 -0
- package/dist/ts/treegrid/models/column-chooser-settings-model.d.ts +62 -0
- package/dist/ts/treegrid/models/column-chooser-settings.d.ts +53 -0
- package/dist/ts/treegrid/models/column-chooser-settings.ts +67 -0
- package/dist/ts/treegrid/models/column-model.d.ts +30 -0
- package/dist/ts/treegrid/models/column.d.ts +697 -0
- package/dist/ts/treegrid/models/column.ts +800 -0
- package/dist/ts/treegrid/models/edit-settings-model.d.ts +100 -0
- package/dist/ts/treegrid/models/edit-settings.d.ts +89 -0
- package/dist/ts/treegrid/models/edit-settings.ts +111 -0
- package/dist/ts/treegrid/models/filter-settings-model.d.ts +216 -0
- package/dist/ts/treegrid/models/filter-settings.d.ts +195 -0
- package/dist/ts/treegrid/models/filter-settings.ts +237 -0
- package/dist/ts/treegrid/models/index.d.ts +24 -0
- package/dist/ts/treegrid/models/index.ts +24 -0
- package/dist/ts/treegrid/models/infinite-scroll-settings-model.d.ts +29 -0
- package/dist/ts/treegrid/models/infinite-scroll-settings.d.ts +25 -0
- package/dist/ts/treegrid/models/infinite-scroll-settings.ts +31 -0
- package/dist/ts/treegrid/models/loading-indicator-model.d.ts +21 -0
- package/dist/ts/treegrid/models/loading-indicator.d.ts +19 -0
- package/dist/ts/treegrid/models/loading-indicator.ts +21 -0
- package/dist/ts/treegrid/models/page-settings-model.d.ts +66 -0
- package/dist/ts/treegrid/models/page-settings.d.ts +57 -0
- package/dist/ts/treegrid/models/page-settings.ts +73 -0
- package/dist/ts/treegrid/models/rowdrop-settings-model.d.ts +15 -0
- package/dist/ts/treegrid/models/rowdrop-settings.d.ts +34 -0
- package/dist/ts/treegrid/models/rowdrop-settings.ts +37 -0
- package/dist/ts/treegrid/models/search-settings-model.d.ts +79 -0
- package/dist/ts/treegrid/models/search-settings.d.ts +73 -0
- package/dist/ts/treegrid/models/search-settings.ts +83 -0
- package/dist/ts/treegrid/models/selection-settings-model.d.ts +76 -0
- package/dist/ts/treegrid/models/selection-settings.d.ts +68 -0
- package/dist/ts/treegrid/models/selection-settings.ts +82 -0
- package/dist/ts/treegrid/models/sort-settings-model.d.ts +49 -0
- package/dist/ts/treegrid/models/sort-settings.d.ts +43 -0
- package/dist/ts/treegrid/models/sort-settings.ts +51 -0
- package/dist/ts/treegrid/models/summary-model.d.ts +93 -0
- package/dist/ts/treegrid/models/summary.d.ts +126 -0
- package/dist/ts/treegrid/models/summary.ts +170 -0
- package/dist/ts/treegrid/models/textwrap-settings-model.d.ts +21 -0
- package/dist/ts/treegrid/models/textwrap-settings.d.ts +19 -0
- package/dist/ts/treegrid/models/textwrap-settings.ts +21 -0
- package/dist/ts/treegrid/renderer/index.d.ts +5 -0
- package/dist/ts/treegrid/renderer/index.ts +5 -0
- package/dist/ts/treegrid/renderer/render.d.ts +41 -0
- package/dist/ts/treegrid/renderer/render.ts +379 -0
- package/dist/ts/treegrid/renderer/virtual-row-model-generator.d.ts +16 -0
- package/dist/ts/treegrid/renderer/virtual-row-model-generator.ts +90 -0
- package/dist/ts/treegrid/renderer/virtual-tree-content-render.d.ts +353 -0
- package/dist/ts/treegrid/renderer/virtual-tree-content-render.ts +1125 -0
- package/dist/ts/treegrid/utils.d.ts +70 -0
- package/dist/ts/treegrid/utils.ts +217 -0
- package/package.json +51 -15
- package/src/treegrid/actions/context-menu.js +3 -1
- package/src/treegrid/actions/excel-export.d.ts +8 -0
- package/src/treegrid/actions/excel-export.js +13 -1
- package/src/treegrid/actions/freeze-column.js +1 -1
- package/src/treegrid/actions/pdf-export.d.ts +8 -0
- package/src/treegrid/actions/pdf-export.js +12 -0
- package/src/treegrid/actions/selection.js +1 -1
- package/src/treegrid/actions/virtual-scroll.js +2 -2
- package/src/treegrid/base/data.js +1 -1
- package/src/treegrid/base/treegrid-model.d.ts +32 -2
- package/src/treegrid/base/treegrid.d.ts +29 -2
- package/src/treegrid/base/treegrid.js +39 -2
- package/src/treegrid/models/column-chooser-settings-model.d.ts +62 -0
- package/src/treegrid/models/column-chooser-settings.d.ts +53 -0
- package/src/treegrid/models/column-chooser-settings.js +52 -0
- package/src/treegrid/renderer/virtual-tree-content-render.js +4 -9
- package/src/treegrid/utils.js +22 -6
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { isNullOrUndefined } from '@syncfusion/ej2-base';
|
|
2
|
+
import { DataManager, Query, QueryOptions } from '@syncfusion/ej2-data';
|
|
3
|
+
import { ITreeData } from '../base/interface';
|
|
4
|
+
import { TreeGrid } from '../base/treegrid';
|
|
5
|
+
import { Sort as GridSort, Grid, SortDirection, getActualProperties } from '@syncfusion/ej2-grids';
|
|
6
|
+
import { getParentData } from '../utils';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dataoperations for TreeGrid
|
|
10
|
+
*
|
|
11
|
+
* @hidden
|
|
12
|
+
*/
|
|
13
|
+
export class Sort {
|
|
14
|
+
// Internal variables
|
|
15
|
+
private flatSortedData: Object[];
|
|
16
|
+
private taskIds: Object[];
|
|
17
|
+
private storedIndex: number;
|
|
18
|
+
private parent: TreeGrid;
|
|
19
|
+
private isSelfReference: boolean;
|
|
20
|
+
|
|
21
|
+
constructor(grid: TreeGrid) {
|
|
22
|
+
Grid.Inject(GridSort);
|
|
23
|
+
this.parent = grid;
|
|
24
|
+
this.taskIds = [];
|
|
25
|
+
this.flatSortedData = [];
|
|
26
|
+
this.storedIndex = -1;
|
|
27
|
+
this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);
|
|
28
|
+
this.addEventListener();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* For internal use only - Get the module name.
|
|
33
|
+
*
|
|
34
|
+
* @private
|
|
35
|
+
* @returns {string} Returns Sort module name
|
|
36
|
+
*/
|
|
37
|
+
private getModuleName(): string {
|
|
38
|
+
return 'sort';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @hidden
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
public addEventListener(): void {
|
|
45
|
+
this.parent.on('updateModel', this.updateModel, this);
|
|
46
|
+
this.parent.on('createSort', this.createdSortedRecords, this);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @hidden
|
|
51
|
+
* @returns {void}
|
|
52
|
+
*/
|
|
53
|
+
public removeEventListener(): void {
|
|
54
|
+
if (this.parent.isDestroyed) { return; }
|
|
55
|
+
this.parent.off('updateModel', this.updateModel);
|
|
56
|
+
this.parent.off('createSort', this.createdSortedRecords);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private createdSortedRecords(sortParams: { modifiedData: ITreeData[], filteredData: ITreeData[], srtQry: Query }) : void {
|
|
60
|
+
const data: ITreeData[] = sortParams.modifiedData;
|
|
61
|
+
const srtQry: Query = sortParams.srtQry;
|
|
62
|
+
this.iterateSort(data, srtQry);
|
|
63
|
+
this.storedIndex = -1;
|
|
64
|
+
sortParams.modifiedData = this.flatSortedData;
|
|
65
|
+
this.flatSortedData = [];
|
|
66
|
+
}
|
|
67
|
+
private iterateSort(data: ITreeData[], srtQry: Query): void {
|
|
68
|
+
const gridQuery: Query = this.parent.query;
|
|
69
|
+
let filterQuery: QueryOptions[] = [];
|
|
70
|
+
if (!isNullOrUndefined(gridQuery)) {
|
|
71
|
+
filterQuery = gridQuery.queries.filter((q: QueryOptions) => q.fn === 'onWhere');
|
|
72
|
+
}
|
|
73
|
+
for (let d: number = 0; d < data.length; d++) {
|
|
74
|
+
if (filterQuery.length > 0 || this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {
|
|
75
|
+
if (!isNullOrUndefined(getParentData(this.parent, data[parseInt(d.toString(), 10)].uniqueID, true))) {
|
|
76
|
+
this.storedIndex++;
|
|
77
|
+
this.flatSortedData[this.storedIndex] = data[parseInt(d.toString(), 10)];
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
this.storedIndex++;
|
|
81
|
+
this.flatSortedData[this.storedIndex] = data[parseInt(d.toString(), 10)];
|
|
82
|
+
}
|
|
83
|
+
if (data[parseInt(d.toString(), 10)].hasChildRecords) {
|
|
84
|
+
const childSort: ITreeData[] = <ITreeData[]>(new DataManager(data[parseInt(d.toString(), 10)].childRecords)
|
|
85
|
+
.executeLocal(srtQry));
|
|
86
|
+
if (this.parent.allowRowDragAndDrop && data[parseInt(d.toString(), 10)].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {
|
|
87
|
+
const dragdIndex: number = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);
|
|
88
|
+
childSort.splice(dragdIndex, 1);
|
|
89
|
+
const dropdIndex: number = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);
|
|
90
|
+
if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {
|
|
91
|
+
childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);
|
|
92
|
+
}
|
|
93
|
+
else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {
|
|
94
|
+
childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
this.iterateSort(childSort, srtQry);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Sorts a column with the given options.
|
|
103
|
+
*
|
|
104
|
+
* @param {string} columnName - Defines the column name to be sorted.
|
|
105
|
+
* @param {SortDirection} direction - Defines the direction of sorting field.
|
|
106
|
+
* @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.
|
|
107
|
+
* @returns {void}
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
public sortColumn(columnName: string, direction: SortDirection, isMultiSort?: boolean): void {
|
|
111
|
+
this.parent.grid.sortColumn(columnName, direction, isMultiSort);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public removeSortColumn(field: string): void {
|
|
115
|
+
this.parent.grid.removeSortColumn(field);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* The function used to update sortSettings of TreeGrid.
|
|
120
|
+
*
|
|
121
|
+
* @returns {void}
|
|
122
|
+
* @hidden
|
|
123
|
+
*/
|
|
124
|
+
private updateModel(): void {
|
|
125
|
+
this.parent.setProperties({sortSettings: getActualProperties(this.parent.grid.sortSettings)}, true);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Clears all the sorted columns of the TreeGrid.
|
|
130
|
+
*
|
|
131
|
+
* @returns {void}
|
|
132
|
+
*/
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
public clearSorting(): void {
|
|
136
|
+
this.parent.grid.clearSorting();
|
|
137
|
+
this.updateModel();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Destroys the Sorting of TreeGrid.
|
|
142
|
+
*
|
|
143
|
+
* @function destroy
|
|
144
|
+
* @returns {void}
|
|
145
|
+
*/
|
|
146
|
+
public destroy(): void {
|
|
147
|
+
this.removeEventListener();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { TreeGrid } from '../base/treegrid';
|
|
2
|
+
import { QueryOptions } from '@syncfusion/ej2-data';
|
|
3
|
+
/**
|
|
4
|
+
* TreeGrid Aggregate module
|
|
5
|
+
*
|
|
6
|
+
* @hidden
|
|
7
|
+
*/
|
|
8
|
+
export declare class Aggregate {
|
|
9
|
+
private parent;
|
|
10
|
+
private flatChildRecords;
|
|
11
|
+
private summaryQuery;
|
|
12
|
+
/**
|
|
13
|
+
* Constructor for Aggregate module
|
|
14
|
+
*
|
|
15
|
+
* @param {TreeGrid} parent - Tree Grid instance
|
|
16
|
+
*/
|
|
17
|
+
constructor(parent?: TreeGrid);
|
|
18
|
+
/**
|
|
19
|
+
* For internal use only - Get the module name.
|
|
20
|
+
*
|
|
21
|
+
* @private
|
|
22
|
+
* @returns {string} Returns Summary module name
|
|
23
|
+
*/
|
|
24
|
+
private getModuleName;
|
|
25
|
+
removeEventListener(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Function to calculate summary values
|
|
28
|
+
*
|
|
29
|
+
* @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations
|
|
30
|
+
* @param {Object[]} filteredData - Filtered data collection
|
|
31
|
+
* @param {boolean} isSort - Specified whether sorting operation performed
|
|
32
|
+
* @hidden
|
|
33
|
+
* @returns {Object[]} - return flat records with summary values
|
|
34
|
+
*/
|
|
35
|
+
calculateSummaryValue(summaryQuery: QueryOptions[], filteredData: Object[], isSort: boolean): Object[];
|
|
36
|
+
private getChildRecordsLength;
|
|
37
|
+
private createSummaryItem;
|
|
38
|
+
private getSummaryValues;
|
|
39
|
+
private getFormatFromType;
|
|
40
|
+
/**
|
|
41
|
+
* To destroy the Aggregate module
|
|
42
|
+
*
|
|
43
|
+
* @returns {void}
|
|
44
|
+
* @hidden
|
|
45
|
+
*/
|
|
46
|
+
destroy(): void;
|
|
47
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { TreeGrid } from '../base/treegrid';
|
|
2
|
+
import { QueryOptions, Query, DataManager } from '@syncfusion/ej2-data';
|
|
3
|
+
import { getObject, AggregateType, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';
|
|
4
|
+
import { ITreeData } from '../base';
|
|
5
|
+
import { findParentRecords } from '../utils';
|
|
6
|
+
import { isNullOrUndefined, setValue, NumberFormatOptions, DateFormatOptions, createElement, extend } from '@syncfusion/ej2-base';
|
|
7
|
+
import { AggregateColumn } from '../models/summary';
|
|
8
|
+
import { AggregateRowModel } from '../models/summary-model';
|
|
9
|
+
import { Column } from '../models';
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* TreeGrid Aggregate module
|
|
14
|
+
*
|
|
15
|
+
* @hidden
|
|
16
|
+
*/
|
|
17
|
+
export class Aggregate {
|
|
18
|
+
private parent: TreeGrid;
|
|
19
|
+
private flatChildRecords: Object[];
|
|
20
|
+
private summaryQuery: QueryOptions[];
|
|
21
|
+
/**
|
|
22
|
+
* Constructor for Aggregate module
|
|
23
|
+
*
|
|
24
|
+
* @param {TreeGrid} parent - Tree Grid instance
|
|
25
|
+
*/
|
|
26
|
+
constructor(parent?: TreeGrid) {
|
|
27
|
+
Grid.Inject(GridAggregate);
|
|
28
|
+
this.parent = parent;
|
|
29
|
+
this.flatChildRecords = [];
|
|
30
|
+
this.summaryQuery = [];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* For internal use only - Get the module name.
|
|
35
|
+
*
|
|
36
|
+
* @private
|
|
37
|
+
* @returns {string} Returns Summary module name
|
|
38
|
+
*/
|
|
39
|
+
private getModuleName(): string {
|
|
40
|
+
return 'summary';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public removeEventListener(): void {
|
|
44
|
+
if (this.parent.isDestroyed) { return; }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Function to calculate summary values
|
|
49
|
+
*
|
|
50
|
+
* @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations
|
|
51
|
+
* @param {Object[]} filteredData - Filtered data collection
|
|
52
|
+
* @param {boolean} isSort - Specified whether sorting operation performed
|
|
53
|
+
* @hidden
|
|
54
|
+
* @returns {Object[]} - return flat records with summary values
|
|
55
|
+
*/
|
|
56
|
+
public calculateSummaryValue(summaryQuery: QueryOptions[], filteredData: Object[], isSort: boolean): Object[] {
|
|
57
|
+
this.summaryQuery = summaryQuery;
|
|
58
|
+
let parentRecord: ITreeData;
|
|
59
|
+
const parentData: Object[] = filteredData.filter((data: Object) => !getObject('isSummaryRow', data));
|
|
60
|
+
const parentRecords: Object = findParentRecords(parentData);
|
|
61
|
+
const flatRecords: Object[] = (<Object[]>parentData).slice();
|
|
62
|
+
const summaryLength: number = Object.keys(this.parent.aggregates).length;
|
|
63
|
+
const dataLength: number = Object.keys(parentRecords).length; let childRecordsLength: number;
|
|
64
|
+
const columns: Column[] = this.parent.getColumns();
|
|
65
|
+
if (this.parent.aggregates.filter((x: AggregateRowModel) => x.showChildSummary).length) {
|
|
66
|
+
for (let i: number = 0, len: number = dataLength; i < len; i++) {
|
|
67
|
+
parentRecord = parentRecords[parseInt(i.toString(), 10)];
|
|
68
|
+
childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);
|
|
69
|
+
if (childRecordsLength) {
|
|
70
|
+
for (let summaryRowIndex: number = 1, len: number = summaryLength; summaryRowIndex <= len; summaryRowIndex++) {
|
|
71
|
+
let item: Object; item = {};
|
|
72
|
+
for (let i: number = 0; i < columns.length; i++) {
|
|
73
|
+
const field: string = (isNullOrUndefined(getObject('field', columns[parseInt(i.toString(), 10)]))) ?
|
|
74
|
+
columns[parseInt(i.toString(), 10)] : getObject('field', (columns[parseInt(i.toString(), 10)]));
|
|
75
|
+
item[`${field}`] = null;
|
|
76
|
+
}
|
|
77
|
+
item = this.createSummaryItem(item, this.parent.aggregates[summaryRowIndex - 1]);
|
|
78
|
+
if (this.parent.aggregates[summaryRowIndex - 1].showChildSummary) {
|
|
79
|
+
let idx: number;
|
|
80
|
+
flatRecords.map((e: ITreeData, i: number) => {
|
|
81
|
+
if (e.uniqueID === parentRecord.uniqueID) { idx = i; return; } });
|
|
82
|
+
const currentIndex: number = idx + childRecordsLength + summaryRowIndex;
|
|
83
|
+
const summaryParent: ITreeData = extend({}, parentRecord);
|
|
84
|
+
delete summaryParent.childRecords;
|
|
85
|
+
delete summaryParent[this.parent.childMapping];
|
|
86
|
+
setValue('parentItem', summaryParent, item);
|
|
87
|
+
const level: number = getObject('level', summaryParent);
|
|
88
|
+
setValue('level', level + 1, item);
|
|
89
|
+
setValue('isSummaryRow', true, item);
|
|
90
|
+
setValue('parentUniqueID', summaryParent.uniqueID, item);
|
|
91
|
+
if (isSort) {
|
|
92
|
+
const childRecords: Object[] = getObject('childRecords', parentRecord);
|
|
93
|
+
if (childRecords.length) {
|
|
94
|
+
childRecords.push(item);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
flatRecords.splice(currentIndex, 0, item);
|
|
98
|
+
} else {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
this.flatChildRecords = [];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
const items: Object = {};
|
|
107
|
+
for (let columnIndex: number = 0, length: number = columns.length; columnIndex < length; columnIndex++) {
|
|
108
|
+
const fields: string = isNullOrUndefined(getObject('field', columns[parseInt(columnIndex.toString(), 10)])) ?
|
|
109
|
+
columns[parseInt(columnIndex.toString(), 10)] : getObject('field', columns[parseInt(columnIndex.toString(), 10)]);
|
|
110
|
+
items[`${fields}`] = null;
|
|
111
|
+
}
|
|
112
|
+
for (let summaryRowIndex: number = 1, length: number = summaryLength; summaryRowIndex <= length; summaryRowIndex++) {
|
|
113
|
+
this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return flatRecords;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private getChildRecordsLength(parentData: ITreeData, flatData: Object[]): number {
|
|
120
|
+
const recordLength: number = Object.keys(flatData).length; let record: ITreeData;
|
|
121
|
+
for (let i: number = 0, len: number = recordLength; i < len; i++) {
|
|
122
|
+
record = flatData[parseInt(i.toString(), 10)];
|
|
123
|
+
const parent: Object = isNullOrUndefined(record.parentItem) ? null :
|
|
124
|
+
flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentItem.uniqueID; })[0];
|
|
125
|
+
if (parentData === parent) {
|
|
126
|
+
this.flatChildRecords.push(record);
|
|
127
|
+
const hasChild: boolean = getObject('hasChildRecords', record);
|
|
128
|
+
if (hasChild) {
|
|
129
|
+
this.getChildRecordsLength(record, flatData);
|
|
130
|
+
} else {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return this.flatChildRecords.length;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
private createSummaryItem(itemData: Object, summary: AggregateRowModel): Object {
|
|
139
|
+
const summaryColumnLength: number = Object.keys(summary.columns).length;
|
|
140
|
+
for (let i: number = 0, len: number = summaryColumnLength; i < len; i++) {
|
|
141
|
+
const displayColumn: string = isNullOrUndefined(summary.columns[parseInt(i.toString(), 10)].columnName) ?
|
|
142
|
+
summary.columns[parseInt(i.toString(), 10)].field : summary.columns[parseInt(i.toString(), 10)].columnName;
|
|
143
|
+
const keys: string[] = Object.keys(itemData);
|
|
144
|
+
for (const key of keys) {
|
|
145
|
+
if (key === displayColumn) {
|
|
146
|
+
if (this.flatChildRecords.length) {
|
|
147
|
+
itemData[`${key}`] = this.getSummaryValues(summary.columns[parseInt(i.toString(), 10)] as AggregateColumn, this.flatChildRecords);
|
|
148
|
+
} else if (this.parent.isLocalData) {
|
|
149
|
+
const data: Object[] = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json
|
|
150
|
+
: this.parent.flatData;
|
|
151
|
+
itemData[`${key}`] = this.getSummaryValues(summary.columns[parseInt(i.toString(), 10)] as AggregateColumn, data);
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return itemData;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private getSummaryValues(summaryColumn: AggregateColumn, summaryData: Object[]): string {
|
|
162
|
+
const qry: Query = new Query(); const single: Object = {};
|
|
163
|
+
const helper: Object & { format?: Function } = {};
|
|
164
|
+
const type: string = !isNullOrUndefined(summaryColumn.field) ?
|
|
165
|
+
this.parent.getColumnByField(summaryColumn.field).type : undefined;
|
|
166
|
+
summaryColumn.setPropertiesSilent({format: this.getFormatFromType(summaryColumn.format, type)});
|
|
167
|
+
summaryColumn.setFormatter(this.parent.grid.locale);
|
|
168
|
+
const formatFn: Function = summaryColumn.getFormatter() || ((): Function => (a: Object) => a)();
|
|
169
|
+
summaryColumn.setTemplate(helper);
|
|
170
|
+
const tempObj: { fn: Function, property: string } = summaryColumn.getTemplate(2);
|
|
171
|
+
qry.queries = this.summaryQuery;
|
|
172
|
+
qry.requiresCount();
|
|
173
|
+
const sumData: Object[] = new DataManager(summaryData).executeLocal(qry);
|
|
174
|
+
let types: AggregateType[] = <AggregateType[]>summaryColumn.type; let summaryKey: string;
|
|
175
|
+
types = <AggregateType[]>[summaryColumn.type];
|
|
176
|
+
for (let i: number = 0; i < types.length; i++) {
|
|
177
|
+
summaryKey = types[parseInt(i.toString(), 10)];
|
|
178
|
+
const key: string = summaryColumn.field + ' - ' + types[parseInt(i.toString(), 10)].toLowerCase();
|
|
179
|
+
const val: Object = types[parseInt(i.toString(), 10)] !== 'Custom' ? getObject('aggregates', sumData) :
|
|
180
|
+
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
181
|
+
calculateAggregate(types[parseInt(i.toString(), 10)], sumData, summaryColumn as any, this.parent);
|
|
182
|
+
const disp: string = summaryColumn.columnName;
|
|
183
|
+
const value: Object = types[parseInt(i.toString(), 10)] !== 'Custom' ? val[`${key}`] : val;
|
|
184
|
+
single[`${disp}`] = single[`${disp}`] || {}; single[`${disp}`][`${key}`] = value;
|
|
185
|
+
single[`${disp}`][types[parseInt(i.toString(), 10)]] = !isNullOrUndefined(val) ? formatFn(value) : ' ';
|
|
186
|
+
}
|
|
187
|
+
helper.format = summaryColumn.getFormatter();
|
|
188
|
+
const cellElement: Element = createElement('td', {
|
|
189
|
+
className: 'e-summary'
|
|
190
|
+
});
|
|
191
|
+
if ((<{ isReact?: boolean }>this.parent).isReact && typeof (summaryColumn.footerTemplate) !== 'string') {
|
|
192
|
+
const renderReactTemplates: string = 'renderReactTemplates';
|
|
193
|
+
tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);
|
|
194
|
+
this.parent[`${renderReactTemplates}`]();
|
|
195
|
+
} else {
|
|
196
|
+
appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));
|
|
197
|
+
}
|
|
198
|
+
const value: string = single[`${summaryColumn.columnName}`][`${summaryKey}`];
|
|
199
|
+
return cellElement.innerHTML.indexOf(value) === -1 ? cellElement.innerHTML + value : cellElement.innerHTML;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private getFormatFromType(summaryformat: string| NumberFormatOptions, type: string):
|
|
203
|
+
string | NumberFormatOptions | DateFormatOptions {
|
|
204
|
+
if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {
|
|
205
|
+
return summaryformat;
|
|
206
|
+
}
|
|
207
|
+
let obj: string | NumberFormatOptions | DateFormatOptions;
|
|
208
|
+
switch (type) {
|
|
209
|
+
case 'number':
|
|
210
|
+
obj = { format: summaryformat };
|
|
211
|
+
break;
|
|
212
|
+
case 'datetime':
|
|
213
|
+
obj = { type: 'dateTime', skeleton: summaryformat };
|
|
214
|
+
break;
|
|
215
|
+
case 'date':
|
|
216
|
+
obj = { type: type, skeleton: summaryformat };
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
return obj;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* To destroy the Aggregate module
|
|
224
|
+
*
|
|
225
|
+
* @returns {void}
|
|
226
|
+
* @hidden
|
|
227
|
+
*/
|
|
228
|
+
public destroy(): void {
|
|
229
|
+
this.removeEventListener();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { TreeGrid } from '../base';
|
|
2
|
+
/**
|
|
3
|
+
* Toolbar Module for TreeGrid
|
|
4
|
+
*
|
|
5
|
+
* @hidden
|
|
6
|
+
*/
|
|
7
|
+
export declare class Toolbar {
|
|
8
|
+
private parent;
|
|
9
|
+
constructor(parent: TreeGrid);
|
|
10
|
+
/**
|
|
11
|
+
* For internal use only - Get the module name.
|
|
12
|
+
*
|
|
13
|
+
* @private
|
|
14
|
+
* @returns {string} - Returns Toolbar module name
|
|
15
|
+
*/
|
|
16
|
+
private getModuleName;
|
|
17
|
+
/**
|
|
18
|
+
* @hidden
|
|
19
|
+
* @returns {void}
|
|
20
|
+
*/
|
|
21
|
+
addEventListener(): void;
|
|
22
|
+
/**
|
|
23
|
+
* @hidden
|
|
24
|
+
* @returns {void}
|
|
25
|
+
*/
|
|
26
|
+
removeEventListener(): void;
|
|
27
|
+
private refreshToolbar;
|
|
28
|
+
private toolbarClickHandler;
|
|
29
|
+
/**
|
|
30
|
+
* Gets the toolbar of the TreeGrid.
|
|
31
|
+
*
|
|
32
|
+
* @returns {Element} - Returns Toolbar element
|
|
33
|
+
* @hidden
|
|
34
|
+
*/
|
|
35
|
+
getToolbar(): Element;
|
|
36
|
+
/**
|
|
37
|
+
* Enables or disables ToolBar items.
|
|
38
|
+
*
|
|
39
|
+
* @param {string[]} items - Defines the collection of itemID of ToolBar items.
|
|
40
|
+
* @param {boolean} isEnable - Defines the items to be enabled or disabled.
|
|
41
|
+
* @returns {void}
|
|
42
|
+
* @hidden
|
|
43
|
+
*/
|
|
44
|
+
enableItems(items: string[], isEnable: boolean): void;
|
|
45
|
+
/**
|
|
46
|
+
* Destroys the ToolBar.
|
|
47
|
+
*
|
|
48
|
+
* @method destroy
|
|
49
|
+
* @returns {void}
|
|
50
|
+
*/
|
|
51
|
+
destroy(): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Grid, Toolbar as tool, RowSelectEventArgs } from '@syncfusion/ej2-grids';
|
|
2
|
+
import { TreeGrid, ITreeData } from '../base';
|
|
3
|
+
import * as events from '../base/constant';
|
|
4
|
+
import { ClickEventArgs } from '@syncfusion/ej2-navigations/src/toolbar';
|
|
5
|
+
import { isNullOrUndefined } from '@syncfusion/ej2-base';
|
|
6
|
+
/**
|
|
7
|
+
* Toolbar Module for TreeGrid
|
|
8
|
+
*
|
|
9
|
+
* @hidden
|
|
10
|
+
*/
|
|
11
|
+
export class Toolbar {
|
|
12
|
+
private parent: TreeGrid;
|
|
13
|
+
constructor(parent: TreeGrid) {
|
|
14
|
+
Grid.Inject(tool);
|
|
15
|
+
this.parent = parent;
|
|
16
|
+
this.addEventListener();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* For internal use only - Get the module name.
|
|
20
|
+
*
|
|
21
|
+
* @private
|
|
22
|
+
* @returns {string} - Returns Toolbar module name
|
|
23
|
+
*/
|
|
24
|
+
private getModuleName(): string {
|
|
25
|
+
return 'toolbar';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @hidden
|
|
30
|
+
* @returns {void}
|
|
31
|
+
*/
|
|
32
|
+
public addEventListener(): void {
|
|
33
|
+
this.parent.on(events.rowSelected, this.refreshToolbar, this);
|
|
34
|
+
this.parent.on(events.rowDeselected, this.refreshToolbar, this);
|
|
35
|
+
this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @hidden
|
|
40
|
+
* @returns {void}
|
|
41
|
+
*/
|
|
42
|
+
public removeEventListener(): void {
|
|
43
|
+
if (this.parent.isDestroyed) { return; }
|
|
44
|
+
this.parent.off(events.rowSelected, this.refreshToolbar);
|
|
45
|
+
this.parent.off(events.rowDeselected, this.refreshToolbar);
|
|
46
|
+
this.parent.off(events.toolbarClick, this.toolbarClickHandler);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private refreshToolbar(args: RowSelectEventArgs): void {
|
|
50
|
+
const toolbarElement: Element = this.parent.grid.toolbarModule.getToolbar();
|
|
51
|
+
if (!isNullOrUndefined(toolbarElement)) {
|
|
52
|
+
const tObj: TreeGrid = this.parent; let indentElement: HTMLElement; let outdentElement: HTMLElement;
|
|
53
|
+
const indentID: string = tObj.element.id + '_gridcontrol_indent';
|
|
54
|
+
const outdentID: string = tObj.element.id + '_gridcontrol_outdent';
|
|
55
|
+
const indentEle: HTMLElement = toolbarElement.querySelector('#' + indentID);
|
|
56
|
+
const outdentEle: HTMLElement = toolbarElement.querySelector('#' + outdentID);
|
|
57
|
+
let row: HTMLTableRowElement = args.row as HTMLTableRowElement;
|
|
58
|
+
const selectedrow: HTMLTableRowElement = tObj.getSelectedRows()[0] as HTMLTableRowElement;
|
|
59
|
+
if (!isNullOrUndefined(row[0])) {
|
|
60
|
+
row = row[0];
|
|
61
|
+
}
|
|
62
|
+
row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;
|
|
63
|
+
if (indentEle !== null && outdentEle !== null) {
|
|
64
|
+
indentElement = indentEle.parentElement;
|
|
65
|
+
outdentElement = outdentEle.parentElement;
|
|
66
|
+
if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {
|
|
67
|
+
indentElement.classList.add('e-hidden');
|
|
68
|
+
outdentElement.classList.add('e-hidden');
|
|
69
|
+
}
|
|
70
|
+
else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {
|
|
71
|
+
const selectedItem: ITreeData = tObj.getCurrentViewRecords()[row.rowIndex];
|
|
72
|
+
if (!isNullOrUndefined(selectedItem)) {
|
|
73
|
+
if ((selectedItem.level > (tObj.getCurrentViewRecords()[row.rowIndex - 1] as ITreeData).level)) {
|
|
74
|
+
indentElement.classList.add('e-hidden');
|
|
75
|
+
} else {
|
|
76
|
+
indentElement.classList.remove('e-hidden');
|
|
77
|
+
}
|
|
78
|
+
if (selectedItem.level === (tObj.getCurrentViewRecords()[row.rowIndex - 1] as ITreeData).level) {
|
|
79
|
+
indentElement.classList.remove('e-hidden');
|
|
80
|
+
}
|
|
81
|
+
if (selectedItem.level === 0) {
|
|
82
|
+
outdentElement.classList.add('e-hidden');
|
|
83
|
+
}
|
|
84
|
+
if (selectedItem.level !== 0) {
|
|
85
|
+
outdentElement.classList.remove('e-hidden');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {
|
|
90
|
+
if (this.parent.toolbar['includes']('Indent')) {
|
|
91
|
+
indentElement.classList.add('e-hidden');
|
|
92
|
+
}
|
|
93
|
+
if (this.parent.toolbar['includes']('Outdent')) {
|
|
94
|
+
outdentElement.classList.add('e-hidden');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
private toolbarClickHandler(args: ClickEventArgs): void {
|
|
101
|
+
const tObj: TreeGrid = this.parent; const indentOutdentAction: string = 'indentOutdentAction';
|
|
102
|
+
if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&
|
|
103
|
+
args.item.id === this.parent.grid.element.id + '_update') {
|
|
104
|
+
args.cancel = true;
|
|
105
|
+
this.parent.grid.editModule.saveCell();
|
|
106
|
+
}
|
|
107
|
+
if (args.item.id === this.parent.grid.element.id + '_expandall') {
|
|
108
|
+
this.parent.expandAll();
|
|
109
|
+
}
|
|
110
|
+
if (args.item.id === this.parent.grid.element.id + '_collapseall') {
|
|
111
|
+
this.parent.collapseAll();
|
|
112
|
+
}
|
|
113
|
+
if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length
|
|
114
|
+
&& !isNullOrUndefined(tObj.rowDragAndDropModule)) {
|
|
115
|
+
this.parent.rowDragAndDropModule[`${indentOutdentAction}`](null, 'indent');
|
|
116
|
+
}
|
|
117
|
+
if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length
|
|
118
|
+
&& !isNullOrUndefined(tObj.rowDragAndDropModule)) {
|
|
119
|
+
this.parent.rowDragAndDropModule[`${indentOutdentAction}`](null, 'outdent');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Gets the toolbar of the TreeGrid.
|
|
125
|
+
*
|
|
126
|
+
* @returns {Element} - Returns Toolbar element
|
|
127
|
+
* @hidden
|
|
128
|
+
*/
|
|
129
|
+
public getToolbar(): Element {
|
|
130
|
+
return this.parent.grid.toolbarModule.getToolbar();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Enables or disables ToolBar items.
|
|
135
|
+
*
|
|
136
|
+
* @param {string[]} items - Defines the collection of itemID of ToolBar items.
|
|
137
|
+
* @param {boolean} isEnable - Defines the items to be enabled or disabled.
|
|
138
|
+
* @returns {void}
|
|
139
|
+
* @hidden
|
|
140
|
+
*/
|
|
141
|
+
public enableItems(items: string[], isEnable: boolean): void {
|
|
142
|
+
this.parent.grid.toolbarModule.enableItems(items, isEnable);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Destroys the ToolBar.
|
|
147
|
+
*
|
|
148
|
+
* @method destroy
|
|
149
|
+
* @returns {void}
|
|
150
|
+
*/
|
|
151
|
+
public destroy(): void {
|
|
152
|
+
this.removeEventListener();
|
|
153
|
+
}
|
|
154
|
+
}
|