@m4l/components 9.3.19-BE171025-beta.1 → 9.3.19-BE241025-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 (122) hide show
  1. package/components/DataGrid/DataGrid.js +9 -4
  2. package/components/DataGrid/Datagrid.styles.js +270 -0
  3. package/components/DataGrid/constants.js +2 -2
  4. package/components/DataGrid/contexts/DataGridContext/index.js +322 -112
  5. package/components/DataGrid/contexts/DataGridContext/types.d.ts +63 -4
  6. package/components/DataGrid/dictionary.d.ts +5 -0
  7. package/components/DataGrid/dictionary.js +6 -1
  8. package/components/DataGrid/formatters/ColumnSetCheckFormatter/formatter.js +2 -2
  9. package/components/DataGrid/hooks/useModalCardDetail.d.ts +6 -0
  10. package/components/DataGrid/hooks/useModalCardDetail.js +74 -0
  11. package/components/DataGrid/hooks/useProcessedColumns.d.ts +50 -0
  12. package/components/DataGrid/hooks/useProcessedColumns.js +44 -0
  13. package/components/DataGrid/icons.d.ts +7 -0
  14. package/components/DataGrid/icons.js +5 -1
  15. package/components/DataGrid/index.d.ts +1 -1
  16. package/components/DataGrid/slots/DataGridEnum.d.ts +22 -1
  17. package/components/DataGrid/slots/DataGridEnum.js +21 -0
  18. package/components/DataGrid/slots/DataGridSlot.d.ts +24 -0
  19. package/components/DataGrid/slots/DataGridSlot.js +123 -21
  20. package/components/DataGrid/subcomponents/Cards/hooks/useCardContent.d.ts +9 -0
  21. package/components/DataGrid/subcomponents/Cards/hooks/useCardContent.js +91 -0
  22. package/components/DataGrid/subcomponents/Cards/index.d.ts +5 -0
  23. package/components/DataGrid/subcomponents/Cards/index.js +40 -0
  24. package/components/DataGrid/subcomponents/Cards/subcomponents/CardDetails/index.d.ts +8 -0
  25. package/components/DataGrid/subcomponents/Cards/subcomponents/CardDetails/index.js +79 -0
  26. package/components/DataGrid/subcomponents/Cards/subcomponents/CardHeader/index.d.ts +7 -0
  27. package/components/DataGrid/subcomponents/Cards/subcomponents/CardHeader/index.js +98 -0
  28. package/components/DataGrid/subcomponents/Cards/subcomponents/CardRow/index.d.ts +6 -0
  29. package/components/DataGrid/subcomponents/Cards/subcomponents/CardRow/index.js +71 -0
  30. package/components/DataGrid/subcomponents/Cards/subcomponents/IntersectCard/index.d.ts +20 -0
  31. package/components/DataGrid/subcomponents/Cards/subcomponents/IntersectCard/index.js +46 -0
  32. package/components/DataGrid/subcomponents/Cards/subcomponents/LazyLoadCard/index.d.ts +17 -0
  33. package/components/DataGrid/subcomponents/Cards/subcomponents/LazyLoadCard/index.js +34 -0
  34. package/components/DataGrid/subcomponents/Cards/types.d.ts +118 -0
  35. package/components/DataGrid/subcomponents/CheckboxCellAdapter/index.d.ts +7 -0
  36. package/components/DataGrid/subcomponents/CheckboxCellAdapter/index.js +43 -0
  37. package/components/DataGrid/subcomponents/CheckboxCellAdapter/types.d.ts +7 -0
  38. package/components/DataGrid/subcomponents/ControlNavigate/ControlNavigate.js +1 -1
  39. package/components/DataGrid/subcomponents/HeaderActions/index.js +5 -3
  40. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/RowsCount/index.js +1 -1
  41. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/Settings/index.js +11 -2
  42. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/Settings/subcomponents/ColumnsConfig/index.js +1 -1
  43. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/Settings/subcomponents/ColumnsConfigCards/index.d.ts +2 -0
  44. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/Settings/subcomponents/ColumnsConfigCards/index.js +304 -0
  45. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/Settings/subcomponents/ColumnsConfigCards/types.d.ts +31 -0
  46. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/ViewMode/index.d.ts +4 -0
  47. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/ViewMode/index.js +125 -0
  48. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettings/index.js +2 -2
  49. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettingsCards/index.d.ts +7 -0
  50. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettingsCards/index.js +74 -0
  51. package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettingsCards/types.d.ts +4 -0
  52. package/components/DataGrid/subcomponents/RenderContent/index.d.ts +5 -0
  53. package/components/DataGrid/subcomponents/RenderContent/index.js +11 -0
  54. package/components/DataGrid/subcomponents/Table/hooks/useHeaderMenuActions.js +2 -2
  55. package/components/DataGrid/subcomponents/Table/hooks/useSortColumnsRows.js +1 -1
  56. package/components/DataGrid/subcomponents/Table/index.js +1 -1
  57. package/components/DataGrid/subcomponents/Table/subcomponents/ActionsColumn.js +1 -1
  58. package/components/DataGrid/subcomponents/Table/subcomponents/DraggableHeaderRenderer.js +1 -1
  59. package/components/DataGrid/subcomponents/Table/subcomponents/HeaderRenderClick/HeaderRenderClick.js +1 -1
  60. package/components/DataGrid/subcomponents/editors/TextEditor/index.js +1 -1
  61. package/components/DataGrid/tests/components/CardDetails.test.d.ts +1 -0
  62. package/components/DataGrid/tests/components/CardHeader.test.d.ts +1 -0
  63. package/components/DataGrid/tests/components/CardRow.test.d.ts +1 -0
  64. package/components/DataGrid/tests/components/Cards.test.d.ts +1 -0
  65. package/components/DataGrid/tests/components/CheckboxCellAdapter.test.d.ts +1 -0
  66. package/components/DataGrid/tests/components/ColumnsConfigCards.test.d.ts +1 -0
  67. package/components/DataGrid/tests/components/IntersectCard.test.d.ts +1 -0
  68. package/components/DataGrid/tests/components/ViewMode.test.d.ts +1 -0
  69. package/components/DataGrid/tests/helpers/types.d.ts +1 -0
  70. package/components/DataGrid/tests/helpers/useCardsViewConfig.d.ts +24 -0
  71. package/components/DataGrid/tests/helpers/useCustomCardExample.d.ts +7 -0
  72. package/components/DataGrid/tests/hooks/useCardContent.test.d.ts +1 -0
  73. package/components/DataGrid/tests/hooks/useModalDetail.test.d.ts +1 -0
  74. package/components/DataGrid/tests/hooks/useModalSettingsCards.test.d.ts +1 -0
  75. package/components/DataGrid/tests/hooks/useProcessedColumns.test.d.ts +1 -0
  76. package/components/DataGrid/types.d.ts +87 -5
  77. package/components/DynamicFilter/helpers/formatToInitialFilters.js +3 -3
  78. package/components/DynamicFilter/subcomponents/FieldTypes/BooleanFilter/helpers.js +11 -3
  79. package/components/DynamicFilter/subcomponents/FieldTypes/DateTimeFilter/helpers.js +16 -4
  80. package/components/DynamicFilter/subcomponents/FieldTypes/NumberFilter/helpers.js +11 -8
  81. package/components/DynamicFilter/subcomponents/FieldTypes/SelectAsyncFilter/helpers.js +21 -8
  82. package/components/DynamicFilter/subcomponents/FieldTypes/SelectFilter/helpers.js +18 -8
  83. package/components/DynamicFilter/subcomponents/FieldTypes/StringFilter/helpers.js +5 -3
  84. package/components/EditLabel/hooks/useEditLabel.d.ts +1 -0
  85. package/components/LanguagePopover/LanguagePopover.js +2 -0
  86. package/components/MFIsolationApp/MFIsolationApp.js +3 -6
  87. package/components/MFIsolationApp/subcomponents/AppBarSettings/AppBarSettings.js +1 -1
  88. package/components/MFIsolationAppStorybook/MFIsolationAppStorybook.js +4 -20
  89. package/components/MFIsolationAppStorybook/types.d.ts +0 -4
  90. package/components/MenuActions/MenuActions.js +105 -55
  91. package/components/hook-form/RHFAutocomplete/RHFAutocomplete.d.ts +1 -1
  92. package/components/hook-form/RHFAutocomplete/RHFAutocomplete.js +4 -4
  93. package/components/hook-form/RHFAutocomplete/types.d.ts +2 -2
  94. package/components/hook-form/RHFAutocompleteAsync/RHFAutocompleteAsync.js +4 -4
  95. package/components/hook-form/RHFAutocompleteAsync/slots/RHFAutocompleteSlotsAsync.d.ts +1 -1
  96. package/components/mui_extended/Autocomplete/Autocomplete.d.ts +4 -8
  97. package/components/mui_extended/Autocomplete/Autocomplete.js +92 -67
  98. package/components/mui_extended/Autocomplete/Autocomplete.styles.js +11 -5
  99. package/components/mui_extended/Autocomplete/RenderAdornment/RenderAdornment.d.ts +6 -0
  100. package/components/mui_extended/Autocomplete/RenderAdornment/RenderAdornment.js +45 -0
  101. package/components/mui_extended/Autocomplete/hooks/useEndAdornments.js +2 -1
  102. package/components/mui_extended/Autocomplete/hooks/useStartAdornments.d.ts +4 -12
  103. package/components/mui_extended/Autocomplete/hooks/useStartAdornments.js +72 -23
  104. package/components/mui_extended/Autocomplete/hooks/useValuesAndHandlers.d.ts +0 -2
  105. package/components/mui_extended/Autocomplete/hooks/useValuesAndHandlers.js +0 -13
  106. package/components/mui_extended/Autocomplete/renderOptions/index.d.ts +4 -17
  107. package/components/mui_extended/Autocomplete/renderOptions/index.js +42 -5
  108. package/components/mui_extended/Autocomplete/renderOptions/types.d.ts +7 -0
  109. package/components/mui_extended/Autocomplete/slots/AutocompleteSlots.js +2 -2
  110. package/components/mui_extended/Autocomplete/types.d.ts +10 -3
  111. package/components/mui_extended/MenuItem/MenuItem.styles.js +4 -1
  112. package/contexts/AppearanceComponentContext/AppearanceComponentContext.js +4 -1
  113. package/hooks/useDataGridPersistence/helpers.d.ts +2 -2
  114. package/hooks/useDataGridPersistence/useDataGridPersistence.d.ts +2 -2
  115. package/hooks/useDataGridPersistence/useDataGridPersistence.js +5 -0
  116. package/index.js +8 -8
  117. package/package.json +1 -1
  118. package/components/MFIsolationAppStorybook/icons.js +0 -6
  119. package/components/MFIsolationAppStorybook/subcomponents/AppBarSettings/AppBarSettings.d.ts +0 -4
  120. package/components/MFIsolationAppStorybook/subcomponents/AppBarSettings/AppBarSettings.js +0 -21
  121. package/components/MFIsolationAppStorybook/subcomponents/AppBarSettings/index.d.ts +0 -1
  122. package/components/MFIsolationAppStorybook/subcomponents/AppBarSettings/index.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { s as InputTextEditorStyled } from "../../../slots/DataGridSlot.js";
