jsl-ui 9.28.2 → 9.28.3

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 (170) hide show
  1. package/lib/components/IntervalComponent.d.ts +17 -17
  2. package/lib/components/IntervalComponent.js +65 -68
  3. package/lib/components/auto-suggest/AutoSuggestComponent.d.ts +22 -22
  4. package/lib/components/auto-suggest/AutoSuggestComponent.js +47 -49
  5. package/lib/components/button/ButtonComponent.d.ts +18 -18
  6. package/lib/components/button/ButtonComponent.js +29 -46
  7. package/lib/components/checkbox/CheckBoxComponent.d.ts +28 -28
  8. package/lib/components/checkbox/CheckBoxComponent.js +81 -98
  9. package/lib/components/date/DateComponent.d.ts +32 -32
  10. package/lib/components/date/DateComponent.js +89 -106
  11. package/lib/components/date-range/DateRangeComponent.d.ts +35 -35
  12. package/lib/components/date-range/DateRangeComponent.js +123 -136
  13. package/lib/components/date-time/DateTimeComponent.d.ts +15 -15
  14. package/lib/components/date-time/DateTimeComponent.js +39 -53
  15. package/lib/components/dialog/DialogComponent.d.ts +67 -67
  16. package/lib/components/dialog/DialogComponent.js +198 -251
  17. package/lib/components/drop-down/DropDownComponent.d.ts +27 -27
  18. package/lib/components/drop-down/DropDownComponent.js +60 -74
  19. package/lib/components/expander/ExpanderComponent.d.ts +27 -27
  20. package/lib/components/expander/ExpanderComponent.js +89 -90
  21. package/lib/components/form-field/FormComponent.d.ts +12 -12
  22. package/lib/components/form-field/FormComponent.js +23 -26
  23. package/lib/components/form-field/FormFieldComponent.d.ts +39 -39
  24. package/lib/components/form-field/FormFieldComponent.js +138 -140
  25. package/lib/components/grid/GridComponent.d.ts +26 -26
  26. package/lib/components/grid/GridComponent.js +110 -116
  27. package/lib/components/input/InputComponent.d.ts +33 -33
  28. package/lib/components/input/InputComponent.js +126 -147
  29. package/lib/components/loading/LoadingComponent.d.ts +8 -8
  30. package/lib/components/loading/LoadingComponent.js +20 -22
  31. package/lib/components/navigation/NavigationComponent.d.ts +34 -34
  32. package/lib/components/navigation/NavigationComponent.js +45 -70
  33. package/lib/components/notification/Notification.d.ts +19 -19
  34. package/lib/components/notification/Notification.js +65 -69
  35. package/lib/components/number/NumberComponent.d.ts +26 -26
  36. package/lib/components/number/NumberComponent.js +80 -98
  37. package/lib/components/overlay/OverlayComponent.d.ts +27 -27
  38. package/lib/components/overlay/OverlayComponent.js +137 -149
  39. package/lib/components/progress/ProgressComponent.d.ts +18 -18
  40. package/lib/components/progress/ProgressComponent.js +40 -42
  41. package/lib/components/ribbon-menu/RibbonMenuComponent.d.ts +12 -12
  42. package/lib/components/ribbon-menu/RibbonMenuComponent.js +23 -34
  43. package/lib/components/select/SelectComponent.d.ts +79 -79
  44. package/lib/components/select/SelectComponent.js +356 -369
  45. package/lib/components/select/SelectDDAreaComponent.d.ts +32 -32
  46. package/lib/components/select/SelectDDAreaComponent.js +303 -317
  47. package/lib/components/slider/nouislider.d.ts +44 -44
  48. package/lib/components/slider/nouislider.js +2158 -2158
  49. package/lib/components/stack-panel/SplitterComponent.d.ts +21 -21
  50. package/lib/components/stack-panel/SplitterComponent.js +124 -126
  51. package/lib/components/stack-panel/StackPanelComponent.d.ts +20 -20
  52. package/lib/components/stack-panel/StackPanelComponent.js +50 -64
  53. package/lib/components/tabs/TabsComponent.d.ts +40 -40
  54. package/lib/components/tabs/TabsComponent.js +200 -204
  55. package/lib/components/time/TimeComponent.d.ts +29 -29
  56. package/lib/components/time/TimeComponent.js +104 -113
  57. package/lib/components/tree-view/TreeViewComponent.d.ts +23 -23
  58. package/lib/components/tree-view/TreeViewComponent.js +43 -45
  59. package/lib/components/virtual-render/VirtualRenderComponent.d.ts +30 -30
  60. package/lib/components/virtual-render/VirtualRenderComponent.js +92 -104
  61. package/lib/core/culture.d.ts +5 -5
  62. package/lib/core/culture.js +385 -385
  63. package/lib/core/date.d.ts +14 -14
  64. package/lib/core/date.js +346 -350
  65. package/lib/core/helper.d.ts +13 -13
  66. package/lib/core/helper.js +100 -104
  67. package/lib/core/jq.d.ts +37 -37
  68. package/lib/core/jq.js +362 -371
  69. package/lib/core/lang.d.ts +24 -24
  70. package/lib/core/lang.js +24 -28
  71. package/lib/core/numeric.d.ts +7 -7
  72. package/lib/core/numeric.js +139 -143
  73. package/lib/core/polyfills.js +22 -22
  74. package/lib/core.d.ts +6 -6
  75. package/lib/core.js +6 -6
  76. package/lib/grid/filterDialogs/dateRangeFilter.d.ts +7 -7
  77. package/lib/grid/filterDialogs/dateRangeFilter.js +106 -156
  78. package/lib/grid/filterDialogs/excelFilter.d.ts +9 -9
  79. package/lib/grid/filterDialogs/excelFilter.js +250 -316
  80. package/lib/grid/plugins/ext.overlay.d.ts +2 -2
  81. package/lib/grid/plugins/ext.overlay.js +295 -295
  82. package/lib/grid/plugins/slick.cellrangedecorator.d.ts +12 -12
  83. package/lib/grid/plugins/slick.cellrangedecorator.js +68 -68
  84. package/lib/grid/plugins/slick.cellrangeselector.d.ts +1 -1
  85. package/lib/grid/plugins/slick.cellrangeselector.js +144 -144
  86. package/lib/grid/plugins/slick.cellselectionmodel.d.ts +1 -1
  87. package/lib/grid/plugins/slick.cellselectionmodel.js +194 -194
  88. package/lib/grid/plugins/slick.headerbuttons.d.ts +55 -55
  89. package/lib/grid/plugins/slick.headerbuttons.js +156 -156
  90. package/lib/grid/plugins/slick.headermenu.d.ts +74 -74
  91. package/lib/grid/plugins/slick.headermenu.js +260 -260
  92. package/lib/grid/plugins/slick.rowmovemanager.d.ts +18 -18
  93. package/lib/grid/plugins/slick.rowmovemanager.js +249 -249
  94. package/lib/grid/plugins/slick.rowselectionmodel.d.ts +1 -1
  95. package/lib/grid/plugins/slick.rowselectionmodel.js +167 -167
  96. package/lib/grid/slick.core.d.ts +91 -91
  97. package/lib/grid/slick.core.js +574 -574
  98. package/lib/grid/slick.creator.d.ts +81 -81
  99. package/lib/grid/slick.creator.js +726 -726
  100. package/lib/grid/slick.dataview.d.ts +71 -71
  101. package/lib/grid/slick.dataview.js +1069 -1080
  102. package/lib/grid/slick.editors.core.d.ts +4 -4
  103. package/lib/grid/slick.editors.core.js +235 -235
  104. package/lib/grid/slick.editors.date.d.ts +2 -2
  105. package/lib/grid/slick.editors.date.js +125 -125
  106. package/lib/grid/slick.editors.lookup.d.ts +14 -14
  107. package/lib/grid/slick.editors.lookup.js +352 -353
  108. package/lib/grid/slick.editors.nav.d.ts +6 -6
  109. package/lib/grid/slick.editors.nav.js +22 -22
  110. package/lib/grid/slick.formatters.d.ts +17 -17
  111. package/lib/grid/slick.formatters.js +144 -144
  112. package/lib/grid/slick.grid.d.ts +285 -285
  113. package/lib/grid/slick.grid.js +5409 -5412
  114. package/lib/grid/slick.groupitemmetadataprovider.d.ts +39 -39
  115. package/lib/grid/slick.groupitemmetadataprovider.js +165 -165
  116. package/lib/grid/slick.tree.d.ts +33 -33
  117. package/lib/grid/slick.tree.js +208 -220
  118. package/lib/grid.css +1 -705
  119. package/lib/grid.d.ts +13 -13
  120. package/lib/grid.js +13 -13
  121. package/lib/index.css +8 -2195
  122. package/lib/index.css.map +1 -1
  123. package/lib/index.d.ts +56 -55
  124. package/lib/index.js +61 -61
  125. package/lib/index.js.map +1 -1
  126. package/lib/interaction/dataconverter.d.ts +4 -4
  127. package/lib/interaction/dataconverter.js +0 -1
  128. package/lib/interaction/eventhandler.d.ts +13 -13
  129. package/lib/interaction/eventhandler.js +39 -42
  130. package/lib/interaction/moveable.d.ts +39 -39
  131. package/lib/interaction/moveable.js +160 -174
  132. package/lib/interaction/resizable.d.ts +37 -37
  133. package/lib/interaction/resizable.js +109 -123
  134. package/lib/ui/auto.suggest.d.ts +18 -18
  135. package/lib/ui/auto.suggest.js +244 -259
  136. package/lib/ui/date.picker/date-picker-options.d.ts +11 -11
  137. package/lib/ui/date.picker/date-picker-options.js +76 -76
  138. package/lib/ui/date.picker/lib/date-manip.d.ts +74 -74
  139. package/lib/ui/date.picker/lib/date-manip.js +120 -120
  140. package/lib/ui/date.picker/lib/dom.d.ts +23 -23
  141. package/lib/ui/date.picker/lib/dom.js +28 -28
  142. package/lib/ui/date.picker/lib/emitter.d.ts +13 -13
  143. package/lib/ui/date.picker/lib/emitter.js +49 -49
  144. package/lib/ui/date.picker/lib/fns.d.ts +23 -23
  145. package/lib/ui/date.picker/lib/fns.js +39 -43
  146. package/lib/ui/date.picker/mode/base-mode.d.ts +26 -26
  147. package/lib/ui/date.picker/mode/base-mode.js +248 -248
  148. package/lib/ui/date.picker/mode/dropdown-mode.d.ts +28 -28
  149. package/lib/ui/date.picker/mode/dropdown-mode.js +50 -50
  150. package/lib/ui/date.picker/mode/index.d.ts +28 -28
  151. package/lib/ui/date.picker/mode/index.js +18 -18
  152. package/lib/ui/date.picker/mode/modal-mode.d.ts +25 -25
  153. package/lib/ui/date.picker/mode/modal-mode.js +17 -17
  154. package/lib/ui/date.picker/mode/permanent-mode.d.ts +29 -29
  155. package/lib/ui/date.picker/mode/permanent-mode.js +19 -19
  156. package/lib/ui/date.picker/views/day-picker.d.ts +40 -40
  157. package/lib/ui/date.picker/views/day-picker.js +155 -155
  158. package/lib/ui/date.picker/views/month-picker.d.ts +26 -26
  159. package/lib/ui/date.picker/views/month-picker.js +65 -65
  160. package/lib/ui/date.picker/views/year-picker.d.ts +20 -20
  161. package/lib/ui/date.picker/views/year-picker.js +66 -66
  162. package/lib/ui/date.picker.d.ts +66 -66
  163. package/lib/ui/date.picker.js +32 -32
  164. package/lib/ui/dialog.d.ts +22 -22
  165. package/lib/ui/dialog.js +98 -113
  166. package/lib/ui/drop.down.d.ts +52 -52
  167. package/lib/ui/drop.down.js +2112 -2112
  168. package/lib/ui/number.input.d.ts +13 -13
  169. package/lib/ui/number.input.js +56 -67
  170. package/package.json +1 -1
