react-graph-grid 0.1.4 → 0.1.5

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/dist/index.esm.js +21 -0
  3. package/dist/index.js +56 -0
  4. package/dist/index10.esm.js +3844 -0
  5. package/dist/index10.js +3848 -0
  6. package/dist/index11.esm.js +4121 -0
  7. package/dist/index11.js +4125 -0
  8. package/dist/index12.esm.js +5238 -0
  9. package/dist/index12.js +5242 -0
  10. package/dist/index13.esm.js +5466 -0
  11. package/dist/index13.js +5470 -0
  12. package/dist/index14.esm.js +22 -0
  13. package/dist/index14.js +26 -0
  14. package/dist/index15.esm.js +402 -0
  15. package/dist/index15.js +403 -0
  16. package/dist/index16.esm.js +507 -0
  17. package/dist/index16.js +507 -0
  18. package/dist/index17.esm.js +256 -0
  19. package/dist/index17.js +257 -0
  20. package/dist/index18.esm.js +261 -0
  21. package/dist/index18.js +263 -0
  22. package/dist/index19.esm.js +623 -0
  23. package/dist/index19.js +624 -0
  24. package/dist/index2.esm.js +6 -0
  25. package/dist/index2.js +2 -0
  26. package/dist/index20.esm.js +219 -0
  27. package/dist/index20.js +220 -0
  28. package/dist/index21.esm.js +298 -0
  29. package/dist/index21.js +299 -0
  30. package/dist/index22.esm.js +662 -0
  31. package/dist/index22.js +663 -0
  32. package/dist/index23.esm.js +340 -0
  33. package/dist/index23.js +341 -0
  34. package/dist/index24.esm.js +269 -0
  35. package/dist/index24.js +270 -0
  36. package/dist/index25.esm.js +600 -0
  37. package/dist/index25.js +601 -0
  38. package/dist/index26.esm.js +245 -0
  39. package/dist/index26.js +246 -0
  40. package/dist/index27.esm.js +136 -0
  41. package/dist/index27.js +137 -0
  42. package/dist/index28.esm.js +70 -0
  43. package/dist/index28.js +70 -0
  44. package/dist/index29.esm.js +748 -0
  45. package/dist/index29.js +748 -0
  46. package/dist/index30.esm.js +363 -0
  47. package/dist/index30.js +363 -0
  48. package/dist/index4.esm.js +27 -0
  49. package/dist/index4.js +27 -0
  50. package/dist/index5.esm.js +35 -0
  51. package/dist/index5.js +39 -0
  52. package/dist/index6.esm.js +200 -0
  53. package/dist/index6.js +204 -0
  54. package/dist/index7.esm.js +9 -0
  55. package/dist/index7.js +13 -0
  56. package/dist/index8.esm.js +65 -0
  57. package/dist/index8.js +68 -0
  58. package/dist/index9.esm.js +102 -0
  59. package/dist/index9.js +103 -0
  60. package/{src/css/default.css → dist/react-graph-grid.css} +2 -1
  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
