@syncfusion/ej2-treegrid 30.2.4 → 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.
Files changed (148) 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 +263 -157
  5. package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
  6. package/dist/es6/ej2-treegrid.es5.js +291 -167
  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/dist/ts/index.d.ts +4 -0
  12. package/dist/ts/index.ts +4 -0
  13. package/dist/ts/treegrid/actions/batch-edit.d.ts +74 -0
  14. package/dist/ts/treegrid/actions/batch-edit.ts +627 -0
  15. package/dist/ts/treegrid/actions/clipboard.d.ts +36 -0
  16. package/dist/ts/treegrid/actions/clipboard.ts +174 -0
  17. package/dist/ts/treegrid/actions/column-chooser.d.ts +37 -0
  18. package/dist/ts/treegrid/actions/column-chooser.ts +55 -0
  19. package/dist/ts/treegrid/actions/column-menu.d.ts +24 -0
  20. package/dist/ts/treegrid/actions/column-menu.ts +39 -0
  21. package/dist/ts/treegrid/actions/command-column.d.ts +24 -0
  22. package/dist/ts/treegrid/actions/command-column.ts +32 -0
  23. package/dist/ts/treegrid/actions/context-menu.d.ts +42 -0
  24. package/dist/ts/treegrid/actions/context-menu.ts +149 -0
  25. package/dist/ts/treegrid/actions/crud-actions.d.ts +66 -0
  26. package/dist/ts/treegrid/actions/crud-actions.ts +388 -0
  27. package/dist/ts/treegrid/actions/detail-row.d.ts +39 -0
  28. package/dist/ts/treegrid/actions/detail-row.ts +124 -0
  29. package/dist/ts/treegrid/actions/edit.d.ts +121 -0
  30. package/dist/ts/treegrid/actions/edit.ts +1083 -0
  31. package/dist/ts/treegrid/actions/excel-export.d.ts +67 -0
  32. package/dist/ts/treegrid/actions/excel-export.ts +240 -0
  33. package/dist/ts/treegrid/actions/filter.d.ts +57 -0
  34. package/dist/ts/treegrid/actions/filter.ts +231 -0
  35. package/dist/ts/treegrid/actions/freeze-column.d.ts +28 -0
  36. package/dist/ts/treegrid/actions/freeze-column.ts +119 -0
  37. package/dist/ts/treegrid/actions/index.d.ts +24 -0
  38. package/dist/ts/treegrid/actions/index.ts +24 -0
  39. package/dist/ts/treegrid/actions/infinite-scroll.d.ts +96 -0
  40. package/dist/ts/treegrid/actions/infinite-scroll.ts +320 -0
  41. package/dist/ts/treegrid/actions/logger.d.ts +25 -0
  42. package/dist/ts/treegrid/actions/logger.ts +136 -0
  43. package/dist/ts/treegrid/actions/page.d.ts +67 -0
  44. package/dist/ts/treegrid/actions/page.ts +212 -0
  45. package/dist/ts/treegrid/actions/pdf-export.d.ts +63 -0
  46. package/dist/ts/treegrid/actions/pdf-export.ts +182 -0
  47. package/dist/ts/treegrid/actions/print.d.ts +37 -0
  48. package/dist/ts/treegrid/actions/print.ts +69 -0
  49. package/dist/ts/treegrid/actions/reorder.d.ts +36 -0
  50. package/dist/ts/treegrid/actions/reorder.ts +60 -0
  51. package/dist/ts/treegrid/actions/resize.d.ts +36 -0
  52. package/dist/ts/treegrid/actions/resize.ts +54 -0
  53. package/dist/ts/treegrid/actions/rowdragdrop.d.ts +405 -0
  54. package/dist/ts/treegrid/actions/rowdragdrop.ts +1896 -0
  55. package/dist/ts/treegrid/actions/selection.d.ts +51 -0
  56. package/dist/ts/treegrid/actions/selection.ts +530 -0
  57. package/dist/ts/treegrid/actions/sort.d.ts +63 -0
  58. package/dist/ts/treegrid/actions/sort.ts +149 -0
  59. package/dist/ts/treegrid/actions/summary.d.ts +47 -0
  60. package/dist/ts/treegrid/actions/summary.ts +231 -0
  61. package/dist/ts/treegrid/actions/toolbar.d.ts +52 -0
  62. package/dist/ts/treegrid/actions/toolbar.ts +154 -0
  63. package/dist/ts/treegrid/actions/virtual-scroll.d.ts +90 -0
  64. package/dist/ts/treegrid/actions/virtual-scroll.ts +306 -0
  65. package/dist/ts/treegrid/base/constant.d.ts +158 -0
  66. package/dist/ts/treegrid/base/constant.ts +158 -0
  67. package/dist/ts/treegrid/base/data.d.ts +90 -0
  68. package/dist/ts/treegrid/base/data.ts +904 -0
  69. package/dist/ts/treegrid/base/index.d.ts +11 -0
  70. package/dist/ts/treegrid/base/index.ts +11 -0
  71. package/dist/ts/treegrid/base/interface.d.ts +186 -0
  72. package/dist/ts/treegrid/base/interface.ts +191 -0
  73. package/dist/ts/treegrid/base/treegrid-model.d.ts +1100 -0
  74. package/dist/ts/treegrid/base/treegrid.d.ts +2422 -0
  75. package/dist/ts/treegrid/base/treegrid.ts +5962 -0
  76. package/dist/ts/treegrid/enum.d.ts +152 -0
  77. package/dist/ts/treegrid/enum.ts +217 -0
  78. package/dist/ts/treegrid/index.d.ts +9 -0
  79. package/dist/ts/treegrid/index.ts +9 -0
  80. package/dist/ts/treegrid/models/column-chooser-settings-model.d.ts +62 -0
  81. package/dist/ts/treegrid/models/column-chooser-settings.d.ts +53 -0
  82. package/dist/ts/treegrid/models/column-chooser-settings.ts +67 -0
  83. package/dist/ts/treegrid/models/column-model.d.ts +30 -0
  84. package/dist/ts/treegrid/models/column.d.ts +697 -0
  85. package/dist/ts/treegrid/models/column.ts +800 -0
  86. package/dist/ts/treegrid/models/edit-settings-model.d.ts +100 -0
  87. package/dist/ts/treegrid/models/edit-settings.d.ts +89 -0
  88. package/dist/ts/treegrid/models/edit-settings.ts +111 -0
  89. package/dist/ts/treegrid/models/filter-settings-model.d.ts +216 -0
  90. package/dist/ts/treegrid/models/filter-settings.d.ts +195 -0
  91. package/dist/ts/treegrid/models/filter-settings.ts +237 -0
  92. package/dist/ts/treegrid/models/index.d.ts +24 -0
  93. package/dist/ts/treegrid/models/index.ts +24 -0
  94. package/dist/ts/treegrid/models/infinite-scroll-settings-model.d.ts +29 -0
  95. package/dist/ts/treegrid/models/infinite-scroll-settings.d.ts +25 -0
  96. package/dist/ts/treegrid/models/infinite-scroll-settings.ts +31 -0
  97. package/dist/ts/treegrid/models/loading-indicator-model.d.ts +21 -0
  98. package/dist/ts/treegrid/models/loading-indicator.d.ts +19 -0
  99. package/dist/ts/treegrid/models/loading-indicator.ts +21 -0
  100. package/dist/ts/treegrid/models/page-settings-model.d.ts +66 -0
  101. package/dist/ts/treegrid/models/page-settings.d.ts +57 -0
  102. package/dist/ts/treegrid/models/page-settings.ts +73 -0
  103. package/dist/ts/treegrid/models/rowdrop-settings-model.d.ts +15 -0
  104. package/dist/ts/treegrid/models/rowdrop-settings.d.ts +34 -0
  105. package/dist/ts/treegrid/models/rowdrop-settings.ts +37 -0
  106. package/dist/ts/treegrid/models/search-settings-model.d.ts +79 -0
  107. package/dist/ts/treegrid/models/search-settings.d.ts +73 -0
  108. package/dist/ts/treegrid/models/search-settings.ts +83 -0
  109. package/dist/ts/treegrid/models/selection-settings-model.d.ts +76 -0
  110. package/dist/ts/treegrid/models/selection-settings.d.ts +68 -0
  111. package/dist/ts/treegrid/models/selection-settings.ts +82 -0
  112. package/dist/ts/treegrid/models/sort-settings-model.d.ts +49 -0
  113. package/dist/ts/treegrid/models/sort-settings.d.ts +43 -0
  114. package/dist/ts/treegrid/models/sort-settings.ts +51 -0
  115. package/dist/ts/treegrid/models/summary-model.d.ts +93 -0
  116. package/dist/ts/treegrid/models/summary.d.ts +126 -0
  117. package/dist/ts/treegrid/models/summary.ts +170 -0
  118. package/dist/ts/treegrid/models/textwrap-settings-model.d.ts +21 -0
  119. package/dist/ts/treegrid/models/textwrap-settings.d.ts +19 -0
  120. package/dist/ts/treegrid/models/textwrap-settings.ts +21 -0
  121. package/dist/ts/treegrid/renderer/index.d.ts +5 -0
  122. package/dist/ts/treegrid/renderer/index.ts +5 -0
  123. package/dist/ts/treegrid/renderer/render.d.ts +41 -0
  124. package/dist/ts/treegrid/renderer/render.ts +379 -0
  125. package/dist/ts/treegrid/renderer/virtual-row-model-generator.d.ts +16 -0
  126. package/dist/ts/treegrid/renderer/virtual-row-model-generator.ts +90 -0
  127. package/dist/ts/treegrid/renderer/virtual-tree-content-render.d.ts +353 -0
  128. package/dist/ts/treegrid/renderer/virtual-tree-content-render.ts +1125 -0
  129. package/dist/ts/treegrid/utils.d.ts +70 -0
  130. package/dist/ts/treegrid/utils.ts +217 -0
  131. package/package.json +51 -15
  132. package/src/treegrid/actions/context-menu.js +3 -1
  133. package/src/treegrid/actions/excel-export.d.ts +8 -0
  134. package/src/treegrid/actions/excel-export.js +12 -0
  135. package/src/treegrid/actions/freeze-column.js +1 -1
  136. package/src/treegrid/actions/pdf-export.d.ts +8 -0
  137. package/src/treegrid/actions/pdf-export.js +12 -0
  138. package/src/treegrid/actions/selection.js +1 -1
  139. package/src/treegrid/actions/virtual-scroll.js +2 -2
  140. package/src/treegrid/base/data.js +1 -1
  141. package/src/treegrid/base/treegrid-model.d.ts +32 -2
  142. package/src/treegrid/base/treegrid.d.ts +29 -2
  143. package/src/treegrid/base/treegrid.js +39 -2
  144. package/src/treegrid/models/column-chooser-settings-model.d.ts +62 -0
  145. package/src/treegrid/models/column-chooser-settings.d.ts +53 -0
  146. package/src/treegrid/models/column-chooser-settings.js +52 -0
  147. package/src/treegrid/renderer/virtual-tree-content-render.js +3 -8
  148. package/src/treegrid/utils.js +22 -6
