@m4l/components 9.3.34 → 9.3.35-JT27112025.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/@types/export.d.ts +3 -0
- package/@types/types.d.ts +11 -0
- package/components/DataGrid/Datagrid.styles.js +1 -0
- package/components/DataGrid/contexts/DataGridContext/index.js +39 -268
- package/components/DataGrid/contexts/DataGridContext/types.d.ts +3 -20
- package/components/DataGrid/formatters/ColumnImageFormatter/ImageFormatterCell.d.ts +13 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/ImageFormatterCell.js +33 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/constants.d.ts +6 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/constants.js +6 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/formatter.d.ts +8 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/formatter.js +25 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/index.d.ts +3 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/index.js +1 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/tests/ColumnImageFormatter.test.d.ts +1 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/types.d.ts +44 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/types.js +1 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/useColumnImage.d.ts +9 -0
- package/components/DataGrid/formatters/ColumnImageFormatter/useColumnImage.js +22 -0
- package/components/DataGrid/formatters/index.d.ts +1 -0
- package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.d.ts +19 -0
- package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.js +6 -0
- package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.test.d.ts +1 -0
- package/components/DataGrid/helpers/getAllViewModes/index.d.ts +1 -0
- package/components/DataGrid/helpers/getAllViewModes/index.js +1 -0
- package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.d.ts +47 -0
- package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.js +32 -0
- package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.test.d.ts +1 -0
- package/components/DataGrid/helpers/getColumnsWidth/index.d.ts +1 -0
- package/components/DataGrid/helpers/getColumnsWidth/index.js +1 -0
- package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.d.ts +24 -0
- package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.js +12 -0
- package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.test.d.ts +1 -0
- package/components/DataGrid/helpers/getIndexRowHeightVariant/index.d.ts +1 -0
- package/components/DataGrid/helpers/getIndexRowHeightVariant/index.js +1 -0
- package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.d.ts +48 -0
- package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.js +35 -0
- package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.test.d.ts +1 -0
- package/components/DataGrid/helpers/getInitialColumnsConfig/index.d.ts +1 -0
- package/components/DataGrid/helpers/getInitialColumnsConfig/index.js +1 -0
- package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.d.ts +28 -0
- package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.js +22 -0
- package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.test.d.ts +1 -0
- package/components/DataGrid/helpers/getViewSpecificConfig/index.d.ts +1 -0
- package/components/DataGrid/helpers/getViewSpecificConfig/index.js +1 -0
- package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.d.ts +24 -0
- package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.js +9 -0
- package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.test.d.ts +1 -0
- package/components/DataGrid/helpers/getViewSuffix/index.d.ts +1 -0
- package/components/DataGrid/helpers/getViewSuffix/index.js +1 -0
- package/components/DataGrid/helpers/index.d.ts +12 -0
- package/components/DataGrid/helpers/index.js +1 -0
- package/components/DataGrid/helpers/loadViewConfig/index.d.ts +1 -0
- package/components/DataGrid/helpers/loadViewConfig/index.js +1 -0
- package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.d.ts +23 -0
- package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.js +12 -0
- package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.test.d.ts +1 -0
- package/components/DataGrid/helpers/saveColumnsWidth/index.d.ts +1 -0
- package/components/DataGrid/helpers/saveColumnsWidth/index.js +1 -0
- package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.d.ts +52 -0
- package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.js +18 -0
- package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.test.d.ts +1 -0
- package/components/DataGrid/helpers/saveViewConfig/index.d.ts +1 -0
- package/components/DataGrid/helpers/saveViewConfig/index.js +1 -0
- package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.d.ts +35 -0
- package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.js +15 -0
- package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.test.d.ts +1 -0
- package/components/DataGrid/helpers/saveViewMode/index.d.ts +1 -0
- package/components/DataGrid/helpers/saveViewMode/index.js +1 -0
- package/components/DataGrid/helpers/saveViewMode/saveViewMode.d.ts +33 -0
- package/components/DataGrid/helpers/saveViewMode/saveViewMode.js +13 -0
- package/components/DataGrid/helpers/saveViewMode/saveViewMode.test.d.ts +1 -0
- package/components/DataGrid/hooks/index.d.ts +6 -0
- package/components/DataGrid/hooks/index.js +1 -0
- package/components/DataGrid/hooks/useChangeColumnsConfig/index.d.ts +1 -0
- package/components/DataGrid/hooks/useChangeColumnsConfig/index.js +1 -0
- package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.d.ts +9 -0
- package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.js +27 -0
- package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.test.d.ts +1 -0
- package/components/DataGrid/hooks/useChangeColumnsOrder/index.d.ts +1 -0
- package/components/DataGrid/hooks/useChangeColumnsOrder/index.js +1 -0
- package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.d.ts +10 -0
- package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.js +34 -0
- package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.test.d.ts +1 -0
- package/components/DataGrid/hooks/useColumnsWidth/index.d.ts +1 -0
- package/components/DataGrid/hooks/useColumnsWidth/index.js +1 -0
- package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.d.ts +11 -0
- package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.js +29 -0
- package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.test.d.ts +1 -0
- package/components/DataGrid/hooks/useRowHeight/index.d.ts +1 -0
- package/components/DataGrid/hooks/useRowHeight/index.js +1 -0
- package/components/DataGrid/hooks/useRowHeight/useRowHeight.d.ts +28 -0
- package/components/DataGrid/hooks/useRowHeight/useRowHeight.js +51 -0
- package/components/DataGrid/hooks/useRowHeight/useRowHeight.test.d.ts +1 -0
- package/components/DataGrid/hooks/useViewConfig/index.d.ts +1 -0
- package/components/DataGrid/hooks/useViewConfig/index.js +1 -0
- package/components/DataGrid/hooks/useViewConfig/useViewConfig.d.ts +9 -0
- package/components/DataGrid/hooks/useViewConfig/useViewConfig.js +30 -0
- package/components/DataGrid/hooks/useViewConfig/useViewConfig.test.d.ts +1 -0
- package/components/DataGrid/hooks/useViewMode/index.d.ts +1 -0
- package/components/DataGrid/hooks/useViewMode/index.js +1 -0
- package/components/DataGrid/hooks/useViewMode/useViewMode.d.ts +44 -0
- package/components/DataGrid/hooks/useViewMode/useViewMode.js +48 -0
- package/components/DataGrid/hooks/useViewMode/useViewMode.test.d.ts +1 -0
- package/components/DataGrid/index.d.ts +5 -4
- package/components/DataGrid/subcomponents/Cards/helpers/scrollToCardElement.js +2 -2
- package/components/DataGrid/subcomponents/Cards/index.js +16 -3
- package/components/DataGrid/subcomponents/Cards/subcomponents/CardRow/index.js +1 -0
- package/components/DataGrid/subcomponents/Table/index.js +10 -1
- package/components/DataGrid/tests/helpers/types.d.ts +10 -0
- package/components/DataGrid/types.helpers.d.ts +55 -0
- package/components/DataGrid/types.helpers.js +1 -0
- package/components/DataGrid/types.hooks.d.ts +79 -0
- package/components/formatters/ImageFormatter/ImageFormatter.d.ts +10 -0
- package/components/formatters/ImageFormatter/ImageFormatter.js +72 -0
- package/components/formatters/ImageFormatter/ImageFormatter.styles.d.ts +2 -0
- package/components/formatters/ImageFormatter/ImageFormatter.styles.js +42 -0
- package/components/formatters/ImageFormatter/constants.d.ts +5 -0
- package/components/formatters/ImageFormatter/constants.js +10 -0
- package/components/formatters/ImageFormatter/index.d.ts +2 -0
- package/components/formatters/ImageFormatter/index.js +1 -0
- package/components/formatters/ImageFormatter/slots/ImageFormatterEnum.d.ts +5 -0
- package/components/formatters/ImageFormatter/slots/ImageFormatterEnum.js +9 -0
- package/components/formatters/ImageFormatter/slots/ImageFormatterSlots.d.ts +9 -0
- package/components/formatters/ImageFormatter/slots/ImageFormatterSlots.js +23 -0
- package/components/formatters/ImageFormatter/tests/ImageFormatter.test.d.ts +1 -0
- package/components/formatters/ImageFormatter/types.d.ts +51 -0
- package/components/formatters/ImageFormatter/types.js +1 -0
- package/components/formatters/index.d.ts +1 -0
- package/hooks/useDataGridPersistence/constants.d.ts +1 -0
- package/hooks/useDataGridPersistence/constants.js +4 -2
- package/hooks/useDataGridPersistence/useDataGridPersistence.js +5 -2
- package/index.js +68 -62
- package/package.json +1 -1
package/@types/export.d.ts
CHANGED
|
@@ -241,5 +241,8 @@ declare module '@mui/material/styles' {
|
|
|
241
241
|
M4LIconsFormatter?: {
|
|
242
242
|
styleOverrides?: ComponentsOverrides<Theme>['M4LIconsFormatter'];
|
|
243
243
|
};
|
|
244
|
+
M4LImageFormatter?: {
|
|
245
|
+
styleOverrides?: ComponentsOverrides<Theme>['M4LImageFormatter'];
|
|
246
|
+
};
|
|
244
247
|
}
|
|
245
248
|
}
|
package/@types/types.d.ts
CHANGED
|
@@ -304,6 +304,10 @@ import {
|
|
|
304
304
|
IconsFormatterOwnerState,
|
|
305
305
|
IconsFormatterSlotsType,
|
|
306
306
|
} from '../components/formatters/IconsFormatter/types';
|
|
307
|
+
import {
|
|
308
|
+
ImageFormatterOwnerState,
|
|
309
|
+
ImageFormatterSlotsType,
|
|
310
|
+
} from '../components/formatters/ImageFormatter';
|
|
307
311
|
|
|
308
312
|
declare module '@mui/material/styles' {
|
|
309
313
|
// Define the slots in the theme
|
|
@@ -397,6 +401,7 @@ declare module '@mui/material/styles' {
|
|
|
397
401
|
M4LMFIsolationApp: MFIsolationAppSlotsType;
|
|
398
402
|
M4LTagsFormatter: TagsFormatterSlotsType;
|
|
399
403
|
M4LIconsFormatter: IconsFormatterSlotsType;
|
|
404
|
+
M4LImageFormatter: ImageFormatterSlotsType;
|
|
400
405
|
}
|
|
401
406
|
interface ComponentsPropsList {
|
|
402
407
|
// Extend ComponentsProps or ComponentsOwnerState(this extend ComponentProps)
|
|
@@ -489,6 +494,7 @@ declare module '@mui/material/styles' {
|
|
|
489
494
|
M4LMFIsolationApp: Partial<MFIsolationAppOwnerState>;
|
|
490
495
|
M4LTagsFormatter: Partial<TagsFormatterOwnerState>;
|
|
491
496
|
M4LIconsFormatter: Partial<IconsFormatterOwnerState>;
|
|
497
|
+
M4LImageFormatter: Partial<ImageFormatterOwnerState>;
|
|
492
498
|
}
|
|
493
499
|
interface Components {
|
|
494
500
|
M4LDynamicFilter?: {
|
|
@@ -946,5 +952,10 @@ declare module '@mui/material/styles' {
|
|
|
946
952
|
styleOverrides?: ComponentsOverrides<Theme>['M4LIconsFormatter'];
|
|
947
953
|
variants?: ComponentsVariants['M4LIconsFormatter'];
|
|
948
954
|
};
|
|
955
|
+
M4LImageFormatter?: {
|
|
956
|
+
defaultProps?: ComponentsPropsList['M4LImageFormatter'];
|
|
957
|
+
styleOverrides?: ComponentsOverrides<Theme>['M4LImageFormatter'];
|
|
958
|
+
variants?: ComponentsVariants['M4LImageFormatter'];
|
|
959
|
+
};
|
|
949
960
|
}
|
|
950
961
|
}
|
|
@@ -1,146 +1,21 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState,
|
|
3
|
-
import {
|
|
4
|
-
import { useFirstRender, useIsMobile } from "@m4l/graphics";
|
|
2
|
+
import { useState, useEffect, useMemo, createContext } from "react";
|
|
3
|
+
import { useFirstRender } from "@m4l/graphics";
|
|
5
4
|
import { g as getComponentClasses } from "../../../../utils/getComponentSlotRoot.js";
|
|
6
5
|
import { a as DATAGRID_ROW_HEIGHTS, b as DATAGRID_ROW_HEADER_HEIGHTS, D as DATAGRID_PREFIX_NAME } from "../../constants.js";
|
|
7
6
|
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";
|
|
8
7
|
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";
|
|
9
18
|
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
|
-
}
|
|
144
19
|
function DataGridProvider(props) {
|
|
145
20
|
const {
|
|
146
21
|
id,
|
|
@@ -166,7 +41,32 @@ function DataGridProvider(props) {
|
|
|
166
41
|
cardsViewConfig
|
|
167
42
|
} = props;
|
|
168
43
|
const isFirstRender = useFirstRender([columns, id]);
|
|
169
|
-
const
|
|
44
|
+
const { viewModeState, handleViewModeChange } = useViewMode({
|
|
45
|
+
id,
|
|
46
|
+
viewMode,
|
|
47
|
+
defaultViewMode,
|
|
48
|
+
onViewModeChange,
|
|
49
|
+
onChangeUserColumns
|
|
50
|
+
});
|
|
51
|
+
const { currentRowHeightVariant, setRowHeightVariant } = useRowHeight({
|
|
52
|
+
rowHeights,
|
|
53
|
+
rowHeaderHeights,
|
|
54
|
+
initialRowHeightVariant
|
|
55
|
+
});
|
|
56
|
+
const { columnsWidths, setColumnsWidths, onChangeColumnWidth } = useColumnsWidth({
|
|
57
|
+
id,
|
|
58
|
+
onChangeUserColumns
|
|
59
|
+
});
|
|
60
|
+
const { getConfigColumns, updateConfigColumns } = useViewConfig();
|
|
61
|
+
const { onChangeColumnsConfig } = useChangeColumnsConfig({
|
|
62
|
+
id,
|
|
63
|
+
onChangeUserColumns,
|
|
64
|
+
updateConfigColumns
|
|
65
|
+
});
|
|
66
|
+
const { onChangeColumnsOrder } = useChangeColumnsOrder({
|
|
67
|
+
getConfigColumns,
|
|
68
|
+
onChangeColumnsConfig
|
|
69
|
+
});
|
|
170
70
|
const classes = getComponentClasses(DATAGRID_PREFIX_NAME, {
|
|
171
71
|
...DataGridSlots,
|
|
172
72
|
...ActionsSlots,
|
|
@@ -176,80 +76,8 @@ function DataGridProvider(props) {
|
|
|
176
76
|
...ColumnsConfigSlots,
|
|
177
77
|
...ControlNavigateSlots
|
|
178
78
|
});
|
|
179
|
-
const [columnsWidths, setColumnsWidths] = useState(/* @__PURE__ */ new Map());
|
|
180
|
-
const [viewConfig, setViewConfig] = useState(() => ({
|
|
181
|
-
table: [],
|
|
182
|
-
cards: []
|
|
183
|
-
}));
|
|
184
|
-
const getConfigColumns = useCallback(
|
|
185
|
-
(viewModeParam) => {
|
|
186
|
-
return viewConfig[viewModeParam];
|
|
187
|
-
},
|
|
188
|
-
[viewConfig]
|
|
189
|
-
);
|
|
190
|
-
const updateConfigColumns = useCallback(
|
|
191
|
-
(viewModeParam, config) => {
|
|
192
|
-
setViewConfig((prev) => ({
|
|
193
|
-
...prev,
|
|
194
|
-
[viewModeParam]: config
|
|
195
|
-
}));
|
|
196
|
-
},
|
|
197
|
-
[]
|
|
198
|
-
);
|
|
199
79
|
const [rowsFilterCount, setRowFilterCount] = useState(rowsCount);
|
|
200
80
|
const [sortColumns, setSortColumns] = useState([]);
|
|
201
|
-
const [viewModeState, setViewModeState] = useState(() => {
|
|
202
|
-
if (viewMode) {
|
|
203
|
-
return viewMode;
|
|
204
|
-
}
|
|
205
|
-
try {
|
|
206
|
-
const savedViewMode = localStorage.getItem(`${id}_view_mode`);
|
|
207
|
-
if (savedViewMode === "cards" || savedViewMode === "table") {
|
|
208
|
-
return savedViewMode;
|
|
209
|
-
}
|
|
210
|
-
} catch (_e) {
|
|
211
|
-
}
|
|
212
|
-
if (defaultViewMode) {
|
|
213
|
-
return defaultViewMode;
|
|
214
|
-
}
|
|
215
|
-
return isMobile ? "cards" : "table";
|
|
216
|
-
});
|
|
217
|
-
const handleViewModeChange = useCallback(
|
|
218
|
-
(newViewMode) => {
|
|
219
|
-
setViewModeState(newViewMode);
|
|
220
|
-
saveViewMode(id, newViewMode);
|
|
221
|
-
onViewModeChange?.(newViewMode);
|
|
222
|
-
},
|
|
223
|
-
[onViewModeChange, id]
|
|
224
|
-
);
|
|
225
|
-
useEffect(() => {
|
|
226
|
-
if (viewMode !== void 0) {
|
|
227
|
-
setViewModeState(viewMode);
|
|
228
|
-
}
|
|
229
|
-
}, [viewMode]);
|
|
230
|
-
const [currentRowHeightVariant, setCurrentRowHeightVariant] = useState(() => {
|
|
231
|
-
if (typeof rowHeights !== typeof rowHeaderHeights) {
|
|
232
|
-
throw new Error("Must be same type rowheights and rowHeaderTypes");
|
|
233
|
-
}
|
|
234
|
-
if (typeof rowHeights === "number" && typeof rowHeaderHeights === "number") {
|
|
235
|
-
return {
|
|
236
|
-
rowHVariant: "compact",
|
|
237
|
-
rowHeight: rowHeights,
|
|
238
|
-
rowHeaderHeight: rowHeaderHeights
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
if (typeof rowHeights !== "number" && rowHeights.length !== 3) {
|
|
242
|
-
throw new Error("Must be 3 heights");
|
|
243
|
-
}
|
|
244
|
-
if (typeof rowHeaderHeights !== "number" && rowHeaderHeights.length !== 3) {
|
|
245
|
-
throw new Error("Must be 3 HeaderHeights");
|
|
246
|
-
}
|
|
247
|
-
return {
|
|
248
|
-
rowHVariant: initialRowHeightVariant,
|
|
249
|
-
rowHeight: typeof rowHeights !== "number" ? rowHeights[getIndexRowHeightVariant(initialRowHeightVariant)] : rowHeights,
|
|
250
|
-
rowHeaderHeight: typeof rowHeaderHeights !== "number" ? rowHeaderHeights[getIndexRowHeightVariant(initialRowHeightVariant)] : rowHeaderHeights
|
|
251
|
-
};
|
|
252
|
-
});
|
|
253
81
|
useEffect(() => {
|
|
254
82
|
const keys = new Set(columns.map((c) => c.key));
|
|
255
83
|
if (sortSettings?.sortsColumns) {
|
|
@@ -315,7 +143,6 @@ function DataGridProvider(props) {
|
|
|
315
143
|
}
|
|
316
144
|
}, [columns, sortSettings, filterSettings, cardsViewConfig]);
|
|
317
145
|
const finalRowHeights = useMemo(() => rowHeights, [rowHeights]);
|
|
318
|
-
let timerSaveColumns;
|
|
319
146
|
useEffect(() => {
|
|
320
147
|
if (isFirstRender) {
|
|
321
148
|
setColumnsWidths(getColumnsWidth(id, columns, defaultUserColumns));
|
|
@@ -450,65 +277,9 @@ function DataGridProvider(props) {
|
|
|
450
277
|
});
|
|
451
278
|
}
|
|
452
279
|
}, [columns, id]);
|
|
453
|
-
const onChangeColumnsConfig = useCallback(
|
|
454
|
-
(viewModeParam, newConfig) => {
|
|
455
|
-
saveViewConfig(
|
|
456
|
-
id,
|
|
457
|
-
getViewSuffix(viewModeParam),
|
|
458
|
-
newConfig,
|
|
459
|
-
onChangeUserColumns
|
|
460
|
-
);
|
|
461
|
-
updateConfigColumns(viewModeParam, newConfig);
|
|
462
|
-
},
|
|
463
|
-
[id, onChangeUserColumns, updateConfigColumns]
|
|
464
|
-
);
|
|
465
|
-
const onChangeColumnsOrder = useCallback(
|
|
466
|
-
(viewModeParam, sourceKey, targetKey) => {
|
|
467
|
-
if (sourceKey === targetKey) {
|
|
468
|
-
return;
|
|
469
|
-
}
|
|
470
|
-
const currentConfig = getConfigColumns(viewModeParam);
|
|
471
|
-
const sourceColumnIndex = currentConfig.findIndex(
|
|
472
|
-
(c) => c.key === sourceKey
|
|
473
|
-
);
|
|
474
|
-
const targetColumnIndex = currentConfig.findIndex(
|
|
475
|
-
(c) => c.key === targetKey
|
|
476
|
-
);
|
|
477
|
-
const reorderedConfig = [...currentConfig];
|
|
478
|
-
reorderedConfig.splice(
|
|
479
|
-
targetColumnIndex,
|
|
480
|
-
0,
|
|
481
|
-
reorderedConfig.splice(sourceColumnIndex, 1)[0]
|
|
482
|
-
);
|
|
483
|
-
onChangeColumnsConfig(viewModeParam, reorderedConfig);
|
|
484
|
-
},
|
|
485
|
-
[getConfigColumns, onChangeColumnsConfig]
|
|
486
|
-
);
|
|
487
|
-
const onChangeColumnWidth = (columnKey, width) => {
|
|
488
|
-
columnsWidths.set(columnKey, Math.round(width));
|
|
489
|
-
if (timerSaveColumns) {
|
|
490
|
-
clearTimeout(timerSaveColumns);
|
|
491
|
-
}
|
|
492
|
-
timerSaveColumns = setTimeout(() => {
|
|
493
|
-
saveColumnsWidth(id, columnsWidths, onChangeUserColumns);
|
|
494
|
-
}, 500);
|
|
495
|
-
};
|
|
496
280
|
const setRowFilterCountInternal = (newRowsCount) => {
|
|
497
281
|
setRowFilterCount(newRowsCount);
|
|
498
282
|
};
|
|
499
|
-
const setCurrentRowHeightInternal = useCallback(
|
|
500
|
-
(newVariant) => {
|
|
501
|
-
if (typeof rowHeights === "number" || typeof rowHeaderHeights === "number") {
|
|
502
|
-
throw new Error("Only use setCurrentRowHeight with vector rowHeights");
|
|
503
|
-
}
|
|
504
|
-
setCurrentRowHeightVariant({
|
|
505
|
-
rowHVariant: newVariant,
|
|
506
|
-
rowHeight: rowHeights[getIndexRowHeightVariant(newVariant)],
|
|
507
|
-
rowHeaderHeight: rowHeaderHeights[getIndexRowHeightVariant(newVariant)]
|
|
508
|
-
});
|
|
509
|
-
},
|
|
510
|
-
[setCurrentRowHeightVariant, rowHeights, rowHeaderHeights]
|
|
511
|
-
);
|
|
512
283
|
return /* @__PURE__ */ jsx(
|
|
513
284
|
DataGridContext.Provider,
|
|
514
285
|
{
|
|
@@ -528,7 +299,7 @@ function DataGridProvider(props) {
|
|
|
528
299
|
onChangeColumnWidth,
|
|
529
300
|
setRowsCount: setRowFilterCountInternal,
|
|
530
301
|
rowActionsGetter,
|
|
531
|
-
setRowHeightVariant
|
|
302
|
+
setRowHeightVariant,
|
|
532
303
|
onCheckedRowsChange,
|
|
533
304
|
rowKeyGetter,
|
|
534
305
|
onChangeUserColumns,
|
|
@@ -3,21 +3,12 @@ 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
|
-
|
|
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
|
-
};
|
|
6
|
+
import { IGridConfig, BaseViewConfig } from '../../types.helpers';
|
|
16
7
|
/**
|
|
17
8
|
* Configuración extendida genérica con propiedades originales
|
|
18
9
|
* USO INTERNO: El contexto usa esto para el estado interno con propiedades de tracking
|
|
19
10
|
*/
|
|
20
|
-
export type IViewConfig<TViewSpecific =
|
|
11
|
+
export type IViewConfig<TViewSpecific = object, TOriginalViewSpecific = object> = BaseViewConfig<TViewSpecific> & {
|
|
21
12
|
hidden: boolean;
|
|
22
13
|
originalIndex: number;
|
|
23
14
|
originalVisible: boolean;
|
|
@@ -62,15 +53,6 @@ export interface IConfigColumnCards extends Omit<IConfigColumn, 'frozen' | 'orig
|
|
|
62
53
|
originalShowTitle: boolean;
|
|
63
54
|
}
|
|
64
55
|
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
|
-
}
|
|
74
56
|
/**
|
|
75
57
|
* Configuración extendida del Grid para soportar múltiples vistas
|
|
76
58
|
* USO: Para nuevas implementaciones que soporten cards y futuras vistas
|
|
@@ -78,6 +60,7 @@ export interface IGridConfig {
|
|
|
78
60
|
*/
|
|
79
61
|
export interface IGridConfigExtended extends IGridConfig {
|
|
80
62
|
columnsConfigCards?: BaseConfigColumnCards[];
|
|
63
|
+
viewMode?: ViewMode;
|
|
81
64
|
}
|
|
82
65
|
export interface DataGridProviderProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> extends Pick<GridProps<TRow, TSummaryRow, TKey>, 'rows' | 'columns' | 'rowActionsGetter' | 'rowHeaderHeights' | 'rowHeights' | 'initialRowHeightVariant' | 'checkedRows' | 'onCheckedRowsChange' | 'rowKeyGetter' | 'onChangeUserColumns' | 'defaultUserColumns' | 'externalSortSettings' | 'externalFilterSettings' | 'defaultViewMode' | 'cardsViewConfig'> {
|
|
83
66
|
id: number | string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ColumnImageFormatterProps } from './types';
|
|
2
|
+
import { RenderCellProps } from 'react-data-grid';
|
|
3
|
+
/**
|
|
4
|
+
* Componente interno que renderiza la celda y puede usar hooks
|
|
5
|
+
*/
|
|
6
|
+
export declare function ImageFormatterCell<TRow>(props: {
|
|
7
|
+
formatterProps: RenderCellProps<TRow>;
|
|
8
|
+
fieldValue: ColumnImageFormatterProps<TRow>['fieldValue'];
|
|
9
|
+
fieldText: ColumnImageFormatterProps<TRow>['fieldText'];
|
|
10
|
+
width?: ColumnImageFormatterProps<TRow>['width'];
|
|
11
|
+
height?: ColumnImageFormatterProps<TRow>['height'];
|
|
12
|
+
cover?: ColumnImageFormatterProps<TRow>['cover'];
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { getPropertyByString } from "@m4l/core";
|
|
4
|
+
import { I as IMAGE_SIZES } from "./constants.js";
|
|
5
|
+
import { a as DataGridContext } from "../../contexts/DataGridContext/index.js";
|
|
6
|
+
import { I as ImageFormatter } from "../../../formatters/ImageFormatter/ImageFormatter.js";
|
|
7
|
+
function ImageFormatterCell(props) {
|
|
8
|
+
const { formatterProps, fieldValue, fieldText, width, height, cover } = props;
|
|
9
|
+
const context = useContext(DataGridContext);
|
|
10
|
+
const viewMode = context?.viewMode ?? "cards";
|
|
11
|
+
const hasCustomSize = width !== void 0 && height !== void 0;
|
|
12
|
+
const finalWidth = viewMode === "cards" && hasCustomSize ? width : viewMode === "cards" ? IMAGE_SIZES.cards : void 0;
|
|
13
|
+
const finalHeight = viewMode === "cards" && hasCustomSize ? height : viewMode === "cards" ? IMAGE_SIZES.cards : void 0;
|
|
14
|
+
const src = getPropertyByString(formatterProps.row, fieldValue) ?? void 0;
|
|
15
|
+
const text = fieldText ? getPropertyByString(formatterProps.row, fieldText) ?? void 0 : void 0;
|
|
16
|
+
if (!src) {
|
|
17
|
+
return /* @__PURE__ */ jsx(Fragment, { children: "-" });
|
|
18
|
+
}
|
|
19
|
+
return /* @__PURE__ */ jsx(
|
|
20
|
+
ImageFormatter,
|
|
21
|
+
{
|
|
22
|
+
src,
|
|
23
|
+
alt: text || src,
|
|
24
|
+
width: finalWidth,
|
|
25
|
+
height: finalHeight,
|
|
26
|
+
text,
|
|
27
|
+
cover
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
ImageFormatterCell as I
|
|
33
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RenderCellProps } from 'react-data-grid';
|
|
2
|
+
import { ColumnImageFormatterProps } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Formatter para mostrar imágenes con o sin texto
|
|
5
|
+
* @param props - Propiedades del formatter
|
|
6
|
+
* @returns Función que recibe RenderCellProps y retorna el ImageFormatter
|
|
7
|
+
*/
|
|
8
|
+
export declare function ColumnImageFormatter<TRow>(props: ColumnImageFormatterProps<TRow>): (formatterProps: RenderCellProps<TRow>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { I as ImageFormatterCell } from "./ImageFormatterCell.js";
|
|
3
|
+
function ColumnImageFormatter(props) {
|
|
4
|
+
const { fieldValue, fieldText, cover } = props;
|
|
5
|
+
const width = "width" in props && props.width !== void 0 ? props.width : void 0;
|
|
6
|
+
const height = "height" in props && props.height !== void 0 ? props.height : void 0;
|
|
7
|
+
const formatter = (formatterProps) => {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
ImageFormatterCell,
|
|
10
|
+
{
|
|
11
|
+
formatterProps,
|
|
12
|
+
fieldValue,
|
|
13
|
+
fieldText,
|
|
14
|
+
width,
|
|
15
|
+
height,
|
|
16
|
+
cover
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
formatter.__imageFormatterHeight = height ?? 60;
|
|
21
|
+
return formatter;
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
ColumnImageFormatter as C
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/components/DataGrid/formatters/ColumnImageFormatter/tests/ColumnImageFormatter.test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { DeepKeyOf } from '../../../../utils/types';
|
|
2
|
+
interface ColumnImageFormatterBaseProps<TRow> {
|
|
3
|
+
/**
|
|
4
|
+
* Campo del row que contiene la URL de la imagen
|
|
5
|
+
*/
|
|
6
|
+
fieldValue: DeepKeyOf<TRow>;
|
|
7
|
+
/**
|
|
8
|
+
* Campo opcional del row que contiene el texto a mostrar junto a la imagen
|
|
9
|
+
*/
|
|
10
|
+
fieldText?: DeepKeyOf<TRow>;
|
|
11
|
+
/**
|
|
12
|
+
* Si es true, la imagen usa object-fit: cover (recorta si es necesario)
|
|
13
|
+
* Si es false o undefined, usa object-fit: contain (muestra completa)
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
cover?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Props sin dimensiones personalizadas (usa IMAGE_SIZES.cards por defecto)
|
|
20
|
+
*/
|
|
21
|
+
interface ColumnImageFormatterWithoutSize<TRow> extends ColumnImageFormatterBaseProps<TRow> {
|
|
22
|
+
width?: never;
|
|
23
|
+
height?: never;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Props con dimensiones personalizadas para vista cards
|
|
27
|
+
* IMPORTANTE: width y height deben proporcionarse juntas
|
|
28
|
+
*/
|
|
29
|
+
interface ColumnImageFormatterWithSize<TRow> extends ColumnImageFormatterBaseProps<TRow> {
|
|
30
|
+
/**
|
|
31
|
+
* Ancho personalizado para la imagen en vista cards (en píxeles)
|
|
32
|
+
*/
|
|
33
|
+
width: number;
|
|
34
|
+
/**
|
|
35
|
+
* Alto personalizado para la imagen en vista cards (en píxeles)
|
|
36
|
+
*/
|
|
37
|
+
height: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Props para ColumnImageFormatter
|
|
41
|
+
* Puede tener dimensiones personalizadas (width Y height juntas) o ninguna
|
|
42
|
+
*/
|
|
43
|
+
export type ColumnImageFormatterProps<TRow> = ColumnImageFormatterWithoutSize<TRow> | ColumnImageFormatterWithSize<TRow>;
|
|
44
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ColumnImageFormatterProps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Hook que retorna el formatter para columnas con imágenes en DataGrid
|
|
4
|
+
* @param props - Propiedades del formatter
|
|
5
|
+
* @returns Objeto con el formatter
|
|
6
|
+
*/
|
|
7
|
+
export declare const useColumnImage: <TRow>(props: ColumnImageFormatterProps<TRow>) => {
|
|
8
|
+
formatter: (formatterProps: import('react-data-grid').RenderCellProps<TRow, unknown>) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useState, useRef, useEffect, useMemo } from "react";
|
|
2
|
+
import { deepEqual } from "fast-equals";
|
|
3
|
+
import { C as ColumnImageFormatter } from "./formatter.js";
|
|
4
|
+
const useColumnImage = (props) => {
|
|
5
|
+
const [stateProps, setStateProps] = useState(props);
|
|
6
|
+
const refProps = useRef({ ...props });
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (!deepEqual(refProps.current, props)) {
|
|
9
|
+
refProps.current = props;
|
|
10
|
+
setStateProps(props);
|
|
11
|
+
}
|
|
12
|
+
}, [props]);
|
|
13
|
+
return useMemo(
|
|
14
|
+
() => ({
|
|
15
|
+
formatter: ColumnImageFormatter(stateProps)
|
|
16
|
+
}),
|
|
17
|
+
[stateProps]
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
useColumnImage as u
|
|
22
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ViewMode } from '../../contexts/DataGridContext/types';
|
|
2
|
+
/**
|
|
3
|
+
* Obtiene todos los modos de vista disponibles en el DataGrid.
|
|
4
|
+
*
|
|
5
|
+
* ## Modos disponibles
|
|
6
|
+
*
|
|
7
|
+
* - `table`: Vista de tabla tradicional con filas y columnas
|
|
8
|
+
* - `cards`: Vista de tarjetas para visualización compacta
|
|
9
|
+
*
|
|
10
|
+
* ## Uso
|
|
11
|
+
*
|
|
12
|
+
* Esta función centraliza los modos de vista disponibles,
|
|
13
|
+
* facilitando la extensión futura si se agregan nuevos modos.
|
|
14
|
+
* @returns Array con los modos de vista disponibles
|
|
15
|
+
* @example
|
|
16
|
+
* const modes = getAllViewModes();
|
|
17
|
+
* // ['table', 'cards']
|
|
18
|
+
*/
|
|
19
|
+
export declare const getAllViewModes: () => ViewMode[];
|