@m4l/components 9.3.36 → 9.3.37-JT20251128-beta.2

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 (131) hide show
  1. package/@types/export.d.ts +3 -0
  2. package/@types/types.d.ts +33 -6
  3. package/components/DataGrid/DataGrid.js +2 -0
  4. package/components/DataGrid/Datagrid.styles.js +11 -2
  5. package/components/DataGrid/contexts/DataGridContext/index.js +43 -268
  6. package/components/DataGrid/contexts/DataGridContext/types.d.ts +5 -22
  7. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.d.ts +19 -0
  8. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.js +6 -0
  9. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.test.d.ts +1 -0
  10. package/components/DataGrid/helpers/getAllViewModes/index.d.ts +1 -0
  11. package/components/DataGrid/helpers/getAllViewModes/index.js +1 -0
  12. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.d.ts +47 -0
  13. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.js +32 -0
  14. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.test.d.ts +1 -0
  15. package/components/DataGrid/helpers/getColumnsWidth/index.d.ts +1 -0
  16. package/components/DataGrid/helpers/getColumnsWidth/index.js +1 -0
  17. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.d.ts +24 -0
  18. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.js +12 -0
  19. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.test.d.ts +1 -0
  20. package/components/DataGrid/helpers/getIndexRowHeightVariant/index.d.ts +1 -0
  21. package/components/DataGrid/helpers/getIndexRowHeightVariant/index.js +1 -0
  22. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.d.ts +48 -0
  23. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.js +35 -0
  24. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.test.d.ts +1 -0
  25. package/components/DataGrid/helpers/getInitialColumnsConfig/index.d.ts +1 -0
  26. package/components/DataGrid/helpers/getInitialColumnsConfig/index.js +1 -0
  27. package/components/DataGrid/helpers/getViewMode/getViewMode.d.ts +41 -0
  28. package/components/DataGrid/helpers/getViewMode/getViewMode.js +19 -0
  29. package/components/DataGrid/helpers/getViewMode/getViewMode.test.d.ts +1 -0
  30. package/components/DataGrid/helpers/getViewMode/index.d.ts +1 -0
  31. package/components/DataGrid/helpers/getViewMode/index.js +1 -0
  32. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.d.ts +28 -0
  33. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.js +22 -0
  34. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.test.d.ts +1 -0
  35. package/components/DataGrid/helpers/getViewSpecificConfig/index.d.ts +1 -0
  36. package/components/DataGrid/helpers/getViewSpecificConfig/index.js +1 -0
  37. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.d.ts +24 -0
  38. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.js +9 -0
  39. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.test.d.ts +1 -0
  40. package/components/DataGrid/helpers/getViewSuffix/index.d.ts +1 -0
  41. package/components/DataGrid/helpers/getViewSuffix/index.js +1 -0
  42. package/components/DataGrid/helpers/index.d.ts +13 -0
  43. package/components/DataGrid/helpers/index.js +1 -0
  44. package/components/DataGrid/helpers/loadViewConfig/index.d.ts +1 -0
  45. package/components/DataGrid/helpers/loadViewConfig/index.js +1 -0
  46. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.d.ts +23 -0
  47. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.js +12 -0
  48. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.test.d.ts +1 -0
  49. package/components/DataGrid/helpers/saveColumnsWidth/index.d.ts +1 -0
  50. package/components/DataGrid/helpers/saveColumnsWidth/index.js +1 -0
  51. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.d.ts +52 -0
  52. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.js +18 -0
  53. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.test.d.ts +1 -0
  54. package/components/DataGrid/helpers/saveViewConfig/index.d.ts +1 -0
  55. package/components/DataGrid/helpers/saveViewConfig/index.js +1 -0
  56. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.d.ts +35 -0
  57. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.js +15 -0
  58. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.test.d.ts +1 -0
  59. package/components/DataGrid/helpers/saveViewMode/index.d.ts +1 -0
  60. package/components/DataGrid/helpers/saveViewMode/index.js +1 -0
  61. package/components/DataGrid/helpers/saveViewMode/saveViewMode.d.ts +33 -0
  62. package/components/DataGrid/helpers/saveViewMode/saveViewMode.js +13 -0
  63. package/components/DataGrid/helpers/saveViewMode/saveViewMode.test.d.ts +1 -0
  64. package/components/DataGrid/hooks/index.d.ts +6 -0
  65. package/components/DataGrid/hooks/index.js +1 -0
  66. package/components/DataGrid/hooks/useChangeColumnsConfig/index.d.ts +1 -0
  67. package/components/DataGrid/hooks/useChangeColumnsConfig/index.js +1 -0
  68. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.d.ts +9 -0
  69. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.js +27 -0
  70. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.test.d.ts +1 -0
  71. package/components/DataGrid/hooks/useChangeColumnsOrder/index.d.ts +1 -0
  72. package/components/DataGrid/hooks/useChangeColumnsOrder/index.js +1 -0
  73. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.d.ts +10 -0
  74. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.js +34 -0
  75. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.test.d.ts +1 -0
  76. package/components/DataGrid/hooks/useColumnsWidth/index.d.ts +1 -0
  77. package/components/DataGrid/hooks/useColumnsWidth/index.js +1 -0
  78. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.d.ts +11 -0
  79. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.js +29 -0
  80. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.test.d.ts +1 -0
  81. package/components/DataGrid/hooks/useRowHeight/index.d.ts +1 -0
  82. package/components/DataGrid/hooks/useRowHeight/index.js +1 -0
  83. package/components/DataGrid/hooks/useRowHeight/useRowHeight.d.ts +28 -0
  84. package/components/DataGrid/hooks/useRowHeight/useRowHeight.js +51 -0
  85. package/components/DataGrid/hooks/useRowHeight/useRowHeight.test.d.ts +1 -0
  86. package/components/DataGrid/hooks/useViewConfig/index.d.ts +1 -0
  87. package/components/DataGrid/hooks/useViewConfig/index.js +1 -0
  88. package/components/DataGrid/hooks/useViewConfig/useViewConfig.d.ts +9 -0
  89. package/components/DataGrid/hooks/useViewConfig/useViewConfig.js +30 -0
  90. package/components/DataGrid/hooks/useViewConfig/useViewConfig.test.d.ts +1 -0
  91. package/components/DataGrid/hooks/useViewMode/index.d.ts +1 -0
  92. package/components/DataGrid/hooks/useViewMode/index.js +1 -0
  93. package/components/DataGrid/hooks/useViewMode/useViewMode.d.ts +31 -0
  94. package/components/DataGrid/hooks/useViewMode/useViewMode.js +44 -0
  95. package/components/DataGrid/hooks/useViewMode/useViewMode.test.d.ts +1 -0
  96. package/components/DataGrid/index.d.ts +5 -4
  97. package/components/DataGrid/subcomponents/Cards/subcomponents/CardHeader/index.js +15 -7
  98. package/components/DataGrid/subcomponents/CheckboxCellAdapter/index.js +4 -1
  99. package/components/DataGrid/subcomponents/Table/hooks/useSortColumnsRows.js +6 -2
  100. package/components/DataGrid/subcomponents/Table/subcomponents/RadioButtonFormatter.d.ts +6 -0
  101. package/components/DataGrid/subcomponents/Table/subcomponents/RadioButtonFormatter.js +12 -0
  102. package/components/DataGrid/subcomponents/Table/subcomponents/RadioSelectColumn.d.ts +64 -0
  103. package/components/DataGrid/subcomponents/Table/subcomponents/RadioSelectColumn.js +46 -0
  104. package/components/DataGrid/tests/table/subcomponents/RadioButtonFormatter.test.d.ts +1 -0
  105. package/components/DataGrid/tests/table/subcomponents/RadioSelectColumn.test.d.ts +1 -0
  106. package/components/DataGrid/types.d.ts +7 -0
  107. package/components/DataGrid/types.helpers.d.ts +55 -0
  108. package/components/DataGrid/types.helpers.js +1 -0
  109. package/components/DataGrid/types.hooks.d.ts +81 -0
  110. package/components/mui_extended/RadioButton/RadioButton.d.ts +24 -0
  111. package/components/mui_extended/RadioButton/RadioButton.js +110 -0
  112. package/components/mui_extended/RadioButton/RadioButton.styles.d.ts +2 -0
  113. package/components/mui_extended/RadioButton/RadioButton.styles.js +126 -0
  114. package/components/mui_extended/RadioButton/constants.d.ts +1 -0
  115. package/components/mui_extended/RadioButton/constants.js +4 -0
  116. package/components/mui_extended/RadioButton/icons.d.ts +4 -0
  117. package/components/mui_extended/RadioButton/icons.js +7 -0
  118. package/components/mui_extended/RadioButton/index.d.ts +1 -0
  119. package/components/mui_extended/RadioButton/index.js +1 -0
  120. package/components/mui_extended/RadioButton/slots/RadioButtonEnum.d.ts +8 -0
  121. package/components/mui_extended/RadioButton/slots/RadioButtonEnum.js +12 -0
  122. package/components/mui_extended/RadioButton/slots/RadioButtonSlots.d.ts +20 -0
  123. package/components/mui_extended/RadioButton/slots/RadioButtonSlots.js +39 -0
  124. package/components/mui_extended/RadioButton/tests/RadioButton.test.d.ts +1 -0
  125. package/components/mui_extended/RadioButton/types.d.ts +50 -0
  126. package/components/mui_extended/index.d.ts +1 -0
  127. package/hooks/useDataGridPersistence/constants.d.ts +1 -0
  128. package/hooks/useDataGridPersistence/constants.js +4 -2
  129. package/hooks/useDataGridPersistence/useDataGridPersistence.js +5 -2
  130. package/index.js +44 -42
  131. package/package.json +1 -1