@@ -0,0 +1,67 @@
1
+ import { TreeGrid } from '../base/treegrid';
2
+ import { ExcelExportProperties } from '@syncfusion/ej2-grids';
3
+ import { Fetch } from '@syncfusion/ej2-base';
4
+ import { Query } from '@syncfusion/ej2-data';
5
+ /**
6
+ * TreeGrid Excel Export module
7
+ *
8
+ * @hidden
9
+ */
10
+ export declare class ExcelExport {
11
+ private parent;
12
+ private dataResults;
13
+ private isCollapsedStatePersist;
14
+ /**
15
+ * Constructor for Excel Export module
16
+ *
17
+ * @param {TreeGrid} parent - Tree Grid instance
18
+ */
19
+ constructor(parent?: TreeGrid);
20
+ /**
21
+ * For internal use only - Get the module name.
22
+ *
23
+ * @private
24
+ * @returns {string} Returns ExcelExport module name
25
+ */
26
+ protected getModuleName(): string;
27
+ /**
28
+ * @hidden
29
+ * @returns {void}
30
+ */
31
+ addEventListener(): void;
32
+ /**
33
+ * To destroy the Excel Export
34
+ *
35
+ * @returns {void}
36
+ * @hidden
37
+ */
38
+ destroy(): void;
39
+ /**
40
+ * @hidden
41
+ * @returns {void}
42
+ */
43
+ removeEventListener(): void;
44
+ private updateExcelResultModel;
45
+ Map(excelExportProperties?: ExcelExportProperties, isMultipleExport?: boolean, workbook?: any, isBlob?: boolean, isCsv?: boolean): Promise<Object>;
46
+ protected generateQuery(query: Query, property?: ExcelExportProperties): Query;
47
+ protected manipulateExportProperties(property?: ExcelExportProperties, dtSrc?: Object, queryResult?: Fetch): Object;
48
+ /**
49
+ * TreeGrid Excel Export cell modifier
50
+ *
51
+ * @param {ExcelQueryCellInfoEventArgs} args - current cell details
52
+ * @hidden
53
+ * @returns {void}
54
+ */
55
+ private excelQueryCellInfo;
56
+ /**
57
+ * TreeGrid Excel Export Aggregate cell modifier
58
+ *
59
+ * @param {AggregateQueryCellInfoEventArgs} args - current cell details
60
+ * @hidden
61
+ * @returns {void}
62
+ */
63
+ private excelAggregateCellInfo;
64
+ private exportRowDataBound;
65
+ private finalPageSetup;
66
+ private isLocal;
67
+ }
@@ -0,0 +1,240 @@
1
+ import { TreeGrid } from '../base/treegrid';
2
+ import { ITreeData, TreeGridExcelExportProperties } from '../base/interface';
3
+ import { getObject, Grid, ExcelExport as GridExcel, ExcelExportProperties, BeforeDataBoundArgs, ExportHelper } from '@syncfusion/ej2-grids';
4
+ import { ExcelStyle, ExcelQueryCellInfoEventArgs, AggregateQueryCellInfoEventArgs } from '@syncfusion/ej2-grids';
5
+ import { ExcelRow, Row, Column, Data } from '@syncfusion/ej2-grids';
6
+ import { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';
7
+ import { isNullOrUndefined, setValue, Fetch, extend } from '@syncfusion/ej2-base';
8
+ import { DataManager, Query, ReturnOption } from '@syncfusion/ej2-data';
9
+ import * as event from '../base/constant';
10
+ /**
11
+ * TreeGrid Excel Export module
12
+ *
13
+ * @hidden
14
+ */
15
+ export class ExcelExport {
16
+ private parent: TreeGrid;
17
+ private dataResults: ReturnOption;
18
+ private isCollapsedStatePersist: boolean = false;
19
+ /**
20
+ * Constructor for Excel Export module
21
+ *
22
+ * @param {TreeGrid} parent - Tree Grid instance
23
+ */
24
+ constructor(parent?: TreeGrid) {
25
+ Grid.Inject(GridExcel);
26
+ this.parent = parent;
27
+ this.dataResults = <ReturnOption>{};
28
+ this.addEventListener();
29
+ }
30
+ /**
31
+ * For internal use only - Get the module name.
32
+ *
33
+ * @private
34
+ * @returns {string} Returns ExcelExport module name
35
+ */
36
+ protected getModuleName(): string {
37
+ return 'ExcelExport';
38
+ }
39
+ /**
40
+ * @hidden
41
+ * @returns {void}
42
+ */
43
+ public addEventListener(): void {
44
+ this.parent.on('updateResults', this.updateExcelResultModel, this);
45
+ this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);
46
+ this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);
47
+ this.parent.on('excelAggregateCellInfo', this.excelAggregateCellInfo, this);
48
+ this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);
49
+ }
50
+ /**
51
+ * To destroy the Excel Export
52
+ *
53
+ * @returns {void}
54
+ * @hidden
55
+ */
56
+ public destroy(): void {
57
+ this.removeEventListener();
58
+ }
59
+ /**
60
+ * @hidden
61
+ * @returns {void}
62
+ */
63
+ public removeEventListener(): void {
64
+ if (this.parent.isDestroyed) { return; }
65
+ this.parent.off('updateResults', this.updateExcelResultModel);
66
+ this.parent.off('excelCellInfo', this.excelQueryCellInfo);
67
+ this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);
68
+ this.parent.off('excelAggregateCellInfo', this.excelAggregateCellInfo);
69
+ this.parent.grid.off('finalPageSetup', this.finalPageSetup);
70
+ }
71
+ private updateExcelResultModel(returnResult: { result: ITreeData[], count: number }): void {
72
+ this.dataResults = <ReturnOption>returnResult;
73
+ }
74
+ public Map(
75
+ excelExportProperties?: ExcelExportProperties,
76
+ /* eslint-disable-next-line */
77
+ isMultipleExport?: boolean, workbook?: any, isBlob?: boolean, isCsv?: boolean) : Promise<Object> {
78
+ const dataSource: object = this.parent.dataSource;
79
+ const data: Data = new Data(this.parent.grid);
80
+ const property: Object = Object();
81
+ setValue('isCsv', isCsv, property);
82
+ setValue('cancel', false, property);
83
+ if (!isNullOrUndefined(excelExportProperties)) {
84
+ this.isCollapsedStatePersist = (excelExportProperties as TreeGridExcelExportProperties).isCollapsedStatePersist;
85
+ }
86
+ if (!isNullOrUndefined(excelExportProperties)) {
87
+ if (!this.isLocal() && !isNullOrUndefined(excelExportProperties.dataSource) && !excelExportProperties.dataSource['dataSource']) {
88
+ return this.parent.grid.excelExportModule.Map(
89
+ this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob);
90
+ }
91
+ if (excelExportProperties.exportType === 'CurrentPage') {
92
+ excelExportProperties.dataSource = this.parent.getCurrentViewRecords();
93
+ return this.parent.grid.excelExportModule.Map(
94
+ this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob);
95
+ }
96
+ }
97
+ return new Promise((resolve: Function) => {
98
+ const dm: DataManager = this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)
99
+ : <DataManager>this.parent.dataSource;
100
+ let query: Query = new Query();
101
+ if (!this.isLocal()) {
102
+ query = this.generateQuery(query);
103
+ query.queries = this.parent.grid.getDataModule().generateQuery().queries;
104
+ query = ExportHelper.getQuery(this.parent.grid, data);
105
+ if (isNullOrUndefined(this.parent.filterModule)) {
106
+ query.queries = query.queries.slice(1, 2);
107
+ query.params = query.params.slice(0, 0);
108
+ }
109
+ setValue('query', query, property);
110
+ }
111
+ this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));
112
+ if (getObject('cancel', property)) {
113
+ return null;
114
+ }
115
+ dm.executeQuery(query).then((e: Object) => {
116
+ let customData: Object = null;
117
+ if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {
118
+ customData = excelExportProperties.dataSource;
119
+ }
120
+ excelExportProperties = this.manipulateExportProperties(excelExportProperties, dataSource, <Fetch>e);
121
+ return this.parent.grid.excelExportModule.Map(
122
+ this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then((book: Object) => {
123
+ if (customData != null) {
124
+ excelExportProperties.dataSource = customData;
125
+ } else {
126
+ delete excelExportProperties.dataSource;
127
+ }
128
+ resolve(book);
129
+ });
130
+ });
131
+ });
132
+ }
133
+ protected generateQuery(query: Query, property?: ExcelExportProperties) : Query {
134
+ if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'
135
+ && this.parent.allowPaging) {
136
+ property.exportType = 'AllPages';
137
+ query.addParams('ExportType', 'CurrentPage');
138
+ query.where(this.parent.parentIdMapping, 'equal', null);
139
+ query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);
140
+ }
141
+ return query;
142
+ }
143
+ protected manipulateExportProperties(property?: ExcelExportProperties, dtSrc?: Object, queryResult?: Fetch) : Object {
144
+ //count not required for this query
145
+ let args: BeforeDataBoundArgs = Object();
146
+ if (!isNullOrUndefined(this.parent.grid.getDataModule())) {
147
+ setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);
148
+ }
149
+ setValue('isExport', true, args);
150
+ if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {
151
+ setValue('exportType', property.exportType, args);
152
+ }
153
+ if (!this.isLocal()) {
154
+ this.parent.parentData = [];
155
+ this.parent.dataModule.convertToFlatData(getObject('result', queryResult));
156
+ setValue('expresults', this.parent.flatData, args);
157
+ }
158
+ this.parent.notify('dataProcessor', args);
159
+ //args = this.parent.dataModule.dataProcessor(args);
160
+ args = <BeforeDataBoundArgs>this.dataResults;
161
+ dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;
162
+ if (!this.isLocal()) {
163
+ this.parent.flatData = [];
164
+ }
165
+ if (property && property.dataSource) {
166
+ const flatsData: Object[] = this.parent.flatData;
167
+ const dataSrc: Object = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;
168
+ this.parent.dataModule.convertToFlatData(dataSrc);
169
+ dtSrc = this.parent.flatData;
170
+ this.parent.flatData = flatsData;
171
+ }
172
+ property = isNullOrUndefined(property) ? Object() : property;
173
+ property.dataSource = new DataManager({json: <Object[]>dtSrc});
174
+ if (this.parent.aggregates.length > 0) {
175
+ property.query = args['query'];
176
+ }
177
+ return property;
178
+ }
179
+ /**
180
+ * TreeGrid Excel Export cell modifier
181
+ *
182
+ * @param {ExcelQueryCellInfoEventArgs} args - current cell details
183
+ * @hidden
184
+ * @returns {void}
185
+ */
186
+ private excelQueryCellInfo(args?: ExcelQueryCellInfoEventArgs) : void {
187
+ if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {
188
+ const style: ExcelStyle = {};
189
+ const data: ITreeData = <ITreeData>args.data;
190
+ const ispadfilter: boolean = isNullOrUndefined(data.filterLevel);
191
+ const pad: number = ispadfilter ? data.level : data.filterLevel;
192
+ style.indent = pad;
193
+ args.style = style;
194
+ }
195
+ this.parent.notify('updateResults', args);
196
+ this.parent.trigger('excelQueryCellInfo', args);
197
+ }
198
+ /**
199
+ * TreeGrid Excel Export Aggregate cell modifier
200
+ *
201
+ * @param {AggregateQueryCellInfoEventArgs} args - current cell details
202
+ * @hidden
203
+ * @returns {void}
204
+ */
205
+ private excelAggregateCellInfo(args?: AggregateQueryCellInfoEventArgs) : void {
206
+ this.parent.trigger('excelAggregateQueryCellInfo', args);
207
+ }
208
+ private exportRowDataBound(excelRow: {excelRows: ExcelRow[], rowObj: Row<Column>, type: string}) : void {
209
+ if (excelRow.type === 'excel') {
210
+ const excelrowobj: ITreeData = excelRow.rowObj.data;
211
+ const filtercolumnlength: number = this.parent.grid.filterSettings.columns.length;
212
+ const rowlength: number = excelRow.excelRows.length;
213
+ const rowlevel: number = excelrowobj.level;
214
+ if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {
215
+ let expandedStatus: boolean = false; let sublevelState: boolean = false;
216
+ const state: boolean = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);
217
+ if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {
218
+ expandedStatus = true;
219
+ sublevelState = excelrowobj.expanded ? false : true;
220
+ }
221
+ excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,
222
+ isHidden: expandedStatus };
223
+ }
224
+ else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {
225
+ excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel};
226
+ }
227
+ }
228
+ }
229
+ /* eslint-disable-next-line */
230
+ private finalPageSetup(workbook: any): void {
231
+ for (let i: number = 0; i < workbook.worksheets.length; i++) {
232
+ if (workbook.worksheets[parseInt(i.toString(), 10)].rows) {
233
+ workbook.worksheets[parseInt(i.toString(), 10)].pageSetup = { isSummaryRowBelow: false };
234
+ }
235
+ }
236
+ }
237
+ private isLocal(): boolean {
238
+ return !isRemoteData(this.parent) && isOffline(this.parent);
239
+ }
240
+ }
@@ -0,0 +1,57 @@
1
+ import { TreeGrid } from '../base/treegrid';
2
+ /**
3
+ * TreeGrid Filter module will handle filtering action
4
+ *
5
+ * @hidden
6
+ */
7
+ export declare class Filter {
8
+ private parent;
9
+ filteredResult: Object[];
10
+ private flatFilteredData;
11
+ private filteredParentRecs;
12
+ private isHierarchyFilter;
13
+ /**
14
+ * Constructor for Filter module
15
+ *
16
+ * @param {TreeGrid} parent - Tree Grid instance
17
+ */
18
+ constructor(parent?: TreeGrid);
19
+ /**
20
+ * For internal use only - Get the module name.
21
+ *
22
+ * @private
23
+ * @returns {string} Returns Filter module name
24
+ */
25
+ protected getModuleName(): string;
26
+ /**
27
+ * To destroy the Filter module
28
+ *
29
+ * @returns {void}
30
+ * @hidden
31
+ */
32
+ destroy(): void;
33
+ /**
34
+ * @hidden
35
+ * @returns {void}
36
+ */
37
+ addEventListener(): void;
38
+ /**
39
+ * @hidden
40
+ * @returns {void}
41
+ */
42
+ removeEventListener(): void;
43
+ /**
44
+ * Function to update filtered records
45
+ *
46
+ * @param {{data: Object} } dataDetails - Filtered data collection
47
+ * @param {Object} dataDetails.data - Fliltered data collection
48
+ * @hidden
49
+ * @returns {void}
50
+ */
51
+ private updatedFilteredRecord;
52
+ private updateParentFilteredRecord;
53
+ private addParentRecord;
54
+ private checkChildExsist;
55
+ private updateFilterLevel;
56
+ private clearFilterLevel;
57
+ }
@@ -0,0 +1,231 @@
1
+ import { TreeGrid } from '../base/treegrid';
2
+ import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';
3
+ import { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';
4
+ import { ITreeData } from '../base';
5
+ import { getParentData } from '../utils';
6
+ import { FilterHierarchyMode } from '..';
7
+
8
+ /**
9
+ * TreeGrid Filter module will handle filtering action
10
+ *
11
+ * @hidden
12
+ */
13
+ export class Filter {
14
+
15
+ private parent: TreeGrid;
16
+ public filteredResult: Object[];
17
+ private flatFilteredData: Object[];
18
+ private filteredParentRecs: Object[];
19
+ private isHierarchyFilter: boolean;
20
+ /**
21
+ * Constructor for Filter module
22
+ *
23
+ * @param {TreeGrid} parent - Tree Grid instance
24
+ */
25
+ constructor(parent?: TreeGrid) {
26
+ Grid.Inject(GridFilter);
27
+ this.parent = parent;
28
+ this.isHierarchyFilter = false;
29
+ this.filteredResult = [];
30
+ this.flatFilteredData = [];
31
+ this.filteredParentRecs = [];
32
+ this.addEventListener();
33
+ }
34
+ /**
35
+ * For internal use only - Get the module name.
36
+ *
37
+ * @private
38
+ * @returns {string} Returns Filter module name
39
+ */
40
+ protected getModuleName(): string {
41
+ return 'filter';
42
+ }
43
+ /**
44
+ * To destroy the Filter module
45
+ *
46
+ * @returns {void}
47
+ * @hidden
48
+ */
49
+ public destroy(): void {
50
+ this.removeEventListener();
51
+ }
52
+ /**
53
+ * @hidden
54
+ * @returns {void}
55
+ */
56
+ public addEventListener(): void {
57
+ this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);
58
+ this.parent.on('clearFilters', this.clearFilterLevel, this);
59
+ }
60
+ /**
61
+ * @hidden
62
+ * @returns {void}
63
+ */
64
+ public removeEventListener(): void {
65
+ if (this.parent.isDestroyed) { return; }
66
+ this.parent.off('updateFilterRecs', this.updatedFilteredRecord);
67
+ this.parent.off('clearFilters', this.clearFilterLevel);
68
+ }
69
+ /**
70
+ * Function to update filtered records
71
+ *
72
+ * @param {{data: Object} } dataDetails - Filtered data collection
73
+ * @param {Object} dataDetails.data - Fliltered data collection
74
+ * @hidden
75
+ * @returns {void}
76
+ */
77
+ private updatedFilteredRecord(dataDetails: { data: Object }): void {
78
+ setValue('uniqueIDFilterCollection', {}, this.parent);
79
+ this.flatFilteredData = dataDetails.data as Object[];
80
+ this.filteredParentRecs = [];
81
+ this.filteredResult = [];
82
+ this.isHierarchyFilter = false;
83
+ const hierarchyMode: FilterHierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode
84
+ : this.parent.searchSettings.hierarchyMode;
85
+ for (let f: number = 0; f < this.flatFilteredData.length; f++) {
86
+ const rec: ITreeData = this.flatFilteredData[parseInt(f.toString(), 10)];
87
+ this.addParentRecord(rec);
88
+ if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&
89
+ (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {
90
+ this.isHierarchyFilter = true;
91
+ }
92
+ const ischild: Object[] = getObject('childRecords', rec);
93
+ if (!isNullOrUndefined(ischild) && ischild.length) {
94
+ setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);
95
+ }
96
+ const parent: Object = getObject('parentItem', rec);
97
+ if (!isNullOrUndefined(parent)) {
98
+ const parRecord: ITreeData = getParentData(this.parent, rec.parentItem.uniqueID, true);
99
+ setValue('hasFilteredChildRecords', true, parRecord);
100
+ if (parRecord && parRecord.parentItem) {
101
+ this.updateParentFilteredRecord(parRecord);
102
+ }
103
+ }
104
+ }
105
+ if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {
106
+ this.updateFilterLevel();
107
+ }
108
+ this.parent.notify('updateAction', { result: this.filteredResult });
109
+ }
110
+ private updateParentFilteredRecord(record: ITreeData): void {
111
+ const parRecord: ITreeData = getParentData(this.parent, record.parentItem.uniqueID, true);
112
+ const uniqueIDValue: Object = getValue('uniqueIDFilterCollection', this.parent);
113
+ if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {
114
+ setValue('hasFilteredChildRecords', true, parRecord);
115
+ }
116
+ if (parRecord && parRecord.parentItem) {
117
+ this.updateParentFilteredRecord(parRecord);
118
+ }
119
+ }
120
+ private addParentRecord(record: ITreeData): void {
121
+ const parent: Object = getParentData(this.parent, record.parentUniqueID);
122
+ const hierarchyMode: FilterHierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode
123
+ : this.parent.searchSettings.hierarchyMode;
124
+ if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0
125
+ || this.parent.grid.searchSettings.key !== '')) {
126
+ if (isNullOrUndefined(parent)) {
127
+ if (this.flatFilteredData.indexOf(record) !== -1) {
128
+ if (this.filteredResult.indexOf(record) === -1) {
129
+ this.filteredResult.push(record);
130
+ setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);
131
+ record.hasFilteredChildRecords = true;
132
+ }
133
+ return;
134
+ }
135
+ } else {
136
+ this.addParentRecord(parent);
137
+ if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {
138
+ if (this.filteredResult.indexOf(record) === -1) {
139
+ this.filteredResult.push(record);
140
+ setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);
141
+ }
142
+ } else {
143
+ if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {
144
+ this.filteredResult.push(record);
145
+ setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);
146
+ }
147
+ }
148
+ }
149
+ } else {
150
+ if (!isNullOrUndefined(parent)) {
151
+ const hierarchyMode: FilterHierarchyMode = this.parent.grid.searchSettings.key === '' ?
152
+ this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;
153
+ if (hierarchyMode === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0
154
+ || this.parent.grid.searchSettings.key !== '')) {
155
+ if (this.flatFilteredData.indexOf(parent) !== -1) {
156
+ this.addParentRecord(parent);
157
+ }
158
+ } else {
159
+ this.addParentRecord(parent);
160
+ }
161
+ }
162
+ if (this.filteredResult.indexOf(record) === -1) {
163
+ this.filteredResult.push(record);
164
+ setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);
165
+ }
166
+ }
167
+ }
168
+ private checkChildExsist(records: Object): boolean {
169
+ const childRec: ITreeData[] = getObject('childRecords', records);
170
+ let isExist: boolean = false;
171
+ for (let count: number = 0; count < childRec.length; count++) {
172
+ const ischild: Object[] = childRec[parseInt(count.toString(), 10)].childRecords;
173
+ const hierarchyMode: FilterHierarchyMode = this.parent.grid.searchSettings.key === '' ?
174
+ this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;
175
+ if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0
176
+ || this.parent.grid.searchSettings.key !== ''))) {
177
+ const uniqueIDValue: Object = getValue('uniqueIDFilterCollection', this.parent);
178
+ if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[parseInt(count.toString(), 10)].uniqueID)) {
179
+ this.filteredResult.push(childRec[parseInt(count.toString(), 10)]);
180
+ setValue('uniqueIDFilterCollection.' + childRec[parseInt(count.toString(), 10)].uniqueID, childRec[parseInt(count.toString(), 10)], this.parent);
181
+ isExist = true;
182
+ }
183
+ }
184
+ if ((hierarchyMode === 'None')
185
+ && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {
186
+ if (this.flatFilteredData.indexOf(childRec[parseInt(count.toString(), 10)]) !== -1) {
187
+ isExist = true;
188
+ break;
189
+ }
190
+ }
191
+ if (!isNullOrUndefined(ischild) && ischild.length) {
192
+ isExist = this.checkChildExsist(childRec[parseInt(count.toString(), 10)]);
193
+ }
194
+ if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {
195
+ isExist = true;
196
+ }
197
+ }
198
+ return isExist;
199
+ }
200
+ private updateFilterLevel(): void {
201
+ const record: ITreeData[] = this.filteredResult;
202
+ const len: number = this.filteredResult.length;
203
+ for (let c: number = 0; c < len; c++) {
204
+ const parent: ITreeData = getParentData(this.parent, record[parseInt(c.toString(), 10)].parentUniqueID);
205
+ const isPrst: boolean = record.indexOf(parent) !== -1;
206
+ if (isPrst) {
207
+ const parent: ITreeData = getParentData(this.parent, record[parseInt(c.toString(), 10)].parentUniqueID, true);
208
+ record[parseInt(c.toString(), 10)].filterLevel = parent.filterLevel + 1;
209
+ } else {
210
+ record[parseInt(c.toString(), 10)].filterLevel = 0;
211
+ this.filteredParentRecs.push(record[parseInt(c.toString(), 10)]);
212
+ }
213
+ }
214
+ }
215
+ private clearFilterLevel(data: { flatData: Object[] }): void {
216
+ let count: number = 0;
217
+ const flatData: ITreeData[] = data.flatData as ITreeData[];
218
+ const len: number = flatData.length;
219
+ let currentRecord: ITreeData;
220
+ for (count; count < len; count++) {
221
+ currentRecord = flatData[parseInt(count.toString(), 10)];
222
+ const fLevel: number = currentRecord.filterLevel;
223
+ if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {
224
+ currentRecord.hasFilteredChildRecords = null;
225
+ currentRecord.filterLevel = null;
226
+ }
227
+ }
228
+ this.filteredResult = [];
229
+ this.parent.notify('updateResults', { result: flatData, count: flatData.length });
230
+ }
231
+ }
@@ -0,0 +1,28 @@
1
+ import { TreeGrid } from '../base/treegrid';
2
+ /**
3
+ * TreeGrid Freeze module
4
+ *
5
+ * @hidden
6
+ */
7
+ export declare class Freeze {
8
+ private parent;
9
+ /**
10
+ * Constructor for render module
11
+ *
12
+ * @param {TreeGrid} parent - Tree Grid instance
13
+ */
14
+ constructor(parent?: TreeGrid);
15
+ addEventListener(): void;
16
+ removeEventListener(): void;
17
+ private rowExpandCollapse;
18
+ private dblClickHandler;
19
+ private dataBoundArg;
20
+ destroy(): void;
21
+ /**
22
+ * For internal use only - Get the module name.
23
+ *
24
+ * @private
25
+ * @returns {string} Returns Freeze module name
26
+ */
27
+ private getModuleName;
28
+ }