@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.
Files changed (149) hide show
  1. package/aceconfig.js +17 -0
  2. package/dist/ej2-treegrid.min.js +2 -2
  3. package/dist/ej2-treegrid.umd.min.js +2 -2
  4. package/dist/ej2-treegrid.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-treegrid.es2015.js +265 -159
  6. package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
  7. package/dist/es6/ej2-treegrid.es5.js +293 -169
  8. package/dist/es6/ej2-treegrid.es5.js.map +1 -1
  9. package/dist/global/ej2-treegrid.min.js +2 -2
  10. package/dist/global/ej2-treegrid.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/dist/ts/index.d.ts +4 -0
  13. package/dist/ts/index.ts +4 -0
  14. package/dist/ts/treegrid/actions/batch-edit.d.ts +74 -0
  15. package/dist/ts/treegrid/actions/batch-edit.ts +627 -0
  16. package/dist/ts/treegrid/actions/clipboard.d.ts +36 -0
  17. package/dist/ts/treegrid/actions/clipboard.ts +174 -0
  18. package/dist/ts/treegrid/actions/column-chooser.d.ts +37 -0
  19. package/dist/ts/treegrid/actions/column-chooser.ts +55 -0
  20. package/dist/ts/treegrid/actions/column-menu.d.ts +24 -0
  21. package/dist/ts/treegrid/actions/column-menu.ts +39 -0
  22. package/dist/ts/treegrid/actions/command-column.d.ts +24 -0
  23. package/dist/ts/treegrid/actions/command-column.ts +32 -0
  24. package/dist/ts/treegrid/actions/context-menu.d.ts +42 -0
  25. package/dist/ts/treegrid/actions/context-menu.ts +149 -0
  26. package/dist/ts/treegrid/actions/crud-actions.d.ts +66 -0
  27. package/dist/ts/treegrid/actions/crud-actions.ts +388 -0
  28. package/dist/ts/treegrid/actions/detail-row.d.ts +39 -0
  29. package/dist/ts/treegrid/actions/detail-row.ts +124 -0
  30. package/dist/ts/treegrid/actions/edit.d.ts +121 -0
  31. package/dist/ts/treegrid/actions/edit.ts +1083 -0
  32. package/dist/ts/treegrid/actions/excel-export.d.ts +67 -0
  33. package/dist/ts/treegrid/actions/excel-export.ts +240 -0
  34. package/dist/ts/treegrid/actions/filter.d.ts +57 -0
  35. package/dist/ts/treegrid/actions/filter.ts +231 -0
  36. package/dist/ts/treegrid/actions/freeze-column.d.ts +28 -0
  37. package/dist/ts/treegrid/actions/freeze-column.ts +119 -0
  38. package/dist/ts/treegrid/actions/index.d.ts +24 -0
  39. package/dist/ts/treegrid/actions/index.ts +24 -0
  40. package/dist/ts/treegrid/actions/infinite-scroll.d.ts +96 -0
  41. package/dist/ts/treegrid/actions/infinite-scroll.ts +320 -0
  42. package/dist/ts/treegrid/actions/logger.d.ts +25 -0
  43. package/dist/ts/treegrid/actions/logger.ts +136 -0
  44. package/dist/ts/treegrid/actions/page.d.ts +67 -0
  45. package/dist/ts/treegrid/actions/page.ts +212 -0
  46. package/dist/ts/treegrid/actions/pdf-export.d.ts +63 -0
  47. package/dist/ts/treegrid/actions/pdf-export.ts +182 -0
  48. package/dist/ts/treegrid/actions/print.d.ts +37 -0
  49. package/dist/ts/treegrid/actions/print.ts +69 -0
  50. package/dist/ts/treegrid/actions/reorder.d.ts +36 -0
  51. package/dist/ts/treegrid/actions/reorder.ts +60 -0
  52. package/dist/ts/treegrid/actions/resize.d.ts +36 -0
  53. package/dist/ts/treegrid/actions/resize.ts +54 -0
  54. package/dist/ts/treegrid/actions/rowdragdrop.d.ts +405 -0
  55. package/dist/ts/treegrid/actions/rowdragdrop.ts +1896 -0
  56. package/dist/ts/treegrid/actions/selection.d.ts +51 -0
  57. package/dist/ts/treegrid/actions/selection.ts +530 -0
  58. package/dist/ts/treegrid/actions/sort.d.ts +63 -0
  59. package/dist/ts/treegrid/actions/sort.ts +149 -0
  60. package/dist/ts/treegrid/actions/summary.d.ts +47 -0
  61. package/dist/ts/treegrid/actions/summary.ts +231 -0
  62. package/dist/ts/treegrid/actions/toolbar.d.ts +52 -0
  63. package/dist/ts/treegrid/actions/toolbar.ts +154 -0
  64. package/dist/ts/treegrid/actions/virtual-scroll.d.ts +90 -0
  65. package/dist/ts/treegrid/actions/virtual-scroll.ts +306 -0
  66. package/dist/ts/treegrid/base/constant.d.ts +158 -0
  67. package/dist/ts/treegrid/base/constant.ts +158 -0
  68. package/dist/ts/treegrid/base/data.d.ts +90 -0
  69. package/dist/ts/treegrid/base/data.ts +904 -0
  70. package/dist/ts/treegrid/base/index.d.ts +11 -0
  71. package/dist/ts/treegrid/base/index.ts +11 -0
  72. package/dist/ts/treegrid/base/interface.d.ts +186 -0
  73. package/dist/ts/treegrid/base/interface.ts +191 -0
  74. package/dist/ts/treegrid/base/treegrid-model.d.ts +1100 -0
  75. package/dist/ts/treegrid/base/treegrid.d.ts +2422 -0
  76. package/dist/ts/treegrid/base/treegrid.ts +5962 -0
  77. package/dist/ts/treegrid/enum.d.ts +152 -0
  78. package/dist/ts/treegrid/enum.ts +217 -0
  79. package/dist/ts/treegrid/index.d.ts +9 -0
  80. package/dist/ts/treegrid/index.ts +9 -0
  81. package/dist/ts/treegrid/models/column-chooser-settings-model.d.ts +62 -0
  82. package/dist/ts/treegrid/models/column-chooser-settings.d.ts +53 -0
  83. package/dist/ts/treegrid/models/column-chooser-settings.ts +67 -0
  84. package/dist/ts/treegrid/models/column-model.d.ts +30 -0
  85. package/dist/ts/treegrid/models/column.d.ts +697 -0
  86. package/dist/ts/treegrid/models/column.ts +800 -0
  87. package/dist/ts/treegrid/models/edit-settings-model.d.ts +100 -0
  88. package/dist/ts/treegrid/models/edit-settings.d.ts +89 -0
  89. package/dist/ts/treegrid/models/edit-settings.ts +111 -0
  90. package/dist/ts/treegrid/models/filter-settings-model.d.ts +216 -0
  91. package/dist/ts/treegrid/models/filter-settings.d.ts +195 -0
  92. package/dist/ts/treegrid/models/filter-settings.ts +237 -0
  93. package/dist/ts/treegrid/models/index.d.ts +24 -0
  94. package/dist/ts/treegrid/models/index.ts +24 -0
  95. package/dist/ts/treegrid/models/infinite-scroll-settings-model.d.ts +29 -0
  96. package/dist/ts/treegrid/models/infinite-scroll-settings.d.ts +25 -0
  97. package/dist/ts/treegrid/models/infinite-scroll-settings.ts +31 -0
  98. package/dist/ts/treegrid/models/loading-indicator-model.d.ts +21 -0
  99. package/dist/ts/treegrid/models/loading-indicator.d.ts +19 -0
  100. package/dist/ts/treegrid/models/loading-indicator.ts +21 -0
  101. package/dist/ts/treegrid/models/page-settings-model.d.ts +66 -0
  102. package/dist/ts/treegrid/models/page-settings.d.ts +57 -0
  103. package/dist/ts/treegrid/models/page-settings.ts +73 -0
  104. package/dist/ts/treegrid/models/rowdrop-settings-model.d.ts +15 -0
  105. package/dist/ts/treegrid/models/rowdrop-settings.d.ts +34 -0
  106. package/dist/ts/treegrid/models/rowdrop-settings.ts +37 -0
  107. package/dist/ts/treegrid/models/search-settings-model.d.ts +79 -0
  108. package/dist/ts/treegrid/models/search-settings.d.ts +73 -0
  109. package/dist/ts/treegrid/models/search-settings.ts +83 -0
  110. package/dist/ts/treegrid/models/selection-settings-model.d.ts +76 -0
  111. package/dist/ts/treegrid/models/selection-settings.d.ts +68 -0
  112. package/dist/ts/treegrid/models/selection-settings.ts +82 -0
  113. package/dist/ts/treegrid/models/sort-settings-model.d.ts +49 -0
  114. package/dist/ts/treegrid/models/sort-settings.d.ts +43 -0
  115. package/dist/ts/treegrid/models/sort-settings.ts +51 -0
  116. package/dist/ts/treegrid/models/summary-model.d.ts +93 -0
  117. package/dist/ts/treegrid/models/summary.d.ts +126 -0
  118. package/dist/ts/treegrid/models/summary.ts +170 -0
  119. package/dist/ts/treegrid/models/textwrap-settings-model.d.ts +21 -0
  120. package/dist/ts/treegrid/models/textwrap-settings.d.ts +19 -0
  121. package/dist/ts/treegrid/models/textwrap-settings.ts +21 -0
  122. package/dist/ts/treegrid/renderer/index.d.ts +5 -0
  123. package/dist/ts/treegrid/renderer/index.ts +5 -0
  124. package/dist/ts/treegrid/renderer/render.d.ts +41 -0
  125. package/dist/ts/treegrid/renderer/render.ts +379 -0
  126. package/dist/ts/treegrid/renderer/virtual-row-model-generator.d.ts +16 -0
  127. package/dist/ts/treegrid/renderer/virtual-row-model-generator.ts +90 -0
  128. package/dist/ts/treegrid/renderer/virtual-tree-content-render.d.ts +353 -0
  129. package/dist/ts/treegrid/renderer/virtual-tree-content-render.ts +1125 -0
  130. package/dist/ts/treegrid/utils.d.ts +70 -0
  131. package/dist/ts/treegrid/utils.ts +217 -0
  132. package/package.json +51 -15
  133. package/src/treegrid/actions/context-menu.js +3 -1
  134. package/src/treegrid/actions/excel-export.d.ts +8 -0
  135. package/src/treegrid/actions/excel-export.js +13 -1
  136. package/src/treegrid/actions/freeze-column.js +1 -1
  137. package/src/treegrid/actions/pdf-export.d.ts +8 -0
  138. package/src/treegrid/actions/pdf-export.js +12 -0
  139. package/src/treegrid/actions/selection.js +1 -1
  140. package/src/treegrid/actions/virtual-scroll.js +2 -2
  141. package/src/treegrid/base/data.js +1 -1
  142. package/src/treegrid/base/treegrid-model.d.ts +32 -2
  143. package/src/treegrid/base/treegrid.d.ts +29 -2
  144. package/src/treegrid/base/treegrid.js +39 -2
  145. package/src/treegrid/models/column-chooser-settings-model.d.ts +62 -0
  146. package/src/treegrid/models/column-chooser-settings.d.ts +53 -0
  147. package/src/treegrid/models/column-chooser-settings.js +52 -0
  148. package/src/treegrid/renderer/virtual-tree-content-render.js +4 -9
  149. package/src/treegrid/utils.js +22 -6
