@m4l/components 9.3.41-JT04122025.beta.3 → 9.3.43-BE20251205-beta.1

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 (105) hide show
  1. package/components/DataGrid/DataGrid.js +1 -7
  2. package/components/DataGrid/contexts/DataGridContext/index.js +275 -56
  3. package/components/DataGrid/contexts/DataGridContext/types.d.ts +23 -24
  4. package/components/DataGrid/index.d.ts +4 -5
  5. package/components/DataGrid/types.d.ts +6 -30
  6. package/components/mui_extended/DateTimePicker/DateTimePicker.styles.js +138 -128
  7. package/hooks/useDataGridPersistence/constants.d.ts +0 -2
  8. package/hooks/useDataGridPersistence/constants.js +2 -6
  9. package/hooks/useDataGridPersistence/helpers.d.ts +1 -5
  10. package/hooks/useDataGridPersistence/helpers.js +1 -8
  11. package/hooks/useDataGridPersistence/useDataGridPersistence.d.ts +3 -11
  12. package/hooks/useDataGridPersistence/useDataGridPersistence.js +7 -17
  13. package/package.json +1 -1
  14. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.d.ts +0 -19
  15. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.js +0 -6
  16. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.test.d.ts +0 -1
  17. package/components/DataGrid/helpers/getAllViewModes/index.d.ts +0 -1
  18. package/components/DataGrid/helpers/getAllViewModes/index.js +0 -1
  19. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.d.ts +0 -47
  20. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.js +0 -32
  21. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.test.d.ts +0 -1
  22. package/components/DataGrid/helpers/getColumnsWidth/index.d.ts +0 -1
  23. package/components/DataGrid/helpers/getColumnsWidth/index.js +0 -1
  24. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.d.ts +0 -24
  25. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.js +0 -12
  26. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.test.d.ts +0 -1
  27. package/components/DataGrid/helpers/getIndexRowHeightVariant/index.d.ts +0 -1
  28. package/components/DataGrid/helpers/getIndexRowHeightVariant/index.js +0 -1
  29. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.d.ts +0 -48
  30. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.js +0 -35
  31. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.test.d.ts +0 -1
  32. package/components/DataGrid/helpers/getInitialColumnsConfig/index.d.ts +0 -1
  33. package/components/DataGrid/helpers/getInitialColumnsConfig/index.js +0 -1
  34. package/components/DataGrid/helpers/getViewMode/getViewMode.d.ts +0 -41
  35. package/components/DataGrid/helpers/getViewMode/getViewMode.js +0 -19
  36. package/components/DataGrid/helpers/getViewMode/getViewMode.test.d.ts +0 -1
  37. package/components/DataGrid/helpers/getViewMode/index.d.ts +0 -1
  38. package/components/DataGrid/helpers/getViewMode/index.js +0 -1
  39. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.d.ts +0 -28
  40. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.js +0 -22
  41. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.test.d.ts +0 -1
  42. package/components/DataGrid/helpers/getViewSpecificConfig/index.d.ts +0 -1
  43. package/components/DataGrid/helpers/getViewSpecificConfig/index.js +0 -1
  44. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.d.ts +0 -24
  45. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.js +0 -9
  46. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.test.d.ts +0 -1
  47. package/components/DataGrid/helpers/getViewSuffix/index.d.ts +0 -1
  48. package/components/DataGrid/helpers/getViewSuffix/index.js +0 -1
  49. package/components/DataGrid/helpers/index.d.ts +0 -13
  50. package/components/DataGrid/helpers/index.js +0 -1
  51. package/components/DataGrid/helpers/loadViewConfig/index.d.ts +0 -1
  52. package/components/DataGrid/helpers/loadViewConfig/index.js +0 -1
  53. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.d.ts +0 -23
  54. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.js +0 -12
  55. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.test.d.ts +0 -1
  56. package/components/DataGrid/helpers/saveColumnsWidth/index.d.ts +0 -1
  57. package/components/DataGrid/helpers/saveColumnsWidth/index.js +0 -1
  58. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.d.ts +0 -52
  59. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.js +0 -18
  60. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.test.d.ts +0 -1
  61. package/components/DataGrid/helpers/saveViewConfig/index.d.ts +0 -1
  62. package/components/DataGrid/helpers/saveViewConfig/index.js +0 -1
  63. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.d.ts +0 -35
  64. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.js +0 -15
  65. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.test.d.ts +0 -1
  66. package/components/DataGrid/helpers/saveViewMode/index.d.ts +0 -1
  67. package/components/DataGrid/helpers/saveViewMode/index.js +0 -1
  68. package/components/DataGrid/helpers/saveViewMode/saveViewMode.d.ts +0 -33
  69. package/components/DataGrid/helpers/saveViewMode/saveViewMode.js +0 -13
  70. package/components/DataGrid/helpers/saveViewMode/saveViewMode.test.d.ts +0 -1
  71. package/components/DataGrid/hooks/index.d.ts +0 -6
  72. package/components/DataGrid/hooks/index.js +0 -1
  73. package/components/DataGrid/hooks/useChangeColumnsConfig/index.d.ts +0 -1
  74. package/components/DataGrid/hooks/useChangeColumnsConfig/index.js +0 -1
  75. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.d.ts +0 -9
  76. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.js +0 -27
  77. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.test.d.ts +0 -1
  78. package/components/DataGrid/hooks/useChangeColumnsOrder/index.d.ts +0 -1
  79. package/components/DataGrid/hooks/useChangeColumnsOrder/index.js +0 -1
  80. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.d.ts +0 -10
  81. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.js +0 -34
  82. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.test.d.ts +0 -1
  83. package/components/DataGrid/hooks/useColumnsWidth/index.d.ts +0 -1
  84. package/components/DataGrid/hooks/useColumnsWidth/index.js +0 -1
  85. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.d.ts +0 -11
  86. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.js +0 -29
  87. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.test.d.ts +0 -1
  88. package/components/DataGrid/hooks/useRowHeight/index.d.ts +0 -1
  89. package/components/DataGrid/hooks/useRowHeight/index.js +0 -1
  90. package/components/DataGrid/hooks/useRowHeight/useRowHeight.d.ts +0 -28
  91. package/components/DataGrid/hooks/useRowHeight/useRowHeight.js +0 -51
  92. package/components/DataGrid/hooks/useRowHeight/useRowHeight.test.d.ts +0 -1
  93. package/components/DataGrid/hooks/useViewConfig/index.d.ts +0 -1
  94. package/components/DataGrid/hooks/useViewConfig/index.js +0 -1
  95. package/components/DataGrid/hooks/useViewConfig/useViewConfig.d.ts +0 -9
  96. package/components/DataGrid/hooks/useViewConfig/useViewConfig.js +0 -30
  97. package/components/DataGrid/hooks/useViewConfig/useViewConfig.test.d.ts +0 -1
  98. package/components/DataGrid/hooks/useViewMode/index.d.ts +0 -1
  99. package/components/DataGrid/hooks/useViewMode/index.js +0 -1
  100. package/components/DataGrid/hooks/useViewMode/useViewMode.d.ts +0 -31
  101. package/components/DataGrid/hooks/useViewMode/useViewMode.js +0 -44
  102. package/components/DataGrid/hooks/useViewMode/useViewMode.test.d.ts +0 -1
  103. package/components/DataGrid/types.helpers.d.ts +0 -55
  104. package/components/DataGrid/types.helpers.js +0 -1
  105. package/components/DataGrid/types.hooks.d.ts +0 -81