2
+ import { O as InputTextEditorStyled } from "../../../slots/DataGridSlot.js";
3
3
  function autoFocusAndSelect(input) {
4
4
  input?.focus();
5
5
  input?.select();
@@ -25,6 +25,7 @@ export interface SeedProps {
25
25
  withEditors?: boolean;
26
26
  aligns?: Record<string, ColumnAlign>;
27
27
  names?: Record<string, string>;
28
+ visibleColumns?: string[];
28
29
  }
29
30
  export type GetColumnsProps = Omit<SeedProps, 'quantity'>;
30
31
  export type ColumnType = 'string' | 'number' | 'boolean' | 'date' | 'custom';
@@ -0,0 +1,24 @@
1
+ import { CardsViewConfig } from '../../types';
2
+ interface UseCardsViewConfigProps {
3
+ /**
4
+ * Si es true, retorna cardsViewConfig con columnsConfig básica
5
+ */
6
+ withBasicConfig?: boolean;
7
+ /**
8
+ * Si es true, retorna cardsViewConfig con customRender
9
+ */
10
+ withCustomRender?: boolean;
11
+ /**
12
+ * Si es true, retorna cardsViewConfig solo con enabled=true (para demostrar error)
13
+ */
14
+ withEnabledOnly?: boolean;
15
+ /**
16
+ * Si es true, retorna cardsViewConfig con columnKey inválido (para demostrar error)
17
+ */
18
+ withInvalidColumnKey?: boolean;
19
+ }
20
+ /**
21
+ * Hook helper que genera configuraciones de cardsViewConfig para testing
22
+ */
23
+ export declare const useCardsViewConfigHelper: <TRow = any>(props?: UseCardsViewConfigProps) => CardsViewConfig<TRow> | undefined;
24
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Hook helper que retorna un ejemplo de renderizado custom de cards
3
+ */
4
+ export declare const useCustomCardExample: () => {
5
+ renderContent: (row: any) => import("react/jsx-runtime").JSX.Element;
6
+ minHeight: number;
7
+ };
@@ -5,7 +5,7 @@ import { MenuAction } from '../MenuActions/types';
5
5
  import { ActionsSlots, ColumnIconFormatterSlots, ColumnsConfigSlots, ControlNavigateSlots, DataGridSlots, RowsCountSlots, TableSlots, TextEditorSlots } from './slots/DataGridEnum';
6
6
  import { OverridesStyleRules } from '@mui/material/styles/overrides';
7
7
  import { DATAGRID_PREFIX_NAME } from './constants';
8
- import { IGridConfig } from './contexts/DataGridContext/types';
8
+ import { IGridConfigExtended, ViewMode } from './contexts/DataGridContext/types';
9
9
  import { Sizes } from '@m4l/styles';
10
10
  import { PagerProps } from '../Pager';
11
11
  import { SettingsProps } from './subcomponents/HeaderActions/subcomponents/Settings/types';
@@ -61,10 +61,10 @@ export interface ColumnConfig {
61
61
  position?: number;
62
62
  frozen?: Maybe<boolean>;
63
63
  }
64
- type KeyUserColumns = keyof IGridConfig;
64
+ type KeyUserColumns = keyof IGridConfigExtended;
65
65
  export interface ChangeUserColumn<T extends KeyUserColumns = KeyUserColumns> {
66
66
  reason: T;
67
- userConfig: IGridConfig[T];
67
+ userConfig: IGridConfigExtended[T];
68
68
  }
69
69
  export type OnChangeUserColumns = (props: ChangeUserColumn) => void;
70
70
  export type SortApplied = {
@@ -139,7 +139,7 @@ export interface GridProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> exte
139
139
  /**
140
140
  * Propiedad opcional que recibe la configuración de las columnas
141
141
  */
142
- defaultUserColumns?: IGridConfig;
142
+ defaultUserColumns?: IGridConfigExtended;
143
143
  /**
144
144
  * Propiedad que recibe la función que se ejecuta cuando se cambian
145
145
  * las configuraciones de las columnas.
@@ -150,6 +150,15 @@ export interface GridProps<TRow, TSummaryRow, TKey extends RowKey = RowKey> exte
150
150
  * @default 'medium'
151
151
  */
152
152
  size?: Extract<Sizes, 'small' | 'medium'>;
153
+ /**
154
+ * Modo por defecto de visualización
155
+ */
156
+ defaultViewMode?: ViewMode;
157
+ /**
158
+ * Configuración de la vista de "cards"
159
+ * Incluye habilitación, configuración de columnas y renderizado personalizado
160
+ */
161
+ cardsViewConfig?: CardsViewConfig<TRow>;
153
162
  }
154
163
  export declare const DATAGRID_TEST_ID = "m4ldatagrid";
155
164
  export declare const PREFIX_TEST_ATTRIBUTE = "data-testid";
@@ -170,6 +179,79 @@ export interface ActionsProps {
170
179
  leftActions?: React.ReactNode;
171
180
  rightActions?: React.ReactNode;
172
181
  }
173
- export type DataGridOwnerState<TRow, TSummaryRow, TKey extends RowKey = RowKey> = Pick<DataGridProps<TRow, TSummaryRow, TKey>, 'visibleCustomHeader'>;
182
+ /**
183
+ * Props para el hook useModalDetail
184
+ */
185
+ export interface UseModalDetailProps<TRow> {
186
+ row: TRow;
187
+ columns: readonly Column<TRow, any>[];
188
+ viewMode: ViewMode;
189
+ onRowsChange?: Maybe<(rows: TRow[], data: RowsChangeData<TRow, any>) => void>;
190
+ }
191
+ /**
192
+ * Configuración de una columna específica en vista "cards"
193
+ */
194
+ export interface CardColumnConfig {
195
+ /**
196
+ * Key de la columna (debe coincidir con la key de la columna)
197
+ */
198
+ columnKey: string;
199
+ /**
200
+ * Si se debe mostrar el título/label de esta columna en la card (Solo si no existe una config previa)
201
+ */
202
+ showTitle: boolean;
203
+ }
204
+ /**
205
+ * Cards con columnsConfig
206
+ */
207
+ export interface CardsViewConfigWithColumns {
208
+ columnsConfig: CardColumnConfig[];
209
+ customRender?: never;
210
+ }
211
+ /**
212
+ * Cards con customRender
213
+ */
214
+ export interface CardsViewConfigWithCustomRender<TRow> {
215
+ columnsConfig?: never;
216
+ customRender: {
217
+ renderContent: (row: TRow) => React.ReactNode;
218
+ minHeight: number;
219
+ };
220
+ }
221
+ /**
222
+ * Configuración para la vista de "cards"
223
+ *
224
+ * IMPORTANTE:
225
+ * Es OBLIGATORIO configurar al menos 1 columna cuando customRender=undefined
226
+ * Se ignora completamente si customRender está definido
227
+ * @throws Error si customRender=undefined y array está vacío
228
+ */
229
+ export type CardsViewConfig<TRow> = CardsViewConfigWithColumns | CardsViewConfigWithCustomRender<TRow>;
230
+ /**
231
+ * Opciones para el procesamiento de columnas
232
+ */
233
+ export interface ProcessedColumnsOptions {
234
+ /**
235
+ * Si es true, aplica el filtro de visibilidad configurado por el usuario.
236
+ * Si es false, muestra TODAS las columnas.
237
+ * @default true
238
+ */
239
+ applyVisibilityFilter?: boolean;
240
+ }
241
+ /**
242
+ * Props para el hook useCardContent
243
+ */
244
+ export interface CardContentProps<TRow> {
245
+ row: TRow;
246
+ columns: readonly Column<TRow, any>[];
247
+ originalColumns: readonly Column<TRow, any>[];
248
+ onRowsChange?: Maybe<(rows: TRow[], data: RowsChangeData<TRow, any>) => void>;
249
+ }
250
+ export type DataGridOwnerState<TRow, TSummaryRow, TKey extends RowKey = RowKey> = Pick<DataGridProps<TRow, TSummaryRow, TKey>, 'visibleCustomHeader'> & {
251
+ viewMode?: ViewMode;
252
+ isActive?: boolean;
253
+ hasActions?: boolean;
254
+ hasCheckedRows?: boolean;
255
+ };
174
256
  export type DataGridSlotsType = DataGridSlots | TextEditorSlots | ActionsSlots | RowsCountSlots | ColumnsConfigSlots | TableSlots | ControlNavigateSlots | ColumnIconFormatterSlots;
175
257
  export type DataGridStyles = OverridesStyleRules<DataGridSlotsType, typeof DATAGRID_PREFIX_NAME, Theme>;
@@ -30,9 +30,9 @@ function formatToInitialFilters(appliedFilters) {
30
30
  return {
31
31
  name: af.field.name,
32
32
  operator: af.operator,
33
- ...operand1 ? { operand1 } : {},
34
- ...operand2 ? { operand2 } : {},
35
- ...operandArray ? { operandArray } : {}
33
+ ...operand1 !== void 0 ? { operand1 } : {},
34
+ ...operand2 !== void 0 ? { operand2 } : {},
35
+ ...operandArray !== void 0 ? { operandArray } : {}
36
36
  };
37
37
  });