@@ -1,220 +1,208 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import "./slick.tree.css";
13
- export var IndentFormatter = function (row, cell, value, columnDef, dataContext, grid) {
14
- var result = "";
15
- var hierachy = grid._hierachy;
16
- if (hierachy != null) {
17
- var options = hierachy.getOptions();
18
- var level = hierachy.getLevel(dataContext);
19
- if (level > 0) {
20
- result += "<span class='jsl-indent' style='min-width:" + (level * hierachy.getOptions().indentInRem) + "rem;'></span>";
21
- }
22
- if (options.enableCollapsing) {
23
- var hasChildren = hierachy.hasChildren(dataContext);
24
- if (hasChildren) {
25
- if (dataContext[options.collapsedStateField]) {
26
- result += "<span class='jsl-toggle'>" + options.expandIconHTML + "</span>";
27
- }
28
- else {
29
- result += "<span class='jsl-toggle'>" + options.collapseIconHTML + "</span>";
30
- }
31
- }
32
- else {
33
- result += "<span class='jsl-toggle-spacer'></span>";
34
- }
35
- }
36
- }
37
- if (value != null) {
38
- result += (value + "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
39
- }
40
- return result;
41
- };
42
- var GridTree = /** @class */ (function () {
43
- function GridTree(grid, o) {
44
- this.grid = grid;
45
- this.options = __assign({
46
- enableCollapsing: true,
47
- indentInRem: 1,
48
- hiddenStateField: "_hidden_by_h",
49
- collapsedStateField: "_callapsed",
50
- expandIconHTML: "▶", // "˃",
51
- collapseIconHTML: "▼" // "˅"
52
- }, o);
53
- this.primaryKey = this.grid.getOptions().primaryKey;
54
- grid._hierachy = this;
55
- grid.refresh();
56
- this.initEvents();
57
- }
58
- GridTree.prototype.getOptions = function () {
59
- return this.options;
60
- };
61
- GridTree.prototype.getLevel = function (item) {
62
- var level = 0;
63
- var parent = this.getParent(item);
64
- while (parent != null) {
65
- parent = this.getParent(parent);
66
- level++;
67
- }
68
- return level;
69
- };
70
- GridTree.prototype.getParent = function (item) {
71
- return this.grid.dataView.getItemById(item[this.options.parentColumn]);
72
- };
73
- GridTree.prototype.hasChildren = function (item) {
74
- return this.rowHasChildren(this.grid.dataView.getIdxByItem(item));
75
- };
76
- GridTree.prototype.getDirectChildren = function (item) {
77
- var id = item[this.primaryKey];
78
- var result = [];
79
- var data = this.grid.getData();
80
- for (var i = 0; i < data.length; i++) {
81
- var pid = data[i][this.options.parentColumn];
82
- if (pid === id) {
83
- result.push(data[i]);
84
- }
85
- }
86
- return result;
87
- };
88
- GridTree.prototype.getAllChildren = function (item) {
89
- var parentid = item[this.primaryKey];
90
- var result = [];
91
- var data = this.grid.getData();
92
- for (var i = 0; i < data.length; i++) {
93
- if (data[i][this.options.parentColumn] === parentid) {
94
- result.push(data[i]);
95
- result.push.apply(result, this.getAllChildren(data[i]));
96
- }
97
- }
98
- return result;
99
- };
100
- GridTree.prototype.rowHasChildren = function (row) {
101
- var data = this.grid.getData();
102
- if (data.length > row + 1) {
103
- return data[row + 1][this.options.parentColumn] === data[row][this.primaryKey];
104
- }
105
- return false;
106
- };
107
- GridTree.prototype.toggleExpand = function (item) {
108
- if (item[this.options.collapsedStateField]) {
109
- this.expand(item);
110
- }
111
- else {
112
- this.collapse(item);
113
- }
114
- };
115
- GridTree.prototype.expand = function (item) {
116
- item[this.options.collapsedStateField] = false;
117
- var data = this.grid.getData();
118
- var i = this.grid.dataView.getIdxByItem(item);
119
- while (i < data.length) {
120
- data[i][this.options.hiddenStateField] = false;
121
- if (this.rowHasChildren(i)) {
122
- if (data[i][this.options.collapsedStateField]) {
123
- //skip children
124
- i += this.getAllChildren(data[i]).length;
125
- }
126
- }
127
- i++;
128
- }
129
- this.grid.refreshData();
130
- };
131
- GridTree.prototype.indent = function (rows) {
132
- var realRows = this.filterChildren(rows);
133
- var data = this.grid.getData();
134
- //get indexes of rows
135
- var indexes = [];
136
- for (var i = 0; i < realRows.length; i++) {
137
- indexes.push(this.grid.dataView.getIdxByItem(realRows[i]));
138
- }
139
- //sort indexes
140
- indexes.sort(function (a, b) { return a > b ? 1 : (a < b ? -1 : 0); });
141
- //change parents to indent rows
142
- for (var i = 0; i < indexes.length; i++) {
143
- var rowIdx = indexes[i];
144
- var parentID = data[rowIdx][this.options.parentColumn];
145
- for (var tmp = rowIdx - 1; tmp >= 0; tmp--) {
146
- if (data[tmp][this.options.parentColumn] === parentID) {
147
- data[rowIdx][this.options.parentColumn] = data[tmp][this.primaryKey];
148
- break;
149
- }
150
- }
151
- }
152
- this.grid.refreshData();
153
- };
154
- GridTree.prototype.outdent = function (rows) {
155
- var rows2 = this.filterChildren(rows);
156
- var data = this.grid.getData();
157
- for (var i = 0; i < rows2.length; i++) {
158
- var row = rows2[i];
159
- var oldparent = row[this.options.parentColumn];
160
- if (oldparent) {
161
- var newparent = data[this.grid.dataView.getIdxById(oldparent)][this.options.parentColumn];
162
- row[this.options.parentColumn] = newparent;
163
- //make all subsequent items with same ParentID have current row as new parentid
164
- var idx = this.grid.dataView.getIdxById(row[this.primaryKey]);
165
- while (++idx < data.length) {
166
- if (data[idx][this.options.parentColumn] === oldparent) {
167
- data[idx][this.options.parentColumn] = row[this.primaryKey];
168
- }
169
- //TODO: optimize -> break sooner
170
- }
171
- }
172
- }
173
- this.grid.refreshData();
174
- };
175
- GridTree.prototype.filterChildren = function (rows) {
176
- var result = [];
177
- var dict = {};
178
- for (var i = 0; i < rows.length; i++) {
179
- dict[rows[i][this.primaryKey]] = true;
180
- }
181
- for (var i = 0; i < rows.length; i++) {
182
- var row = rows[i];
183
- var parentid = row[this.options.parentColumn];
184
- if (!parentid || !dict[parentid]) {
185
- result.push(row);
186
- }
187
- }
188
- return result;
189
- };
190
- GridTree.prototype.collapse = function (item) {
191
- item[this.options.collapsedStateField] = true;
192
- var children = this.getAllChildren(item);
193
- for (var i = 0; i < children.length; i++) {
194
- children[i][this.options.hiddenStateField] = true;
195
- }
196
- this.grid.refreshData();
197
- };
198
- GridTree.prototype.initEvents = function () {
199
- var _this = this;
200
- // collapse / expand click events
201
- if (this.options.enableCollapsing) {
202
- this.grid.onClick.subscribe(function (e, args) {
203
- if (e.target.classList.contains("jsl-toggle")) {
204
- e.stopImmediatePropagation();
205
- _this.toggleExpand(_this.grid.dataView.getItem(args.row));
206
- }
207
- });
208
- }
209
- // filters
210
- var hiddenFilter = {
211
- field: this.options.hiddenStateField,
212
- match: function (itm, field) {
213
- return !itm[_this.options.hiddenStateField];
214
- }
215
- };
216
- this.grid.addFilter(hiddenFilter);
217
- };
218
- return GridTree;
219
- }());
220
- export { GridTree };
1
+ import "./slick.tree.css";
2
+ export let IndentFormatter = function (row, cell, value, columnDef, dataContext, grid) {
3
+ let result = "";
4
+ const hierachy = grid._hierachy;
5
+ if (hierachy != null) {
6
+ const options = hierachy.getOptions();
7
+ const level = hierachy.getLevel(dataContext);
8
+ if (level > 0) {
9
+ result += "<span class='jsl-indent' style='min-width:" + (level * hierachy.getOptions().indentInRem) + "rem;'></span>";
10
+ }
11
+ if (options.enableCollapsing) {
12
+ const hasChildren = hierachy.hasChildren(dataContext);
13
+ if (hasChildren) {
14
+ if (dataContext[options.collapsedStateField]) {
15
+ result += "<span class='jsl-toggle'>" + options.expandIconHTML + "</span>";
16
+ }
17
+ else {
18
+ result += "<span class='jsl-toggle'>" + options.collapseIconHTML + "</span>";
19
+ }
20
+ }
21
+ else {
22
+ result += "<span class='jsl-toggle-spacer'></span>";
23
+ }
24
+ }
25
+ }
26
+ if (value != null) {
27
+ result += (value + "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
28
+ }
29
+ return result;
30
+ };
31
+ export class GridTree {
32
+ constructor(grid, o) {
33
+ this.grid = grid;
34
+ this.options = {
35
+ ...{
36
+ enableCollapsing: true,
37
+ indentInRem: 1,
38
+ hiddenStateField: "_hidden_by_h",
39
+ collapsedStateField: "_callapsed",
40
+ expandIconHTML: "▶",
41
+ collapseIconHTML: "▼" // "˅"
42
+ }, ...o
43
+ };
44
+ this.primaryKey = this.grid.getOptions().primaryKey;
45
+ grid._hierachy = this;
46
+ grid.refresh();
47
+ this.initEvents();
48
+ }
49
+ getOptions() {
50
+ return this.options;
51
+ }
52
+ getLevel(item) {
53
+ let level = 0;
54
+ let parent = this.getParent(item);
55
+ while (parent != null) {
56
+ parent = this.getParent(parent);
57
+ level++;
58
+ }
59
+ return level;
60
+ }
61
+ getParent(item) {
62
+ return this.grid.dataView.getItemById(item[this.options.parentColumn]);
63
+ }
64
+ hasChildren(item) {
65
+ return this.rowHasChildren(this.grid.dataView.getIdxByItem(item));
66
+ }
67
+ getDirectChildren(item) {
68
+ const id = item[this.primaryKey];
69
+ const result = [];
70
+ const data = this.grid.getData();
71
+ for (let i = 0; i < data.length; i++) {
72
+ const pid = data[i][this.options.parentColumn];
73
+ if (pid === id) {
74
+ result.push(data[i]);
75
+ }
76
+ }
77
+ return result;
78
+ }
79
+ getAllChildren(item) {
80
+ const parentid = item[this.primaryKey];
81
+ const result = [];
82
+ const data = this.grid.getData();
83
+ for (let i = 0; i < data.length; i++) {
84
+ if (data[i][this.options.parentColumn] === parentid) {
85
+ result.push(data[i]);
86
+ result.push(...this.getAllChildren(data[i]));
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+ rowHasChildren(row) {
92
+ const data = this.grid.getData();
93
+ if (data.length > row + 1) {
94
+ return data[row + 1][this.options.parentColumn] === data[row][this.primaryKey];
95
+ }
96
+ return false;
97
+ }
98
+ toggleExpand(item) {
99
+ if (item[this.options.collapsedStateField]) {
100
+ this.expand(item);
101
+ }
102
+ else {
103
+ this.collapse(item);
104
+ }
105
+ }
106
+ expand(item) {
107
+ item[this.options.collapsedStateField] = false;
108
+ const data = this.grid.getData();
109
+ let i = this.grid.dataView.getIdxByItem(item);
110
+ while (i < data.length) {
111
+ data[i][this.options.hiddenStateField] = false;
112
+ if (this.rowHasChildren(i)) {
113
+ if (data[i][this.options.collapsedStateField]) {
114
+ //skip children
115
+ i += this.getAllChildren(data[i]).length;
116
+ }
117
+ }
118
+ i++;
119
+ }
120
+ this.grid.refreshData();
121
+ }
122
+ indent(rows) {
123
+ const realRows = this.filterChildren(rows);
124
+ const data = this.grid.getData();
125
+ //get indexes of rows
126
+ const indexes = [];
127
+ for (let i = 0; i < realRows.length; i++) {
128
+ indexes.push(this.grid.dataView.getIdxByItem(realRows[i]));
129
+ }
130
+ //sort indexes
131
+ indexes.sort((a, b) => a > b ? 1 : (a < b ? -1 : 0));
132
+ //change parents to indent rows
133
+ for (let i = 0; i < indexes.length; i++) {
134
+ const rowIdx = indexes[i];
135
+ const parentID = data[rowIdx][this.options.parentColumn];
136
+ for (let tmp = rowIdx - 1; tmp >= 0; tmp--) {
137
+ if (data[tmp][this.options.parentColumn] === parentID) {
138
+ data[rowIdx][this.options.parentColumn] = data[tmp][this.primaryKey];
139
+ break;
140
+ }
141
+ }
142
+ }
143
+ this.grid.refreshData();
144
+ }
145
+ outdent(rows) {
146
+ const rows2 = this.filterChildren(rows);
147
+ const data = this.grid.getData();
148
+ for (let i = 0; i < rows2.length; i++) {
149
+ const row = rows2[i];
150
+ const oldparent = row[this.options.parentColumn];
151
+ if (oldparent) {
152
+ const newparent = data[this.grid.dataView.getIdxById(oldparent)][this.options.parentColumn];
153
+ row[this.options.parentColumn] = newparent;
154
+ //make all subsequent items with same ParentID have current row as new parentid
155
+ let idx = this.grid.dataView.getIdxById(row[this.primaryKey]);
156
+ while (++idx < data.length) {
157
+ if (data[idx][this.options.parentColumn] === oldparent) {
158
+ data[idx][this.options.parentColumn] = row[this.primaryKey];
159
+ }
160
+ //TODO: optimize -> break sooner
161
+ }
162
+ }
163
+ }
164
+ this.grid.refreshData();
165
+ }
166
+ filterChildren(rows) {
167
+ const result = [];
168
+ const dict = {};
169
+ for (let i = 0; i < rows.length; i++) {
170
+ dict[rows[i][this.primaryKey]] = true;
171
+ }
172
+ for (let i = 0; i < rows.length; i++) {
173
+ const row = rows[i];
174
+ const parentid = row[this.options.parentColumn];
175
+ if (!parentid || !dict[parentid]) {
176
+ result.push(row);
177
+ }
178
+ }
179
+ return result;
180
+ }
181
+ collapse(item) {
182
+ item[this.options.collapsedStateField] = true;
183
+ const children = this.getAllChildren(item);
184
+ for (let i = 0; i < children.length; i++) {
185
+ children[i][this.options.hiddenStateField] = true;
186
+ }
187
+ this.grid.refreshData();
188
+ }
189
+ initEvents() {
190
+ // collapse / expand click events
191
+ if (this.options.enableCollapsing) {
192
+ this.grid.onClick.subscribe((e, args) => {
193
+ if (e.target.classList.contains("jsl-toggle")) {
194
+ e.stopImmediatePropagation();
195
+ this.toggleExpand(this.grid.dataView.getItem(args.row));
196
+ }
197
+ });
198
+ }
199
+ // filters
200
+ const hiddenFilter = {
201
+ field: this.options.hiddenStateField,
202
+ match: (itm, field) => {
203
+ return !itm[this.options.hiddenStateField];
204
+ }
205
+ };
206
+ this.grid.addFilter(hiddenFilter);
207
+ }
208
+ }