@@ -34,12 +34,8 @@ function DataGrid(props) {
34
34
  dataTestId = "",
35
35
  customHeader: CustomHeader,
36
36
  visibleCustomHeader = true,
37
- defaultConfig,
38
- onChangeConfig,
39
37
  defaultUserColumns,
40
- // deprecated
41
38
  onChangeUserColumns,
42
- // deprecated
43
39
  size,
44
40
  externalSortSettings,
45
41
  externalFilterSettings,
@@ -95,10 +91,8 @@ function DataGrid(props) {
95
91
  checkedRowsMultiple,
96
92
  rowKeyGetter,
97
93
  rows,
98
- defaultConfig,
99
- onChangeConfig,
100
- defaultUserColumns,
101
94
  onChangeUserColumns,
95
+ defaultUserColumns,
102
96
  size: currentSize,
103
97
  externalSortSettings,
104
98
  externalFilterSettings,
@@ -1,33 +1,152 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { useState, useEffect, useMemo, createContext } from "react";
3
- import { useFirstRender } from "@m4l/graphics";
2
+ import { useState, useCallback, useEffect, useMemo, createContext } from "react";
3
+ import { c as castMapColumnsWidthToRecord } from "../../helpers/castMapColumnsWidthToRecord.js";
4
+ import { useFirstRender, useIsMobile } from "@m4l/graphics";
4
5
  import { g as getComponentClasses } from "../../../../utils/getComponentSlotRoot.js";
5
6
  import { a as DATAGRID_ROW_HEIGHTS, b as DATAGRID_ROW_HEADER_HEIGHTS, D as DATAGRID_PREFIX_NAME } from "../../constants.js";
6
7
  import { C as ControlNavigateSlots, a as ColumnsConfigSlots, T as TextEditorSlots, b as TableSlots, R as RowsCountSlots, A as ActionsSlots, D as DataGridSlots } from "../../slots/DataGridEnum.js";
7
8
  import { deepEqual } from "fast-equals";
8
- import { u as useViewMode } from "../../hooks/useViewMode/useViewMode.js";
9
- import { u as useRowHeight } from "../../hooks/useRowHeight/useRowHeight.js";
10
- import { u as useColumnsWidth } from "../../hooks/useColumnsWidth/useColumnsWidth.js";
11
- import { u as useViewConfig } from "../../hooks/useViewConfig/useViewConfig.js";
12
- import { u as useChangeColumnsConfig } from "../../hooks/useChangeColumnsConfig/useChangeColumnsConfig.js";
13
- import { u as useChangeColumnsOrder } from "../../hooks/useChangeColumnsOrder/useChangeColumnsOrder.js";
14
- import { g as getColumnsWidth } from "../../helpers/getColumnsWidth/getColumnsWidth.js";
15
- import { g as getInitialColumnsConfig } from "../../helpers/getInitialColumnsConfig/getInitialColumnsConfig.js";
16
- import { g as getAllViewModes } from "../../helpers/getAllViewModes/getAllViewModes.js";
17
- import { g as getViewSpecificConfig } from "../../helpers/getViewSpecificConfig/getViewSpecificConfig.js";
18
- import { g as getViewMode } from "../../helpers/getViewMode/getViewMode.js";
19
9
  const DataGridContext = createContext(null);
10
+ function getColumnsWidth(id, columns, defaultUserColumns) {
11
+ const newMap = /* @__PURE__ */ new Map();
12
+ let storeColumnsWidth;
13
+ try {
14
+ const item = window.localStorage.getItem(`${id}_columns_width`);
15
+ storeColumnsWidth = item !== null ? new Map(JSON.parse(item)) : /* @__PURE__ */ new Map();
16
+ } catch (_e) {
17
+ storeColumnsWidth = /* @__PURE__ */ new Map();
18
+ }
19
+ for (let i = 0; i < columns.length; i++) {
20
+ let width;
21
+ if (defaultUserColumns) {
22
+ try {
23
+ width = defaultUserColumns.columnsWidths[columns[i].key];
24
+ } catch (_e) {
25
+ }
26
+ }
27
+ if (width === void 0) {
28
+ const storeWidth = storeColumnsWidth.get(columns[i].key);
29
+ if (typeof storeWidth === "number") {
30
+ width = storeWidth;
31
+ }
32
+ }
33
+ if (width !== void 0) {
34
+ newMap.set(columns[i].key, width);
35
+ }
36
+ }
37
+ return newMap;
38
+ }
39
+ function saveColumnsWidth(id, storeColumnsWidth, onChangeUserColumns) {
40
+ if (onChangeUserColumns) {
41
+ const columnsWidthObject = castMapColumnsWidthToRecord(storeColumnsWidth);
42
+ onChangeUserColumns({
43
+ reason: "columnsWidths",
44
+ userConfig: columnsWidthObject
45
+ });
46
+ return;
47
+ }
48
+ localStorage.setItem(
49
+ `${id}_columns_width`,
50
+ JSON.stringify([...storeColumnsWidth])
51
+ );
52
+ }
53
+ const getAllViewModes = () => {
54
+ return ["table", "cards"];
55
+ };
56
+ const getViewSpecificConfig = (viewMode) => {
57
+ const configs = {
58
+ table: {
59
+ defaults: { frozen: false },
60
+ originalDefaults: { originalFrozen: false },
61
+ dynamicOriginalProperty: (item) => ({
62
+ originalFrozen: item?.frozen ?? false
63
+ })
64
+ },
65
+ cards: {
66
+ defaults: { showTitle: true },
67
+ originalDefaults: { originalShowTitle: true },
68
+ dynamicOriginalProperty: (item) => ({
69
+ originalShowTitle: item?.showTitle ?? true
70
+ })
71
+ }
72
+ };
73
+ return configs[viewMode] || configs.table;
74
+ };
75
+ const getViewSuffix = (viewMode) => {
76
+ if (viewMode === "table") {
77
+ return "";
78
+ }
79
+ return `_${viewMode}`;
80
+ };
81
+ function getInitialColumnsConfig(id, columns, viewMode, defaultUserConfig, viewSpecificDefaults, originalViewSpecificDefaults) {
82
+ let columnsConfig;
83
+ if (defaultUserConfig) {
84
+ columnsConfig = defaultUserConfig;
85
+ } else {
86
+ columnsConfig = loadViewConfig(
87
+ id,
88
+ getViewSuffix(viewMode)
89
+ ) || [];
90
+ }
91
+ return columns.map((column, index) => {
92
+ const existingConfig = columnsConfig.find((c) => c.key === column.key);
93
+ const columnConfigIndex = existingConfig ? columnsConfig.indexOf(existingConfig) : -1;
94
+ const baseConfig = {
95
+ key: column.key,
96
+ name: typeof column.name === "string" ? column.name : String(column.name),
97
+ hidden: column.hidden === void 0 ? false : column.hidden,
98
+ index: columnConfigIndex > -1 ? columnConfigIndex : index,
99
+ visible: existingConfig?.visible !== void 0 ? existingConfig.visible : column.visible === void 0 ? true : column.visible,
100
+ originalIndex: index,
101
+ originalVisible: column.visible === void 0 ? true : column.visible
102
+ };
103
+ return {
104
+ ...baseConfig,
105
+ ...viewSpecificDefaults,
106
+ ...originalViewSpecificDefaults,
107
+ ...existingConfig || {}
108
+ };
109
+ }).sort((a, b) => a.index - b.index);
110
+ }
111
+ function saveViewConfig(id, viewSuffix, config, onChangeCallback) {
112
+ if (onChangeCallback) {
113
+ const reason = viewSuffix === "" ? "columnsConfig" : `columnsConfig${viewSuffix.replace("_", "")}`;
114
+ onChangeCallback({
115
+ reason,
116
+ userConfig: config
117
+ });
118
+ return;
119
+ }
120
+ const storageKey = viewSuffix === "" ? `${id}_columns_config` : `${id}_columns_config${viewSuffix}`;
121
+ localStorage.setItem(storageKey, JSON.stringify(config));
122
+ }
123
+ function loadViewConfig(id, viewSuffix) {
124
+ try {
125
+ const storageKey = viewSuffix === "" ? `${id}_columns_config` : `${id}_columns_config${viewSuffix}`;
126
+ const stored = localStorage.getItem(storageKey);
127
+ return stored ? JSON.parse(stored) : null;
128
+ } catch (_e) {
129
+ return null;
130
+ }
131
+ }
132
+ function saveViewMode(id, viewMode) {
133
+ localStorage.setItem(`${id}_view_mode`, viewMode);
134
+ }
135
+ function getIndexRowHeightVariant(variant) {
136
+ if (variant === "compact") {
137
+ return 0;
138
+ }
139
+ if (variant === "standard") {
140
+ return 1;
141
+ }
142
+ return 2;
143
+ }
20
144
  function DataGridProvider(props) {
21
145
  const {
22
146
  id,
23
147
  children,
24
148
  columns,
25
- defaultConfig,
26
- onChangeConfig,
27
149
  defaultUserColumns,
28
- // deprecated
29
- onChangeUserColumns,
30
- // deprecated
31
150
  rows,
32
151
  rowsCount,
33
152
  rowActionsGetter,
@@ -38,6 +157,7 @@ function DataGridProvider(props) {
38
157
  onCheckedRowsChange,
39
158
  checkedRowsMultiple,
40
159
  rowKeyGetter,
160
+ onChangeUserColumns,
41
161
  externalSortSettings: sortSettings,
42
162
  externalFilterSettings: filterSettings,
43
163
  size,
@@ -46,35 +166,8 @@ function DataGridProvider(props) {
46
166
  defaultViewMode,
47
167
  cardsViewConfig
48
168
  } = props;
49
- const resolvedDefaultConfig = defaultConfig ?? defaultUserColumns;
50
- const resolvedOnChangeConfig = onChangeConfig ?? onChangeUserColumns;
51
169
  const isFirstRender = useFirstRender([columns, id]);
52
- const { viewModeState, setViewModeState, handleViewModeChange } = useViewMode({
53
- id,
54
- viewMode,
55
- defaultViewMode,
56
- onViewModeChange,
57
- onChangeConfig: resolvedOnChangeConfig
58
- });
59
- const { currentRowHeightVariant, setRowHeightVariant } = useRowHeight({
60
- rowHeights,
61
- rowHeaderHeights,
62
- initialRowHeightVariant
63
- });
64
- const { columnsWidths, setColumnsWidths, onChangeColumnWidth } = useColumnsWidth({
65
- id,
66
- onChangeConfig: resolvedOnChangeConfig
67
- });
68
- const { getConfigColumns, updateConfigColumns } = useViewConfig();
69
- const { onChangeColumnsConfig } = useChangeColumnsConfig({
70
- id,
71
- onChangeConfig: resolvedOnChangeConfig,
72
- updateConfigColumns
73
- });
74
- const { onChangeColumnsOrder } = useChangeColumnsOrder({
75
- getConfigColumns,
76
- onChangeColumnsConfig
77
- });
170
+ const isMobile = useIsMobile();
78
171
  const classes = getComponentClasses(DATAGRID_PREFIX_NAME, {
79
172
  ...DataGridSlots,
80
173
  ...ActionsSlots,
@@ -84,8 +177,80 @@ function DataGridProvider(props) {
84
177
  ...ColumnsConfigSlots,
85
178
  ...ControlNavigateSlots
86
179
  });
180
+ const [columnsWidths, setColumnsWidths] = useState(/* @__PURE__ */ new Map());
181
+ const [viewConfig, setViewConfig] = useState(() => ({
182
+ table: [],
183
+ cards: []
184
+ }));
185
+ const getConfigColumns = useCallback(
186
+ (viewModeParam) => {
187
+ return viewConfig[viewModeParam];
188
+ },
189
+ [viewConfig]
190
+ );
191
+ const updateConfigColumns = useCallback(
192
+ (viewModeParam, config) => {
193
+ setViewConfig((prev) => ({
194
+ ...prev,
195
+ [viewModeParam]: config
196
+ }));
197
+ },
198
+ []
199
+ );
87
200
  const [rowsFilterCount, setRowFilterCount] = useState(rowsCount);
88
201
  const [sortColumns, setSortColumns] = useState([]);
202
+ const [viewModeState, setViewModeState] = useState(() => {
203
+ if (viewMode) {
204
+ return viewMode;
205
+ }
206
+ try {
207
+ const savedViewMode = localStorage.getItem(`${id}_view_mode`);
208
+ if (savedViewMode === "cards" || savedViewMode === "table") {
209
+ return savedViewMode;
210
+ }
211
+ } catch (_e) {
212
+ }
213
+ if (defaultViewMode) {
214
+ return defaultViewMode;
215
+ }
216
+ return isMobile ? "cards" : "table";
217
+ });
218
+ const handleViewModeChange = useCallback(
219
+ (newViewMode) => {
220
+ setViewModeState(newViewMode);
221
+ saveViewMode(id, newViewMode);
222
+ onViewModeChange?.(newViewMode);
223
+ },
224
+ [onViewModeChange, id]
225
+ );
226
+ useEffect(() => {
227
+ if (viewMode !== void 0) {
228
+ setViewModeState(viewMode);
229
+ }
230
+ }, [viewMode]);
231
+ const [currentRowHeightVariant, setCurrentRowHeightVariant] = useState(() => {
232
+ if (typeof rowHeights !== typeof rowHeaderHeights) {
233
+ throw new Error("Must be same type rowheights and rowHeaderTypes");
234
+ }
235
+ if (typeof rowHeights === "number" && typeof rowHeaderHeights === "number") {
236
+ return {
237
+ rowHVariant: "compact",
238
+ rowHeight: rowHeights,
239
+ rowHeaderHeight: rowHeaderHeights
240
+ };
241
+ }
242
+ if (typeof rowHeights !== "number" && rowHeights.length !== 3) {
243
+ throw new Error("Must be 3 heights");
244
+ }
245
+ if (typeof rowHeaderHeights !== "number" && rowHeaderHeights.length !== 3) {
246
+ throw new Error("Must be 3 HeaderHeights");
247
+ }
248
+ return {
249
+ rowHVariant: initialRowHeightVariant,
250
+ rowHeight: typeof rowHeights !== "number" ? rowHeights[getIndexRowHeightVariant(initialRowHeightVariant)] : rowHeights,
251
+ rowHeaderHeight: typeof rowHeaderHeights !== "number" ? rowHeaderHeights[getIndexRowHeightVariant(initialRowHeightVariant)] : rowHeaderHeights
252
+ };
253
+ });
89
254
  useEffect(() => {
90
255
  const keys = new Set(columns.map((c) => c.key));
91
256
  if (sortSettings?.sortsColumns) {
@@ -151,24 +316,24 @@ function DataGridProvider(props) {
151
316
  }
152
317
  }, [columns, sortSettings, filterSettings, cardsViewConfig]);
153
318
  const finalRowHeights = useMemo(() => rowHeights, [rowHeights]);
319
+ let timerSaveColumns;
154
320
  useEffect(() => {
155
321
  if (isFirstRender) {
156
- setColumnsWidths(getColumnsWidth(id, columns, resolvedDefaultConfig));
157
- setViewModeState(getViewMode(id, resolvedDefaultConfig, defaultViewMode) ?? "table");
322
+ setColumnsWidths(getColumnsWidth(id, columns, defaultUserColumns));
158
323
  updateConfigColumns(
159
324
  "table",
160
325
  getInitialColumnsConfig(
161
326
  id,
162
327
  columns,
163
328
  "table",
164
- resolvedDefaultConfig?.columnsConfig,
329
+ defaultUserColumns?.columnsConfig,
165
330
  { frozen: false },
166
331
  { originalFrozen: false }
167
332
  )
168
333
  );
169
334
  const finalCardsConfig = (() => {
170
- if (resolvedDefaultConfig?.columnsConfigCards) {
171
- return resolvedDefaultConfig.columnsConfigCards;
335
+ if (defaultUserColumns?.columnsConfigCards) {
336
+ return defaultUserColumns.columnsConfigCards;
172
337
  }
173
338
  if (cardsViewConfig?.columnsConfig) {
174
339
  return cardsViewConfig.columnsConfig.map((colConfig, index) => {
@@ -197,7 +362,7 @@ function DataGridProvider(props) {
197
362
  )
198
363
  );
199
364
  }
200
- }, [resolvedDefaultConfig]);
365
+ }, [defaultUserColumns]);
201
366
  useEffect(() => {
202
367
  if (!isFirstRender) {
203
368
  const updatedConfigs = {
@@ -286,9 +451,65 @@ function DataGridProvider(props) {
286
451
  });
287
452
  }
288
453
  }, [columns, id]);
454
+ const onChangeColumnsConfig = useCallback(
455
+ (viewModeParam, newConfig) => {
456
+ saveViewConfig(
457
+ id,
458
+ getViewSuffix(viewModeParam),
459
+ newConfig,
460
+ onChangeUserColumns
461
+ );
462
+ updateConfigColumns(viewModeParam, newConfig);
463
+ },
464
+ [id, onChangeUserColumns, updateConfigColumns]
465
+ );
466
+ const onChangeColumnsOrder = useCallback(
467
+ (viewModeParam, sourceKey, targetKey) => {
468
+ if (sourceKey === targetKey) {
469
+ return;
470
+ }
471
+ const currentConfig = getConfigColumns(viewModeParam);
472
+ const sourceColumnIndex = currentConfig.findIndex(
473
+ (c) => c.key === sourceKey
474
+ );
475
+ const targetColumnIndex = currentConfig.findIndex(
476
+ (c) => c.key === targetKey
477
+ );
478
+ const reorderedConfig = [...currentConfig];
479
+ reorderedConfig.splice(
480
+ targetColumnIndex,
481
+ 0,
482
+ reorderedConfig.splice(sourceColumnIndex, 1)[0]
483
+ );
484
+ onChangeColumnsConfig(viewModeParam, reorderedConfig);
485
+ },
486
+ [getConfigColumns, onChangeColumnsConfig]
487
+ );
488
+ const onChangeColumnWidth = (columnKey, width) => {
489
+ columnsWidths.set(columnKey, Math.round(width));
490
+ if (timerSaveColumns) {
491
+ clearTimeout(timerSaveColumns);
492
+ }
493
+ timerSaveColumns = setTimeout(() => {
494
+ saveColumnsWidth(id, columnsWidths, onChangeUserColumns);
495
+ }, 500);
496
+ };
289
497
  const setRowFilterCountInternal = (newRowsCount) => {
290
498
  setRowFilterCount(newRowsCount);
291
499
  };
500
+ const setCurrentRowHeightInternal = useCallback(
501
+ (newVariant) => {
502
+ if (typeof rowHeights === "number" || typeof rowHeaderHeights === "number") {
503
+ throw new Error("Only use setCurrentRowHeight with vector rowHeights");
504
+ }
505
+ setCurrentRowHeightVariant({
506
+ rowHVariant: newVariant,
507
+ rowHeight: rowHeights[getIndexRowHeightVariant(newVariant)],
508
+ rowHeaderHeight: rowHeaderHeights[getIndexRowHeightVariant(newVariant)]
509
+ });
510
+ },
511
+ [setCurrentRowHeightVariant, rowHeights, rowHeaderHeights]
512
+ );
292
513
  return /* @__PURE__ */ jsx(
293
514
  DataGridContext.Provider,
294
515
  {
@@ -308,13 +529,11 @@ function DataGridProvider(props) {
308
529
  onChangeColumnWidth,
309
530
  setRowsCount: setRowFilterCountInternal,
310
531
  rowActionsGetter,
311
- setRowHeightVariant,
532
+ setRowHeightVariant: setCurrentRowHeightInternal,
312
533
  onCheckedRowsChange,
313
534
  checkedRowsMultiple,
314
535
  rowKeyGetter,
315
- onChangeConfig: resolvedOnChangeConfig,
316
- onChangeUserColumns: resolvedOnChangeConfig,
317
- // deprecated alias
536
+ onChangeUserColumns,
318
537
  sortColumns,
319
538
  setSortColumns,
320
539
  externalSortSettings: sortSettings,
@@ -1,14 +1,23 @@
1
1
  import { ReactNode } from 'react';
2
- import { RowKey, RowHeightVariants, GridProps, OnChangeConfig } from '../../types';
2
+ import { RowKey, RowHeightVariants, GridProps } from '../../types';
3
3
  import { Maybe } from '@m4l/core';
4
4
  import { ActionsSlots, ColumnsConfigSlots, ControlNavigateSlots, DataGridSlots, RowsCountSlots, TableSlots, TextEditorSlots } from '../../slots/DataGridEnum';
5
5
  import { SortColumn } from 'react-data-grid';
6
- import { IGridConfig, BaseViewConfig } from '../../types.helpers';
6
+ /**
7
+ * Configuración base genérica que puede extenderse con propiedades específicas de cualquier vista
8
+ * USO INTERNO: El sistema usa esto para manejar genéricamente las configuraciones
9
+ */
10
+ export type BaseViewConfig<TViewSpecific = {}> = TViewSpecific & {
11
+ key: string;
12
+ visible: boolean;
13
+ index: number;
14
+ name?: string;
15
+ };
7
16
  /**
8
17
  * Configuración extendida genérica con propiedades originales
9
18
  * USO INTERNO: El contexto usa esto para el estado interno con propiedades de tracking
10
19
  */
11
- export type IViewConfig<TViewSpecific = object, TOriginalViewSpecific = object> = BaseViewConfig<TViewSpecific> & {
20
+ export type IViewConfig<TViewSpecific = {}, TOriginalViewSpecific = {}> = BaseViewConfig<TViewSpecific> & {
12
21
  hidden: boolean;
13
22
  originalIndex: number;
14
23
  originalVisible: boolean;
@@ -53,6 +62,15 @@ export interface IConfigColumnCards extends Omit<IConfigColumn, 'frozen' | 'orig
53
62
  originalShowTitle: boolean;
54
63
  }
55
64
  export type ViewMode = 'table' | 'cards';
65
+ /**
66
+ * Configuración base del Grid (API pública original)
67
+ * USO: Tipo base para defaultUserColumns - mantiene retrocompatibilidad
68
+ * IMPORTANTE: No modificar para mantener retrocompatibilidad con código existente
69
+ */
70
+ export interface IGridConfig {
71
+ columnsConfig: BaseConfigColumn[];
72
+ columnsWidths: Record<RowKey, number>;
73
+ }
56
74
  /**
57
75
  * Configuración extendida del Grid para soportar múltiples vistas
58
76
  * USO: Para nuevas implementaciones que soporten cards y futuras vistas
@@ -60,40 +78,21 @@ export type ViewMode = 'table' | 'cards';
60
78
  */
61
79
  export interface IGridConfigExtended extends IGridConfig {
62
80
  columnsConfigCards?: BaseConfigColumnCards[];
63
- viewMode?: ViewMode;
64
81
  }
65
- export interface DataGridProviderProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> extends Pick<GridProps<TRow, TSummaryRow, TKey>, 'rows' | 'columns' | 'rowActionsGetter' | 'rowHeaderHeights' | 'rowHeights' | 'initialRowHeightVariant' | 'checkedRows' | 'onCheckedRowsChange' | 'checkedRowsMultiple' | 'rowKeyGetter' | 'externalSortSettings' | 'externalFilterSettings' | 'defaultViewMode' | 'cardsViewConfig'> {
82
+ export interface DataGridProviderProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> extends Pick<GridProps<TRow, TSummaryRow, TKey>, 'rows' | 'columns' | 'rowActionsGetter' | 'rowHeaderHeights' | 'rowHeights' | 'initialRowHeightVariant' | 'checkedRows' | 'onCheckedRowsChange' | 'checkedRowsMultiple' | 'rowKeyGetter' | 'onChangeUserColumns' | 'defaultUserColumns' | 'externalSortSettings' | 'externalFilterSettings' | 'defaultViewMode' | 'cardsViewConfig'> {
66
83
  id: number | string;
67
84
  children: ReactNode;
68
85
  rowsCount: number;
69
86
  size: GridProps<any, any, any>['size'];
70
87
  viewMode?: ViewMode;
71
88
  onViewModeChange?: (viewMode: ViewMode) => void;
72
- /** Configuración inicial del DataGrid */
73
- defaultConfig?: IGridConfigExtended;
74
- /** Callback para persistir cambios de configuración */
75
- onChangeConfig?: OnChangeConfig;
76
- /**
77
- * @deprecated Usar `defaultConfig` en su lugar.
78
- */
79
- defaultUserColumns?: IGridConfigExtended;
80
- /**
81
- * @deprecated Usar `onChangeConfig` en su lugar.
82
- */
83
- onChangeUserColumns?: OnChangeConfig;
84
89
  }
85
90
  export type RowHeightState = {
86
91
  rowHVariant: RowHeightVariants;
87
92
  rowHeight: number;
88
93
  rowHeaderHeight: number;
89
94
  };
90
- export interface DataGridContextProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> extends Pick<DataGridProviderProps<TRow, TSummaryRow, TKey>, 'rows' | 'checkedRows' | 'onCheckedRowsChange' | 'checkedRowsMultiple' | 'rowHeights' | 'rowsCount' | 'rowActionsGetter' | 'rowKeyGetter' | 'externalSortSettings' | 'externalFilterSettings' | 'viewMode' | 'onViewModeChange' | 'defaultViewMode' | 'cardsViewConfig'> {
91
- /** Callback para persistir cambios de configuración */
92
- onChangeConfig?: OnChangeConfig;
93
- /**
94
- * @deprecated Usar `onChangeConfig` en su lugar.
95
- */
96
- onChangeUserColumns?: OnChangeConfig;
95
+ export interface DataGridContextProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> extends Pick<DataGridProviderProps<TRow, TSummaryRow, TKey>, 'rows' | 'checkedRows' | 'onCheckedRowsChange' | 'checkedRowsMultiple' | 'rowHeights' | 'rowsCount' | 'rowActionsGetter' | 'rowKeyGetter' | 'onChangeUserColumns' | 'externalSortSettings' | 'externalFilterSettings' | 'viewMode' | 'onViewModeChange' | 'defaultViewMode' | 'cardsViewConfig'> {
97
96
  getConfigColumns: (viewMode: ViewMode) => IViewConfig[];
98
97
  onChangeColumnsConfig: (viewMode: ViewMode, config: IViewConfig[]) => void;
99
98
  onChangeColumnsOrder: (viewMode: ViewMode, sourceKey: string, targetKey: string) => void;
@@ -1,10 +1,9 @@
1
1
  export { DataGrid } from './DataGrid';
2
2
  export * from './formatters';
3
- export type { Column, RenderEditCellProps, RenderCellProps, } from 'react-data-grid';
4
- export type { RowKey, ChangeConfig, ChangeUserColumn, RowActionsGetter, RowKeyGetter, } from './types';
3
+ export type { Column, RenderEditCellProps, RenderCellProps } from 'react-data-grid';
4
+ export type { RowKey, ChangeUserColumn, RowActionsGetter, RowKeyGetter } from './types';
5
5
  export { getDataGridComponentsDictionary } from './dictionary';
6
6
  export { TextEditor, NumberEditor } from './subcomponents/editors/TextEditor';
7
7
  export { getDataGridRowsFromSet } from './utils/getDataGridRowsFromSet';
8
- export type { IGridConfigExtended, BaseConfigColumn, } from './contexts/DataGridContext/types';
9
- export { DATAGRID_SEMANTIC_WIDTHS, DATAGRID_ROW_HEADER_HEIGHTS, DATAGRID_ROW_HEIGHTS, } from './constants';
10
- export * from './types.helpers';
8
+ export type { IGridConfig, IGridConfigExtended, BaseConfigColumn } from './contexts/DataGridContext/types';
9
+ export { DATAGRID_SEMANTIC_WIDTHS, DATAGRID_ROW_HEADER_HEIGHTS, DATAGRID_ROW_HEIGHTS } from './constants';
@@ -61,27 +61,12 @@ export interface ColumnConfig {
61
61
  position?: number;
62
62
  frozen?: Maybe<boolean>;
63
63
  }
64
- type KeyConfig = keyof IGridConfigExtended;
65
- /**
66
- * Tipo que representa un cambio de configuración del DataGrid.
67
- */
68
- export interface ChangeConfig<T extends KeyConfig = KeyConfig> {
64
+ type KeyUserColumns = keyof IGridConfigExtended;
65
+ export interface ChangeUserColumn<T extends KeyUserColumns = KeyUserColumns> {
69
66
  reason: T;
70
67
  userConfig: IGridConfigExtended[T];
71
68
  }
72
- /**
73
- * @deprecated Usar `ChangeConfig` en su lugar. Este tipo será eliminado en futuras versiones.
74
- */
75
- export type ChangeUserColumn = ChangeConfig;
76
- /**
77
- * Callback que se ejecuta cuando cambia cualquier configuración del DataGrid.
78
- * Maneja todas las vistas genéricamente a través de IGridConfigExtended.
79
- */
80
- export type OnChangeConfig = (props: ChangeConfig) => void;
81
- /**
82
- * @deprecated Usar `OnChangeConfig` en su lugar. Este tipo será eliminado en futuras versiones.
83
- */
84
- export type OnChangeUserColumns = OnChangeConfig;
69
+ export type OnChangeUserColumns = (props: ChangeUserColumn) => void;
85
70
  export type SortApplied = {
86
71
  columnKey: string;
87
72
  removable: boolean;
@@ -161,21 +146,12 @@ export interface GridProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> exte
161
146
  checkedRowsMultiple?: boolean;
162
147
  onRowsChange?: Maybe<(rows: TRow[], data: RowsChangeData<TRow, TSummaryRow>) => void>;
163
148
  /**
164
- * Configuración inicial del DataGrid (anchos, orden, visibilidad, viewMode).
165
- * Tiene prioridad sobre localStorage.
166
- */
167
- defaultConfig?: IGridConfigExtended;
168
- /**
169
- * Callback que se ejecuta cuando cambia cualquier configuración del DataGrid.
170
- * @param props - Objeto con `reason` (tipo de cambio) y `userConfig` (nueva configuración)
171
- */
172
- onChangeConfig?: OnChangeConfig;
173
- /**
174
- * @deprecated Usar `defaultConfig` en su lugar. Esta prop será eliminada en futuras versiones.
149
+ * Propiedad opcional que recibe la configuración de las columnas
175
150
  */
176
151
  defaultUserColumns?: IGridConfigExtended;
177
152
  /**
178
- * @deprecated Usar `onChangeConfig` en su lugar. Esta prop será eliminada en futuras versiones.
153
+ * Propiedad que recibe la función que se ejecuta cuando se cambian
154
+ * las configuraciones de las columnas.
179
155
  */
180
156
  onChangeUserColumns?: OnChangeUserColumns;
181
157
  /**