38
38
  }
@@ -11,12 +11,16 @@ class BooleanFilterHelpers {
11
11
  */
12
12
  getDefaultFilter(field, fixed) {
13
13
  const defaultOperand1 = field.defaultOperand1;
14
+ let isSet = false;
15
+ if (defaultOperand1 !== void 0 && typeof defaultOperand1 === "boolean") {
16
+ isSet = true;
17
+ }
14
18
  const defaultFilter = {
15
19
  id: 0,
16
20
  fieldType: "boolean",
17
21
  field,
18
22
  fixed,
19
- isSet: true,
23
+ isSet,
20
24
  operator: "e",
21
25
  operand1: true
22
26
  };
@@ -45,7 +49,9 @@ class BooleanFilterHelpers {
45
49
  const operator = filterValueBoolean ? filterValueBoolean.operator : field.defaultOperator ?? "e";
46
50
  const formValueOperand1 = filterValueBoolean ? {
47
51
  value: filterValueBoolean.operand1,
48
- label: getLabel(`${DYNAMIC_FILTER_DICTIONARY_ID}.operand_${filterValueBoolean.operand1}`)
52
+ label: getLabel(
53
+ `${DYNAMIC_FILTER_DICTIONARY_ID}.operand_${filterValueBoolean.operand1}`
54
+ )
49
55
  } : null;
50
56
  return {
51
57
  fieldType: "boolean",
@@ -63,7 +69,9 @@ class BooleanFilterHelpers {
63
69
  const labelOperands = filter.operand1 ? getLabel(DICCTIONARY.operand_true) : getLabel(DICCTIONARY.operand_false);
64
70
  return {
65
71
  labelField: filter.field.label ?? getLabel(filter.field.dictionaryId),
66
- labelOperator: getLabel(`${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`),
72
+ labelOperator: getLabel(
73
+ `${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`
74
+ ),
67
75
  labelOperands
68
76
  };
69
77
  }
@@ -18,12 +18,16 @@ class DateTimeFilterHelpers {
18
18
  defaultEndDate.setHours(23, 59, 59, 999);
19
19
  const defaultOperand1 = field.defaultOperand1 && field.defaultOperand1 instanceof Date ? field.defaultOperand1 : defaultStartDate;
20
20
  const defaultOperand2 = field.defaultOperand2 && field.defaultOperand2 instanceof Date ? field.defaultOperand2 : defaultEndDate;
21
+ let isSet = false;
22
+ if (defaultOperand1 !== void 0) {
23
+ isSet = true;
24
+ }
21
25
  return {
22
26
  id: 0,
23
27
  fieldType: "datetime",
24
28
  field,
25
29
  fixed,
26
- isSet: true,
30
+ isSet,
27
31
  operator: "b",
28
32
  operand1: defaultOperand1,
29
33
  operand2: defaultOperand2
@@ -83,13 +87,21 @@ class DateTimeFilterHelpers {
83
87
  labelOperands = filter.operand1 && filter.operand2 ? `${dateFormatter.formatDate(
84
88
  filter.operand1,
85
89
  dateFormatter.datetimeFormat
86
- )} - ${dateFormatter.formatDate(filter.operand2, dateFormatter.datetimeFormat)}` : "";
90
+ )} - ${dateFormatter.formatDate(
91
+ filter.operand2,
92
+ dateFormatter.datetimeFormat
93
+ )}` : "";
87
94
  } else {
88
- labelOperands = filter.operand1 ? dateFormatter.formatDate(filter.operand1, dateFormatter.datetimeFormat) : "";
95
+ labelOperands = filter.operand1 ? dateFormatter.formatDate(
96
+ filter.operand1,
97
+ dateFormatter.datetimeFormat
98
+ ) : "";
89
99
  }
90
100
  return {
91
101
  labelField: filter.field.label ?? getLabel(filter.field.dictionaryId),
92
- labelOperator: getLabel(`${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`),
102
+ labelOperator: getLabel(
103
+ `${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`
104
+ ),
93
105
  labelOperands
94
106
  };
95
107
  }
@@ -15,12 +15,10 @@ class NumberFilterHelpers {
15
15
  const defaultOperand1 = field.defaultOperand1 ?? null;
16
16
  const defaultOperand2 = field.defaultOperand2 ?? null;
17
17
  let isSet = false;
18
- if (fixed) {
19
- if (["b"].includes(dOperator)) {
20
- isSet = defaultOperand1 !== null && defaultOperand2 !== null ? true : false;
21
- } else {
22
- isSet = defaultOperand1 !== null ? true : false;
23
- }
18
+ if (["b"].includes(dOperator)) {
19
+ isSet = defaultOperand1 !== null && defaultOperand2 !== null ? true : false;
20
+ } else {
21
+ isSet = defaultOperand1 !== null ? true : false;
24
22
  }
25
23
  return {
26
24
  id: 0,
@@ -85,7 +83,9 @@ class NumberFilterHelpers {
85
83
  }
86
84
  return {
87
85
  labelField: filter.field.label ?? getLabel(filter.field.dictionaryId),
88
- labelOperator: getLabel(`${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`),
86
+ labelOperator: getLabel(
87
+ `${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`
88
+ ),
89
89
  labelOperands
90
90
  };
91
91
  }
@@ -100,7 +100,10 @@ class NumberFilterHelpers {
100
100
  ),
101
101
  formValueOperand2: Yup.mixed().when(["formValueOperator.id"], {
102
102
  is: "b",
103
- then: Yup.number().typeError(getLabel(DICCTIONARY.error_operand_mustbe_number)).min(Yup.ref("formValueOperand1"), getLabel(DICCTIONARY.error_less_than_start))
103
+ then: Yup.number().typeError(getLabel(DICCTIONARY.error_operand_mustbe_number)).min(
104
+ Yup.ref("formValueOperand1"),
105
+ getLabel(DICCTIONARY.error_less_than_start)
106
+ )
104
107
  })
105
108
  });
106
109
  }
@@ -27,13 +27,16 @@ class SelectAsyncFilterHelpers {
27
27
  let operandsArray = [];
28
28
  if (isMultiple) {
29
29
  dOperator = field.defaultOperator ?? "in";
30
- isSet = fixed ? defaultOperandsArray !== null && defaultOperandsArray.length > 0 ? true : false : false;
30
+ isSet = defaultOperandsArray !== null && defaultOperandsArray.length > 0;
31
31
  if (field.defaultOperandsArray !== void 0 && Array.isArray(field.defaultOperandsArray)) {
32
- operandsArray = filterValidOperandsArraySelectAsync(field.defaultOperandsArray, field);
32
+ operandsArray = filterValidOperandsArraySelectAsync(
33
+ field.defaultOperandsArray,
34
+ field
35
+ );
33
36
  }
34
37
  } else {
35
38
  dOperator = field.defaultOperator ?? "e";
36
- isSet = fixed ? defaultOperand1 ? true : false : false;
39
+ isSet = defaultOperand1 ? true : false;
37
40
  }
38
41
  const defaultCommonFilter = {
39
42
  id: 0,
@@ -122,15 +125,21 @@ class SelectAsyncFilterHelpers {
122
125
  let labelOperands = "";
123
126
  if (isMultiple) {
124
127
  labelOperands = operandsArray?.reduce?.((label, operand) => {
125
- const textLabel = field.selectAsyncOptions?.getOptionLabel?.(operand) || "";
128
+ const textLabel = field.selectAsyncOptions?.getOptionLabel?.(
129
+ operand
130
+ ) || "";
126
131
  return label ? `${label} | ${textLabel}` : textLabel;
127
132
  }, "")?.toString() || "?";
128
133
  } else {
129
- labelOperands = (field.selectAsyncOptions?.getOptionLabel?.(filter.operand1) ?? "?") + "";
134
+ labelOperands = (field.selectAsyncOptions?.getOptionLabel?.(
135
+ filter.operand1
136
+ ) ?? "?") + "";
130
137
  }
131
138
  return {
132
139
  labelField: filter.field.label ?? getLabel(filter.field.dictionaryId),
133
- labelOperator: getLabel(`${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`),
140
+ labelOperator: getLabel(
141
+ `${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`
142
+ ),
134
143
  labelOperands
135
144
  };
136
145
  }
@@ -163,7 +172,9 @@ class SelectAsyncFilterHelpers {
163
172
  return false;
164
173
  }
165
174
  if (isMultiple) {
166
- if (SELECT_ASYNC_OPERATORS_MULTIPLE.findIndex((f) => f === filter.operator) === -1) {
175
+ if (SELECT_ASYNC_OPERATORS_MULTIPLE.findIndex(
176
+ (f) => f === filter.operator
177
+ ) === -1) {
167
178
  return false;
168
179
  }
169
180
  if (!filter.operandsArray || typeof filter.operandsArray !== "object") {
@@ -180,7 +191,9 @@ class SelectAsyncFilterHelpers {
180
191
  return false;
181
192
  }
182
193
  } else {
183
- if (SELECT_ASYNC_OPERATORS_SINGLE.findIndex((f) => f === filter.operator) === -1) {
194
+ if (SELECT_ASYNC_OPERATORS_SINGLE.findIndex(
195
+ (f) => f === filter.operator
196
+ ) === -1) {
184
197
  return false;
185
198
  }
186
199
  if (!filter.operand1 || typeof filter.operand1 !== "object") {
@@ -26,13 +26,15 @@ class SelectFilterHelpers {
26
26
  let operandsArray = [];
27
27
  if (isMultiple) {
28
28
  dOperator = field.defaultOperator ?? "in";
29
- isSet = fixed ? defaultOperandsArray !== null && defaultOperandsArray.length > 0 ? true : false : false;
29
+ isSet = defaultOperandsArray !== null && defaultOperandsArray.length > 0;
30
30
  if (field.defaultOperandsArray !== void 0 && Array.isArray(field.defaultOperandsArray)) {
31
- operandsArray = filterValidOperandsArraySelect(field.defaultOperandsArray);
31
+ operandsArray = filterValidOperandsArraySelect(
32
+ field.defaultOperandsArray
33
+ );
32
34
  }
33
35
  } else {
34
36
  dOperator = field.defaultOperator ?? "e";
35
- isSet = fixed ? defaultOperand1 !== null ? true : false : false;
37
+ isSet = defaultOperand1 !== null;
36
38
  }
37
39
  const defaultCommonFilter = {
38
40
  id: 0,
@@ -123,7 +125,9 @@ class SelectFilterHelpers {
123
125
  let labelOperands = "";
124
126
  if (isMultiple) {
125
127
  labelOperands = operandsArray?.reduce?.((label, operand) => {
126
- const textLabel = field.selectOptions?.options.find((option) => option.id === operand)?.label || "";
128
+ const textLabel = field.selectOptions?.options.find(
129
+ (option) => option.id === operand
130
+ )?.label || "";
127
131
  return label ? `${label} | ${textLabel}` : textLabel;
128
132
  }, "")?.toString() || "?";
129
133
  } else {
@@ -131,7 +135,9 @@ class SelectFilterHelpers {
131
135
  }
132
136
  return {
133
137
  labelField: filter.field.label ?? getLabel(filter.field.dictionaryId),
134
- labelOperator: getLabel(`${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`),
138
+ labelOperator: getLabel(
139
+ `${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`
140
+ ),
135
141
  labelOperands
136
142
  };
137
143
  }
@@ -147,9 +153,13 @@ class SelectFilterHelpers {
147
153
  }),
148
154
  formValueOperand1: Yup.mixed().when(["multiple"], {
149
155
  is: false,
150
- then: Yup.mixed().test("is-string-or-number", getLabel(DICCTIONARY.error_operand_required), (value) => {
151
- return typeof value === "string" || typeof value === "number";
152
- }).required(getLabel(DICCTIONARY.error_operand_required))
156
+ then: Yup.mixed().test(
157
+ "is-string-or-number",
158
+ getLabel(DICCTIONARY.error_operand_required),
159
+ (value) => {
160
+ return typeof value === "string" || typeof value === "number";
161
+ }
162
+ ).required(getLabel(DICCTIONARY.error_operand_required))
153
163
  })
154
164
  });
155
165
  }
@@ -12,8 +12,8 @@ class StringFilterHelpers {
12
12
  getDefaultFilter(field, fixed) {
13
13
  const defaultOperand1 = field.defaultOperand1;
14
14
  let isSet = false;
15
- if (fixed) {
16
- isSet = defaultOperand1 !== null ? true : false;
15
+ if (defaultOperand1 !== null && typeof defaultOperand1 === "string") {
16
+ isSet = true;
17
17
  }
18
18
  const defaultFilter = {
19
19
  id: 0,
@@ -64,7 +64,9 @@ class StringFilterHelpers {
64
64
  const labelOperands = filter.operand1 !== void 0 ? filter.operand1 + "" : "";
65
65
  return {
66
66
  labelField: filter.field.label ?? getLabel(filter.field.dictionaryId),
67
- labelOperator: getLabel(`${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`),
67
+ labelOperator: getLabel(
68
+ `${DYNAMIC_FILTER_DICTIONARY_ID}.operator_${filter.operator}`
69
+ ),
68
70
  labelOperands
69
71
  };
70
72
  }
@@ -5,6 +5,7 @@ export interface UseEditLabelProps {
5
5
  export interface UseEditLabelReturn {
6
6
  inEdition: boolean;
7
7
  value: string;
8
+ inputRef: React.RefObject<HTMLInputElement>;
8
9
  buttonSubmitRef: React.RefObject<HTMLButtonElement>;
9
10
  buttonCancelRef: React.RefObject<HTMLButtonElement>;
10
11
  handleChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
@@ -70,6 +70,8 @@ function LanguagePopover(props) {
70
70
  ownerState: {
71
71
  size: currentSize
72
72
  },
73
+ role: "button",
74
+ "aria-label": "Language selector",
73
75
  size: currentSize,
74
76
  className: classRoot,
75
77
  ...getPropDataTestId(LANGUAGE_POPOVER_KEY_COMPONENT, LanguagePopoverSlots.root),
@@ -43,7 +43,7 @@ function MFIsolationApp(props) {
43
43
  forcedDeviceType,
44
44
  areasStoreId,
45
45
  areasStoreDevtoolsEnabled,
46
- appBarSettings = false
46
+ appBarSettings = true
47
47
  } = props;
48
48
  const eventEmitter = useMemo(() => new EventEmitter(), []);
49
49
  const events_add_listener = useCallback(
@@ -134,12 +134,9 @@ function MFIsolationApp(props) {
134
134
  onLoad,
135
135
  loadAreasFromNetwork: activeAreasNetwork,
136
136
  loadCookiesFromNetwork: activeCookiesFromNetwork,
137
- onSelectLayout: (modId) => {
138
- console.log("onSelectLayout", modId);
139
- },
140
- children: /* @__PURE__ */ jsxs(Stack, { width: "100%", height: "100%", flexDirection: "column", overflow: "hidden", position: "relative", children: [
137
+ children: /* @__PURE__ */ jsxs(Stack, { width: "100%", height: "100%", flexDirection: "column", position: "absolute", children: [
141
138
  appBarSettings && /* @__PURE__ */ jsx(AppBarSettings, {}),
142
- /* @__PURE__ */ jsx(Stack, { width: "100%", flexGrow: 1, flexDirection: "column", overflow: "hidden", position: "relative", children })
139
+ /* @__PURE__ */ jsx(Stack, { width: "100%", flexGrow: 1, flexDirection: "column", position: "relative", children })
143
140
  ] })
144
141
  }
145
142
  )
@@ -12,7 +12,7 @@ function AppBarSettings() {
12
12
  /* @__PURE__ */ jsx(Stack, { width: "100%", height: "100%" }),
13
13
  /* @__PURE__ */ jsxs(Stack, { flexDirection: "row", gap: 2, height: "100%", width: "auto", alignItems: "center", children: [
14
14
  /* @__PURE__ */ jsx(LanguagePopover, {}),
15
- /* @__PURE__ */ jsx(IconButton, { src: `${host_static_assets}/${environment_assets}/${PATH_ICONS.SETTINGS}`, onClick: handleOpen })
15
+ /* @__PURE__ */ jsx(IconButton, { role: "button", "aria-label": "Toggle App Bar Settings", src: `${host_static_assets}/${environment_assets}/${PATH_ICONS.SETTINGS}`, onClick: handleOpen })
16
16
  ] })
17
17
  ] });
18
18
  }
@@ -5,7 +5,7 @@ import { createBrowserHistory } from "history";
5
5
  import EventEmitter from "eventemitter3";
6
6
  import NProgress from "nprogress";
7
7
  import { DeviceTypeProvider, ThemeSettingsProvider, LocalesProvider } from "@m4l/graphics";
8
- import { EnvironmentProvider, HostToolsProvider, NetworkProvider } from "@m4l/core";
8
+ import { EnvironmentProvider, HostToolsProvider, NetworkProvider, axiosOperation } from "@m4l/core";
9
9
  import { A as AppearanceComponentProvider } from "../../contexts/AppearanceComponentContext/AppearanceComponentContext.js";
10
10
  import enLocale from "date-fns/locale/en-US";
11
11
  import { c as createToaster } from "../ToastContainer/helpers/toaster.js";
@@ -13,10 +13,7 @@ import { M as MFAuthAppStorybook } from "./subcomponents/MFAuthAppStorybook/MFAu
13
13
  import { B as BaseModule } from "../BaseModule/BaseModule.js";
14
14
  import { S as SettingsLayout } from "../SettingsLayout/SettingsLayout.js";
15
15
  import { T as ToastContainer } from "../ToastContainer/ToastContainer.js";
16
- import { A as AppBarSettings } from "./subcomponents/AppBarSettings/AppBarSettings.js";
17
16
  import { P as PopupsProvider } from "../popups/components/PopupsProvider/contexts/PopupsContext/PopupsContext.js";
18
- import { A as AreasProvider } from "../areas/contexts/AreasContext/index.js";
19
- import { S as Stack } from "../mui_extended/Stack/Stack.js";
20
17
  const LOCALE_HOST_EN = {
21
18
  lang: "en",
22
19
  script: void 0,
@@ -43,13 +40,11 @@ function MFIsolationAppStorybook(props) {
43
40
  moduleNameField,
44
41
  privileges,
45
42
  componentsDictionary,
46
- onLoad,
47
43
  // observedDivRef,
48
44
  moduleDictionaryLoaded,
49
45
  forcedDeviceType,
50
46
  areasStoreId,
51
- areasStoreDevtoolsEnabled,
52
- appBarSettings = false
47
+ areasStoreDevtoolsEnabled
53
48
  } = props;
54
49
  const eventEmitter = useMemo(() => new EventEmitter(), []);
55
50
  const events_add_listener = useCallback(
@@ -113,14 +108,7 @@ function MFIsolationAppStorybook(props) {
113
108
  // eslint-disable-next-line react-hooks/exhaustive-deps
114
109
  []
115
110
  );
116
- const mockNetworkOperation = useCallback(async (_networkProps) => {
117
- return Promise.resolve({
118
- data: [],
119
- status: 200,
120
- statusText: "OK"
121
- });
122
- }, []);
123
- return /* @__PURE__ */ jsx(EnvironmentProvider, { ...environment, children: /* @__PURE__ */ jsx(HostToolsProvider, { ...hostTools, children: /* @__PURE__ */ jsx(NetworkProvider, { axiosOperation: mockNetworkOperation, children: /* @__PURE__ */ jsx(unstable_HistoryRouter, { history, children: /* @__PURE__ */ jsx(DeviceTypeProvider, { forcedDeviceType, children: /* @__PURE__ */ jsx(MFAuthAppStorybook, { children: /* @__PURE__ */ jsx(ThemeSettingsProvider, { children: /* @__PURE__ */ jsx(LocalesProvider, { isMicroFrontEnd: true, localeHost: LOCALE_HOST_EN, children: /* @__PURE__ */ jsx(
111
+ return /* @__PURE__ */ jsx(EnvironmentProvider, { ...environment, children: /* @__PURE__ */ jsx(HostToolsProvider, { ...hostTools, children: /* @__PURE__ */ jsx(NetworkProvider, { axiosOperation, children: /* @__PURE__ */ jsx(unstable_HistoryRouter, { history, children: /* @__PURE__ */ jsx(DeviceTypeProvider, { forcedDeviceType, children: /* @__PURE__ */ jsx(MFAuthAppStorybook, { children: /* @__PURE__ */ jsx(ThemeSettingsProvider, { children: /* @__PURE__ */ jsx(LocalesProvider, { isMicroFrontEnd: true, localeHost: LOCALE_HOST_EN, children: /* @__PURE__ */ jsx(
124
112
  BaseModule,
125
113
  {
126
114
  moduleId,
@@ -132,17 +120,13 @@ function MFIsolationAppStorybook(props) {
132
120
  children: /* @__PURE__ */ jsxs(AppearanceComponentProvider, { children: [
133
121
  /* @__PURE__ */ jsx(SettingsLayout, {}),
134
122
  /* @__PURE__ */ jsx(ToastContainer, { containerId: toastContainerId }),
135
- " ",
136
123
  /* @__PURE__ */ jsx(
137
124
  PopupsProvider,
138
125
  {
139
126
  baseZindex: 1e3,
140
127
  storeId: areasStoreId,
141
128
  storeDevtoolsEnabled: areasStoreDevtoolsEnabled,
142
- children: /* @__PURE__ */ jsx(AreasProvider, { loadAreasFromNetwork: false, loadCookiesFromNetwork: false, onLoad, children: /* @__PURE__ */ jsxs(Stack, { width: "100%", height: "100%", flexDirection: "column", overflow: "hidden", position: "relative", children: [
143
- appBarSettings && /* @__PURE__ */ jsx(AppBarSettings, {}),
144
- /* @__PURE__ */ jsx(Stack, { width: "100%", flexGrow: 1, flexDirection: "column", overflow: "hidden", position: "relative", children })
145
- ] }) })
129
+ children
146
130
  }
147
131
  )
148
132
  ] })
@@ -8,10 +8,6 @@ export type MFIsolationAppStorybookProps = BaseModuleProps & {
8
8
  host_api_remote: string;
9
9
  host_static_assets: string;
10
10
  environment_assets: string;
11
- onLoad: () => void;
12
- activeAreasNetwork?: boolean;
13
- activeCookiesFromNetwork?: boolean;
14
- appBarSettings?: boolean;
15
11
  /**
16
12
  * Diccionario de componentes, se puede proporcionar ya el diccionario cargado, para evitar que se llame al endpoint nuevamente.
17
13
  */