package/src/GridFE.jsx DELETED
@@ -1,753 +0,0 @@
1
- /* eslint-disable no-mixed-operators */
2
- import { useState, useEffect } from 'react';
3
- import { GridFLClass } from './GridFL';
4
- import { FieldEdit } from './FieldEdit';
5
- import { Images } from './Themes/Images';
6
- import { Modal } from './Modal';
7
- // ==================================================================================================================================================================
8
- export function GridFE(props) {
9
- let grid = null;
10
-
11
- const [gridState, setState] = useState({ grid: grid, ind: 0 });
12
-
13
- grid = gridState.grid;
14
- let needGetRows = false;
15
- if (!grid || grid.uid !== props.uid && props.uid != null) {
16
- grid = null;
17
- if (props.findGrid) {
18
- grid = props.findGrid(props);
19
- }
20
- grid = grid || new GridFEClass(props);
21
- needGetRows = !props.noAutoRefresh && !grid.hasVisibleParentGrids();
22
- }
23
-
24
- if (props.init) {
25
- props.init(grid);
26
- }
27
-
28
- grid.refreshState = function () {
29
- setState({ grid: grid, ind: grid.stateind++ });
30
- }
31
-
32
- useEffect(() => {
33
- grid.setupEvents();
34
-
35
- if (needGetRows && (grid.rows.length <= 0 || grid.columns.length <= 0) || grid._forceRefresh) {
36
-
37
- grid._forceRefresh = false;
38
-
39
- grid._waitingRows = true;
40
- grid.getRows({ filters: grid.collectFilters(), grid: grid }).then(
41
- rows => {
42
- grid.rows = rows;
43
- grid.afterGetRows();
44
- grid.refreshState();
45
- }
46
- ).finally(() => {
47
- grid._waitingRows = false;
48
- grid.refreshState();
49
- });
50
- }
51
- else if (grid.columns.length <= 0 && grid.getColumns) {
52
- grid.prepareColumns().then(() => grid.refreshState());;
53
- }
54
-
55
- return () => {
56
- grid.clearEvents();
57
- }
58
- }, [grid, needGetRows])
59
-
60
- return (grid.render());
61
- }
62
-
63
- // ==================================================================================================================================================================
64
- export class GridFEClass extends GridFLClass {
65
-
66
- constructor(props) {
67
- super(props);
68
-
69
- const grid = this;
70
-
71
- grid.allowEdit = props.allowEdit;
72
-
73
- grid.allowView = false;
74
- grid.allowAdd = true;
75
- grid.allowCopy = true;
76
- grid.allowDelete = true;
77
-
78
- grid.closeSelfWnd = grid.closeSelfWnd || (() => { });
79
-
80
- grid.onSelectValue = props.onSelectValue || (() => { });
81
-
82
- const shift = (grid.level + 1) * 20;
83
- grid.popupPos = { x: 100 + shift, y: 100 + shift, w: 800, h: 600 };
84
-
85
- grid.addToolbarButtons();
86
- }
87
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
88
- render() {
89
- const grid = this;
90
- return (
91
- <>
92
- {super.render()}
93
- {grid.renderPopup()}
94
- </>
95
- )
96
- }
97
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
98
- isVisible() {
99
- return this.visible;
100
- }
101
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
102
- renderPopup() {
103
- const grid = this;
104
- return (
105
- grid.popupIsShowing ?
106
- <Modal
107
- title={grid.popupTitle}
108
- level={grid.level + 1}
109
- renderContent={(wnd) => { return grid.renderPopupContent(wnd) }}
110
- dimensionsByContent={grid.popupDimensionsByContent}
111
- pos={grid.popupPos}
112
- closeWhenEscape={grid.popupCloseWhenEscape}
113
- onClose={(e) => {
114
- grid.onClosePopup(e);
115
- grid.refreshState();
116
- }}
117
- footerButtons={grid._popupButtons ? grid._popupButtons : null}
118
- >
119
- </Modal>
120
- :
121
- <></>
122
- );
123
- }
124
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
125
- onClosePopup() {
126
- const grid = this;
127
- grid.popupIsShowing = false;
128
- grid.popupCloseWhenEscape = false;
129
- grid.popupTitle = '';
130
- delete grid._popupButtons;
131
- }
132
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
133
- renderPopupContent(wnd) {
134
- const grid = this;
135
- return grid.columnsSettingsIsShowing ? grid.renderColumnsSettings(wnd) : <></>;
136
- }
137
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
138
- renderCell(grid, col, row, selected) {
139
- if (!grid.allowEdit && !col.allowVerticalResize || !selected || grid.isDisabled()) return super.renderCell(grid, col, row);
140
-
141
- row = !grid.isEditing() || !grid.changedRow ? row : grid.changedRow;
142
-
143
- return <FieldEdit
144
- keyPref={grid.id + '_' + row[grid.keyField]}
145
- column={col}
146
- value={col.type === 'lookup' ? row[col.keyField] : row[col.name]}
147
- text={row[col.name]}
148
- findFieldEdit={() => { return col._fieldEditObj; }}
149
- selectH={'1.4em'}
150
- level={grid.level}
151
- init={
152
- (fe) => {
153
- if (grid.isEditing() && !grid.changedRow) {
154
- grid.changedRow = {};
155
- Object.assign(grid.changedRow, grid.selectedRow());
156
- }
157
-
158
- fe.ownerGrid = grid;
159
-
160
- const lrow = !grid.isEditing() ? grid.selectedRow() : grid.changedRow;
161
-
162
- col._fieldEditObj = fe;
163
- fe.value = col.type === 'lookup' ? lrow[col.keyField] : lrow[col.name];
164
- fe.text = lrow[col.name];
165
- }
166
- }
167
- onChange={(e) => {
168
- if (!grid.changedRow) {
169
- grid.changedRow = {};
170
- Object.assign(grid.changedRow, grid.selectedRow());
171
- }
172
-
173
- if (col.type === 'lookup') {
174
- grid.changedRow[col.keyField] = e.value;
175
- grid.changedRow[col.name] = e.text;
176
- if (!grid.isEditing()) {
177
- grid.setEditing(true);
178
- grid.refreshState();
179
- }
180
- e.fe.refreshState();
181
- }
182
- else {
183
- grid.changedRow[col.name] = e.value;
184
- if (!grid.isEditing()) {
185
- grid.setEditing(true);
186
- grid.refreshState();
187
- }
188
- else {
189
- e.fe.refreshState();
190
- }
191
- }
192
- }}
193
- >
194
- </FieldEdit>
195
- }
196
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
197
- addToolbarButtons() {
198
- const grid = this;
199
-
200
- //node.buttons.push({
201
- // id: node.buttons.length,
202
- // name: 'edit',
203
- // title: node.translate('Start edit'),
204
- // label: node.images.edit ? '' : node.translate('Start edit'),
205
- // click: (e) => node.startEdit(e),
206
- // img: node.images.edit
207
- //});
208
-
209
- grid.buttons.push({
210
- id: grid.buttons.length,
211
- name: 'commit',
212
- title: grid.translate('Commit changes'),
213
- label: grid.translate('Commit'),
214
- img: Images.images.commit,
215
- click: (e) => grid.commitChanges(e),
216
- getDisabled: (e) => grid.commitChangesDisabled(e),
217
- });
218
-
219
- grid.buttons.push({
220
- id: grid.buttons.length,
221
- name: 'rollback',
222
- title: grid.translate('Rollback changes'),
223
- label: grid.translate('Rollback'),
224
- img: Images.images.rollback,
225
- click: (e) => grid.rollbackChanges(e),
226
- getDisabled: (e) => grid.rollbackChangesDisabled(e),
227
- });
228
-
229
- grid.buttons.push({
230
- id: grid.buttons.length,
231
- name: 'add',
232
- title: grid.translate('Add new record'),
233
- label: grid.translate('Add'),
234
- img: Images.images.addRecord,
235
- click: (e) => grid.addRecord(e),
236
- getDisabled: (e) => grid.addRecordDisabled(e),
237
- });
238
-
239
- grid.buttons.push({
240
- id: grid.buttons.length,
241
- name: 'copy',
242
- title: grid.translate('Copy record'),
243
- label: grid.translate('Copy'),
244
- img: Images.images.copyRecord,
245
- click: (e) => grid.copyRecord(e),
246
- getDisabled: (e) => grid.copyRecordDisabled(e),
247
- });
248
-
249
- grid.buttons.push({
250
- id: grid.buttons.length,
251
- name: 'delete',
252
- title: grid.translate('Delete record'),
253
- label: grid.translate('Delete'),
254
- img: Images.images.deleteRecord,
255
- click: (e) => grid.deleteRecord(e),
256
- getDisabled: (e) => grid.deleteRecordDisabled(e),
257
- });
258
-
259
- grid.buttons.push({
260
- id: grid.buttons.length,
261
- name: 'view',
262
- title: grid.translate('View record'),
263
- label: grid.translate('View'),
264
- img: Images.images.viewRecord,
265
- click: (e) => grid.viewRecord(e),
266
- getDisabled: (e) => grid.viewRecordDisabled(e),
267
- getVisible: () => { return false; },
268
- });
269
-
270
- grid.buttons.push({
271
- id: grid.buttons.length,
272
- name: 'selectValue',
273
- title: grid.translate('Select value'),
274
- label: grid.translate('Select'),
275
- click: (e) => grid.selectRecord(e),
276
- img: Images.images.selectFilterValue,
277
- getDisabled: (e) => grid.selectRecordDisabled(e),
278
- getVisible: () => { return grid.isSelecting },
279
- });
280
-
281
- grid.buttons.push({
282
- id: grid.buttons.length,
283
- name: 'exit',
284
- title: grid.translate('Exit'),
285
- label: grid.translate('Exit'),
286
- click: (e) => grid.closeSelfWnd(e),
287
- img: Images.images.exit,
288
- getDisabled: (e) => grid.exitDisabled(e),
289
- getVisible: () => { return grid.isSelecting },
290
- });
291
-
292
- grid._buttonsDict = {};
293
- for (let btn of grid.buttons) {
294
- grid._buttonsDict[btn.name] = btn;
295
- }
296
- }
297
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
298
- selectRecord(e) {
299
- const grid = this;
300
- const row = grid.selectedRow();
301
- delete grid._selectedRows;
302
-
303
- if (!grid.multi || !grid.pocketOpened) {
304
- e.value = row[grid.keyField];
305
- e.text = row[grid.nameField];
306
- e.values = [{ value: e.value, label: e.text }];
307
- }
308
- else {
309
- e.multi = true;
310
- if (Object.keys(grid._selectedRowsDict).length === 0) {
311
- grid._selectedRowsDict[row[grid.keyField]] = row;
312
- }
313
-
314
- const texts = [];
315
- e.value = grid.selectedValue();
316
- e.values = grid.selectedValues(texts);
317
- e.text = texts.join(', ');
318
- }
319
-
320
- grid.onSelectValue(e);
321
- }
322
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
323
- onRowDblClick(e, row) {
324
- const grid = this;
325
- super.onRowDblClick(e, row);
326
-
327
- if (grid.isSelecting && !grid.multi && grid.onSelectValue) {
328
- const row = grid.selectedRow();
329
- e.value = row[grid.keyField];
330
- e.text = row[grid.nameField];
331
- grid.onSelectValue(e);
332
- }
333
- }
334
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
335
- commitChanges(e) {
336
- const grid = this;
337
-
338
- const row = grid.selectedRow();
339
-
340
- grid.saveRow({ row: row, changedRow: grid.changedRow }).then(
341
- () => {
342
- grid.setEditing(false);
343
- Object.assign(row, grid.changedRow);
344
- delete grid.changedRow;
345
- grid.refreshState();
346
- }
347
- ).catch((message) => {
348
- Object.assign(grid.changedRow, row);
349
- grid.refreshState();
350
- alert(message || 'Error!');
351
- });
352
- }
353
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
354
- commitChangesDisabled(e) {
355
- const grid = this;
356
- return grid._waitingRows || !grid.isEditing() || grid.isDisabled();
357
- }
358
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
359
- rollbackChanges(e) {
360
- const grid = this;
361
-
362
- delete grid.changedRow;
363
- grid.setEditing(false);
364
- grid.refreshState();
365
- }
366
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
367
- rollbackChangesDisabled(e) {
368
- const grid = this;
369
- return grid._waitingRows || !grid.isEditing() || grid.isDisabled();
370
- }
371
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
372
- addRecord(e) {
373
- const grid = this;
374
-
375
- grid.getNewRow().then((newRow) => {
376
- grid.rows.unshift(newRow);
377
- grid.selectedRowIndex = 0;
378
- grid.refreshState();
379
- });
380
- }
381
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
382
- addRecordDisabled(e) {
383
- const grid = this;
384
- return grid._waitingRows || !grid.allowAdd || grid.isEditing() || grid.isDisabled();
385
- }
386
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
387
- copyRecord(e) {
388
- const grid = this;
389
-
390
- const newRow = {};
391
- Object.assign(newRow, grid.selectedRow());
392
- grid.rows.unshift(newRow);
393
- grid.selectedRowIndex = 0;
394
-
395
- grid.refreshState();
396
- }
397
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
398
- copyRecordDisabled(e) {
399
- const grid = this;
400
- return grid._waitingRows || !grid.allowCopy || grid.isEditing() || grid.isDisabled() || grid.selectedRowIndex == null || grid.selectedRowIndex < 0 || !grid.rows || grid.rows.length <= 0;
401
- }
402
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
403
- deleteRecord(e) {
404
- const grid = this;
405
-
406
- if (window.confirm(grid.translate('Delete record') + '?')) {
407
- grid.deleteRow(e).then(() => grid.refreshState());
408
- }
409
- }
410
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
411
- deleteRecordDisabled(e) {
412
- const grid = this;
413
- return grid._waitingRows || !grid.allowDelete || grid.isEditing() || grid.isDisabled() || grid.selectedRowIndex == null || grid.selectedRowIndex < 0 || !grid.rows || grid.rows.length <= 0;
414
- }
415
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
416
- viewRecord(e) {
417
- }
418
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
419
- viewRecordDisabled(e) {
420
- const grid = this;
421
- return grid._waitingRows || !grid.allowView || grid.isEditing() || grid.isDisabled() || grid.selectedRowIndex == null || grid.selectedRowIndex < 0 || !grid.rows || grid.rows.length <= 0;
422
- }
423
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
424
- selectRecordDisabled(e) {
425
- const grid = this;
426
- return grid._waitingRows || !grid.isSelecting || grid.isEditing() || grid.isDisabled() || grid.selectedRowIndex == null || grid.selectedRowIndex < 0 || !grid.rows || grid.rows.length <= 0;
427
- }
428
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
429
- exitDisabled(e) {
430
- const grid = this;
431
- return grid._waitingRows || !grid.isSelecting || grid.isEditing() || grid.isDisabled();
432
- }
433
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
434
- onSelectedRowChanged(e) {
435
- const grid = this;
436
- super.onSelectedRowChanged(e);
437
-
438
- if (grid.allowEdit && grid.refreshState) {
439
- grid.refreshState();
440
- }
441
- }
442
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
443
- getSelectedRowIndex() {
444
- const grid = this;
445
- if (grid.value == null || grid.value === '') return;
446
-
447
- let i = 0;
448
- for (let row of grid.rows) {
449
- if (row[grid.keyField] === grid.value) {
450
- grid.selectedRowIndex = i;
451
- break;
452
- }
453
- i++;
454
- }
455
- }
456
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
457
- getGridMaxHeight() {
458
- const grid = this;
459
- return grid.frozenHeader ? grid.children && grid.children.length > 0 || grid.parents && grid.parents.length > 0 ? '40vh' : '80vh' : '';
460
- }
461
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
462
- async canLeaveRow(rowIndex) {
463
- const grid = this;
464
- let res;
465
-
466
- return (!grid.allowEdit || !grid.isEditing()) && !grid.isDisabled();
467
-
468
- const row = grid.rows[rowIndex];
469
- await grid.saveRow({ row: row, changedRow: grid.changedRow }).then(
470
- () => {
471
- grid.setEditing(false);
472
- Object.assign(row, grid.changedRow);
473
- delete grid.changedRow;
474
- grid.refreshState();
475
- res = true;
476
- }
477
- ).catch((message) => {
478
- Object.assign(grid.changedRow, row);
479
- grid.refreshState();
480
- res = false;
481
- alert(message || 'Error!');
482
- });
483
-
484
- return res;
485
- }
486
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
487
- keyCellAdd(selected) {
488
- const grid = this;
489
- return selected ? '1' : grid.stateind;
490
- }
491
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
492
- isRowChanged(row, secondRow) {
493
- const grid = this;
494
- secondRow = secondRow || grid.changedRow;
495
-
496
- if (!secondRow) return false;
497
-
498
- let res = false;
499
- for (let col of grid.columns) {
500
- if (secondRow[col.name] !== row[col.name]) return true;
501
- }
502
-
503
- return res;
504
- }
505
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
506
- getNewRow() {
507
- const grid = this;
508
-
509
- return new Promise(function (resolve, reject) {
510
- const newRow = {};
511
- for (let col of grid.columns) {
512
- newRow[col.name] = '';
513
- }
514
- newRow[grid.keyField] = -1;
515
- resolve(newRow);
516
- });
517
- }
518
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
519
- saveRow(e) {
520
- const grid = this;
521
-
522
- if (!grid.isRowChanged(e.row)) return new Promise(function (resolve) { resolve(true); });
523
-
524
- return new Promise(function (resolve, reject) {
525
- e.row = e.changedRow;
526
- resolve(true);
527
- });
528
- }
529
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
530
- deleteRow(e) {
531
- const grid = this;
532
- e.row = e.row || grid.selectedRow();
533
-
534
- return new Promise(function (resolve, reject) {
535
- grid.rows = grid.rows.filter(item => item != e.row);
536
- resolve(true);
537
- });
538
- }
539
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
540
- getGridSettingsList() {
541
- const res = super.getGridSettingsList();
542
-
543
- const grid = this;
544
-
545
- res.push({ id: 4, text: grid.translate('Adjust column visibility', 'grid-menu') });
546
-
547
- if (!grid.exportDisabled) {
548
- res.push({ id: 5, text: grid.translate('Export to CSV', 'grid-menu') });
549
- }
550
-
551
- return res;
552
- }
553
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
554
- onSettingsItemClick(itemId) {
555
- super.onSettingsItemClick(itemId);
556
- const grid = this;
557
-
558
- switch (String(itemId)) {
559
- case '4':
560
- grid.showColumnsSettings();
561
- grid.refreshState();
562
- break;
563
- case '5':
564
- grid.exportToCSV();
565
- grid.refreshState();
566
- break;
567
- default:
568
- }
569
- }
570
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
571
- applyColumnsVisibility() {
572
- const grid = this;
573
- for (let col of grid.columns) {
574
- col.visible = col._newVisible;
575
- }
576
- }
577
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
578
- showColumnsSettings() {
579
- const grid = this;
580
- grid.popupIsShowing = true;
581
- grid.columnsSettingsIsShowing = true;
582
- grid.popupTitle = grid.translate('Adjust column visibility');
583
-
584
- grid._visibleColumnsCount = 0;
585
- for (let col of grid.columns) {
586
- col._newVisible = col.visible;
587
- if (col._newVisible != false) grid._visibleColumnsCount++;
588
- }
589
-
590
- grid._popupButtons = [
591
- {
592
- title: grid.translate('OK'),
593
- onClick: (e) => {
594
- grid.applyColumnsVisibility();
595
- grid.columnsSettingsIsShowing = false;
596
- grid.onClosePopup(e);
597
- grid.refreshState();
598
- }
599
- },
600
- {
601
- title: grid.translate('Cancel'),
602
- onClick: (e) => {
603
- grid.columnsSettingsIsShowing = false;
604
- grid.onClosePopup(e);
605
- grid.refreshState();
606
- }
607
- },
608
- ];
609
- }
610
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
611
- hideAllColumns(preview) {
612
- const grid = this;
613
- let first = true;
614
- for (let col of grid.columns) {
615
- if (col._newVisible == false || !preview && col.visible == false) continue;
616
-
617
- if (first) {
618
- first = false;
619
- continue;
620
- }
621
-
622
- if (preview) {
623
- col._newVisible = false;
624
- grid._visibleColumnsCount--;
625
- }
626
- else {
627
- col.visible = false;
628
- }
629
- }
630
- }
631
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
632
- showAllColumns(preview) {
633
- const grid = this;
634
- for (let col of grid.columns) {
635
- if (col._newVisible != false || !preview && col.visible != false) continue;
636
-
637
- if (preview) {
638
- col._newVisible = true;
639
- grid._visibleColumnsCount++;
640
- }
641
- else {
642
- col.visible = true;
643
- }
644
- }
645
- }
646
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
647
- renderColumnsSettings() {
648
- const grid = this;
649
- return (
650
- <div className='grid-columns-settings-div'>
651
- <div>
652
- <ul className='dropdown-ul grid-columns-settings-div-ul'>
653
- <li className="dropdown-item" onClick={(e) => { grid.hideAllColumns(true); grid.refreshState(); }}>
654
- <div className="dropdown-item-div">
655
- <span className='grid-columns-settings-label'>{grid.translate('Visible columns')}</span>
656
- {Images.images.last()}
657
- </div>
658
- </li>
659
- {
660
- grid.columns.map((column) => {
661
- if (column._newVisible == false) return <></>;
662
-
663
- return (
664
- <li className="dropdown-item" onClick={(e) => { if (grid._visibleColumnsCount > 1) { column._newVisible = false; grid._visibleColumnsCount--; grid.refreshState(); } }}>
665
- <div className="dropdown-item-div">
666
- <span>{column.title}</span>
667
- {Images.images.next()}
668
- </div>
669
- </li>
670
- );
671
- })
672
- }
673
- </ul>
674
- </div>
675
- <div></div>
676
- <div>
677
- <ul className='dropdown-ul grid-columns-settings-div-ul'>
678
- <li className="dropdown-item" onClick={(e) => { grid.showAllColumns(true); grid.refreshState(); }}>
679
- <div className="dropdown-item-div">
680
- {Images.images.first()}
681
- <span className='grid-columns-settings-label'>{grid.translate('Invisible columns')}</span>
682
- </div>
683
- </li>
684
- {
685
- grid.columns.map((column) => {
686
- if (column._newVisible != false) return <></>;
687
-
688
- return (
689
- <li className="dropdown-item" onClick={(e) => { column._newVisible = true; grid._visibleColumnsCount++; grid.refreshState(); }}>
690
- <div className="dropdown-item-div">
691
- {Images.images.prev()}
692
- <span>{column.title}</span>
693
- </div>
694
- </li>
695
- );
696
- })
697
- }
698
- </ul>
699
- </div>
700
- </div>
701
- );
702
- }
703
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
704
- exportToCSV(filename, delimeter) {
705
- const grid = this;
706
-
707
- if (filename == null || filename == '') {
708
- const date = new Date();
709
- filename = `exportCSV_${date.getDate()}_${date.getMonth()}_${date.getFullYear()}_${date.getTime()}_`;
710
- };
711
-
712
- delimeter = delimeter || ';';
713
-
714
- let titles = [];
715
- for (let col of grid.columns) {
716
- if (col.visible == false) continue;
717
- titles.push(col.title || col.name);
718
- }
719
-
720
- // 1. Преобразование данных в CSV строку
721
- const csvContent = "\uFEFF" + // Добавляем BOM для корректного отображения кириллицы в Excel
722
- [
723
- titles.join(delimeter), // Заголовки
724
- ...grid.rows.map(item => {
725
-
726
- let values = [];
727
- for (let col of grid.columns) {
728
- if (col.visible == false) continue;
729
- values.push(item[col.name]);
730
- }
731
- return values.join(delimeter);
732
-
733
- //return Object.values(item).join(delimeter);
734
- }) // Строки данных
735
- ].join("\n");
736
-
737
- // 2. Создание Blob
738
- const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
739
-
740
- // 3. Создание ссылки и скачивание
741
- const link = document.createElement("a");
742
- if (link.download !== undefined) {
743
- const url = URL.createObjectURL(blob);
744
- link.setAttribute("href", url);
745
- link.setAttribute("download", filename);
746
- link.style.visibility = 'hidden';
747
- document.body.appendChild(link);
748
- link.click();
749
- document.body.removeChild(link);
750
- }
751
- }
752
- // -------------------------------------------------------------------------------------------------------------------------------------------------------------
753
- }