@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.
- package/components/DataGrid/DataGrid.js +1 -7
- package/components/DataGrid/contexts/DataGridContext/index.js +275 -56
- package/components/DataGrid/contexts/DataGridContext/types.d.ts +23 -24
- package/components/DataGrid/index.d.ts +4 -5
- package/components/DataGrid/types.d.ts +6 -30
- package/components/mui_extended/DateTimePicker/DateTimePicker.styles.js +138 -128
- package/hooks/useDataGridPersistence/constants.d.ts +0 -2
- package/hooks/useDataGridPersistence/constants.js +2 -6
- package/hooks/useDataGridPersistence/helpers.d.ts +1 -5
- package/hooks/useDataGridPersistence/helpers.js +1 -8
- package/hooks/useDataGridPersistence/useDataGridPersistence.d.ts +3 -11
- package/hooks/useDataGridPersistence/useDataGridPersistence.js +7 -17
- package/package.json +1 -1
- package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.d.ts +0 -19
- package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.js +0 -6
- package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.test.d.ts +0 -1
- package/components/DataGrid/helpers/getAllViewModes/index.d.ts +0 -1
- package/components/DataGrid/helpers/getAllViewModes/index.js +0 -1
- package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.d.ts +0 -47
- package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.js +0 -32
- package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.test.d.ts +0 -1
- package/components/DataGrid/helpers/getColumnsWidth/index.d.ts +0 -1
- package/components/DataGrid/helpers/getColumnsWidth/index.js +0 -1
- package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.d.ts +0 -24
- package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.js +0 -12
- package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.test.d.ts +0 -1
- package/components/DataGrid/helpers/getIndexRowHeightVariant/index.d.ts +0 -1
- package/components/DataGrid/helpers/getIndexRowHeightVariant/index.js +0 -1
- package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.d.ts +0 -48
- package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.js +0 -35
- package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.test.d.ts +0 -1
- package/components/DataGrid/helpers/getInitialColumnsConfig/index.d.ts +0 -1
- package/components/DataGrid/helpers/getInitialColumnsConfig/index.js +0 -1
- package/components/DataGrid/helpers/getViewMode/getViewMode.d.ts +0 -41
- package/components/DataGrid/helpers/getViewMode/getViewMode.js +0 -19
- package/components/DataGrid/helpers/getViewMode/getViewMode.test.d.ts +0 -1
- package/components/DataGrid/helpers/getViewMode/index.d.ts +0 -1
- package/components/DataGrid/helpers/getViewMode/index.js +0 -1
- package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.d.ts +0 -28
- package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.js +0 -22
- package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.test.d.ts +0 -1
- package/components/DataGrid/helpers/getViewSpecificConfig/index.d.ts +0 -1
- package/components/DataGrid/helpers/getViewSpecificConfig/index.js +0 -1
- package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.d.ts +0 -24
- package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.js +0 -9
- package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.test.d.ts +0 -1
- package/components/DataGrid/helpers/getViewSuffix/index.d.ts +0 -1
- package/components/DataGrid/helpers/getViewSuffix/index.js +0 -1
- package/components/DataGrid/helpers/index.d.ts +0 -13
- package/components/DataGrid/helpers/index.js +0 -1
- package/components/DataGrid/helpers/loadViewConfig/index.d.ts +0 -1
- package/components/DataGrid/helpers/loadViewConfig/index.js +0 -1
- package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.d.ts +0 -23
- package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.js +0 -12
- package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.test.d.ts +0 -1
- package/components/DataGrid/helpers/saveColumnsWidth/index.d.ts +0 -1
- package/components/DataGrid/helpers/saveColumnsWidth/index.js +0 -1
- package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.d.ts +0 -52
- package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.js +0 -18
- package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.test.d.ts +0 -1
- package/components/DataGrid/helpers/saveViewConfig/index.d.ts +0 -1
- package/components/DataGrid/helpers/saveViewConfig/index.js +0 -1
- package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.d.ts +0 -35
- package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.js +0 -15
- package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.test.d.ts +0 -1
- package/components/DataGrid/helpers/saveViewMode/index.d.ts +0 -1
- package/components/DataGrid/helpers/saveViewMode/index.js +0 -1
- package/components/DataGrid/helpers/saveViewMode/saveViewMode.d.ts +0 -33
- package/components/DataGrid/helpers/saveViewMode/saveViewMode.js +0 -13
- package/components/DataGrid/helpers/saveViewMode/saveViewMode.test.d.ts +0 -1
- package/components/DataGrid/hooks/index.d.ts +0 -6
- package/components/DataGrid/hooks/index.js +0 -1
- package/components/DataGrid/hooks/useChangeColumnsConfig/index.d.ts +0 -1
- package/components/DataGrid/hooks/useChangeColumnsConfig/index.js +0 -1
- package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.d.ts +0 -9
- package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.js +0 -27
- package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.test.d.ts +0 -1
- package/components/DataGrid/hooks/useChangeColumnsOrder/index.d.ts +0 -1
- package/components/DataGrid/hooks/useChangeColumnsOrder/index.js +0 -1
- package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.d.ts +0 -10
- package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.js +0 -34
- package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.test.d.ts +0 -1
- package/components/DataGrid/hooks/useColumnsWidth/index.d.ts +0 -1
- package/components/DataGrid/hooks/useColumnsWidth/index.js +0 -1
- package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.d.ts +0 -11
- package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.js +0 -29
- package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.test.d.ts +0 -1
- package/components/DataGrid/hooks/useRowHeight/index.d.ts +0 -1
- package/components/DataGrid/hooks/useRowHeight/index.js +0 -1
- package/components/DataGrid/hooks/useRowHeight/useRowHeight.d.ts +0 -28
- package/components/DataGrid/hooks/useRowHeight/useRowHeight.js +0 -51
- package/components/DataGrid/hooks/useRowHeight/useRowHeight.test.d.ts +0 -1
- package/components/DataGrid/hooks/useViewConfig/index.d.ts +0 -1
- package/components/DataGrid/hooks/useViewConfig/index.js +0 -1
- package/components/DataGrid/hooks/useViewConfig/useViewConfig.d.ts +0 -9
- package/components/DataGrid/hooks/useViewConfig/useViewConfig.js +0 -30
- package/components/DataGrid/hooks/useViewConfig/useViewConfig.test.d.ts +0 -1
- package/components/DataGrid/hooks/useViewMode/index.d.ts +0 -1
- package/components/DataGrid/hooks/useViewMode/index.js +0 -1
- package/components/DataGrid/hooks/useViewMode/useViewMode.d.ts +0 -31
- package/components/DataGrid/hooks/useViewMode/useViewMode.js +0 -44
- package/components/DataGrid/hooks/useViewMode/useViewMode.test.d.ts +0 -1
- package/components/DataGrid/types.helpers.d.ts +0 -55
- package/components/DataGrid/types.helpers.js +0 -1
- 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 {
|
|
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
|
|
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,
|
|
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
|
-
|
|
329
|
+
defaultUserColumns?.columnsConfig,
|
|
165
330
|
{ frozen: false },
|
|
166
331
|
{ originalFrozen: false }
|
|
167
332
|
)
|
|
168
333
|
);
|
|
169
334
|
const finalCardsConfig = (() => {
|
|
170
|
-
if (
|
|
171
|
-
return
|
|
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
|
-
}, [
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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
|
|
4
|
-
export type { RowKey,
|
|
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
|
|
9
|
-
export { DATAGRID_SEMANTIC_WIDTHS, DATAGRID_ROW_HEADER_HEIGHTS, DATAGRID_ROW_HEIGHTS
|
|
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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
/**
|