@m4l/layouts 9.2.2 → 9.3.0-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/.storybook/utils/getStylesColorsByMode.d.ts +98 -70
- package/components/DynamicTabs/DynamicTabs.js +1 -1
- package/components/ModuleDetailTabs/ModuleDetailTabs.js +2 -2
- package/components/ModuleDetailTabs/index.d.ts +1 -1
- package/components/ModuleDetailTabs/useModuleDatailTabs.js +3 -2
- package/hooks/index.d.ts +1 -0
- package/hooks/useFormAddEdit/dictionary.d.ts +1 -0
- package/hooks/useFormAddEdit/index.d.ts +1 -0
- package/hooks/useFormAddEdit/index.js +1 -0
- package/hooks/useFormAddEdit/types.d.ts +27 -0
- package/hooks/useFormAddEdit/useFormAddEdit.d.ts +11 -0
- package/hooks/useFormAddEdit/useFormAddEdit.js +79 -0
- package/hooks/useFormAddEdit/useFormAddEdit.test.d.ts +1 -0
- package/index.js +2 -0
- package/layouts/MasterDetailLayout/MasterDetailLayout.js +38 -33
- package/layouts/MasterDetailLayout/helpers/getTotalModuleActions.d.ts +2 -2
- package/layouts/MasterDetailLayout/helpers/getTotalModuleActions.js +10 -3
- package/layouts/ModuleLayout/ModuleLayout.js +11 -2
- package/layouts/ModuleLayout/contexts/ModuleContext/index.js +2 -1
- package/layouts/ModuleLayout/contexts/ModuleContext/store.js +5 -4
- package/layouts/ModuleLayout/contexts/ModuleContext/types.d.ts +16 -2
- package/layouts/ModuleLayout/types.d.ts +1 -0
- package/package.json +2 -2
|
@@ -53,6 +53,8 @@ export declare const colorsLight: {
|
|
|
53
53
|
readonly surface: string;
|
|
54
54
|
readonly hover: string;
|
|
55
55
|
readonly backdrop: string;
|
|
56
|
+
readonly base: string;
|
|
57
|
+
readonly blur: string;
|
|
56
58
|
readonly paper: "#000";
|
|
57
59
|
};
|
|
58
60
|
readonly chips: {
|
|
@@ -62,35 +64,40 @@ export declare const colorsLight: {
|
|
|
62
64
|
readonly warning: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
63
65
|
readonly default: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
64
66
|
readonly forest: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
67
|
+
readonly pink: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
68
|
+
readonly orange: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
69
|
+
readonly candy: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
70
|
+
readonly persianGreen: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
71
|
+
readonly aqua: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
65
72
|
readonly disabled: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
66
73
|
readonly primary: {
|
|
67
74
|
readonly outlined: {
|
|
68
|
-
readonly color:
|
|
69
|
-
readonly backgroundColor:
|
|
70
|
-
readonly backgroundHover:
|
|
71
|
-
readonly backgroundActive:
|
|
72
|
-
readonly colorTone:
|
|
73
|
-
readonly backgroundColorTone:
|
|
74
|
-
readonly backgroundHoverTone:
|
|
75
|
-
readonly backgroundActiveTone:
|
|
75
|
+
readonly color: string;
|
|
76
|
+
readonly backgroundColor: string;
|
|
77
|
+
readonly backgroundHover: string;
|
|
78
|
+
readonly backgroundActive: string;
|
|
79
|
+
readonly colorTone: string;
|
|
80
|
+
readonly backgroundColorTone: string;
|
|
81
|
+
readonly backgroundHoverTone: string;
|
|
82
|
+
readonly backgroundActiveTone: string;
|
|
76
83
|
};
|
|
77
84
|
readonly contained: {
|
|
78
|
-
readonly color:
|
|
79
|
-
readonly backgroundColor:
|
|
80
|
-
readonly backgroundHover:
|
|
81
|
-
readonly backgroundActive:
|
|
82
|
-
readonly colorTone:
|
|
83
|
-
readonly backgroundColorTone:
|
|
84
|
-
readonly backgroundHoverTone:
|
|
85
|
-
readonly backgroundActiveTone:
|
|
85
|
+
readonly color: string;
|
|
86
|
+
readonly backgroundColor: string;
|
|
87
|
+
readonly backgroundHover: string;
|
|
88
|
+
readonly backgroundActive: string;
|
|
89
|
+
readonly colorTone: string;
|
|
90
|
+
readonly backgroundColorTone: string;
|
|
91
|
+
readonly backgroundHoverTone: string;
|
|
92
|
+
readonly backgroundActiveTone: string;
|
|
86
93
|
};
|
|
87
94
|
};
|
|
88
95
|
};
|
|
89
96
|
readonly border: {
|
|
90
97
|
readonly main: string;
|
|
98
|
+
readonly dens: string;
|
|
91
99
|
readonly default: string;
|
|
92
100
|
readonly secondary: string;
|
|
93
|
-
readonly dens: string;
|
|
94
101
|
readonly disabled: string;
|
|
95
102
|
readonly error: string;
|
|
96
103
|
};
|
|
@@ -238,6 +245,8 @@ export declare const colorsLight: {
|
|
|
238
245
|
readonly surface: string;
|
|
239
246
|
readonly hover: string;
|
|
240
247
|
readonly backdrop: string;
|
|
248
|
+
readonly base: string;
|
|
249
|
+
readonly blur: string;
|
|
241
250
|
readonly paper: "#000";
|
|
242
251
|
};
|
|
243
252
|
readonly chips: {
|
|
@@ -247,35 +256,40 @@ export declare const colorsLight: {
|
|
|
247
256
|
readonly warning: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
248
257
|
readonly default: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
249
258
|
readonly forest: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
259
|
+
readonly pink: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
260
|
+
readonly orange: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
261
|
+
readonly candy: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
262
|
+
readonly persianGreen: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
263
|
+
readonly aqua: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
250
264
|
readonly disabled: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
251
265
|
readonly primary: {
|
|
252
266
|
readonly outlined: {
|
|
253
|
-
readonly color:
|
|
254
|
-
readonly backgroundColor:
|
|
255
|
-
readonly backgroundHover:
|
|
256
|
-
readonly backgroundActive:
|
|
257
|
-
readonly colorTone:
|
|
258
|
-
readonly backgroundColorTone:
|
|
259
|
-
readonly backgroundHoverTone:
|
|
260
|
-
readonly backgroundActiveTone:
|
|
267
|
+
readonly color: string;
|
|
268
|
+
readonly backgroundColor: string;
|
|
269
|
+
readonly backgroundHover: string;
|
|
270
|
+
readonly backgroundActive: string;
|
|
271
|
+
readonly colorTone: string;
|
|
272
|
+
readonly backgroundColorTone: string;
|
|
273
|
+
readonly backgroundHoverTone: string;
|
|
274
|
+
readonly backgroundActiveTone: string;
|
|
261
275
|
};
|
|
262
276
|
readonly contained: {
|
|
263
|
-
readonly color:
|
|
264
|
-
readonly backgroundColor:
|
|
265
|
-
readonly backgroundHover:
|
|
266
|
-
readonly backgroundActive:
|
|
267
|
-
readonly colorTone:
|
|
268
|
-
readonly backgroundColorTone:
|
|
269
|
-
readonly backgroundHoverTone:
|
|
270
|
-
readonly backgroundActiveTone:
|
|
277
|
+
readonly color: string;
|
|
278
|
+
readonly backgroundColor: string;
|
|
279
|
+
readonly backgroundHover: string;
|
|
280
|
+
readonly backgroundActive: string;
|
|
281
|
+
readonly colorTone: string;
|
|
282
|
+
readonly backgroundColorTone: string;
|
|
283
|
+
readonly backgroundHoverTone: string;
|
|
284
|
+
readonly backgroundActiveTone: string;
|
|
271
285
|
};
|
|
272
286
|
};
|
|
273
287
|
};
|
|
274
288
|
readonly border: {
|
|
275
289
|
readonly main: string;
|
|
276
|
-
readonly default: string;
|
|
277
|
-
readonly secondary: string;
|
|
278
290
|
readonly dens: string;
|
|
291
|
+
readonly default: string | undefined;
|
|
292
|
+
readonly secondary: string;
|
|
279
293
|
readonly disabled: string;
|
|
280
294
|
readonly error: string;
|
|
281
295
|
};
|
|
@@ -424,6 +438,8 @@ export declare const colorsDark: {
|
|
|
424
438
|
readonly surface: string;
|
|
425
439
|
readonly hover: string;
|
|
426
440
|
readonly backdrop: string;
|
|
441
|
+
readonly base: string;
|
|
442
|
+
readonly blur: string;
|
|
427
443
|
readonly paper: "#000";
|
|
428
444
|
};
|
|
429
445
|
readonly chips: {
|
|
@@ -433,35 +449,40 @@ export declare const colorsDark: {
|
|
|
433
449
|
readonly warning: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
434
450
|
readonly default: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
435
451
|
readonly forest: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
452
|
+
readonly pink: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
453
|
+
readonly orange: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
454
|
+
readonly candy: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
455
|
+
readonly persianGreen: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
456
|
+
readonly aqua: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
436
457
|
readonly disabled: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
437
458
|
readonly primary: {
|
|
438
459
|
readonly outlined: {
|
|
439
|
-
readonly color:
|
|
440
|
-
readonly backgroundColor:
|
|
441
|
-
readonly backgroundHover:
|
|
442
|
-
readonly backgroundActive:
|
|
443
|
-
readonly colorTone:
|
|
444
|
-
readonly backgroundColorTone:
|
|
445
|
-
readonly backgroundHoverTone:
|
|
446
|
-
readonly backgroundActiveTone:
|
|
460
|
+
readonly color: string;
|
|
461
|
+
readonly backgroundColor: string;
|
|
462
|
+
readonly backgroundHover: string;
|
|
463
|
+
readonly backgroundActive: string;
|
|
464
|
+
readonly colorTone: string;
|
|
465
|
+
readonly backgroundColorTone: string;
|
|
466
|
+
readonly backgroundHoverTone: string;
|
|
467
|
+
readonly backgroundActiveTone: string;
|
|
447
468
|
};
|
|
448
469
|
readonly contained: {
|
|
449
|
-
readonly color:
|
|
450
|
-
readonly backgroundColor:
|
|
451
|
-
readonly backgroundHover:
|
|
452
|
-
readonly backgroundActive:
|
|
453
|
-
readonly colorTone:
|
|
454
|
-
readonly backgroundColorTone:
|
|
455
|
-
readonly backgroundHoverTone:
|
|
456
|
-
readonly backgroundActiveTone:
|
|
470
|
+
readonly color: string;
|
|
471
|
+
readonly backgroundColor: string;
|
|
472
|
+
readonly backgroundHover: string;
|
|
473
|
+
readonly backgroundActive: string;
|
|
474
|
+
readonly colorTone: string;
|
|
475
|
+
readonly backgroundColorTone: string;
|
|
476
|
+
readonly backgroundHoverTone: string;
|
|
477
|
+
readonly backgroundActiveTone: string;
|
|
457
478
|
};
|
|
458
479
|
};
|
|
459
480
|
};
|
|
460
481
|
readonly border: {
|
|
461
482
|
readonly main: string;
|
|
483
|
+
readonly dens: string;
|
|
462
484
|
readonly default: string;
|
|
463
485
|
readonly secondary: string;
|
|
464
|
-
readonly dens: string;
|
|
465
486
|
readonly disabled: string;
|
|
466
487
|
readonly error: string;
|
|
467
488
|
};
|
|
@@ -609,6 +630,8 @@ export declare const colorsDark: {
|
|
|
609
630
|
readonly surface: string;
|
|
610
631
|
readonly hover: string;
|
|
611
632
|
readonly backdrop: string;
|
|
633
|
+
readonly base: string;
|
|
634
|
+
readonly blur: string;
|
|
612
635
|
readonly paper: "#000";
|
|
613
636
|
};
|
|
614
637
|
readonly chips: {
|
|
@@ -618,35 +641,40 @@ export declare const colorsDark: {
|
|
|
618
641
|
readonly warning: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
619
642
|
readonly default: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
620
643
|
readonly forest: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
644
|
+
readonly pink: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
645
|
+
readonly orange: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
646
|
+
readonly candy: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
647
|
+
readonly persianGreen: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
648
|
+
readonly aqua: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
621
649
|
readonly disabled: Record<import('@m4l/styles').ChipColorVariant, import('@m4l/styles').ChipColor>;
|
|
622
650
|
readonly primary: {
|
|
623
651
|
readonly outlined: {
|
|
624
|
-
readonly color:
|
|
625
|
-
readonly backgroundColor:
|
|
626
|
-
readonly backgroundHover:
|
|
627
|
-
readonly backgroundActive:
|
|
628
|
-
readonly colorTone:
|
|
629
|
-
readonly backgroundColorTone:
|
|
630
|
-
readonly backgroundHoverTone:
|
|
631
|
-
readonly backgroundActiveTone:
|
|
652
|
+
readonly color: string;
|
|
653
|
+
readonly backgroundColor: string;
|
|
654
|
+
readonly backgroundHover: string;
|
|
655
|
+
readonly backgroundActive: string;
|
|
656
|
+
readonly colorTone: string;
|
|
657
|
+
readonly backgroundColorTone: string;
|
|
658
|
+
readonly backgroundHoverTone: string;
|
|
659
|
+
readonly backgroundActiveTone: string;
|
|
632
660
|
};
|
|
633
661
|
readonly contained: {
|
|
634
|
-
readonly color:
|
|
635
|
-
readonly backgroundColor:
|
|
636
|
-
readonly backgroundHover:
|
|
637
|
-
readonly backgroundActive:
|
|
638
|
-
readonly colorTone:
|
|
639
|
-
readonly backgroundColorTone:
|
|
640
|
-
readonly backgroundHoverTone:
|
|
641
|
-
readonly backgroundActiveTone:
|
|
662
|
+
readonly color: string;
|
|
663
|
+
readonly backgroundColor: string;
|
|
664
|
+
readonly backgroundHover: string;
|
|
665
|
+
readonly backgroundActive: string;
|
|
666
|
+
readonly colorTone: string;
|
|
667
|
+
readonly backgroundColorTone: string;
|
|
668
|
+
readonly backgroundHoverTone: string;
|
|
669
|
+
readonly backgroundActiveTone: string;
|
|
642
670
|
};
|
|
643
671
|
};
|
|
644
672
|
};
|
|
645
673
|
readonly border: {
|
|
646
674
|
readonly main: string;
|
|
647
|
-
readonly default: string;
|
|
648
|
-
readonly secondary: string;
|
|
649
675
|
readonly dens: string;
|
|
676
|
+
readonly default: string | undefined;
|
|
677
|
+
readonly secondary: string;
|
|
650
678
|
readonly disabled: string;
|
|
651
679
|
readonly error: string;
|
|
652
680
|
};
|
|
@@ -16,7 +16,7 @@ function DynamicTabs(props) {
|
|
|
16
16
|
onChange: (_e, value) => handleChangeTab(value),
|
|
17
17
|
children: finalTabs.map((tab) => {
|
|
18
18
|
const { value, tabProps } = tab;
|
|
19
|
-
return /* @__PURE__ */ jsx(Tab, { value,
|
|
19
|
+
return /* @__PURE__ */ jsx(Tab, { value, ...tabProps }, value);
|
|
20
20
|
})
|
|
21
21
|
}
|
|
22
22
|
),
|
|
@@ -19,8 +19,8 @@ function ModuleDetailTabs(props) {
|
|
|
19
19
|
allowScrollButtonsMobile: true,
|
|
20
20
|
onChange: (_e, value) => handleChangeTab(value),
|
|
21
21
|
children: finalTabs.map((tab) => {
|
|
22
|
-
const { value, label } = tab;
|
|
23
|
-
return /* @__PURE__ */ jsx(Tab, { value, label }, value);
|
|
22
|
+
const { value, label, icon } = tab;
|
|
23
|
+
return /* @__PURE__ */ jsx(Tab, { value, label, icon }, value);
|
|
24
24
|
})
|
|
25
25
|
}
|
|
26
26
|
),
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { ModuleDetailTabs } from './ModuleDetailTabs';
|
|
2
|
-
export type { ModuleDatailTab, ModuleDetailObjectLogs, ModuleDetailTabContent, ModuleDetailTabsProps } from './types';
|
|
2
|
+
export type { ModuleDatailTab, ModuleDetailObjectLogs, ModuleDetailOtherObjectLogs, ModuleDetailM4LObjectLogs, ModuleDetailTabContent, ModuleDetailTabsProps } from './types';
|
|
@@ -38,13 +38,14 @@ function useModuleDetailTabs(props) {
|
|
|
38
38
|
value: "objectLogs",
|
|
39
39
|
tabContent: ObjectLogs,
|
|
40
40
|
unmountable: false,
|
|
41
|
-
componentProps
|
|
41
|
+
componentProps,
|
|
42
|
+
icon: "/main/na/icons/i_common_master_detail_layout_detail_tab_logs"
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
return arrTabs.map((tab) => ({
|
|
45
46
|
...tab,
|
|
46
47
|
unmountable: tab.unmountable === void 0 ? true : tab.unmountable,
|
|
47
|
-
icon: typeof tab.icon === "string" ? /* @__PURE__ */ jsx(Icon, { src: `${urlAssetsPrefix}
|
|
48
|
+
icon: typeof tab.icon === "string" ? /* @__PURE__ */ jsx(Icon, { src: `${urlAssetsPrefix}${tab.icon}` }) : tab.icon,
|
|
48
49
|
label: tab.dictionaryId ? getLabel(tab.dictionaryId) : void 0
|
|
49
50
|
}));
|
|
50
51
|
}, [masterSelection, tabs, objectLogsProps, urlAssetsPrefix, getLabel]);
|
package/hooks/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getformAddEditDictionary: () => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useFormAddEdit';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NetworkProps } from '@m4l/core';
|
|
2
|
+
import { FieldValues } from 'react-hook-form';
|
|
3
|
+
export type ResponseEndpoint<TEndpointValues = FieldValues> = {
|
|
4
|
+
data: TEndpointValues;
|
|
5
|
+
};
|
|
6
|
+
export interface UseFormAddEditProps<TValues = FieldValues, TEndpointValues = FieldValues> {
|
|
7
|
+
/**
|
|
8
|
+
* Id del objeto, si se define, se llama al endpoint para obtener los datos
|
|
9
|
+
*/
|
|
10
|
+
objectId?: number | string;
|
|
11
|
+
/**
|
|
12
|
+
* Valores iniciales del formulario
|
|
13
|
+
*/
|
|
14
|
+
initialValues: TValues;
|
|
15
|
+
/**
|
|
16
|
+
* Funcion para formatear los datos del endpoint
|
|
17
|
+
*/
|
|
18
|
+
formatDataEndpoint?: (response: ResponseEndpoint<TEndpointValues>) => TValues;
|
|
19
|
+
/**
|
|
20
|
+
* Si se define en true, no se llama al endpoint
|
|
21
|
+
*/
|
|
22
|
+
omitCallEnpoint?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Props para llamar al networkOperation
|
|
25
|
+
*/
|
|
26
|
+
networkProps: NetworkProps;
|
|
27
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { UseFormAddEditProps } from './types';
|
|
2
|
+
import { FormStatusLoad } from '@m4l/components';
|
|
3
|
+
import { FieldValues } from 'react-hook-form';
|
|
4
|
+
/**
|
|
5
|
+
* TODO: Documentar
|
|
6
|
+
*/
|
|
7
|
+
export declare function useFormAddEdit<TValues extends FieldValues = FieldValues, TEndpointValues extends FieldValues = FieldValues>(props: UseFormAddEditProps<TValues, TEndpointValues>): {
|
|
8
|
+
formValues: TValues;
|
|
9
|
+
statusLoad: FormStatusLoad;
|
|
10
|
+
refresh: () => void;
|
|
11
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useNetwork, useFlagsStore, useModuleDictionary } from "@m4l/core";
|
|
3
|
+
import { useState, useCallback, useEffect } from "react";
|
|
4
|
+
import { useModal, WindowConfirm } from "@m4l/components";
|
|
5
|
+
function useFormAddEdit(props) {
|
|
6
|
+
const {
|
|
7
|
+
initialValues,
|
|
8
|
+
objectId,
|
|
9
|
+
networkProps,
|
|
10
|
+
formatDataEndpoint,
|
|
11
|
+
omitCallEnpoint = false
|
|
12
|
+
} = props;
|
|
13
|
+
const { openModal, closeModal } = useModal();
|
|
14
|
+
const [formValues, setFormValues] = useState(initialValues);
|
|
15
|
+
const [statusLoad, setStatusLoad] = useState(
|
|
16
|
+
objectId === void 0 ? "new" : "edit"
|
|
17
|
+
);
|
|
18
|
+
const { networkOperation } = useNetwork();
|
|
19
|
+
const addFlag = useFlagsStore((state) => state.flagsActions.addFlag);
|
|
20
|
+
const { getLabel } = useModuleDictionary();
|
|
21
|
+
const refresh = useCallback(() => {
|
|
22
|
+
if (statusLoad === "ready") {
|
|
23
|
+
setStatusLoad("edit");
|
|
24
|
+
}
|
|
25
|
+
}, [statusLoad]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
let mounted = true;
|
|
28
|
+
if (statusLoad === "edit") {
|
|
29
|
+
if (omitCallEnpoint) {
|
|
30
|
+
addFlag("form_loaded");
|
|
31
|
+
setStatusLoad("ready");
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
networkOperation(networkProps).then(
|
|
35
|
+
(response) => {
|
|
36
|
+
if (mounted) {
|
|
37
|
+
if (formatDataEndpoint) {
|
|
38
|
+
setFormValues(formatDataEndpoint(response));
|
|
39
|
+
} else {
|
|
40
|
+
setFormValues(response.data);
|
|
41
|
+
}
|
|
42
|
+
setStatusLoad("reload_values_provider");
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
() => {
|
|
46
|
+
setStatusLoad("error");
|
|
47
|
+
openModal({
|
|
48
|
+
window: /* @__PURE__ */ jsx(
|
|
49
|
+
WindowConfirm,
|
|
50
|
+
{
|
|
51
|
+
variant: "error",
|
|
52
|
+
title: getLabel("form_add_edit.label_error_title"),
|
|
53
|
+
msg: getLabel("form_add_edit.error_authorization_message"),
|
|
54
|
+
onClickIntro: () => closeModal()
|
|
55
|
+
}
|
|
56
|
+
),
|
|
57
|
+
variant: "delete"
|
|
58
|
+
});
|
|
59
|
+
addFlag("form_loaded");
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
} else if (statusLoad === "new" || statusLoad === "reload_values_provider") {
|
|
63
|
+
addFlag("form_loaded");
|
|
64
|
+
setStatusLoad("ready");
|
|
65
|
+
}
|
|
66
|
+
return () => {
|
|
67
|
+
mounted = false;
|
|
68
|
+
};
|
|
69
|
+
}, [statusLoad]);
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (statusLoad === "ready" && objectId !== void 0) {
|
|
72
|
+
setStatusLoad("edit");
|
|
73
|
+
}
|
|
74
|
+
}, [objectId]);
|
|
75
|
+
return { formValues, statusLoad, refresh };
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
useFormAddEdit as u
|
|
79
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/index.js
CHANGED
|
@@ -14,6 +14,7 @@ import { u as u2 } from "./hooks/useModule/index.js";
|
|
|
14
14
|
import { u as u3 } from "./hooks/useDynamicAccordions/useDynamicAccordions.js";
|
|
15
15
|
import { c, u as u4 } from "./hooks/useDynamicPaperForm/useDynamicPaperForm.js";
|
|
16
16
|
import { u as u5 } from "./hooks/useNetworkActionConfirm/useNetworkActionConfirm.js";
|
|
17
|
+
import { u as u6 } from "./hooks/useFormAddEdit/useFormAddEdit.js";
|
|
17
18
|
import { c as c2 } from "./utils/createAppMF.js";
|
|
18
19
|
export {
|
|
19
20
|
D as DynamicTabs,
|
|
@@ -33,6 +34,7 @@ export {
|
|
|
33
34
|
g3 as getNoAuthModuleLayoutComponentsDictionary,
|
|
34
35
|
u3 as useDynamicAccordions,
|
|
35
36
|
u4 as useDynamicPaperForm,
|
|
37
|
+
u6 as useFormAddEdit,
|
|
36
38
|
u as useMasterDetail,
|
|
37
39
|
u2 as useModule,
|
|
38
40
|
u5 as useNetworkActionConfirm
|
|
@@ -17,6 +17,7 @@ function MasterDetailLayout(props) {
|
|
|
17
17
|
detailComponent,
|
|
18
18
|
moduleActions,
|
|
19
19
|
version,
|
|
20
|
+
buildTime,
|
|
20
21
|
splitPosition
|
|
21
22
|
} = props;
|
|
22
23
|
const { host_static_assets, environment_assets } = useEnvironment();
|
|
@@ -28,39 +29,41 @@ function MasterDetailLayout(props) {
|
|
|
28
29
|
setSplitPositionState(newPostion);
|
|
29
30
|
}, []);
|
|
30
31
|
const splitActions = useMemo(
|
|
31
|
-
() =>
|
|
32
|
-
{
|
|
33
|
-
|
|
34
|
-
onClick: () => onChangePostionInternal("vertical"),
|
|
35
|
-
visibility: "main",
|
|
36
|
-
label: getLabel(dictionary.LABEL_SPLIT_VERTICAL),
|
|
37
|
-
tag: "vertical",
|
|
38
|
-
className: "splitactions",
|
|
39
|
-
disabled: splitPositionState === "vertical",
|
|
40
|
-
key: "vertical"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
iconUrl: `${host_static_assets}/${environment_assets}/${icons.splitHorizontal}`,
|
|
44
|
-
onClick: () => onChangePostionInternal("horizontal"),
|
|
45
|
-
visibility: "main",
|
|
46
|
-
label: getLabel(dictionary.LABEL_SPLIT_HORIZONTAL),
|
|
47
|
-
tag: "horizontal",
|
|
48
|
-
className: "splitactions",
|
|
49
|
-
disabled: splitPositionState === "horizontal",
|
|
50
|
-
key: "horizontal"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
iconUrl: `${host_static_assets}/${environment_assets}/${icons.noSplit}`,
|
|
54
|
-
onClick: () => onChangePostionInternal("none"),
|
|
55
|
-
visibility: "main",
|
|
56
|
-
label: getLabel(dictionary.LABEL_NO_SPLIT),
|
|
57
|
-
tag: "none",
|
|
58
|
-
className: "splitactions",
|
|
59
|
-
disabled: splitPositionState === "none",
|
|
60
|
-
key: "none"
|
|
32
|
+
() => {
|
|
33
|
+
if (isMobile) {
|
|
34
|
+
return [];
|
|
61
35
|
}
|
|
62
|
-
|
|
63
|
-
|
|
36
|
+
return [
|
|
37
|
+
{
|
|
38
|
+
iconUrl: `${host_static_assets}/${environment_assets}/${icons.splitVertical}`,
|
|
39
|
+
onClick: () => onChangePostionInternal("vertical"),
|
|
40
|
+
label: getLabel(dictionary.LABEL_SPLIT_VERTICAL),
|
|
41
|
+
className: "splitactions",
|
|
42
|
+
checkable: true,
|
|
43
|
+
checked: splitPositionState === "vertical",
|
|
44
|
+
key: "vertical"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
iconUrl: `${host_static_assets}/${environment_assets}/${icons.splitHorizontal}`,
|
|
48
|
+
onClick: () => onChangePostionInternal("horizontal"),
|
|
49
|
+
label: getLabel(dictionary.LABEL_SPLIT_HORIZONTAL),
|
|
50
|
+
className: "splitactions",
|
|
51
|
+
checkable: true,
|
|
52
|
+
checked: splitPositionState === "horizontal",
|
|
53
|
+
key: "horizontal"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
iconUrl: `${host_static_assets}/${environment_assets}/${icons.noSplit}`,
|
|
57
|
+
onClick: () => onChangePostionInternal("none"),
|
|
58
|
+
label: getLabel(dictionary.LABEL_NO_SPLIT),
|
|
59
|
+
className: "splitactions",
|
|
60
|
+
checkable: true,
|
|
61
|
+
checked: splitPositionState === "none",
|
|
62
|
+
key: "none"
|
|
63
|
+
}
|
|
64
|
+
];
|
|
65
|
+
},
|
|
66
|
+
[isMobile, host_static_assets, environment_assets, getLabel, splitPositionState, onChangePostionInternal]
|
|
64
67
|
);
|
|
65
68
|
const onClickViewDetail = useCallback(() => {
|
|
66
69
|
moduleLayoutRef.current?.openModal({
|
|
@@ -80,11 +83,12 @@ function MasterDetailLayout(props) {
|
|
|
80
83
|
}, [detailComponent, getLabel]);
|
|
81
84
|
const finalModuleActions = useMemo(() => {
|
|
82
85
|
const actions = getTotalModuleActions(
|
|
86
|
+
splitPositionState,
|
|
83
87
|
splitActions,
|
|
84
88
|
moduleActions
|
|
85
89
|
);
|
|
86
90
|
return actions;
|
|
87
|
-
}, [splitActions, moduleActions]);
|
|
91
|
+
}, [splitActions, moduleActions, splitPositionState]);
|
|
88
92
|
const classRoot = getComponentSlotRoot(MASTER_DETAIL_LAYOUT_PREFIX);
|
|
89
93
|
return /* @__PURE__ */ jsx(MasterDetailProvider, { onClickViewDetail, children: /* @__PURE__ */ jsx(MasterDetailLayoutRootStyled, { className: classRoot, children: /* @__PURE__ */ jsx(
|
|
90
94
|
ModuleLayout,
|
|
@@ -93,6 +97,7 @@ function MasterDetailLayout(props) {
|
|
|
93
97
|
moduleId,
|
|
94
98
|
moduleActions: finalModuleActions,
|
|
95
99
|
version,
|
|
100
|
+
buildTime,
|
|
96
101
|
children: /* @__PURE__ */ jsx(
|
|
97
102
|
SplitLayout,
|
|
98
103
|
{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ModuleAction } from '@m4l/components';
|
|
1
|
+
import { ModuleAction, GroupActionMenuItem } from '@m4l/components';
|
|
2
2
|
/**
|
|
3
3
|
* Obtiene las acciones totales del modulo
|
|
4
4
|
*/
|
|
5
|
-
export declare function getTotalModuleActions(splitActions:
|
|
5
|
+
export declare function getTotalModuleActions(selectedActionKey: string, splitActions: GroupActionMenuItem[], moduleActions?: ModuleAction[]): ModuleAction[];
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
function getTotalModuleActions(splitActions, moduleActions = []) {
|
|
2
|
-
let totalActions = [
|
|
3
|
-
|
|
1
|
+
function getTotalModuleActions(selectedActionKey, splitActions, moduleActions = []) {
|
|
2
|
+
let totalActions = [];
|
|
3
|
+
const groupAction = {
|
|
4
|
+
type: "groupActions",
|
|
5
|
+
actions: splitActions,
|
|
6
|
+
key: "splitActions",
|
|
7
|
+
selectedActionKey,
|
|
8
|
+
visibility: "main"
|
|
9
|
+
};
|
|
10
|
+
totalActions = moduleActions.concat(groupAction);
|
|
4
11
|
return totalActions;
|
|
5
12
|
}
|
|
6
13
|
export {
|
|
@@ -4,7 +4,7 @@ import { forwardRef, useRef, useImperativeHandle } from "react";
|
|
|
4
4
|
import { B as BaseModuleLayout } from "./subcomponents/BaseModuleLayout/index.js";
|
|
5
5
|
import { a as ModuleProvider } from "./contexts/ModuleContext/index.js";
|
|
6
6
|
const ModuleLayout = forwardRef((props, ref) => {
|
|
7
|
-
const { moduleId, moduleActions, version, children } = props;
|
|
7
|
+
const { moduleId, moduleActions, version, children, buildTime } = props;
|
|
8
8
|
const moduleRef = useRef(null);
|
|
9
9
|
const closeModal = () => {
|
|
10
10
|
moduleRef.current?.closeModal();
|
|
@@ -17,7 +17,16 @@ const ModuleLayout = forwardRef((props, ref) => {
|
|
|
17
17
|
closeModal,
|
|
18
18
|
current: moduleRef.current
|
|
19
19
|
}));
|
|
20
|
-
return /* @__PURE__ */ jsx(
|
|
20
|
+
return /* @__PURE__ */ jsx(
|
|
21
|
+
ModuleProvider,
|
|
22
|
+
{
|
|
23
|
+
moduleId,
|
|
24
|
+
moduleActions,
|
|
25
|
+
version,
|
|
26
|
+
buildTime,
|
|
27
|
+
children: /* @__PURE__ */ jsx(ModalProvider, { children: /* @__PURE__ */ jsx(BaseModuleLayout, { ref: moduleRef, children }) })
|
|
28
|
+
}
|
|
29
|
+
);
|
|
21
30
|
});
|
|
22
31
|
export {
|
|
23
32
|
ModuleLayout as M
|
|
@@ -4,7 +4,7 @@ import { createContext, useRef, useEffect } from "react";
|
|
|
4
4
|
import { c as createModuleLayoutStore } from "./store.js";
|
|
5
5
|
const ModuleContext = createContext(null);
|
|
6
6
|
function ModuleProvider(props) {
|
|
7
|
-
const { children, moduleActions, moduleId, version } = props;
|
|
7
|
+
const { children, moduleActions, moduleId, version, buildTime } = props;
|
|
8
8
|
const { setActions } = useWindowToolsMF();
|
|
9
9
|
const moduleLayoutStoreRef = useRef();
|
|
10
10
|
useEffect(() => {
|
|
@@ -17,6 +17,7 @@ function ModuleProvider(props) {
|
|
|
17
17
|
moduleActions,
|
|
18
18
|
moduleId,
|
|
19
19
|
version,
|
|
20
|
+
buildTime,
|
|
20
21
|
setActions
|
|
21
22
|
});
|
|
22
23
|
moduleLayoutStoreRef.current.getState().init();
|
|
@@ -10,7 +10,7 @@ const createDevtools = (immerMiddlewere, config) => {
|
|
|
10
10
|
return immerMiddlewere;
|
|
11
11
|
};
|
|
12
12
|
const createModuleLayoutStore = (initProps, storeDevtoolsEnabled = false) => {
|
|
13
|
-
const { moduleActions, moduleId, version, setActions } = initProps;
|
|
13
|
+
const { moduleActions, moduleId, version, setActions, buildTime } = initProps;
|
|
14
14
|
const startProps = {
|
|
15
15
|
configOptions: {
|
|
16
16
|
moduleId
|
|
@@ -18,7 +18,8 @@ const createModuleLayoutStore = (initProps, storeDevtoolsEnabled = false) => {
|
|
|
18
18
|
dynamicActions: [],
|
|
19
19
|
finalModuleActions: [],
|
|
20
20
|
moduleActions: [],
|
|
21
|
-
version
|
|
21
|
+
version,
|
|
22
|
+
buildTime
|
|
22
23
|
};
|
|
23
24
|
return create(
|
|
24
25
|
createDevtools(
|
|
@@ -40,7 +41,7 @@ const createModuleLayoutStore = (initProps, storeDevtoolsEnabled = false) => {
|
|
|
40
41
|
const actionsConcatenated = (moduleActions || []).concat(dynamicActions);
|
|
41
42
|
state.dynamicActions = dynamicActions;
|
|
42
43
|
state.finalModuleActions = actionsConcatenated;
|
|
43
|
-
setActions(actionsConcatenated, state.version);
|
|
44
|
+
setActions(actionsConcatenated, state.version, state.buildTime);
|
|
44
45
|
});
|
|
45
46
|
},
|
|
46
47
|
/**
|
|
@@ -51,7 +52,7 @@ const createModuleLayoutStore = (initProps, storeDevtoolsEnabled = false) => {
|
|
|
51
52
|
const actionsConcatenated = newModuleActions.concat(state.dynamicActions);
|
|
52
53
|
state.moduleActions = moduleActions;
|
|
53
54
|
state.finalModuleActions = actionsConcatenated;
|
|
54
|
-
setActions(actionsConcatenated, state.version);
|
|
55
|
+
setActions(actionsConcatenated, state.version, state.buildTime);
|
|
55
56
|
});
|
|
56
57
|
}
|
|
57
58
|
})),
|
|
@@ -5,7 +5,9 @@ export interface ModuleLayoutContextStateProps {
|
|
|
5
5
|
}
|
|
6
6
|
export interface ModuleLayoutProviderProps extends Omit<ModuleLayoutContextStateProps, 'init'> {
|
|
7
7
|
children: ReactNode;
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* "moduleActions" acciones del módulo
|
|
10
|
+
*/
|
|
9
11
|
moduleActions?: ModuleAction[];
|
|
10
12
|
/**
|
|
11
13
|
* "storeId" identificador del store
|
|
@@ -15,6 +17,14 @@ export interface ModuleLayoutProviderProps extends Omit<ModuleLayoutContextState
|
|
|
15
17
|
* "storeDevtoolsEnabled" determina si se debe usar devtools para el store
|
|
16
18
|
*/
|
|
17
19
|
storeDevtoolsEnabled?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* "version" versión del módulo
|
|
22
|
+
*/
|
|
23
|
+
version: string;
|
|
24
|
+
/**
|
|
25
|
+
* "buildTime" fecha de compilación del módulo
|
|
26
|
+
*/
|
|
27
|
+
buildTime?: string;
|
|
18
28
|
}
|
|
19
29
|
export interface ModuleLayoutContextProps extends ModuleLayoutContextStateProps {
|
|
20
30
|
setDynamicActions: (dynamicActions: ModuleAction[]) => void;
|
|
@@ -40,6 +50,10 @@ export interface ModuleLayoutState extends Pick<ModuleLayoutProviderProps, 'stor
|
|
|
40
50
|
* "version" Versión del módulo
|
|
41
51
|
*/
|
|
42
52
|
version: string;
|
|
53
|
+
/**
|
|
54
|
+
* "buildTime" fecha de compilación del módulo
|
|
55
|
+
*/
|
|
56
|
+
buildTime?: string;
|
|
43
57
|
}
|
|
44
58
|
export interface ModuleLayoutStateWithActions extends ModuleLayoutState {
|
|
45
59
|
/**
|
|
@@ -55,4 +69,4 @@ export interface ModuleLayoutStateWithActions extends ModuleLayoutState {
|
|
|
55
69
|
*/
|
|
56
70
|
updateModuleActions: (moduleActions: ModuleAction[]) => void;
|
|
57
71
|
}
|
|
58
|
-
export type InitialModuleLayoutStoreProps = Pick<ModuleLayoutState, 'moduleActions' | 'version' | 'storeId'> & Pick<WindowToolsMF, 'setActions'> & ModuleLayoutContextStateProps;
|
|
72
|
+
export type InitialModuleLayoutStoreProps = Pick<ModuleLayoutState, 'moduleActions' | 'version' | 'storeId' | 'buildTime'> & Pick<WindowToolsMF, 'setActions'> & ModuleLayoutContextStateProps;
|
|
@@ -18,6 +18,7 @@ export interface ModuleLayoutProps {
|
|
|
18
18
|
moduleActions?: ModuleAction[];
|
|
19
19
|
children: ReactNode;
|
|
20
20
|
version: string;
|
|
21
|
+
buildTime?: string;
|
|
21
22
|
}
|
|
22
23
|
export type ModuleLayoutSlotsType = keyof typeof ModuleLayoutSlots;
|
|
23
24
|
export type ModuleLayoutStyles = OverridesStyleRules<ModuleLayoutSlotsType, typeof MODULE_LAYOUT_KEY, Theme>;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m4l/layouts",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.3.0-beta.1",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"author": "M4L Team ",
|
|
6
6
|
"lint-staged": {
|
|
7
7
|
"*.{js,ts,tsx}": "eslint --fix --max-warnings 0"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@m4l/components": "
|
|
10
|
+
"@m4l/components": "9.2.54-beta.2",
|
|
11
11
|
"@m4l/core": "^2.0.0",
|
|
12
12
|
"@m4l/graphics": "^7.0.0",
|
|
13
13
|
"@m4l/styles": "^7.0.0"
|