react-graph-grid 0.1.4 → 0.1.6

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 (88) hide show
  1. package/README.md +4 -0
  2. package/{src/css → dist}/default.css +2 -1
  3. package/dist/index.esm.js +21 -0
  4. package/dist/index.js +56 -0
  5. package/dist/index10.esm.js +3844 -0
  6. package/dist/index10.js +3848 -0
  7. package/dist/index11.esm.js +4121 -0
  8. package/dist/index11.js +4125 -0
  9. package/dist/index12.esm.js +5238 -0
  10. package/dist/index12.js +5242 -0
  11. package/dist/index13.esm.js +5466 -0
  12. package/dist/index13.js +5470 -0
  13. package/dist/index14.esm.js +22 -0
  14. package/dist/index14.js +26 -0
  15. package/dist/index15.esm.js +402 -0
  16. package/dist/index15.js +403 -0
  17. package/dist/index16.esm.js +507 -0
  18. package/dist/index16.js +507 -0
  19. package/dist/index17.esm.js +256 -0
  20. package/dist/index17.js +257 -0
  21. package/dist/index18.esm.js +261 -0
  22. package/dist/index18.js +263 -0
  23. package/dist/index19.esm.js +623 -0
  24. package/dist/index19.js +624 -0
  25. package/dist/index2.esm.js +6 -0
  26. package/dist/index2.js +2 -0
  27. package/dist/index20.esm.js +219 -0
  28. package/dist/index20.js +220 -0
  29. package/dist/index21.esm.js +298 -0
  30. package/dist/index21.js +299 -0
  31. package/dist/index22.esm.js +662 -0
  32. package/dist/index22.js +663 -0
  33. package/dist/index23.esm.js +340 -0
  34. package/dist/index23.js +341 -0
  35. package/dist/index24.esm.js +269 -0
  36. package/dist/index24.js +270 -0
  37. package/dist/index25.esm.js +600 -0
  38. package/dist/index25.js +601 -0
  39. package/dist/index26.esm.js +245 -0
  40. package/dist/index26.js +246 -0
  41. package/dist/index27.esm.js +136 -0
  42. package/dist/index27.js +137 -0
  43. package/dist/index28.esm.js +70 -0
  44. package/dist/index28.js +70 -0
  45. package/dist/index29.esm.js +748 -0
  46. package/dist/index29.js +748 -0
  47. package/dist/index30.esm.js +363 -0
  48. package/dist/index30.js +363 -0
  49. package/dist/index4.esm.js +27 -0
  50. package/dist/index4.js +27 -0
  51. package/dist/index5.esm.js +35 -0
  52. package/dist/index5.js +39 -0
  53. package/dist/index6.esm.js +200 -0
  54. package/dist/index6.js +204 -0
  55. package/dist/index7.esm.js +9 -0
  56. package/dist/index7.js +13 -0
  57. package/dist/index8.esm.js +65 -0
  58. package/dist/index8.js +68 -0
  59. package/dist/index9.esm.js +102 -0
  60. package/dist/index9.js +103 -0
  61. package/package.json +6 -3
  62. package/eslint.config.js +0 -29
  63. package/index.html +0 -13
  64. package/index.js +0 -19
  65. package/npm.aps +0 -0
  66. package/src/Base.jsx +0 -81
  67. package/src/Card.jsx +0 -333
  68. package/src/Dropdown.jsx +0 -339
  69. package/src/FieldEdit.jsx +0 -376
  70. package/src/Graph.jsx +0 -482
  71. package/src/Grid.jsx +0 -887
  72. package/src/GridCD.jsx +0 -180
  73. package/src/GridDB.jsx +0 -897
  74. package/src/GridFE.jsx +0 -753
  75. package/src/GridFL.jsx +0 -468
  76. package/src/GridGR.jsx +0 -311
  77. package/src/GridPK.jsx +0 -414
  78. package/src/Modal.jsx +0 -511
  79. package/src/Overlay.jsx +0 -140
  80. package/src/Tests/DebugApp.jsx +0 -334
  81. package/src/Tests/TestData.jsx +0 -251
  82. package/src/Themes/DefaultGridTheme.jsx +0 -36
  83. package/src/Themes/Images.jsx +0 -438
  84. package/src/Themes/Translate.jsx +0 -76
  85. package/src/css/default_.css +0 -945
  86. package/src/main.jsx +0 -10
  87. package/vite.config.js +0 -14
  88. /package/{public → dist}/IM.svg +0 -0