@@ -55,6 +55,9 @@ declare module '@mui/material/styles' {
55
55
  M4LCheckBox?: {
56
56
  styleOverrides?: ComponentsOverrides<Theme>['M4LCheckBox'];
57
57
  };
58
+ M4LRadioButton?: {
59
+ styleOverrides?: ComponentsOverrides<Theme>['M4LRadioButton'];
60
+ };
58
61
  M4LDataGrid?: {
59
62
  styleOverrides?: ComponentsOverrides<Theme>['M4LDataGrid'];
60
63
  };
package/@types/types.d.ts CHANGED
@@ -76,6 +76,10 @@ import {
76
76
  CheckBoxOwnerState,
77
77
  CheckBoxSlotsType,
78
78
  } from '../components/mui_extended/CheckBox/types';
79
+ import {
80
+ RadioButtonOwnerState,
81
+ RadioButtonSlotsType,
82
+ } from '../components/mui_extended/RadioButton/types';
79
83
  import {
80
84
  RHFNumberInputOwnerState,
81
85
  RHFNumberInputSlotsType,
@@ -292,11 +296,26 @@ import {
292
296
  ImageTextOwnerState,
293
297
  ImageTextSlotsType,
294
298
  } from '../components/ImageText/types';
295
- import { FormContainerOwnerState, FormContainerSlotsType } from '../components/FormContainer/types';
296
- import { ActionsGroupOwnerState, ActionsGroupSlotsType } from '../components/ActionsGroup/types';
297
- import { TabsNavigatorSlotsType, TabsNavigatorOwnerState } from '../components/TabsNavigator/types';
298
- import { EditLabelOwnerState, EditLabelSlotsType } from '../components/EditLabel/types';
299
- import { MFIsolationAppOwnerState, MFIsolationAppSlotsType } from '../components/MFIsolationApp/types';
299
+ import {
300
+ FormContainerOwnerState,
301
+ FormContainerSlotsType,
302
+ } from '../components/FormContainer/types';
303
+ import {
304
+ ActionsGroupOwnerState,
305
+ ActionsGroupSlotsType,
306
+ } from '../components/ActionsGroup/types';
307
+ import {
308
+ TabsNavigatorSlotsType,
309
+ TabsNavigatorOwnerState,
310
+ } from 'src/components/TabsNavigator/types';
311
+ import {
312
+ EditLabelOwnerState,
313
+ EditLabelSlotsType,
314
+ } from '../components/EditLabel/types';
315
+ import {
316
+ MFIsolationAppOwnerState,
317
+ MFIsolationAppSlotsType,
318
+ } from '../components/MFIsolationApp/types';
300
319
  import {
301
320
  TagsFormatterOwnerState,
302
321
  TagsFormatterSlotsType,
@@ -333,6 +352,7 @@ declare module '@mui/material/styles' {
333
352
  M4LSelect: SelectSlotsType;
334
353
  M4LTypography: TypographySlotsType;
335
354
  M4LCheckBox: CheckBoxSlotsType;
355
+ M4LRadioButton: RadioButtonSlotsType;
336
356
  M4LRHFNumberInput: RHFNumberInputSlotsType;
337
357
  M4LTab: TabSlotsType;
338
358
  M4LButton: ButtonSlotsType;
@@ -347,7 +367,8 @@ declare module '@mui/material/styles' {
347
367
  M4LChip: ChipSlotsType;
348
368
  M4LCircularProgress: CircularProgressSlotsType;
349
369
  M4LPaperForm: PaperFormSlotsType;
350
- M4LWindowBase: WindowBaseType;a
370
+ M4LWindowBase: WindowBaseType;
371
+ a;
351
372
  M4LWindowConfirm: WindowConfirmType;
352
373
  M4LAppBar: AppBarSlotsType;
353
374
  M4LDialog: DialogType;
@@ -427,6 +448,7 @@ declare module '@mui/material/styles' {
427
448
  M4LSelect: Partial<SelectOwnerState>;
428
449
  M4LTypography: Partial<TypographyOwnerState>;
429
450
  M4LCheckBox: Partial<CheckBoxOwnerState>;
451
+ M4LRadioButton: Partial<RadioButtonOwnerState>;
430
452
  M4LRHFNumberInput: Partial<RHFNumberInputOwnerState>;
431
453
  M4LTab: Partial<TabOwnerState>;
432
454
  M4LButton: Partial<ButtonOwnerState>;
@@ -620,6 +642,11 @@ declare module '@mui/material/styles' {
620
642
  styleOverrides?: ComponentsOverrides<Theme>['M4LCheckBox'];
621
643
  variants?: ComponentsVariants['M4LCheckBox'];
622
644
  };
645
+ M4LRadioButton?: {
646
+ defaultProps?: ComponentsPropsList['M4LRadioButton'];
647
+ styleOverrides?: ComponentsOverrides<Theme>['M4LRadioButton'];
648
+ variants?: ComponentsVariants['M4LRadioButton'];
649
+ };
623
650
  M4LActionCancel?: {
624
651
  defaultProps?: ComponentsPropsList['M4LActionCancel'];
625
652
  styleOverrides?: ComponentsOverrides<Theme>['M4LActionCancel'];
@@ -30,6 +30,7 @@ function DataGrid(props) {
30
30
  initialRowHeightVariant,
31
31
  checkedRows,
32
32
  onCheckedRowsChange,
33
+ checkedRowsMultiple,
33
34
  dataTestId = "",
34
35
  customHeader: CustomHeader,
35
36
  visibleCustomHeader = true,
@@ -87,6 +88,7 @@ function DataGrid(props) {
87
88
  checkedRows,
88
89
  rowActionsGetter,
89
90
  onCheckedRowsChange,
91
+ checkedRowsMultiple,
90
92
  rowKeyGetter,
91
93
  rows,
92
94
  onChangeUserColumns,
@@ -424,6 +424,10 @@ const dataGridStyles = {
424
424
  borderColor: `${theme.vars.palette?.border.disabled} !important`,
425
425
  ...theme.colorSchemes.finalTheme.typography.body
426
426
  },
427
+ "&:has(> .M4LRadioButton-root)": {
428
+ overflow: "visible",
429
+ paddingInline: 0
430
+ },
427
431
  "&.rdg-cell-frozen": {
428
432
  display: "flex",
429
433
  boxShadow: "unset",
@@ -734,7 +738,10 @@ const dataGridStyles = {
734
738
  */
735
739
  cardsContainer: () => ({
736
740
  height: "auto",
737
- overflow: "auto"
741
+ overflow: "auto",
742
+ "& > .M4LContainerFlow-root": {
743
+ alignItems: "start"
744
+ }
738
745
  }),
739
746
  /**
740
747
  * Card de la vista cards
@@ -746,6 +753,8 @@ const dataGridStyles = {
746
753
  minWidth: "280px",
747
754
  maxWidth: "580px",
748
755
  cursor: "pointer",
756
+ padding: theme.vars.size.baseSpacings["sp2-5"],
757
+ gap: "0 !important",
749
758
  // Si está checked (pero no selected), border de checked
750
759
  ...ownerState?.checked && !ownerState?.selected && {
751
760
  borderColor: theme.vars.palette.primary.activeOpacity
@@ -786,7 +795,7 @@ const dataGridStyles = {
786
795
  cardHeaderRight: ({ theme }) => ({
787
796
  display: "flex",
788
797
  alignItems: "center",
789
- gap: theme.vars.size.baseSpacings.sp1
798
+ gap: theme.vars.size.baseSpacings["sp0-5"]
790
799
  }),
791
800
  /**
792
801
  * Contenido de la card (body)
@@ -1,146 +1,22 @@
1
1
  import { jsx } from "react/jsx-runtime";
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";
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";
18
+ import { g as getViewMode } from "../../helpers/getViewMode/getViewMode.js";
9
19
  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
20
  function DataGridProvider(props) {
145
21
  const {
146
22
  id,
@@ -155,6 +31,7 @@ function DataGridProvider(props) {
155
31
  initialRowHeightVariant = "standard",
156
32
  checkedRows,
157
33
  onCheckedRowsChange,
34
+ checkedRowsMultiple,
158
35
  rowKeyGetter,
159
36
  onChangeUserColumns,
160
37
  externalSortSettings: sortSettings,
@@ -166,7 +43,32 @@ function DataGridProvider(props) {
166
43
  cardsViewConfig
167
44
  } = props;
168
45
  const isFirstRender = useFirstRender([columns, id]);
169
- const isMobile = useIsMobile();
46
+ const { viewModeState, setViewModeState, handleViewModeChange } = useViewMode({
47
+ id,
48
+ viewMode,
49
+ defaultViewMode,
50
+ onViewModeChange,
51
+ onChangeUserColumns
52
+ });
53
+ const { currentRowHeightVariant, setRowHeightVariant } = useRowHeight({
54
+ rowHeights,
55
+ rowHeaderHeights,
56
+ initialRowHeightVariant
57
+ });
58
+ const { columnsWidths, setColumnsWidths, onChangeColumnWidth } = useColumnsWidth({
59
+ id,
60
+ onChangeUserColumns
61
+ });
62
+ const { getConfigColumns, updateConfigColumns } = useViewConfig();
63
+ const { onChangeColumnsConfig } = useChangeColumnsConfig({
64
+ id,
65
+ onChangeUserColumns,
66
+ updateConfigColumns
67
+ });
68
+ const { onChangeColumnsOrder } = useChangeColumnsOrder({
69
+ getConfigColumns,
70
+ onChangeColumnsConfig
71
+ });
170
72
  const classes = getComponentClasses(DATAGRID_PREFIX_NAME, {
171
73
  ...DataGridSlots,
172
74
  ...ActionsSlots,
@@ -176,80 +78,8 @@ function DataGridProvider(props) {
176
78
  ...ColumnsConfigSlots,
177
79
  ...ControlNavigateSlots
178
80
  });
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
81
  const [rowsFilterCount, setRowFilterCount] = useState(rowsCount);
200
82
  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
83
  useEffect(() => {
254
84
  const keys = new Set(columns.map((c) => c.key));
255
85
  if (sortSettings?.sortsColumns) {
@@ -315,10 +145,10 @@ function DataGridProvider(props) {
315
145
  }
316
146
  }, [columns, sortSettings, filterSettings, cardsViewConfig]);
317
147
  const finalRowHeights = useMemo(() => rowHeights, [rowHeights]);
318
- let timerSaveColumns;
319
148
  useEffect(() => {
320
149
  if (isFirstRender) {
321
150
  setColumnsWidths(getColumnsWidth(id, columns, defaultUserColumns));
151
+ setViewModeState(getViewMode(id, defaultUserColumns, defaultViewMode) ?? "table");
322
152
  updateConfigColumns(
323
153
  "table",
324
154
  getInitialColumnsConfig(
@@ -450,65 +280,9 @@ function DataGridProvider(props) {
450
280
  });
451
281
  }
452
282
  }, [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
283
  const setRowFilterCountInternal = (newRowsCount) => {
497
284
  setRowFilterCount(newRowsCount);
498
285
  };
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
286
  return /* @__PURE__ */ jsx(
513
287
  DataGridContext.Provider,
514
288
  {
@@ -528,8 +302,9 @@ function DataGridProvider(props) {
528
302
  onChangeColumnWidth,
529
303
  setRowsCount: setRowFilterCountInternal,
530
304
  rowActionsGetter,
531
- setRowHeightVariant: setCurrentRowHeightInternal,
305
+ setRowHeightVariant,
532
306
  onCheckedRowsChange,
307
+ checkedRowsMultiple,
533
308
  rowKeyGetter,
534
309
  onChangeUserColumns,
535
310
  sortColumns,
@@ -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 = {}, TOriginalViewSpecific = {}> = BaseViewConfig<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,8 +60,9 @@ export interface IGridConfig {
78
60
  */
79
61
  export interface IGridConfigExtended extends IGridConfig {
80
62
  columnsConfigCards?: BaseConfigColumnCards[];
63
+ viewMode?: ViewMode;
81
64
  }
82
- 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'> {
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' | 'onChangeUserColumns' | 'defaultUserColumns' | 'externalSortSettings' | 'externalFilterSettings' | 'defaultViewMode' | 'cardsViewConfig'> {
83
66
  id: number | string;
84
67
  children: ReactNode;
85
68
  rowsCount: number;
@@ -92,7 +75,7 @@ export type RowHeightState = {
92
75
  rowHeight: number;
93
76
  rowHeaderHeight: number;
94
77
  };
95
- export interface DataGridContextProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> extends Pick<DataGridProviderProps<TRow, TSummaryRow, TKey>, 'rows' | 'checkedRows' | 'onCheckedRowsChange' | 'rowHeights' | 'rowsCount' | 'rowActionsGetter' | 'rowKeyGetter' | 'onChangeUserColumns' | 'externalSortSettings' | 'externalFilterSettings' | 'viewMode' | 'onViewModeChange' | 'defaultViewMode' | 'cardsViewConfig'> {
78
+ 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'> {
96
79
  getConfigColumns: (viewMode: ViewMode) => IViewConfig[];
97
80
  onChangeColumnsConfig: (viewMode: ViewMode, config: IViewConfig[]) => void;
98
81
  onChangeColumnsOrder: (viewMode: ViewMode, sourceKey: string, targetKey: string) => void;
@@ -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[];
@@ -0,0 +1,6 @@
1
+ const getAllViewModes = () => {
2
+ return ["table", "cards"];
3
+ };
4
+ export {
5
+ getAllViewModes as g
6
+ };
@@ -0,0 +1 @@
1
+ export { getAllViewModes } from './getAllViewModes';
@@ -0,0 +1,47 @@
1
+ import { Column } from 'react-data-grid';
2
+ import { Maybe } from '@m4l/core';
3
+ import { RowKey } from '../../types';
4
+ import { IGridConfig } from '../../types.helpers';
5
+ /**
6
+ * Obtiene la configuración de anchos de las columnas del DataGrid.
7
+ *
8
+ * ## Flujo de persistencia
9
+ *
10
+ * Esta función obtiene los anchos de columnas siguiendo una jerarquía de precedencia:
11
+ *
12
+ * 1. **defaultUserColumns** (Backend/API) - Prioridad máxima
13
+ * Configuración que viene del backend cuando el componente se monta.
14
+ * En producción, esta es la fuente principal de datos persistidos.
15
+ *
16
+ * 2. **localStorage** - Fallback local
17
+ * Solo se usa cuando NO hay configuración del backend.
18
+ * Útil para desarrollo o cuando no hay integración con backend.
19
+ *
20
+ * Si no se encuentra configuración en ninguna fuente, la columna no se incluye
21
+ * en el Map resultante y usará el ancho por defecto definido en la columna.
22
+ *
23
+ * ## Relación con saveColumnsWidth
24
+ *
25
+ * - Cuando el usuario modifica anchos, `saveColumnsWidth` envía los cambios al backend
26
+ * mediante el callback `onChangeUserColumns`
27
+ * - En la siguiente carga, esos datos vuelven como `defaultUserColumns`
28
+ * - localStorage es solo un fallback cuando no hay callback configurado
29
+ * @template TRow - Tipo de datos de cada fila del DataGrid
30
+ * @template TSummaryRow - Tipo de datos de la fila de resumen del DataGrid
31
+ * @param id - Identificador único del DataGrid. Se usa como prefijo para la key en localStorage (fallback)
32
+ * @param columns - Array de columnas del DataGrid con su configuración
33
+ * @param defaultUserColumns - Configuración del usuario obtenida del backend/API.
34
+ * Esta es la fuente principal en producción.
35
+ * @returns Map donde la key es el identificador de la columna (column.key) y el value
36
+ * es el ancho configurado (número en píxeles o string con unidad CSS)
37
+ * @example
38
+ * // Sin configuración del backend (usa localStorage como fallback)
39
+ * const columnsWidths = getColumnsWidth('my-grid', columns, null);
40
+ * @example
41
+ * // Con configuración del backend (caso típico en producción)
42
+ * const columnsWidths = getColumnsWidth('my-grid', columns, {
43
+ * columnsWidths: { name: 200, email: 300 }
44
+ * });
45
+ * @see saveColumnsWidth - Función complementaria para persistir la configuración
46
+ */
47
+ export declare function getColumnsWidth<TRow, TSummaryRow>(id: RowKey, columns: readonly Column<TRow, TSummaryRow>[], defaultUserColumns: Maybe<IGridConfig>): Map<string, Maybe<string | number>>;