@@ -0,0 +1,136 @@
1
+ import { isNullOrUndefined } from '@syncfusion/ej2-base';
2
+ import { TreeGrid } from '../base/treegrid';
3
+ import { Column } from '../models/column';
4
+ import { Logger as GridLogger, Grid, IGrid, ItemDetails, detailLists, CheckOptions } from '@syncfusion/ej2-grids';
5
+
6
+ /**
7
+ * Logger module for TreeGrid
8
+ *
9
+ * @hidden
10
+ */
11
+
12
+ const DOC_URL: string = 'https://ej2.syncfusion.com/documentation/treegrid';
13
+ const BASE_DOC_URL: string = 'https://ej2.syncfusion.com/documentation';
14
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
15
+ const WARNING: string = '[EJ2TreeGrid.Warning]';
16
+ const ERROR: string = '[EJ2TreeGrid.Error]';
17
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
18
+ const INFO: string = '[EJ2TreeGrid.Info]';
19
+ let IsRowDDEnabled: boolean = false;
20
+
21
+ export interface TreeItemDetails {
22
+ type: string;
23
+ logType: string;
24
+ message?: string;
25
+ check: (args: Object, parent: TreeGrid) => CheckOptions;
26
+ generateMessage: (args: Object, parent: TreeGrid, checkOptions?: Object) => string;
27
+ }
28
+
29
+
30
+ export class Logger extends GridLogger {
31
+
32
+ private treeGridObj: TreeGrid;
33
+
34
+ constructor(parent: IGrid) {
35
+ Grid.Inject(GridLogger);
36
+ super(parent);
37
+ }
38
+
39
+ /**
40
+ * For internal use only - Get the module name.
41
+ *
42
+ * @private
43
+ * @returns {string} - Returns Logger module name
44
+ */
45
+ public getModuleName(): string {
46
+ return 'logger';
47
+ }
48
+
49
+ public log(types: string | string[], args: Object): void {
50
+ if (!(types instanceof Array)) { types = [types]; }
51
+ const type: string[] = (<string[]>types);
52
+ for (let i: number = 0; i < type.length; i++) {
53
+ const item: ItemDetails = detailLists[type[parseInt(i.toString(), 10)]];
54
+ const cOp: CheckOptions = item.check(args, this.parent);
55
+ if (cOp.success) {
56
+ let message: string = item.generateMessage(args, this.parent, cOp.options);
57
+ message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');
58
+ if (IsRowDDEnabled && type[parseInt(i.toString(), 10)] === 'primary_column_missing') {
59
+ message = message.replace('Editing', 'Row DragAndDrop');
60
+ IsRowDDEnabled = false;
61
+ }
62
+ const index: number = message.indexOf('https');
63
+ const gridurl: string = message.substring(index);
64
+ if (type[parseInt(i.toString(), 10)] === 'module_missing') {
65
+ message = message.replace(gridurl, DOC_URL + '/modules');
66
+ } else if (type[parseInt(i.toString(), 10)] === 'primary_column_missing' || type[parseInt(i.toString(), 10)] === 'selection_key_missing') {
67
+ message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');
68
+ } else if (type[parseInt(i.toString(), 10)] === 'grid_remote_edit') {
69
+ message = message.replace(gridurl, DOC_URL + '/edit');
70
+ } else if (type[parseInt(i.toString(), 10)] === 'virtual_height') {
71
+ message = message.replace(gridurl, DOC_URL + '/virtual');
72
+ } else if (type[parseInt(i.toString(), 10)] === 'check_datasource_columns') {
73
+ message = message.replace(gridurl, DOC_URL + '/columns');
74
+ } else if (type[parseInt(i.toString(), 10)] === 'locale_missing') {
75
+ message = message.replace(gridurl, DOC_URL + '/global-local/#localization');
76
+ }
77
+ if (type[parseInt(i.toString(), 10)] === 'datasource_syntax_mismatch') {
78
+ if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {
79
+ // eslint-disable-next-line no-console
80
+ console[item.logType](message);
81
+ }
82
+ } else {
83
+ // eslint-disable-next-line no-console
84
+ console[item.logType](message);
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ public treeLog(types: string | string[], args: Object, treeGrid: TreeGrid): void {
91
+ this.treeGridObj = treeGrid;
92
+ if (!(types instanceof Array)) { types = [types]; }
93
+ const type: string[] = (<string[]>types);
94
+ if (treeGrid.allowRowDragAndDrop && !(<Column[]>treeGrid.columns).filter((column: Column) => column.isPrimaryKey).length) {
95
+ IsRowDDEnabled = true;
96
+ this.log('primary_column_missing', args);
97
+ }
98
+ for (let i: number = 0; i < type.length; i++) {
99
+ const item: TreeItemDetails = treeGridDetails[type[parseInt(i.toString(), 10)]];
100
+ const cOp: CheckOptions = item.check(args, treeGrid);
101
+ if (cOp.success) {
102
+ const message: string = item.generateMessage(args, treeGrid, cOp.options);
103
+ // eslint-disable-next-line no-console
104
+ console[item.logType](message);
105
+ }
106
+ }
107
+ }
108
+
109
+ }
110
+
111
+ export const treeGridDetails: {[key: string]: TreeItemDetails} = {
112
+ // eslint-disable-next-line camelcase
113
+ mapping_fields_missing: {
114
+ type: 'mapping_fields_missing',
115
+ logType: 'error',
116
+ check(args: Object, parent: TreeGrid): CheckOptions {
117
+ let opt: CheckOptions = { success: false };
118
+ if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)
119
+ && isNullOrUndefined(parent.parentIdMapping)) ||
120
+ (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||
121
+ (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {
122
+ opt = { success: true };
123
+ }
124
+ return opt;
125
+ },
126
+ generateMessage(): string {
127
+ return ERROR + ':' + ' MAPPING FIELDS MISSING \n' + 'One of the following fields is missing. It is ' +
128
+ 'required for the hierarchical relationship of records in TreeGrid:\n' +
129
+ '* childMapping\n' + '* idMapping\n' + '* parentIdMapping\n' +
130
+ 'Refer to the following documentation links for more details.\n' +
131
+ `${BASE_DOC_URL}/api/treegrid#childmapping` + '\n' +
132
+ `${BASE_DOC_URL}/api/treegrid#idmapping` + '\n' +
133
+ `${BASE_DOC_URL}/api/treegrid#$parentidmapping`;
134
+ }
135
+ }
136
+ };
@@ -0,0 +1,67 @@
1
+ import { TreeGrid } from '../base';
2
+ /**
3
+ * The `Page` module is used to render pager and handle paging action.
4
+ *
5
+ * @hidden
6
+ */
7
+ export declare class Page {
8
+ private parent;
9
+ constructor(parent: TreeGrid);
10
+ /**
11
+ * @hidden
12
+ * @returns {void}
13
+ */
14
+ addEventListener(): void;
15
+ /**
16
+ * @hidden
17
+ * @returns {void}
18
+ */
19
+ removeEventListener(): void;
20
+ /**
21
+ * For internal use only - Get the module name.
22
+ *
23
+ * @private
24
+ * @returns {string} Returns Pager module name
25
+ */
26
+ protected getModuleName(): string;
27
+ /**
28
+ * Refreshes the page count, pager information, and external message.
29
+ *
30
+ * @returns {void}
31
+ */
32
+ refresh(): void;
33
+ /**
34
+ * To destroy the pager
35
+ *
36
+ * @returns {void}
37
+ * @hidden
38
+ */
39
+ destroy(): void;
40
+ /**
41
+ * Navigates to the target page according to the given number.
42
+ *
43
+ * @param {number} pageNo - Defines the page number to navigate.
44
+ * @returns {void}
45
+ */
46
+ goToPage(pageNo: number): void;
47
+ /**
48
+ * Defines the text of the external message.
49
+ *
50
+ * @param {string} message - Defines the message to update.
51
+ * @returns {void}
52
+ */
53
+ updateExternalMessage(message: string): void;
54
+ /**
55
+ * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments
56
+ * @param {string} rowDetails.action - Expand Collapse action type
57
+ * @param {HTMLTableRowElement} rowDetails.row - Row element
58
+ * @param {ITreeData} rowDetails.record - Row object data
59
+ * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments
60
+ * @hidden
61
+ * @returns {void}
62
+ */
63
+ private collapseExpandPagedchilds;
64
+ private pageRoot;
65
+ private updatePageSize;
66
+ private pageAction;
67
+ }
@@ -0,0 +1,212 @@
1
+ import { Grid, ActionEventArgs } from '@syncfusion/ej2-grids';
2
+ import { Page as GridPage } from '@syncfusion/ej2-grids';
3
+ import { TreeGrid, ITreeData, RowCollapsedEventArgs } from '../base';
4
+ import * as events from '../base/constant';
5
+ import { DataManager, Query, Predicate } from '@syncfusion/ej2-data';
6
+ import { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';
7
+ import { getExpandStatus, isFilterChildHierarchy } from '../utils';
8
+
9
+ /**
10
+ * The `Page` module is used to render pager and handle paging action.
11
+ *
12
+ * @hidden
13
+ */
14
+ export class Page {
15
+ private parent: TreeGrid;
16
+ constructor(parent: TreeGrid) {
17
+ Grid.Inject(GridPage);
18
+ this.parent = parent;
19
+ this.addEventListener();
20
+ }
21
+ /**
22
+ * @hidden
23
+ * @returns {void}
24
+ */
25
+ public addEventListener(): void {
26
+ this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);
27
+ this.parent.on(events.pagingActions, this.pageAction, this);
28
+ }
29
+ /**
30
+ * @hidden
31
+ * @returns {void}
32
+ */
33
+ public removeEventListener(): void {
34
+ if (this.parent.isDestroyed) { return; }
35
+ this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);
36
+ this.parent.off(events.pagingActions, this.pageAction);
37
+ }
38
+ /**
39
+ * For internal use only - Get the module name.
40
+ *
41
+ * @private
42
+ * @returns {string} Returns Pager module name
43
+ */
44
+ protected getModuleName(): string {
45
+ return 'pager';
46
+ }
47
+
48
+ /**
49
+ * Refreshes the page count, pager information, and external message.
50
+ *
51
+ * @returns {void}
52
+ */
53
+ public refresh(): void {
54
+ this.parent.grid.pagerModule.refresh();
55
+ }
56
+
57
+ /**
58
+ * To destroy the pager
59
+ *
60
+ * @returns {void}
61
+ * @hidden
62
+ */
63
+ public destroy(): void {
64
+ this.removeEventListener();
65
+ }
66
+
67
+ /**
68
+ * Navigates to the target page according to the given number.
69
+ *
70
+ * @param {number} pageNo - Defines the page number to navigate.
71
+ * @returns {void}
72
+ */
73
+ public goToPage(pageNo: number): void {
74
+ this.parent.grid.pagerModule.goToPage(pageNo);
75
+ }
76
+
77
+ /**
78
+ * Defines the text of the external message.
79
+ *
80
+ * @param {string} message - Defines the message to update.
81
+ * @returns {void}
82
+ */
83
+ public updateExternalMessage(message: string): void {
84
+ if (isNullOrUndefined(message)) {
85
+ const error: string = 'The provided value for the message is undefined. Please ensure the message contains string.';
86
+ this.parent.trigger(events.actionFailure, { error: error });
87
+ }
88
+ this.parent.grid.pagerModule.updateExternalMessage(message);
89
+ }
90
+ /**
91
+ * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments
92
+ * @param {string} rowDetails.action - Expand Collapse action type
93
+ * @param {HTMLTableRowElement} rowDetails.row - Row element
94
+ * @param {ITreeData} rowDetails.record - Row object data
95
+ * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments
96
+ * @hidden
97
+ * @returns {void}
98
+ */
99
+ private collapseExpandPagedchilds(rowDetails: { action: string, row: HTMLTableRowElement,
100
+ record: ITreeData, args: RowCollapsedEventArgs }): void {
101
+ rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;
102
+ this.parent.flatData.map((e: ITreeData) => e.expanded = e.uniqueID === rowDetails.record.uniqueID &&
103
+ e.expanded !== rowDetails.record.expanded ? rowDetails.record.expanded : e.expanded);
104
+ if (this.parent.enableImmutableMode) {
105
+ const primaryKeyField: string = this.parent.getPrimaryKeyFieldNames()[0];
106
+ const record: ITreeData[] = this.parent.flatData.filter((e: ITreeData) => {
107
+ return e[`${primaryKeyField}`] === rowDetails.record[`${primaryKeyField}`];
108
+ });
109
+ if (record.length) {
110
+ record[0].expanded = rowDetails.record.expanded;
111
+ }
112
+ }
113
+ const ret: Object = {
114
+ result: this.parent.flatData,
115
+ row: rowDetails.row,
116
+ action: rowDetails.action,
117
+ record: rowDetails.record,
118
+ count: this.parent.flatData.length
119
+ };
120
+ getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);
121
+ if (this.parent.enableImmutableMode) {
122
+ const row: string = 'row'; const action: string = 'action'; let targetEle: Element;
123
+ if (ret[`${action}`] === 'collapse') {
124
+ targetEle = ret[`${row}`].getElementsByClassName('e-treegridexpand')[0];
125
+ if (!isNullOrUndefined(targetEle)) {
126
+ removeClass([targetEle], 'e-treegridexpand');
127
+ addClass([targetEle], 'e-treegridcollapse');
128
+ }
129
+ } else if (ret[`${action}`] === 'expand') {
130
+ targetEle = ret[`${row}`].getElementsByClassName('e-treegridcollapse')[0];
131
+ if (!isNullOrUndefined(targetEle)) {
132
+ removeClass([targetEle], 'e-treegridcollapse');
133
+ addClass([targetEle], 'e-treegridexpand');
134
+ }
135
+ }
136
+ }
137
+ }
138
+ private pageRoot(pagedResults: ITreeData[], temp: ITreeData[], result?: ITreeData[]) : ITreeData[] {
139
+ let newResults: ITreeData[] = isNullOrUndefined(result) ? [] : result;
140
+ for (let t: number = 0; t < temp.length; t++) {
141
+ newResults.push(temp[parseInt(t.toString(), 10)]);
142
+ let res: ITreeData[] = [];
143
+ if (temp[parseInt(t.toString(), 10)].hasChildRecords) {
144
+ res = pagedResults.filter((e: ITreeData) => {
145
+ return temp[parseInt(t.toString(), 10)].uniqueID === e.parentUniqueID;
146
+ });
147
+ newResults = this.pageRoot(pagedResults, res, newResults);
148
+ }
149
+ }
150
+ return newResults;
151
+ }
152
+
153
+ private updatePageSize(pageingDetails: {result: ITreeData[], count: number}) : void {
154
+ const updateSize: number = pageingDetails.count;
155
+ const gridPagerModule: GridPage = this.parent.grid.pagerModule;
156
+ if (this.parent.pageSettings.pageSizes === true) {
157
+ if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {
158
+ gridPagerModule['pagerObj'].totalRecordsCount = updateSize;
159
+ this.parent.grid.pageSettings.pageSize = updateSize;
160
+ }
161
+ }
162
+ }
163
+
164
+ private pageAction(pageingDetails: {result: ITreeData[], count: number, actionArgs: ActionEventArgs}): void {
165
+ const dm: DataManager = new DataManager(pageingDetails.result);
166
+ if (this.parent.pageSettings.pageSizeMode === 'Root') {
167
+ let temp: ITreeData[] = [];
168
+ const propname: string =
169
+ (this.parent.grid.filterSettings.columns.length > 0) &&
170
+ (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?
171
+ 'filterLevel' : 'level';
172
+ let query: Query = new Query().where(propname, 'equal', 0);
173
+ temp = dm.executeLocal(query);
174
+ pageingDetails.count = temp.length;
175
+ const size: number = this.parent.grid.pageSettings.pageSize;
176
+ const current: number = this.parent.grid.pageSettings.currentPage;
177
+ const skip: number = size * (current - 1);
178
+ query = query.skip(skip).take(size);
179
+ temp = dm.executeLocal(query);
180
+ const newResults: ITreeData[] = this.pageRoot(pageingDetails.result, temp);
181
+ pageingDetails.result = newResults;
182
+ } else {
183
+ const dm: DataManager = new DataManager(pageingDetails.result);
184
+ const expanded: Predicate = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);
185
+ const parents: ITreeData[] = dm.executeLocal(new Query().where(expanded));
186
+ let visualData: ITreeData[];
187
+ if (isFilterChildHierarchy(this.parent) && (pageingDetails.actionArgs.action !== 'collapse' &&
188
+ pageingDetails.actionArgs.action !== 'expand')){
189
+ visualData = parents;
190
+ } else {
191
+ visualData = parents.filter((e: ITreeData) => {
192
+ return getExpandStatus(this.parent, e, parents);
193
+ });
194
+ }
195
+ pageingDetails.count = visualData.length;
196
+ let query: Query = new Query();
197
+ const size: number = this.parent.grid.pageSettings.pageSize;
198
+ this.updatePageSize(pageingDetails);
199
+ let current: number = this.parent.grid.pageSettings.currentPage;
200
+ if (visualData.length < (current * size)) {
201
+ current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);
202
+ current = current ? current : 1;
203
+ this.parent.grid.setProperties({pageSettings: {currentPage: current}}, true);
204
+ }
205
+ const skip: number = size * (current - 1);
206
+ query = query.skip(skip).take(size);
207
+ dm.dataSource.json = visualData;
208
+ pageingDetails.result = dm.executeLocal(query);
209
+ }
210
+ this.parent.notify('updateAction', pageingDetails);
211
+ }
212
+ }
@@ -0,0 +1,63 @@
1
+ import { TreeGrid } from '../base/treegrid';
2
+ import { PdfExportProperties } from '@syncfusion/ej2-grids';
3
+ import { Fetch } from '@syncfusion/ej2-base';
4
+ import { Query } from '@syncfusion/ej2-data';
5
+ /**
6
+ * TreeGrid PDF Export module
7
+ *
8
+ * @hidden
9
+ */
10
+ export declare class PdfExport {
11
+ private parent;
12
+ private dataResults;
13
+ /**
14
+ * Constructor for PDF export 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} PdfExport module name
24
+ */
25
+ protected getModuleName(): string;
26
+ /**
27
+ * @hidden
28
+ * @returns {void}
29
+ */
30
+ addEventListener(): void;
31
+ /**
32
+ * @hidden
33
+ * @returns {void}
34
+ */
35
+ removeEventListener(): void;
36
+ /**
37
+ * To destroy the PDF Export
38
+ *
39
+ * @returns {void}
40
+ * @hidden
41
+ */
42
+ destroy(): void;
43
+ private updatePdfResultModel;
44
+ Map(pdfExportProperties?: PdfExportProperties, isMultipleExport?: boolean, pdfDoc?: Object, isBlob?: boolean): Promise<Object>;
45
+ protected generateQuery(query: Query, prop?: PdfExportProperties): Query;
46
+ protected manipulatePdfProperties(prop?: PdfExportProperties, dtSrc?: Object, queryResult?: Fetch): Object;
47
+ /**
48
+ * TreeGrid PDF Export cell modifier
49
+ *
50
+ * @param {PdfQueryCellInfoEventArgs} args - Current cell details
51
+ * @hidden
52
+ * @returns {void}
53
+ */
54
+ private pdfQueryCellInfo;
55
+ /**
56
+ * TreeGrid PDF Export Aggregate cell modifier
57
+ *
58
+ * @param {AggregateQueryCellInfoEventArgs} args - current cell details
59
+ * @hidden
60
+ * @returns {void}
61
+ */
62
+ private pdfAggregateCellInfo;
63
+ }
@@ -0,0 +1,182 @@
1
+ import { TreeGrid } from '../base/treegrid';
2
+ import { ITreeData, TreeGridPdfExportProperties } from '../base/interface';
3
+ import { getObject, PdfExport as GridPdf, Grid, BeforeDataBoundArgs, PdfExportProperties, AggregateQueryCellInfoEventArgs} from '@syncfusion/ej2-grids';
4
+ import { PdfQueryCellInfoEventArgs, PdfStyle } from '@syncfusion/ej2-grids';
5
+ import { isRemoteData, isOffline } from '../utils';
6
+ import { isNullOrUndefined, setValue, Fetch, extend, getValue } from '@syncfusion/ej2-base';
7
+ import { DataManager, Query, ReturnOption } from '@syncfusion/ej2-data';
8
+ import * as event from '../base/constant';
9
+ import { PdfDocument } from '@syncfusion/ej2-pdf-export';
10
+ /**
11
+ * TreeGrid PDF Export module
12
+ *
13
+ * @hidden
14
+ */
15
+ export class PdfExport {
16
+ private parent: TreeGrid;
17
+ private dataResults: ReturnOption;
18
+ /**
19
+ * Constructor for PDF export module
20
+ *
21
+ * @param {TreeGrid} parent - Tree Grid instance
22
+ */
23
+ constructor(parent?: TreeGrid) {
24
+ Grid.Inject(GridPdf);
25
+ this.parent = parent;
26
+ this.dataResults = <ReturnOption>{};
27
+ this.addEventListener();
28
+ }
29
+ /**
30
+ * For internal use only - Get the module name.
31
+ *
32
+ * @private
33
+ * @returns {string} PdfExport module name
34
+ */
35
+ protected getModuleName(): string {
36
+ return 'PdfExport';
37
+ }
38
+ /**
39
+ * @hidden
40
+ * @returns {void}
41
+ */
42
+ public addEventListener(): void {
43
+ this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);
44
+ this.parent.on('updateResults', this.updatePdfResultModel, this);
45
+ this.parent.on('pdfAggregateCellInfo', this.pdfAggregateCellInfo, this);
46
+ }
47
+ /**
48
+ * @hidden
49
+ * @returns {void}
50
+ */
51
+ public removeEventListener(): void {
52
+ if (this.parent.isDestroyed) { return; }
53
+ this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);
54
+ this.parent.off('updateResults', this.updatePdfResultModel);
55
+ this.parent.off('pdfAggregateCellInfo', this.pdfAggregateCellInfo);
56
+ }
57
+ /**
58
+ * To destroy the PDF Export
59
+ *
60
+ * @returns {void}
61
+ * @hidden
62
+ */
63
+ public destroy(): void {
64
+ this.removeEventListener();
65
+ }
66
+ private updatePdfResultModel(returnResult: { result: ITreeData[], count: number }): void {
67
+ this.dataResults = <ReturnOption>returnResult;
68
+ }
69
+ public Map(
70
+ pdfExportProperties?: PdfExportProperties,
71
+ isMultipleExport?: boolean, pdfDoc?: Object, isBlob?: boolean) : Promise<Object> {
72
+ const dtSrc: Object = this.parent.dataSource;
73
+ const prop: Object = Object();
74
+ const isLocal: boolean = !isRemoteData(this.parent) && isOffline(this.parent);
75
+ setValue('cancel', false, prop);
76
+ return new Promise((resolve: Function) => {
77
+ const dm: DataManager = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)
78
+ : <DataManager>this.parent.dataSource;
79
+ let query: Query = new Query();
80
+ if (!isLocal) {
81
+ query = this.generateQuery(query);
82
+ setValue('query', query, prop);
83
+ }
84
+ this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));
85
+ if (getObject('cancel', prop)) {
86
+ return null;
87
+ }
88
+ dm.executeQuery(query).then((e: Object) => {
89
+ let customsData: Object = null;
90
+ if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {
91
+ customsData = pdfExportProperties.dataSource;
92
+ }
93
+ pdfExportProperties = this.manipulatePdfProperties(pdfExportProperties, dtSrc, <Fetch>e);
94
+ return this.parent.grid.pdfExportModule.Map(
95
+ this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then((document: PdfDocument) => {
96
+ if (customsData != null) {
97
+ pdfExportProperties.dataSource = customsData;
98
+ } else {
99
+ delete pdfExportProperties.dataSource;
100
+ }
101
+ resolve(document);
102
+ });
103
+ });
104
+ });
105
+ }
106
+ protected generateQuery(query: Query, prop?: PdfExportProperties) : Query {
107
+ if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'
108
+ && this.parent.allowPaging) {
109
+ prop.exportType = 'AllPages';
110
+ query.addParams('ExportType', 'CurrentPage');
111
+ query.where(this.parent.parentIdMapping, 'equal', null);
112
+ query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);
113
+ }
114
+ return query;
115
+ }
116
+ protected manipulatePdfProperties(prop?: PdfExportProperties, dtSrc?: Object, queryResult?: Fetch) : Object {
117
+ let args: Object = {};
118
+ //count not required for this query
119
+ const isLocal: boolean = !isRemoteData(this.parent) && isOffline(this.parent);
120
+ setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);
121
+ setValue('isExport', true, args);
122
+ setValue('isPdfExport', true, args);
123
+ if (!isNullOrUndefined(prop) && !isNullOrUndefined((prop as TreeGridPdfExportProperties).isCollapsedStatePersist)) {
124
+ setValue('isCollapsedStatePersist', (prop as TreeGridPdfExportProperties).isCollapsedStatePersist, args);
125
+ }
126
+ if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {
127
+ setValue('exportType', prop.exportType, args);
128
+ }
129
+ if (!isLocal) {
130
+ this.parent.parentData = [];
131
+ this.parent.dataModule.convertToFlatData(getValue('result', queryResult));
132
+ setValue('expresults', this.parent.flatData, args);
133
+ }
134
+ this.parent.notify('dataProcessor', args);
135
+ //args = this.parent.dataModule.dataProcessor(args);
136
+ args = <BeforeDataBoundArgs>this.dataResults;
137
+ dtSrc = isNullOrUndefined((<BeforeDataBoundArgs>args).result) ? this.parent.flatData.slice(0) : (<BeforeDataBoundArgs>args).result;
138
+ if (!isLocal) {
139
+ this.parent.flatData = [];
140
+ }
141
+ if (prop && prop.dataSource && isLocal) {
142
+ const flatDatas: Object[] = this.parent.flatData;
143
+ const dataSrc: Object = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;
144
+ this.parent.dataModule.convertToFlatData(dataSrc);
145
+ dtSrc = this.parent.flatData;
146
+ this.parent.flatData = flatDatas;
147
+ }
148
+ prop = isNullOrUndefined(prop) ? {} : prop;
149
+ prop.dataSource = new DataManager({json: <Object[]>dtSrc});
150
+ prop.query = args['query'];
151
+ return prop;
152
+ }
153
+ /**
154
+ * TreeGrid PDF Export cell modifier
155
+ *
156
+ * @param {PdfQueryCellInfoEventArgs} args - Current cell details
157
+ * @hidden
158
+ * @returns {void}
159
+ */
160
+ private pdfQueryCellInfo(args?: PdfQueryCellInfoEventArgs) : void {
161
+ if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {
162
+ const style: PdfStyle = {};
163
+ const data: ITreeData = <ITreeData>getObject('data', args);
164
+ const ispadfilter: boolean = isNullOrUndefined(data.filterLevel);
165
+ const pad: number = ispadfilter ? data.level : data.filterLevel;
166
+ style.paragraphIndent = pad * 3;
167
+ args.style = style;
168
+ }
169
+ this.parent.notify('updateResults', args);
170
+ this.parent.trigger('pdfQueryCellInfo', args);
171
+ }
172
+ /**
173
+ * TreeGrid PDF Export Aggregate cell modifier
174
+ *
175
+ * @param {AggregateQueryCellInfoEventArgs} args - current cell details
176
+ * @hidden
177
+ * @returns {void}
178
+ */
179
+ private pdfAggregateCellInfo(args?: AggregateQueryCellInfoEventArgs) : void {
180
+ this.parent.trigger('pdfAggregateQueryCellInfo', args);
181
+ }
182
+ }