@@ -0,0 +1,340 @@
1
+ import { require_jsx_runtime } from "./index7.esm.js";
2
+ import { BaseComponent } from "./index8.esm.js";
3
+ import { Images } from "./index16.esm.js";
4
+ import { Dropdown } from "./index17.esm.js";
5
+ import { GridDBClass } from "./index22.esm.js";
6
+ import { useEffect, useState } from "react";
7
+ var import_jsx_runtime = require_jsx_runtime();
8
+ function GridFL(props) {
9
+ let grid = null;
10
+ const [gridState, setState] = useState({
11
+ grid,
12
+ ind: 0
13
+ });
14
+ grid = gridState.grid;
15
+ let needGetRows = false;
16
+ if (!grid || grid.uid !== props.uid && props.uid != null) {
17
+ grid = null;
18
+ if (props.findGrid) grid = props.findGrid(props);
19
+ grid = grid || new GridFLClass(props);
20
+ needGetRows = !props.noAutoRefresh && grid.hasVisibleParentGrids && !grid.hasVisibleParentGrids();
21
+ }
22
+ if (props.init) props.init(grid);
23
+ grid.refreshState = function() {
24
+ setState({
25
+ grid,
26
+ ind: grid.stateind++
27
+ });
28
+ };
29
+ grid._waitingRows = needGetRows && (grid.rows.length <= 0 || grid.columns.length <= 0);
30
+ useEffect(() => {
31
+ grid.setupEvents(grid);
32
+ if (grid._waitingRows) grid.getRows({
33
+ filters: grid.collectFilters(),
34
+ grid
35
+ }).then((rows) => {
36
+ grid.rows = rows;
37
+ grid.afterGetRows();
38
+ grid.refreshState();
39
+ }).finally(() => {
40
+ grid._waitingRows = false;
41
+ grid.refreshState();
42
+ });
43
+ else if (grid.columns.length <= 0 && grid.getColumns) grid.prepareColumns().then(() => grid.refreshState());
44
+ return () => {
45
+ grid.clearEvents();
46
+ };
47
+ }, [grid]);
48
+ return grid.render();
49
+ }
50
+ var GridFLClass = class extends GridDBClass {
51
+ constructor(props) {
52
+ super(props);
53
+ const grid = this;
54
+ grid.filtersDisabled = props.filtersDisabled;
55
+ grid.beforeOpen = props.beforeOpen;
56
+ }
57
+ render() {
58
+ const grid = this;
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [super.render(), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dropdown, {
60
+ getItems: (e) => {
61
+ return e.self._grid.getAutocomleteItems(e);
62
+ },
63
+ onItemClick: (e) => {
64
+ e.self._grid.onAutocomleteItemClick(e);
65
+ },
66
+ closeWhenMiss: true,
67
+ init: (dd) => {
68
+ if (grid._autocompleteDropdown) dd.visible = grid._autocompleteDropdown.visible;
69
+ grid._autocompleteDropdown = dd;
70
+ dd._grid = grid;
71
+ if (grid._autocompleteRect) dd.opt.parentRect = grid._autocompleteRect;
72
+ },
73
+ onClose: (e) => {
74
+ if (e.self._grid._inputingColumn) {
75
+ delete e.self._grid._inputingColumn;
76
+ if (e.self._grid.needRefresh()) {
77
+ e.self._grid.pageNumber = 1;
78
+ e.self._grid.selectedRowIndex = 0;
79
+ e.self._grid.refresh();
80
+ }
81
+ }
82
+ }
83
+ })] });
84
+ }
85
+ renderHeaderCell(col, context) {
86
+ const grid = this;
87
+ if (grid.filtersDisabled) return super.renderHeaderCell(col, context);
88
+ const hasFilter = col.filtrable && context !== "fake" && col.filter != null && col.filter !== "";
89
+ const needFocus = grid._autoFocusColumn === col;
90
+ if (needFocus) delete grid._autoFocusColumn;
91
+ const isDisabled = grid._waitingRows || grid.isEditing() || grid.isDisabled();
92
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [super.renderHeaderCell(col, context), col.filtrable && context !== "fake" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", {
93
+ className: `grid-col-filter ${grid.opt.inputClass || BaseComponent.theme.inputClass || ""}`,
94
+ value: col.filter != null ? col.filter : "",
95
+ title: col.filter != null ? col.filter : "",
96
+ style: {
97
+ gridColumn: !hasFilter ? "span 2" : "",
98
+ width: "calc(100% - 10px)"
99
+ },
100
+ "grid-col-filter": `${grid.id}_${col.id}_`,
101
+ onChange: (e) => {
102
+ grid.onColumnFilterChanging(col, e.target.value, e);
103
+ },
104
+ onClick: (e) => {
105
+ grid.onColumnFilterClick(col, e);
106
+ },
107
+ onInput: (e) => {
108
+ grid.onColumnFilterInput(col, e);
109
+ },
110
+ autoFocus: needFocus,
111
+ disabled: isDisabled ? "disabled" : "",
112
+ onBlur: (e) => {
113
+ grid.onColumnFocusLost(col, col.filter, e);
114
+ },
115
+ autoComplete: "off",
116
+ autocomplete: "off"
117
+ }, `colFilter_${grid.id}_${col.id}_`), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
118
+ className: "grid-filter-clear",
119
+ style: {
120
+ color: "black",
121
+ display: hasFilter ? "flex" : "none",
122
+ justifyContent: "center",
123
+ alignItems: "center",
124
+ width: "8px"
125
+ },
126
+ type: "button",
127
+ disabled: isDisabled ? "disabled" : "",
128
+ onClick: () => grid.clearColumnFilter(col),
129
+ children: "×"
130
+ }, `colFilterClear_${grid.id}_${col.id}_`)] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {})] });
131
+ }
132
+ afterGetColumns() {
133
+ super.afterGetColumns();
134
+ const grid = this;
135
+ grid.hasColumnFilter = false;
136
+ for (let col of grid.columns) if (col.filtrable) {
137
+ grid.hasColumnFilter = true;
138
+ break;
139
+ }
140
+ }
141
+ getHeaderMinHeight() {
142
+ return !this.hasColumnFilter ? "1em" : "3em";
143
+ }
144
+ getAutocomleteItems() {
145
+ const grid = this;
146
+ return new Promise(function(resolve) {
147
+ grid.getRows({
148
+ filters: grid.collectFilters(true),
149
+ grid,
150
+ autocompleteColumn: grid._inputingColumn
151
+ }).then((rows) => {
152
+ const res = [];
153
+ if (grid._inputingColumn) {
154
+ let i = 0;
155
+ for (let row of rows) {
156
+ let txt = row[grid._inputingColumn.name] || String(row);
157
+ if (grid._inputingColumn.type === "date") txt = grid.formatDate(txt, grid.dateFormat);
158
+ else if (grid._inputingColumn.type === "datetime") txt = grid.formatDate(txt, grid.dateTimeFormat);
159
+ res.push({
160
+ id: i++,
161
+ text: txt
162
+ });
163
+ }
164
+ }
165
+ resolve(res);
166
+ });
167
+ });
168
+ }
169
+ collectFilters(noSaveFilterStr) {
170
+ const grid = this;
171
+ const filters = super.collectFilters();
172
+ const filterList = [];
173
+ let fo;
174
+ for (let col of grid.columns) {
175
+ if (!col.filtrable || col.filter == null || col.filter === "") continue;
176
+ fo = {
177
+ type: "column",
178
+ filter: `${col.name} = ${col.filter}`
179
+ };
180
+ filters.push(fo);
181
+ if (!noSaveFilterStr) filterList.push(fo.filter);
182
+ }
183
+ if (grid.beforeOpen != null && grid.beforeOpen !== "") {
184
+ fo = {
185
+ type: "graphLink",
186
+ filter: grid.beforeOpen
187
+ };
188
+ filters.push(fo);
189
+ }
190
+ if (!noSaveFilterStr) grid._lastFilters = filterList.join("&+&");
191
+ return filters;
192
+ }
193
+ showAutocomplete(e) {
194
+ const grid = this;
195
+ if (grid._waitingRows) return;
196
+ if (grid._autocompleteRect) grid._autocompleteDropdown.opt.parentRect = grid._autocompleteRect;
197
+ delete grid._autocompleteDropdown.maxW;
198
+ if (grid._inputingColumn && grid._inputingColumn.maxW) grid._autocompleteDropdown.maxW = +grid._inputingColumn.maxW;
199
+ grid._autocompleteDropdown.popup(e);
200
+ if (grid._autocompleteRect) delete grid._autocompleteRect;
201
+ }
202
+ needRefresh() {
203
+ const grid = this;
204
+ const prevFilterStr = grid._lastFilters;
205
+ grid.collectFilters();
206
+ return prevFilterStr !== grid._lastFilters;
207
+ }
208
+ onAutocomleteItemClick(e) {
209
+ const grid = this;
210
+ const item = grid._autocompleteDropdown.items.find(function(item$1) {
211
+ return String(item$1.id) === String(e.itemId);
212
+ });
213
+ if (!item) {
214
+ grid.log("onAutocomleteItemClick: " + e.itemId + " - does not found!");
215
+ return;
216
+ }
217
+ e.self.items = [];
218
+ grid._autocompleteDropdown.items = [];
219
+ grid._autocompleteDropdown.visible = false;
220
+ grid._autoFocusColumn = grid._inputingColumn;
221
+ grid._inputingColumn.filter = item.text;
222
+ if (e && e.target) grid._autocompleteRect = e.target.getBoundingClientRect();
223
+ if (grid.needRefresh()) {
224
+ grid.pageNumber = 1;
225
+ grid.selectedRowIndex = 0;
226
+ grid.refresh();
227
+ }
228
+ }
229
+ onColumnFilterChanging(column, filter, e) {
230
+ const grid = this;
231
+ column.filter = filter;
232
+ if (e && e.target) grid._autocompleteRect = e.target.getBoundingClientRect();
233
+ grid._autocompleteDropdown.items = [];
234
+ grid.refreshState();
235
+ }
236
+ onColumnFocusLost(column, filter, e) {
237
+ const grid = this;
238
+ grid._waitingRows = true;
239
+ if (grid._inputingColumn !== column) delete grid._inputingColumn;
240
+ if (e && e.target) grid._autocompleteRect = e.target.getBoundingClientRect();
241
+ setTimeout(() => {
242
+ if (grid.needRefresh()) {
243
+ grid._autocompleteDropdown.visible = false;
244
+ grid.pageNumber = 1;
245
+ grid.selectedRowIndex = 0;
246
+ grid.refresh();
247
+ } else grid._waitingRows = false;
248
+ }, 150);
249
+ }
250
+ onColumnFilterClick(col, e) {
251
+ const grid = this;
252
+ if (grid._waitingRows) return;
253
+ grid._inputingColumn = col;
254
+ e.target.focus();
255
+ setTimeout(() => {
256
+ grid._autocompleteDropdown.items = [];
257
+ grid._autocompleteRect = e.target.getBoundingClientRect();
258
+ grid.showAutocomplete(e);
259
+ }, 150);
260
+ }
261
+ onColumnFilterInput(col, e) {
262
+ const grid = this;
263
+ grid._autocompleteSeq = grid._autocompleteSeq || 0;
264
+ let prevSeq = grid._autocompleteSeq;
265
+ grid._autocompleteSeq++;
266
+ col.filter = e.target.value;
267
+ grid._autoFocusColumn = col;
268
+ setTimeout(() => {
269
+ if (++prevSeq !== grid._autocompleteSeq) return;
270
+ grid._inputingColumn = col;
271
+ grid._autocompleteDropdown.items = [];
272
+ const elem = document.getElementById(e.target.id);
273
+ grid._autocompleteRect = elem ? elem.getBoundingClientRect() : e.target.getBoundingClientRect();
274
+ grid.showAutocomplete(e);
275
+ }, 100);
276
+ }
277
+ clearColumnFilter(column) {
278
+ const grid = this;
279
+ column.filter = "";
280
+ grid.pageNumber = 1;
281
+ grid.selectedRowIndex = 0;
282
+ grid.refresh();
283
+ }
284
+ clearAllColumnFilters() {
285
+ const grid = this;
286
+ for (let col of grid.columns) col.filter = "";
287
+ grid.pageNumber = 1;
288
+ grid.selectedRowIndex = 0;
289
+ grid.refresh();
290
+ }
291
+ isFiltered() {
292
+ const grid = this;
293
+ for (let col of grid.columns) if (col.filter) return true;
294
+ return false;
295
+ }
296
+ getHeaderGridTemplateColumns(col) {
297
+ return col.sortInd == null ? "auto 16px" : "auto 22px";
298
+ }
299
+ getGridSettingsList() {
300
+ const res = super.getGridSettingsList();
301
+ const grid = this;
302
+ if (!grid.filtersDisabled) res.push({
303
+ id: 3,
304
+ text: grid.translate("Clear all filters", "grid-menu")
305
+ });
306
+ return res;
307
+ }
308
+ onSettingsItemClick(itemId) {
309
+ super.onSettingsItemClick(itemId);
310
+ const grid = this;
311
+ switch (String(itemId)) {
312
+ case "3":
313
+ grid.clearAllColumnFilters();
314
+ break;
315
+ default:
316
+ }
317
+ }
318
+ setupPagerButtons() {
319
+ const grid = this;
320
+ if (grid.pagerButtons && grid.pagerButtons.length > 0) return;
321
+ super.setupPagerButtons();
322
+ const clear = {
323
+ id: 10,
324
+ name: "clear",
325
+ title: "Clear all filters",
326
+ label: Images.images.clear ? "" : "Clear",
327
+ click: () => {
328
+ grid.clearAllColumnFilters();
329
+ },
330
+ getDisabled: () => {
331
+ return grid._waitingRows || !grid.isFiltered();
332
+ },
333
+ img: Images.images.clear,
334
+ class: grid.pagerButtonsClass
335
+ };
336
+ grid.pagerButtons.unshift(clear);
337
+ grid.pagerButtonsDict[clear.id] = grid.pagerButtonsDict[clear.name] = clear;
338
+ }
339
+ };
340
+ export { GridFL, GridFLClass };
@@ -0,0 +1,341 @@
1
+ const require_jsx_runtime$1 = require("./index7.js");
2
+ const require_Base = require("./index8.js");
3
+ const require_Images = require("./index16.js");
4
+ const require_Dropdown = require("./index17.js");
5
+ const require_GridDB = require("./index22.js");
6
+ let react = require("react");
7
+ var import_jsx_runtime = require_jsx_runtime$1.default;
8
+ function GridFL(props) {
9
+ let grid = null;
10
+ const [gridState, setState] = (0, react.useState)({
11
+ grid,
12
+ ind: 0
13
+ });
14
+ grid = gridState.grid;
15
+ let needGetRows = false;
16
+ if (!grid || grid.uid !== props.uid && props.uid != null) {
17
+ grid = null;
18
+ if (props.findGrid) grid = props.findGrid(props);
19
+ grid = grid || new GridFLClass(props);
20
+ needGetRows = !props.noAutoRefresh && grid.hasVisibleParentGrids && !grid.hasVisibleParentGrids();
21
+ }
22
+ if (props.init) props.init(grid);
23
+ grid.refreshState = function() {
24
+ setState({
25
+ grid,
26
+ ind: grid.stateind++
27
+ });
28
+ };
29
+ grid._waitingRows = needGetRows && (grid.rows.length <= 0 || grid.columns.length <= 0);
30
+ (0, react.useEffect)(() => {
31
+ grid.setupEvents(grid);
32
+ if (grid._waitingRows) grid.getRows({
33
+ filters: grid.collectFilters(),
34
+ grid
35
+ }).then((rows) => {
36
+ grid.rows = rows;
37
+ grid.afterGetRows();
38
+ grid.refreshState();
39
+ }).finally(() => {
40
+ grid._waitingRows = false;
41
+ grid.refreshState();
42
+ });
43
+ else if (grid.columns.length <= 0 && grid.getColumns) grid.prepareColumns().then(() => grid.refreshState());
44
+ return () => {
45
+ grid.clearEvents();
46
+ };
47
+ }, [grid]);
48
+ return grid.render();
49
+ }
50
+ var GridFLClass = class extends require_GridDB.GridDBClass {
51
+ constructor(props) {
52
+ super(props);
53
+ const grid = this;
54
+ grid.filtersDisabled = props.filtersDisabled;
55
+ grid.beforeOpen = props.beforeOpen;
56
+ }
57
+ render() {
58
+ const grid = this;
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [super.render(), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(require_Dropdown.Dropdown, {
60
+ getItems: (e) => {
61
+ return e.self._grid.getAutocomleteItems(e);
62
+ },
63
+ onItemClick: (e) => {
64
+ e.self._grid.onAutocomleteItemClick(e);
65
+ },
66
+ closeWhenMiss: true,
67
+ init: (dd) => {
68
+ if (grid._autocompleteDropdown) dd.visible = grid._autocompleteDropdown.visible;
69
+ grid._autocompleteDropdown = dd;
70
+ dd._grid = grid;
71
+ if (grid._autocompleteRect) dd.opt.parentRect = grid._autocompleteRect;
72
+ },
73
+ onClose: (e) => {
74
+ if (e.self._grid._inputingColumn) {
75
+ delete e.self._grid._inputingColumn;
76
+ if (e.self._grid.needRefresh()) {
77
+ e.self._grid.pageNumber = 1;
78
+ e.self._grid.selectedRowIndex = 0;
79
+ e.self._grid.refresh();
80
+ }
81
+ }
82
+ }
83
+ })] });
84
+ }
85
+ renderHeaderCell(col, context) {
86
+ const grid = this;
87
+ if (grid.filtersDisabled) return super.renderHeaderCell(col, context);
88
+ const hasFilter = col.filtrable && context !== "fake" && col.filter != null && col.filter !== "";
89
+ const needFocus = grid._autoFocusColumn === col;
90
+ if (needFocus) delete grid._autoFocusColumn;
91
+ const isDisabled = grid._waitingRows || grid.isEditing() || grid.isDisabled();
92
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [super.renderHeaderCell(col, context), col.filtrable && context !== "fake" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", {
93
+ className: `grid-col-filter ${grid.opt.inputClass || require_Base.BaseComponent.theme.inputClass || ""}`,
94
+ value: col.filter != null ? col.filter : "",
95
+ title: col.filter != null ? col.filter : "",
96
+ style: {
97
+ gridColumn: !hasFilter ? "span 2" : "",
98
+ width: "calc(100% - 10px)"
99
+ },
100
+ "grid-col-filter": `${grid.id}_${col.id}_`,
101
+ onChange: (e) => {
102
+ grid.onColumnFilterChanging(col, e.target.value, e);
103
+ },
104
+ onClick: (e) => {
105
+ grid.onColumnFilterClick(col, e);
106
+ },
107
+ onInput: (e) => {
108
+ grid.onColumnFilterInput(col, e);
109
+ },
110
+ autoFocus: needFocus,
111
+ disabled: isDisabled ? "disabled" : "",
112
+ onBlur: (e) => {
113
+ grid.onColumnFocusLost(col, col.filter, e);
114
+ },
115
+ autoComplete: "off",
116
+ autocomplete: "off"
117
+ }, `colFilter_${grid.id}_${col.id}_`), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
118
+ className: "grid-filter-clear",
119
+ style: {
120
+ color: "black",
121
+ display: hasFilter ? "flex" : "none",
122
+ justifyContent: "center",
123
+ alignItems: "center",
124
+ width: "8px"
125
+ },
126
+ type: "button",
127
+ disabled: isDisabled ? "disabled" : "",
128
+ onClick: () => grid.clearColumnFilter(col),
129
+ children: "×"
130
+ }, `colFilterClear_${grid.id}_${col.id}_`)] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {})] });
131
+ }
132
+ afterGetColumns() {
133
+ super.afterGetColumns();
134
+ const grid = this;
135
+ grid.hasColumnFilter = false;
136
+ for (let col of grid.columns) if (col.filtrable) {
137
+ grid.hasColumnFilter = true;
138
+ break;
139
+ }
140
+ }
141
+ getHeaderMinHeight() {
142
+ return !this.hasColumnFilter ? "1em" : "3em";
143
+ }
144
+ getAutocomleteItems() {
145
+ const grid = this;
146
+ return new Promise(function(resolve) {
147
+ grid.getRows({
148
+ filters: grid.collectFilters(true),
149
+ grid,
150
+ autocompleteColumn: grid._inputingColumn
151
+ }).then((rows) => {
152
+ const res = [];
153
+ if (grid._inputingColumn) {
154
+ let i = 0;
155
+ for (let row of rows) {
156
+ let txt = row[grid._inputingColumn.name] || String(row);
157
+ if (grid._inputingColumn.type === "date") txt = grid.formatDate(txt, grid.dateFormat);
158
+ else if (grid._inputingColumn.type === "datetime") txt = grid.formatDate(txt, grid.dateTimeFormat);
159
+ res.push({
160
+ id: i++,
161
+ text: txt
162
+ });
163
+ }
164
+ }
165
+ resolve(res);
166
+ });
167
+ });
168
+ }
169
+ collectFilters(noSaveFilterStr) {
170
+ const grid = this;
171
+ const filters = super.collectFilters();
172
+ const filterList = [];
173
+ let fo;
174
+ for (let col of grid.columns) {
175
+ if (!col.filtrable || col.filter == null || col.filter === "") continue;
176
+ fo = {
177
+ type: "column",
178
+ filter: `${col.name} = ${col.filter}`
179
+ };
180
+ filters.push(fo);
181
+ if (!noSaveFilterStr) filterList.push(fo.filter);
182
+ }
183
+ if (grid.beforeOpen != null && grid.beforeOpen !== "") {
184
+ fo = {
185
+ type: "graphLink",
186
+ filter: grid.beforeOpen
187
+ };
188
+ filters.push(fo);
189
+ }
190
+ if (!noSaveFilterStr) grid._lastFilters = filterList.join("&+&");
191
+ return filters;
192
+ }
193
+ showAutocomplete(e) {
194
+ const grid = this;
195
+ if (grid._waitingRows) return;
196
+ if (grid._autocompleteRect) grid._autocompleteDropdown.opt.parentRect = grid._autocompleteRect;
197
+ delete grid._autocompleteDropdown.maxW;
198
+ if (grid._inputingColumn && grid._inputingColumn.maxW) grid._autocompleteDropdown.maxW = +grid._inputingColumn.maxW;
199
+ grid._autocompleteDropdown.popup(e);
200
+ if (grid._autocompleteRect) delete grid._autocompleteRect;
201
+ }
202
+ needRefresh() {
203
+ const grid = this;
204
+ const prevFilterStr = grid._lastFilters;
205
+ grid.collectFilters();
206
+ return prevFilterStr !== grid._lastFilters;
207
+ }
208
+ onAutocomleteItemClick(e) {
209
+ const grid = this;
210
+ const item = grid._autocompleteDropdown.items.find(function(item$1) {
211
+ return String(item$1.id) === String(e.itemId);
212
+ });
213
+ if (!item) {
214
+ grid.log("onAutocomleteItemClick: " + e.itemId + " - does not found!");
215
+ return;
216
+ }
217
+ e.self.items = [];
218
+ grid._autocompleteDropdown.items = [];
219
+ grid._autocompleteDropdown.visible = false;
220
+ grid._autoFocusColumn = grid._inputingColumn;
221
+ grid._inputingColumn.filter = item.text;
222
+ if (e && e.target) grid._autocompleteRect = e.target.getBoundingClientRect();
223
+ if (grid.needRefresh()) {
224
+ grid.pageNumber = 1;
225
+ grid.selectedRowIndex = 0;
226
+ grid.refresh();
227
+ }
228
+ }
229
+ onColumnFilterChanging(column, filter, e) {
230
+ const grid = this;
231
+ column.filter = filter;
232
+ if (e && e.target) grid._autocompleteRect = e.target.getBoundingClientRect();
233
+ grid._autocompleteDropdown.items = [];
234
+ grid.refreshState();
235
+ }
236
+ onColumnFocusLost(column, filter, e) {
237
+ const grid = this;
238
+ grid._waitingRows = true;
239
+ if (grid._inputingColumn !== column) delete grid._inputingColumn;
240
+ if (e && e.target) grid._autocompleteRect = e.target.getBoundingClientRect();
241
+ setTimeout(() => {
242
+ if (grid.needRefresh()) {
243
+ grid._autocompleteDropdown.visible = false;
244
+ grid.pageNumber = 1;
245
+ grid.selectedRowIndex = 0;
246
+ grid.refresh();
247
+ } else grid._waitingRows = false;
248
+ }, 150);
249
+ }
250
+ onColumnFilterClick(col, e) {
251
+ const grid = this;
252
+ if (grid._waitingRows) return;
253
+ grid._inputingColumn = col;
254
+ e.target.focus();
255
+ setTimeout(() => {
256
+ grid._autocompleteDropdown.items = [];
257
+ grid._autocompleteRect = e.target.getBoundingClientRect();
258
+ grid.showAutocomplete(e);
259
+ }, 150);
260
+ }
261
+ onColumnFilterInput(col, e) {
262
+ const grid = this;
263
+ grid._autocompleteSeq = grid._autocompleteSeq || 0;
264
+ let prevSeq = grid._autocompleteSeq;
265
+ grid._autocompleteSeq++;
266
+ col.filter = e.target.value;
267
+ grid._autoFocusColumn = col;
268
+ setTimeout(() => {
269
+ if (++prevSeq !== grid._autocompleteSeq) return;
270
+ grid._inputingColumn = col;
271
+ grid._autocompleteDropdown.items = [];
272
+ const elem = document.getElementById(e.target.id);
273
+ grid._autocompleteRect = elem ? elem.getBoundingClientRect() : e.target.getBoundingClientRect();
274
+ grid.showAutocomplete(e);
275
+ }, 100);
276
+ }
277
+ clearColumnFilter(column) {
278
+ const grid = this;
279
+ column.filter = "";
280
+ grid.pageNumber = 1;
281
+ grid.selectedRowIndex = 0;
282
+ grid.refresh();
283
+ }
284
+ clearAllColumnFilters() {
285
+ const grid = this;
286
+ for (let col of grid.columns) col.filter = "";
287
+ grid.pageNumber = 1;
288
+ grid.selectedRowIndex = 0;
289
+ grid.refresh();
290
+ }
291
+ isFiltered() {
292
+ const grid = this;
293
+ for (let col of grid.columns) if (col.filter) return true;
294
+ return false;
295
+ }
296
+ getHeaderGridTemplateColumns(col) {
297
+ return col.sortInd == null ? "auto 16px" : "auto 22px";
298
+ }
299
+ getGridSettingsList() {
300
+ const res = super.getGridSettingsList();
301
+ const grid = this;
302
+ if (!grid.filtersDisabled) res.push({
303
+ id: 3,
304
+ text: grid.translate("Clear all filters", "grid-menu")
305
+ });
306
+ return res;
307
+ }
308
+ onSettingsItemClick(itemId) {
309
+ super.onSettingsItemClick(itemId);
310
+ const grid = this;
311
+ switch (String(itemId)) {
312
+ case "3":
313
+ grid.clearAllColumnFilters();
314
+ break;
315
+ default:
316
+ }
317
+ }
318
+ setupPagerButtons() {
319
+ const grid = this;
320
+ if (grid.pagerButtons && grid.pagerButtons.length > 0) return;
321
+ super.setupPagerButtons();
322
+ const clear = {
323
+ id: 10,
324
+ name: "clear",
325
+ title: "Clear all filters",
326
+ label: require_Images.Images.images.clear ? "" : "Clear",
327
+ click: () => {
328
+ grid.clearAllColumnFilters();
329
+ },
330
+ getDisabled: () => {
331
+ return grid._waitingRows || !grid.isFiltered();
332
+ },
333
+ img: require_Images.Images.images.clear,
334
+ class: grid.pagerButtonsClass
335
+ };
336
+ grid.pagerButtons.unshift(clear);
337
+ grid.pagerButtonsDict[clear.id] = grid.pagerButtonsDict[clear.name] = clear;
338
+ }
339
+ };
340
+ exports.GridFL = GridFL;
341
+ exports.GridFLClass = GridFLClass;