@acvl/frontend-components 0.0.24 → 0.0.26
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/dist/cjs/index.js +639 -529
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/src/components/v1/buttons/CreateButton/CreateButtonWithMenuOptions.d.ts +3 -2
- package/dist/cjs/types/src/components/v1/buttons/DeleteButton/DeleteButton.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/buttons/NormalOrIcon/NormalOrIcon.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/datagrids/Base/index.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/datagrids/columns/deleteColumn.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/datagrids/columns/editColumn.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/datagrids/custom_slots/CustomToolbar/index.d.ts +3 -3
- package/dist/cjs/types/src/components/v1/datagrids/custom_slots/CustomToolbar/slots/ExportButton/ExportCSV.d.ts +2 -2
- package/dist/cjs/types/src/components/v1/datagrids/custom_slots/CustomToolbar/slots/ExportButton/index.d.ts +3 -3
- package/dist/cjs/types/src/components/v1/datagrids/custom_slots/CustomToolbar/slots/FiltersButton/index.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/datagrids/custom_slots/index.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/datagrids/wrappers/CreateGridWrapper.d.ts +1 -0
- package/dist/cjs/types/src/components/v1/datagrids/wrappers/EditGridWrapper.d.ts +2 -2
- package/dist/cjs/types/src/components/v1/drawers/HistorialDrawer/index.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/layout/pages/DetailPage/FieldArrayField/index.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/layout/pages/DetailPage/index.d.ts +2 -2
- package/dist/cjs/types/src/components/v1/layout/shared/Tabs/index.d.ts +1 -1
- package/dist/cjs/types/src/components/v1/lib/slices/snackProgress.d.ts +1 -1
- package/dist/esm/index.js +642 -532
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/src/components/v1/buttons/CreateButton/CreateButtonWithMenuOptions.d.ts +3 -2
- package/dist/esm/types/src/components/v1/buttons/DeleteButton/DeleteButton.d.ts +1 -1
- package/dist/esm/types/src/components/v1/buttons/NormalOrIcon/NormalOrIcon.d.ts +1 -1
- package/dist/esm/types/src/components/v1/datagrids/Base/index.d.ts +1 -1
- package/dist/esm/types/src/components/v1/datagrids/columns/deleteColumn.d.ts +1 -1
- package/dist/esm/types/src/components/v1/datagrids/columns/editColumn.d.ts +1 -1
- package/dist/esm/types/src/components/v1/datagrids/custom_slots/CustomToolbar/index.d.ts +3 -3
- package/dist/esm/types/src/components/v1/datagrids/custom_slots/CustomToolbar/slots/ExportButton/ExportCSV.d.ts +2 -2
- package/dist/esm/types/src/components/v1/datagrids/custom_slots/CustomToolbar/slots/ExportButton/index.d.ts +3 -3
- package/dist/esm/types/src/components/v1/datagrids/custom_slots/CustomToolbar/slots/FiltersButton/index.d.ts +1 -1
- package/dist/esm/types/src/components/v1/datagrids/custom_slots/index.d.ts +1 -1
- package/dist/esm/types/src/components/v1/datagrids/wrappers/CreateGridWrapper.d.ts +1 -0
- package/dist/esm/types/src/components/v1/datagrids/wrappers/EditGridWrapper.d.ts +2 -2
- package/dist/esm/types/src/components/v1/drawers/HistorialDrawer/index.d.ts +1 -1
- package/dist/esm/types/src/components/v1/layout/pages/DetailPage/FieldArrayField/index.d.ts +1 -1
- package/dist/esm/types/src/components/v1/layout/pages/DetailPage/index.d.ts +2 -2
- package/dist/esm/types/src/components/v1/layout/shared/Tabs/index.d.ts +1 -1
- package/dist/esm/types/src/components/v1/lib/slices/snackProgress.d.ts +1 -1
- package/dist/index.d.ts +33 -16
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
-
import { useTheme, useMediaQuery, Tooltip, IconButton, Button, Grid, FormGroup, FormHelperText as FormHelperText$1, Drawer, Box, Stack, CircularProgress, Typography as Typography$1, List as List$1, ListItem as ListItem$1, ListSubheader, styled as styled$1, LinearProgress, Autocomplete, Checkbox, Slider, Switch, InputAdornment as InputAdornment$1, ToggleButtonGroup, ToggleButton, Dialog, DialogTitle, DialogContent as DialogContent$1, DialogContentText, DialogActions as DialogActions$1, ButtonGroup, Menu,
|
|
3
|
+
import { useTheme, useMediaQuery, Tooltip, IconButton, Button, Grid, FormGroup, FormHelperText as FormHelperText$1, Drawer, Box, Stack, CircularProgress, Typography as Typography$1, List as List$1, ListItem as ListItem$1, ListSubheader, styled as styled$1, LinearProgress, Autocomplete, Checkbox, Slider, Switch, InputAdornment as InputAdornment$1, ToggleButtonGroup, ToggleButton, Dialog, DialogTitle, DialogContent as DialogContent$1, DialogContentText, DialogActions as DialogActions$1, ButtonGroup, Menu, ListItemIcon, Link, Card, CardHeader, Avatar, CardContent, Divider as Divider$1, Popper, Grow as Grow$1, Paper, ClickAwayListener, Badge, TablePagination, NoSsr, tooltipClasses, Collapse, Fade as Fade$1, Slide, Zoom, Snackbar, alpha as alpha$1, lighten, createTheme as createTheme$1, responsiveFontSizes } from '@mui/material';
|
|
4
4
|
import EditIcon from '@mui/icons-material/Edit';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import React__default, { useCallback, useEffect, isValidElement, cloneElement, Children, createContext, useContext, useState, useMemo, useRef, useImperativeHandle, useLayoutEffect, Suspense, forwardRef } from 'react';
|
|
7
|
-
import { useNavigate, useLocation } from 'react-router-dom';
|
|
7
|
+
import { useNavigate, useLocation, useLoaderData } from 'react-router-dom';
|
|
8
8
|
import DeleteIcon from '@mui/icons-material/Delete';
|
|
9
9
|
import { Controller, useForm, useWatch, useFieldArray, FormProvider } from 'react-hook-form';
|
|
10
10
|
import { useSession, PageHeader, useNotifications } from '@toolpad/core';
|
|
@@ -41,7 +41,7 @@ import BaseFocusTrap from '@mui/material/Unstable_TrapFocus';
|
|
|
41
41
|
import DialogContent from '@mui/material/DialogContent';
|
|
42
42
|
import MuiDialog, { dialogClasses } from '@mui/material/Dialog';
|
|
43
43
|
import debounce from 'lodash/debounce';
|
|
44
|
-
import { get, invoke, map, find, forEach as forEach$1, findIndex, mergeWith, isArray, omit, set as set$1, every, includes as includes$1, merge as merge$2, countBy, isNumber, isEmpty as isEmpty$1, isBoolean, isEqual as isEqual$1, debounce as debounce$1, some } from 'lodash';
|
|
44
|
+
import { get, invoke, map, find, groupBy, forEach as forEach$1, findIndex, mergeWith, isArray, omit, set as set$1, every, includes as includes$1, merge as merge$2, countBy, isNumber, isEmpty as isEmpty$1, isBoolean, isEqual as isEqual$1, debounce as debounce$1, some } from 'lodash';
|
|
45
45
|
import { produce } from 'immer';
|
|
46
46
|
import set from 'lodash/set';
|
|
47
47
|
import get$1 from 'lodash/get';
|
|
@@ -73,6 +73,7 @@ import SaveIcon from '@mui/icons-material/Save';
|
|
|
73
73
|
import AddIcon from '@mui/icons-material/Add';
|
|
74
74
|
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
|
|
75
75
|
import LinearProgress$1 from '@mui/material/LinearProgress';
|
|
76
|
+
import AttachFileIcon from '@mui/icons-material/AttachFile';
|
|
76
77
|
import { useGridApiContext, ToolbarButton, QuickFilter, QuickFilterTrigger, QuickFilterControl, QuickFilterClear, ColumnsPanelTrigger, Toolbar, useGridSelector, gridPaginationSelector, GridRow, GridRowEditStartReasons, GridRowModes, GridActionsCellItem, useGridApiRef, DataGrid, GridRowEditStopReasons, GridEditSingleSelectCell, GridEditInputCell, GridEditBooleanCell } from '@mui/x-data-grid';
|
|
77
78
|
import Tooltip$1 from '@mui/material/Tooltip';
|
|
78
79
|
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
@@ -94,6 +95,7 @@ import { useSortable, SortableContext, verticalListSortingStrategy } from '@dnd-
|
|
|
94
95
|
import { CSS } from '@dnd-kit/utilities';
|
|
95
96
|
import { useSensors, useSensor, PointerSensor, DndContext, closestCenter } from '@dnd-kit/core';
|
|
96
97
|
import { restrictToVerticalAxis, restrictToWindowEdges, restrictToParentElement } from '@dnd-kit/modifiers';
|
|
98
|
+
import DrawIcon from '@mui/icons-material/Draw';
|
|
97
99
|
import CloseIcon from '@mui/icons-material/Close';
|
|
98
100
|
import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
|
|
99
101
|
import { skipToken } from '@reduxjs/toolkit/query';
|
|
@@ -104,10 +106,10 @@ import { useDispatch, useSelector } from 'react-redux';
|
|
|
104
106
|
|
|
105
107
|
const NormalOrIcon = (props) => {
|
|
106
108
|
const theme = useTheme();
|
|
107
|
-
const belowLG = useMediaQuery(theme.breakpoints.down(
|
|
108
|
-
if ((belowLG && !(props.type ==
|
|
109
|
+
const belowLG = useMediaQuery(theme.breakpoints.down("lg"));
|
|
110
|
+
if ((belowLG && !(props.type == "button")) || props.type == "icon")
|
|
109
111
|
return (jsx(Tooltip, { title: props.buttonProps.children, children: jsx(IconButton, { ...props.buttonProps, children: props.buttonProps.startIcon }) }));
|
|
110
|
-
return
|
|
112
|
+
return jsx(Button, { ...props.buttonProps });
|
|
111
113
|
};
|
|
112
114
|
|
|
113
115
|
const EditButton = () => {
|
|
@@ -117,23 +119,23 @@ const EditButton = () => {
|
|
|
117
119
|
}, [navigate]);
|
|
118
120
|
// ===== || KEYDOWN || ===== //
|
|
119
121
|
const handleKeyPress = useCallback((event) => {
|
|
120
|
-
if (event.ctrlKey && event.key ===
|
|
122
|
+
if (event.ctrlKey && event.key === "e") {
|
|
121
123
|
event.preventDefault();
|
|
122
124
|
handleClick();
|
|
123
125
|
}
|
|
124
126
|
}, [handleClick]);
|
|
125
127
|
useEffect(() => {
|
|
126
|
-
document.addEventListener(
|
|
128
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
127
129
|
return () => {
|
|
128
|
-
document.removeEventListener(
|
|
130
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
129
131
|
};
|
|
130
132
|
}, [handleKeyPress]);
|
|
131
133
|
return (jsx(NormalOrIcon, { buttonProps: {
|
|
132
|
-
color:
|
|
133
|
-
variant:
|
|
134
|
+
color: "secondary",
|
|
135
|
+
variant: "contained",
|
|
134
136
|
startIcon: jsx(EditIcon, {}),
|
|
135
137
|
onClick: handleClick,
|
|
136
|
-
children:
|
|
138
|
+
children: "Editar",
|
|
137
139
|
} }));
|
|
138
140
|
};
|
|
139
141
|
|
|
@@ -25644,9 +25646,9 @@ dayjs.locale(es);
|
|
|
25644
25646
|
dayjs.extend(duration);
|
|
25645
25647
|
|
|
25646
25648
|
// ==============================|| JSON ||============================== //
|
|
25647
|
-
const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, data, props, formType }) => {
|
|
25649
|
+
const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, data, props, formType, }) => {
|
|
25648
25650
|
const ignore = get$1(props, `${base_key}.ignore`, false);
|
|
25649
|
-
if (ignore || [
|
|
25651
|
+
if (ignore || ["obj_permissions", "has_history"].includes(base_key))
|
|
25650
25652
|
return;
|
|
25651
25653
|
const altered_key = invoke(props, `${base_key}.alter_key`, base_key);
|
|
25652
25654
|
const key = altered_key || base_key;
|
|
@@ -25664,7 +25666,7 @@ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, dat
|
|
|
25664
25666
|
case "string":
|
|
25665
25667
|
if (invoke(props, `${base_key}.extra_validation`, object))
|
|
25666
25668
|
return;
|
|
25667
|
-
setValue(response, key, isEmpty(object) ?
|
|
25669
|
+
setValue(response, key, isEmpty(object) ? "" : object);
|
|
25668
25670
|
break;
|
|
25669
25671
|
case "number":
|
|
25670
25672
|
setValue(response, key, object);
|
|
@@ -25674,28 +25676,37 @@ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, dat
|
|
|
25674
25676
|
break;
|
|
25675
25677
|
case "object":
|
|
25676
25678
|
if (isNull(object) || isEmpty(object)) {
|
|
25677
|
-
if (includes(key,
|
|
25678
|
-
setValue(response, key,
|
|
25679
|
+
if (includes(key, "after") || includes(key, "before"))
|
|
25680
|
+
setValue(response, key, "");
|
|
25679
25681
|
else
|
|
25680
25682
|
setValue(response, key, object);
|
|
25681
25683
|
}
|
|
25684
|
+
else if (object instanceof File) {
|
|
25685
|
+
setValue(response, key, object);
|
|
25686
|
+
}
|
|
25682
25687
|
else if (object instanceof dayjs) {
|
|
25683
|
-
setValue(response, key, object.format(get$1(props, `${key}.format`,
|
|
25688
|
+
setValue(response, key, object.format(get$1(props, `${key}.format`, "YYYY-MM-DD")));
|
|
25684
25689
|
}
|
|
25685
|
-
else if (
|
|
25690
|
+
else if ("label" in object && "value" in object) {
|
|
25686
25691
|
if (useLabel)
|
|
25687
|
-
setValue(response, key, object[
|
|
25692
|
+
setValue(response, key, object["label"]);
|
|
25688
25693
|
else
|
|
25689
|
-
setValue(response, key, object[
|
|
25694
|
+
setValue(response, key, object["value"]);
|
|
25690
25695
|
}
|
|
25691
|
-
else if (Array.isArray(object)) {
|
|
25692
|
-
|
|
25693
|
-
|
|
25696
|
+
else if (Array.isArray(object)) {
|
|
25697
|
+
// it is an array
|
|
25698
|
+
if (object.length &&
|
|
25699
|
+
typeof object[0] == "object" &&
|
|
25700
|
+
!Array.isArray(object[0]) &&
|
|
25701
|
+
"value" in object[0] &&
|
|
25702
|
+
object[0]["value"] == "all") {
|
|
25703
|
+
// for data grid filters
|
|
25704
|
+
setValue(response, key, "");
|
|
25694
25705
|
}
|
|
25695
25706
|
else {
|
|
25696
25707
|
forEach(object, (arrayItem, idx) => {
|
|
25697
|
-
if (typeof arrayItem ==
|
|
25698
|
-
if (
|
|
25708
|
+
if (typeof arrayItem == "object") {
|
|
25709
|
+
if ("label" in arrayItem) {
|
|
25699
25710
|
setValue(response, `${key}.${idx}`, function (item) {
|
|
25700
25711
|
if (useLabel)
|
|
25701
25712
|
return item.label;
|
|
@@ -25703,7 +25714,16 @@ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, dat
|
|
|
25703
25714
|
return item.value;
|
|
25704
25715
|
});
|
|
25705
25716
|
}
|
|
25706
|
-
typeSwitch({
|
|
25717
|
+
typeSwitch({
|
|
25718
|
+
base_object: arrayItem,
|
|
25719
|
+
base_key: `${key}.${idx}`,
|
|
25720
|
+
response: response,
|
|
25721
|
+
useLabel: useLabel,
|
|
25722
|
+
data: data,
|
|
25723
|
+
submitData: submitData,
|
|
25724
|
+
props: props,
|
|
25725
|
+
formType: formType,
|
|
25726
|
+
});
|
|
25707
25727
|
}
|
|
25708
25728
|
else {
|
|
25709
25729
|
const keyArray = get$1(response, key);
|
|
@@ -25720,9 +25740,19 @@ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, dat
|
|
|
25720
25740
|
}
|
|
25721
25741
|
else {
|
|
25722
25742
|
forEach(object, (value, key2) => {
|
|
25723
|
-
if (!includes([
|
|
25743
|
+
if (!includes(["id", "transporte.tarifa.cargos_adicionales"], key) &&
|
|
25744
|
+
isEqual(get$1(data, `${key}.${key2}`), value))
|
|
25724
25745
|
return;
|
|
25725
|
-
typeSwitch({
|
|
25746
|
+
typeSwitch({
|
|
25747
|
+
base_object: value,
|
|
25748
|
+
base_key: `${key}.${key2}`,
|
|
25749
|
+
response: response,
|
|
25750
|
+
useLabel: useLabel,
|
|
25751
|
+
data: data,
|
|
25752
|
+
submitData: submitData,
|
|
25753
|
+
props: props,
|
|
25754
|
+
formType: formType,
|
|
25755
|
+
});
|
|
25726
25756
|
});
|
|
25727
25757
|
}
|
|
25728
25758
|
break;
|
|
@@ -25734,7 +25764,7 @@ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, dat
|
|
|
25734
25764
|
const jsonForm = ({ submitData, data, useLabel, props }) => {
|
|
25735
25765
|
const response = {};
|
|
25736
25766
|
forEach(submitData, function (value, key) {
|
|
25737
|
-
if (key !=
|
|
25767
|
+
if (key != "id" && isEqual(get$1(data, key), value))
|
|
25738
25768
|
return;
|
|
25739
25769
|
typeSwitch({
|
|
25740
25770
|
base_object: value,
|
|
@@ -25744,7 +25774,7 @@ const jsonForm = ({ submitData, data, useLabel, props }) => {
|
|
|
25744
25774
|
data: data,
|
|
25745
25775
|
props: props,
|
|
25746
25776
|
submitData: submitData,
|
|
25747
|
-
formType:
|
|
25777
|
+
formType: "json",
|
|
25748
25778
|
});
|
|
25749
25779
|
});
|
|
25750
25780
|
return response;
|
|
@@ -25752,7 +25782,7 @@ const jsonForm = ({ submitData, data, useLabel, props }) => {
|
|
|
25752
25782
|
const formDataForm = ({ submitData, data, useLabel, props }) => {
|
|
25753
25783
|
const formData = new FormData();
|
|
25754
25784
|
forEach(submitData, function (value, key) {
|
|
25755
|
-
if (key !=
|
|
25785
|
+
if (key != "id" && isEqual(get$1(data, key), value))
|
|
25756
25786
|
return;
|
|
25757
25787
|
typeSwitch({
|
|
25758
25788
|
base_object: value,
|
|
@@ -25762,16 +25792,16 @@ const formDataForm = ({ submitData, data, useLabel, props }) => {
|
|
|
25762
25792
|
data: data,
|
|
25763
25793
|
props: props,
|
|
25764
25794
|
submitData: submitData,
|
|
25765
|
-
formType:
|
|
25795
|
+
formType: "formData",
|
|
25766
25796
|
});
|
|
25767
25797
|
});
|
|
25768
25798
|
return formData;
|
|
25769
25799
|
};
|
|
25770
25800
|
// ==============================|| ERRORS ||============================== //
|
|
25771
25801
|
const setErrors = (form, error) => {
|
|
25772
|
-
if (
|
|
25802
|
+
if ("invalid_params" in error.data) {
|
|
25773
25803
|
Object.values(error.data.invalid_params).forEach((entry) => {
|
|
25774
|
-
form.setError(entry.name, { message: entry.reason.join(
|
|
25804
|
+
form.setError(entry.name, { message: entry.reason.join(", ") });
|
|
25775
25805
|
});
|
|
25776
25806
|
}
|
|
25777
25807
|
};
|
|
@@ -25783,18 +25813,18 @@ const valueLabel = object({
|
|
|
25783
25813
|
|
|
25784
25814
|
const MainDrawer = (props) => {
|
|
25785
25815
|
const theme = useTheme();
|
|
25786
|
-
return (jsx(Drawer, { variant:
|
|
25816
|
+
return (jsx(Drawer, { variant: "temporary", anchor: "right", open: props.open, onClose: props.drawerToggle, sx: {
|
|
25787
25817
|
zIndex: 1202,
|
|
25788
|
-
|
|
25789
|
-
width:
|
|
25818
|
+
"& .MuiDrawer-paper": {
|
|
25819
|
+
width: "100%",
|
|
25790
25820
|
maxWidth: props.width ? props.width : 600,
|
|
25791
25821
|
background: theme.palette.background.default,
|
|
25792
25822
|
color: theme.palette.text.primary,
|
|
25793
|
-
borderRight:
|
|
25794
|
-
borderTopLeftRadius:
|
|
25795
|
-
borderBottomLeftRadius:
|
|
25796
|
-
}
|
|
25797
|
-
}, color:
|
|
25823
|
+
borderRight: "none",
|
|
25824
|
+
borderTopLeftRadius: "12px",
|
|
25825
|
+
borderBottomLeftRadius: "12px",
|
|
25826
|
+
},
|
|
25827
|
+
}, color: "inherit", ...props.drawerProps, children: jsxs(Grid, { container: true, direction: "column", px: 4, py: 2, spacing: 2, children: [jsx(Grid, { display: "flex", justifyContent: "right", pb: 0, children: props.slots?.button ? (props.slots.button) : (jsx(Button, { color: "error", startIcon: jsx(CancelIcon, {}), onClick: props.drawerToggle, children: "Cerrar" })) }), jsx(Grid, { children: jsx(PageHeader, { breadcrumbs: [], title: props.title }) }), jsx(Grid, { size: 12, container: true, position: "relative", children: props.children })] }) }));
|
|
25798
25828
|
};
|
|
25799
25829
|
|
|
25800
25830
|
const LoadingComponent = (props) => {
|
|
@@ -25853,60 +25883,49 @@ const _HistorialDrawer = (props) => {
|
|
|
25853
25883
|
const HistorialDrawer = (props) => {
|
|
25854
25884
|
const [open, setOpen] = useState(false);
|
|
25855
25885
|
const handleDrawer = useCallback(() => {
|
|
25856
|
-
setOpen(prevState => !prevState);
|
|
25886
|
+
setOpen((prevState) => !prevState);
|
|
25857
25887
|
}, []);
|
|
25858
25888
|
// ===== || KEYDOWN || ===== //
|
|
25859
25889
|
const handleKeyPress = useCallback((event) => {
|
|
25860
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
25890
|
+
if (event.ctrlKey && event.shiftKey && event.key === "H") {
|
|
25861
25891
|
event.preventDefault();
|
|
25862
25892
|
handleDrawer();
|
|
25863
25893
|
}
|
|
25864
25894
|
}, [handleDrawer]);
|
|
25865
25895
|
useEffect(() => {
|
|
25866
|
-
document.addEventListener(
|
|
25896
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
25867
25897
|
return () => {
|
|
25868
|
-
document.removeEventListener(
|
|
25898
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
25869
25899
|
};
|
|
25870
25900
|
}, [handleKeyPress]);
|
|
25871
|
-
return (jsxs(Fragment, { children: [jsx(Tooltip, { title:
|
|
25872
|
-
position:
|
|
25901
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: "Historial", children: jsx(IconButton, { color: "primary", onClick: handleDrawer, sx: {
|
|
25902
|
+
position: "absolute",
|
|
25873
25903
|
right: 0,
|
|
25874
25904
|
}, ...props.iconButtonProps, children: jsx(HistoryIcon, {}) }) }), jsx(_HistorialDrawer, { open: open, handleDrawer: handleDrawer, endpoint: props.endpoint })] }));
|
|
25875
25905
|
};
|
|
25876
25906
|
|
|
25877
|
-
const buildListItems = (content) => {
|
|
25878
|
-
const items = [];
|
|
25879
|
-
const loop = (content, error_title) => {
|
|
25880
|
-
if (Array.isArray(content)) {
|
|
25881
|
-
items.push({ title: error_title ? (error_title.charAt(0).toUpperCase() + error_title.slice(1)).split('_').join(' ') : 'N/A', content: content.join(', ') });
|
|
25882
|
-
}
|
|
25883
|
-
else {
|
|
25884
|
-
Object.keys(content).map((row_error) => {
|
|
25885
|
-
loop(content[row_error], row_error);
|
|
25886
|
-
});
|
|
25887
|
-
}
|
|
25888
|
-
};
|
|
25889
|
-
loop(content);
|
|
25890
|
-
return items;
|
|
25891
|
-
};
|
|
25892
25907
|
const RowErrors = (props) => {
|
|
25893
25908
|
return (jsx(List$1, { subheader: jsx(ListSubheader, { sx: {
|
|
25894
25909
|
bgcolor: red[50],
|
|
25895
25910
|
color: red[800],
|
|
25896
|
-
fontWeight:
|
|
25897
|
-
borderRadius:
|
|
25898
|
-
lineHeight:
|
|
25911
|
+
fontWeight: "bold",
|
|
25912
|
+
borderRadius: "12px",
|
|
25913
|
+
lineHeight: "40px",
|
|
25899
25914
|
}, children: `Hilera ${props.row}` }), sx: {
|
|
25900
25915
|
bgcolor: red[50],
|
|
25901
|
-
borderRadius:
|
|
25902
|
-
}, children:
|
|
25916
|
+
borderRadius: "12px",
|
|
25917
|
+
}, children: props.data.map((item) => {
|
|
25918
|
+
const pre_name = item.name.split(".").at(-1);
|
|
25919
|
+
const name = (pre_name.charAt(0).toUpperCase() + pre_name.slice(1))
|
|
25920
|
+
.split("_")
|
|
25921
|
+
.join(" ");
|
|
25903
25922
|
return (jsx(ListItem$1, { sx: {
|
|
25904
|
-
py: 0
|
|
25905
|
-
}, children: jsx(ListItemText, { primary: jsxs(Box, { children: [jsx(Typography$1, { variant:
|
|
25923
|
+
py: 0,
|
|
25924
|
+
}, children: jsx(ListItemText, { primary: jsxs(Box, { children: [jsx(Typography$1, { variant: "caption", pr: 0.5, sx: {
|
|
25906
25925
|
color: red[800],
|
|
25907
|
-
}, children: `${
|
|
25926
|
+
}, children: `${name}:` }), jsx(Typography$1, { variant: "caption", sx: {
|
|
25908
25927
|
color: red[800],
|
|
25909
|
-
}, children: item.
|
|
25928
|
+
}, children: item.reason.join(", ") })] }) }) }));
|
|
25910
25929
|
}) }));
|
|
25911
25930
|
};
|
|
25912
25931
|
|
|
@@ -25914,14 +25933,14 @@ const FileBox = (props) => {
|
|
|
25914
25933
|
return (jsxs(Box, { bgcolor: grey[200], borderRadius: '12px', p: 2, display: 'flex', children: [jsx(Box, { flexGrow: 0.8, display: 'flex', justifyContent: 'left', alignItems: 'center', children: jsx(Typography$1, { fontWeight: 'bold', children: props.file.name.split('.')[0] }) }), jsx(Box, { flexGrow: 0.2, display: 'flex', justifyContent: 'right', alignItems: 'center', children: props.loadingRemove ? (jsx(CircularProgress, { size: '18px' })) : (jsx(Tooltip, { title: 'Remove', children: jsx(IconButton, { color: 'error', sx: { p: 0 }, onClick: props.handleRemove, children: jsx(DeleteIcon, {}) }) })) })] }));
|
|
25915
25934
|
};
|
|
25916
25935
|
|
|
25917
|
-
const VisuallyHiddenInput = styled$1(
|
|
25918
|
-
clipPath:
|
|
25936
|
+
const VisuallyHiddenInput = styled$1("input")({
|
|
25937
|
+
clipPath: "inset(50%)",
|
|
25919
25938
|
height: 1,
|
|
25920
|
-
overflow:
|
|
25921
|
-
position:
|
|
25939
|
+
overflow: "hidden",
|
|
25940
|
+
position: "absolute",
|
|
25922
25941
|
bottom: 0,
|
|
25923
25942
|
left: 0,
|
|
25924
|
-
whiteSpace:
|
|
25943
|
+
whiteSpace: "nowrap",
|
|
25925
25944
|
width: 1,
|
|
25926
25945
|
});
|
|
25927
25946
|
const FileUploadBox = (props) => {
|
|
@@ -25932,68 +25951,78 @@ const FileUploadBox = (props) => {
|
|
|
25932
25951
|
const [removerCSV, { isLoading: removerLoading }] = api.useRemoverCSVMutation();
|
|
25933
25952
|
const Dropzone = ({ onChange, value }) => {
|
|
25934
25953
|
const onDrop = useCallback((acceptedFiles) => {
|
|
25935
|
-
acceptedFiles.map(file => {
|
|
25936
|
-
const data = formDataForm({ });
|
|
25937
|
-
validarCSV({
|
|
25954
|
+
acceptedFiles.map((file) => {
|
|
25955
|
+
const data = formDataForm({ submitData: { archivo: file } });
|
|
25956
|
+
validarCSV({
|
|
25957
|
+
endpoint: props.csvProps.endpoint || "",
|
|
25958
|
+
data: data,
|
|
25959
|
+
custom: props.csvProps.custom,
|
|
25960
|
+
})
|
|
25961
|
+
.unwrap()
|
|
25938
25962
|
.then((response) => {
|
|
25939
|
-
onChange(
|
|
25963
|
+
onChange("archivo" in response ? response.archivo : acceptedFiles[0]);
|
|
25940
25964
|
setFile(acceptedFiles[0]);
|
|
25941
25965
|
props.setValid(true);
|
|
25942
25966
|
})
|
|
25943
25967
|
.catch((e) => {
|
|
25944
|
-
|
|
25945
|
-
|
|
25946
|
-
notifications.show(columnas_inv, { severity: 'error' });
|
|
25968
|
+
if (e.data?.detail?.length > 0)
|
|
25969
|
+
notifications.show(e.data.detail[0], { severity: "error" });
|
|
25947
25970
|
props.setValid(false);
|
|
25948
25971
|
});
|
|
25949
25972
|
});
|
|
25950
25973
|
}, []);
|
|
25951
25974
|
const onDropRejected = useCallback(() => {
|
|
25952
|
-
notifications.show(
|
|
25975
|
+
notifications.show("Tipo de archivo inválido. Solo se aceptan CSVs.", {
|
|
25976
|
+
severity: "error",
|
|
25977
|
+
});
|
|
25953
25978
|
}, []);
|
|
25954
|
-
const { getRootProps, getInputProps, isDragActive
|
|
25979
|
+
const { getRootProps, getInputProps, isDragActive } = useDropzone({
|
|
25955
25980
|
onDrop,
|
|
25956
25981
|
onDropRejected,
|
|
25957
25982
|
accept: {
|
|
25958
|
-
|
|
25959
|
-
|
|
25983
|
+
"text/csv": [".csv"],
|
|
25984
|
+
"application/vnd.ms-excel": [".csv"],
|
|
25960
25985
|
},
|
|
25961
25986
|
maxFiles: 1,
|
|
25962
25987
|
multiple: false,
|
|
25963
25988
|
});
|
|
25964
25989
|
const handleRemove = () => {
|
|
25965
|
-
if (typeof value ==
|
|
25990
|
+
if (typeof value == "number") {
|
|
25966
25991
|
removerCSV({ id: value });
|
|
25967
25992
|
}
|
|
25968
25993
|
onChange(null);
|
|
25969
25994
|
setFile(null);
|
|
25970
25995
|
};
|
|
25971
|
-
|
|
25972
|
-
|
|
25973
|
-
|
|
25974
|
-
|
|
25975
|
-
|
|
25976
|
-
|
|
25977
|
-
|
|
25978
|
-
|
|
25979
|
-
|
|
25980
|
-
|
|
25981
|
-
|
|
25982
|
-
|
|
25983
|
-
|
|
25984
|
-
|
|
25996
|
+
const renderErrorRows = () => {
|
|
25997
|
+
if (!error?.data?.invalid_params)
|
|
25998
|
+
return;
|
|
25999
|
+
const rows = groupBy(error?.data?.invalid_params, function (e) {
|
|
26000
|
+
return e.name.split(".")[0];
|
|
26001
|
+
});
|
|
26002
|
+
if (!rows)
|
|
26003
|
+
return;
|
|
26004
|
+
return Object.entries(rows).map(([row, errors]) => (jsx(RowErrors, { row: row, data: errors }, row)));
|
|
26005
|
+
};
|
|
26006
|
+
return (jsx(Box$1, { width: 1, children: jsxs(Stack, { spacing: 2, children: [!file && !isLoading && (jsxs(Box$1, { component: "div", width: 1, display: "flex", justifyContent: "center", alignItems: "center", border: "1.5px dashed", borderRadius: "12px", py: 4, px: 2, borderColor: grey[800], bgcolor: grey[50], ...getRootProps(), children: [jsx(VisuallyHiddenInput, { id: "file-upload", type: "file", ...getInputProps() }), jsx(FileUploadIcon, { sx: {
|
|
26007
|
+
color: grey[800],
|
|
26008
|
+
pr: 1,
|
|
26009
|
+
} }), jsx(Typography, { variant: "body2", sx: { color: grey[800] }, children: isDragActive
|
|
26010
|
+
? "Soltar archivo aquí."
|
|
26011
|
+
: "Arrastra un archivo aquí o haz clic para seleccionar uno." })] })), isLoading && (jsx(Box$1, { children: jsx(LinearProgress, { sx: { height: 5 } }) })), file && (jsx(FileBox, { file: file, handleRemove: handleRemove, loadingRemove: removerLoading })), renderErrorRows()] }) }));
|
|
25985
26012
|
};
|
|
25986
26013
|
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value } }) => {
|
|
25987
|
-
return
|
|
26014
|
+
return jsx(Dropzone, { onChange: onChange, value: value });
|
|
25988
26015
|
} }));
|
|
25989
26016
|
};
|
|
25990
26017
|
|
|
25991
26018
|
const schema = z.object({
|
|
25992
|
-
archivo: z.any()
|
|
26019
|
+
archivo: z.any(),
|
|
25993
26020
|
});
|
|
25994
26021
|
const CSVUpload = (props) => {
|
|
25995
26022
|
const api = useAPI();
|
|
25996
26023
|
const notifications = useNotifications();
|
|
26024
|
+
const { pathname } = useLocation();
|
|
26025
|
+
const endpoint = props.data?.endpoint || pathname;
|
|
25997
26026
|
const [valid, setValid] = useState(false);
|
|
25998
26027
|
const defaultValues = {
|
|
25999
26028
|
archivo: null,
|
|
@@ -26002,29 +26031,30 @@ const CSVUpload = (props) => {
|
|
|
26002
26031
|
resolver: zodResolver(schema),
|
|
26003
26032
|
defaultValues: defaultValues,
|
|
26004
26033
|
});
|
|
26005
|
-
const archivo = form.watch(
|
|
26034
|
+
const archivo = form.watch("archivo");
|
|
26006
26035
|
const [subirCSV, { isLoading }] = api.useSubirCSVMutation();
|
|
26007
26036
|
const handleClose = () => {
|
|
26008
26037
|
props.drawerToggle();
|
|
26009
26038
|
form.reset();
|
|
26010
26039
|
};
|
|
26011
|
-
const tag = useMemo(() =>
|
|
26040
|
+
const tag = useMemo(() => endpoint.split("/").at(-1), [endpoint]);
|
|
26012
26041
|
const onSubmitHandler = (submitData) => {
|
|
26013
|
-
const data = formDataForm(submitData);
|
|
26014
|
-
subirCSV({ endpoint
|
|
26042
|
+
const data = formDataForm({ submitData });
|
|
26043
|
+
subirCSV({ endpoint, tagType: tag, data, custom: props.data?.custom })
|
|
26044
|
+
.unwrap()
|
|
26015
26045
|
.then((response) => {
|
|
26016
26046
|
if (props.postAction)
|
|
26017
26047
|
props.postAction(response);
|
|
26018
26048
|
handleClose();
|
|
26019
|
-
notifications.show(
|
|
26049
|
+
notifications.show("Archivo subido exitosamente!", { severity: "success" });
|
|
26020
26050
|
})
|
|
26021
26051
|
.catch(() => {
|
|
26022
|
-
notifications.show(
|
|
26052
|
+
notifications.show("Error!", { severity: "error" });
|
|
26023
26053
|
});
|
|
26024
26054
|
};
|
|
26025
26055
|
const onError = (errors) => {
|
|
26026
26056
|
console.log(errors);
|
|
26027
|
-
notifications.show(`Error en: ${Object.keys(errors).join(
|
|
26057
|
+
notifications.show(`Error en: ${Object.keys(errors).join(", ")}!`, { severity: "error" });
|
|
26028
26058
|
};
|
|
26029
26059
|
const handleDownload = () => {
|
|
26030
26060
|
const link = document.createElement("a");
|
|
@@ -26032,7 +26062,7 @@ const CSVUpload = (props) => {
|
|
|
26032
26062
|
link.href = `/plantillas/plantilla_${tag}.xlsx`;
|
|
26033
26063
|
link.click();
|
|
26034
26064
|
};
|
|
26035
|
-
return (jsxs(MainDrawer, { open: props.open, drawerToggle: handleClose, title: props.data?.title ||
|
|
26065
|
+
return (jsxs(MainDrawer, { open: props.open, drawerToggle: handleClose, title: props.data?.title || "CSV", slots: {
|
|
26036
26066
|
button: (jsx(SaveCancelButton, { slotProps: {
|
|
26037
26067
|
saveBtn: {
|
|
26038
26068
|
loading: isLoading,
|
|
@@ -26040,11 +26070,11 @@ const CSVUpload = (props) => {
|
|
|
26040
26070
|
},
|
|
26041
26071
|
cancelBtn: {
|
|
26042
26072
|
onClick: handleClose,
|
|
26043
|
-
}
|
|
26044
|
-
} }))
|
|
26045
|
-
}, children: [jsxs(Box, { px: 2, py: 3, bgcolor: grey[50], borderRadius:
|
|
26046
|
-
minWidth: 120
|
|
26047
|
-
}, children: "Descargar" })] })] }), jsx(Box, { id:
|
|
26073
|
+
},
|
|
26074
|
+
} })),
|
|
26075
|
+
}, children: [jsxs(Box, { px: 2, py: 3, bgcolor: grey[50], borderRadius: "12px", children: [jsx(Typography$1, { fontWeight: "bold", children: "Archivo de Muestra" }), jsxs(Stack, { direction: "row", spacing: 2, children: [jsx(Typography$1, { variant: "body2", children: "Puede descargar el ejemplo adjunto y utilizarlo como punto de partida para su propio archivo." }), jsx(Button, { variant: "contained", startIcon: jsx(DownloadIcon, {}), onClick: handleDownload, sx: {
|
|
26076
|
+
minWidth: 120,
|
|
26077
|
+
}, children: "Descargar" })] })] }), jsx(Box, { id: "formulario", component: "form", width: 1, autoComplete: "off", noValidate: true, onSubmit: form.handleSubmit(onSubmitHandler, onError), children: jsx(FileUploadBox, { name: "archivo", control: form.control, setValid: setValid, csvProps: props.data }) })] }));
|
|
26048
26078
|
};
|
|
26049
26079
|
|
|
26050
26080
|
const mergeSettings = (baseSettings, mergingSettings) => {
|
|
@@ -26163,7 +26193,7 @@ async function manualCacheRefresh(api, id, dispatch, queryFulfilled, endpoints)
|
|
|
26163
26193
|
const initialState$1 = {};
|
|
26164
26194
|
// == crea el slice == //
|
|
26165
26195
|
const snackProgress = createSlice({
|
|
26166
|
-
name:
|
|
26196
|
+
name: "snackProgress",
|
|
26167
26197
|
initialState: initialState$1,
|
|
26168
26198
|
// declarar acciones que se le pueden hacer a esta sección de la tienda
|
|
26169
26199
|
reducers: {
|
|
@@ -26179,7 +26209,7 @@ const snackProgress = createSlice({
|
|
|
26179
26209
|
closeProgressSnack(state, action) {
|
|
26180
26210
|
return omit(state, action.payload);
|
|
26181
26211
|
},
|
|
26182
|
-
}
|
|
26212
|
+
},
|
|
26183
26213
|
});
|
|
26184
26214
|
// exportar acciones
|
|
26185
26215
|
const { openProgressSnack, updateProgressSnackData, closeProgressSnack } = snackProgress.actions;
|
|
@@ -26205,12 +26235,14 @@ const { changeTitle, } = settings.actions;
|
|
|
26205
26235
|
var header = settings.reducer;
|
|
26206
26236
|
|
|
26207
26237
|
const ControlledDropdown = (props) => {
|
|
26208
|
-
const [inputValue, setInputValue] = useState(
|
|
26238
|
+
const [inputValue, setInputValue] = useState("");
|
|
26209
26239
|
const [options, setOptions] = useState(props.extraProps?.options ? props.extraProps?.options : []);
|
|
26210
26240
|
const args = useMemo(() => {
|
|
26211
26241
|
if (!props.extraProps?.queryArgs)
|
|
26212
26242
|
return undefined;
|
|
26213
|
-
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26243
|
+
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26244
|
+
filters: { nombre__icontains: inputValue },
|
|
26245
|
+
});
|
|
26214
26246
|
}, [inputValue, props.extraProps?.queryArgs]);
|
|
26215
26247
|
const api = useAPI();
|
|
26216
26248
|
const [getOpciones, { isLoading, isFetching, isError }] = api.useLazyGetComoOpcionesQuery();
|
|
@@ -26223,7 +26255,8 @@ const ControlledDropdown = (props) => {
|
|
|
26223
26255
|
};
|
|
26224
26256
|
const handleSearch = useCallback(debounce((args, callback) => {
|
|
26225
26257
|
setOptions([]);
|
|
26226
|
-
getOpciones(args)
|
|
26258
|
+
getOpciones(args)
|
|
26259
|
+
.unwrap()
|
|
26227
26260
|
.then(callback)
|
|
26228
26261
|
.catch(() => {
|
|
26229
26262
|
//
|
|
@@ -26236,7 +26269,7 @@ const ControlledDropdown = (props) => {
|
|
|
26236
26269
|
});
|
|
26237
26270
|
}
|
|
26238
26271
|
}, [args, handleSearch, open]);
|
|
26239
|
-
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange
|
|
26272
|
+
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange }, fieldState: { error } }) => {
|
|
26240
26273
|
const handleChange = (_event, newValue) => {
|
|
26241
26274
|
onChange(newValue);
|
|
26242
26275
|
};
|
|
@@ -26244,10 +26277,10 @@ const ControlledDropdown = (props) => {
|
|
|
26244
26277
|
setInputValue(newInputValue);
|
|
26245
26278
|
}, isOptionEqualToValue: (option, value) => {
|
|
26246
26279
|
return option.value === value.value;
|
|
26247
|
-
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, fullWidth: true, size:
|
|
26280
|
+
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, fullWidth: true, size: "small", disabled: !options || isError, renderInput: (params) => (jsx(TextField, { ...params, label: props.label, error: !!error, helperText: error ? error.message : props.extraProps?.disableHT ? "" : " ", slotProps: {
|
|
26248
26281
|
input: {
|
|
26249
26282
|
...params.InputProps,
|
|
26250
|
-
endAdornment: (jsxs(Fragment, { children: [
|
|
26283
|
+
endAdornment: (jsxs(Fragment, { children: [isLoading || isFetching ? (jsx(CircularProgress, { color: "inherit", size: 20 })) : null, params.InputProps.endAdornment] })),
|
|
26251
26284
|
},
|
|
26252
26285
|
} })), ...props.fieldProps }));
|
|
26253
26286
|
} }));
|
|
@@ -26276,13 +26309,15 @@ const ControlledPhoneNumber = (props) => {
|
|
|
26276
26309
|
};
|
|
26277
26310
|
|
|
26278
26311
|
const ControlledSelect = (props) => {
|
|
26279
|
-
const [inputValue, setInputValue] = useState(
|
|
26312
|
+
const [inputValue, setInputValue] = useState("");
|
|
26280
26313
|
const [options, setOptions] = useState(props.extraProps?.options ? props.extraProps?.options : []);
|
|
26281
26314
|
const [selectedAll, setSelectedAll] = useState(false);
|
|
26282
26315
|
const args = useMemo(() => {
|
|
26283
26316
|
if (!props.extraProps?.queryArgs)
|
|
26284
26317
|
return undefined;
|
|
26285
|
-
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26318
|
+
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26319
|
+
filters: { nombre__icontains: inputValue },
|
|
26320
|
+
});
|
|
26286
26321
|
}, [inputValue, props.extraProps?.queryArgs]);
|
|
26287
26322
|
const api = useAPI();
|
|
26288
26323
|
const [getOpciones, { isLoading, isFetching, isError }] = api.useLazyGetComoOpcionesQuery();
|
|
@@ -26297,7 +26332,8 @@ const ControlledSelect = (props) => {
|
|
|
26297
26332
|
};
|
|
26298
26333
|
const handleSearch = useCallback(debounce((args, callback) => {
|
|
26299
26334
|
setOptions([]);
|
|
26300
|
-
getOpciones(args)
|
|
26335
|
+
getOpciones(args)
|
|
26336
|
+
.unwrap()
|
|
26301
26337
|
.then(callback)
|
|
26302
26338
|
.catch(() => {
|
|
26303
26339
|
//
|
|
@@ -26306,12 +26342,14 @@ const ControlledSelect = (props) => {
|
|
|
26306
26342
|
useEffect(() => {
|
|
26307
26343
|
if (args && open)
|
|
26308
26344
|
handleSearch(args, (filteredOptions) => {
|
|
26309
|
-
setOptions([{ value:
|
|
26345
|
+
setOptions([{ value: "all", label: "All" }].concat(filteredOptions));
|
|
26310
26346
|
});
|
|
26311
26347
|
}, [args, handleSearch, open]);
|
|
26312
26348
|
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange }, fieldState: { error } }) => {
|
|
26313
26349
|
const handleChange = (_event, newValue) => {
|
|
26314
|
-
if (find(newValue, function (val) {
|
|
26350
|
+
if (find(newValue, function (val) {
|
|
26351
|
+
return val.value == "all";
|
|
26352
|
+
})) {
|
|
26315
26353
|
if (selectedAll) {
|
|
26316
26354
|
setSelectedAll(false);
|
|
26317
26355
|
onChange(newValue.slice(1));
|
|
@@ -26335,10 +26373,10 @@ const ControlledSelect = (props) => {
|
|
|
26335
26373
|
setInputValue(newInputValue);
|
|
26336
26374
|
}, isOptionEqualToValue: (option, value) => {
|
|
26337
26375
|
return option.value === value.value;
|
|
26338
|
-
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, multiple: true, disableCloseOnSelect: true, limitTags: 1, fullWidth: true, size:
|
|
26376
|
+
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, multiple: true, disableCloseOnSelect: true, limitTags: 1, fullWidth: true, size: "small", disabled: !options || isError, renderInput: (params) => (jsx(TextField, { ...params, label: props.label, error: !!error, helperText: error ? error.message : "", slotProps: {
|
|
26339
26377
|
input: {
|
|
26340
26378
|
...params.InputProps,
|
|
26341
|
-
endAdornment: (jsxs(Fragment, { children: [
|
|
26379
|
+
endAdornment: (jsxs(Fragment, { children: [isLoading || isFetching ? (jsx(CircularProgress, { color: "inherit", size: 20 })) : null, params.InputProps.endAdornment] })),
|
|
26342
26380
|
},
|
|
26343
26381
|
} })), ...props.fieldProps, renderOption: (props, option, { selected }) => {
|
|
26344
26382
|
const { key, ...optionProps } = props;
|
|
@@ -26346,7 +26384,7 @@ const ControlledSelect = (props) => {
|
|
|
26346
26384
|
} }));
|
|
26347
26385
|
} }));
|
|
26348
26386
|
};
|
|
26349
|
-
ControlledSelect.displayName =
|
|
26387
|
+
ControlledSelect.displayName = "ControlledSelect";
|
|
26350
26388
|
|
|
26351
26389
|
// ==============================|| DESLIZADOR CONTROLADO ||============================== //
|
|
26352
26390
|
const ControlledSlider$1 = (props) => {
|
|
@@ -26379,19 +26417,27 @@ const ControlledText = (props) => {
|
|
|
26379
26417
|
};
|
|
26380
26418
|
return (
|
|
26381
26419
|
// controlador
|
|
26382
|
-
jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error }
|
|
26420
|
+
jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error } }) => {
|
|
26383
26421
|
return (
|
|
26384
26422
|
// campo de texto
|
|
26385
|
-
jsx(TextField, { variant:
|
|
26423
|
+
jsx(TextField, { variant: "outlined", size: "small", id: props.name, label: props.label, value: value ? value.toString() : "", onChange: onChange, error: !!error, type: props.extraProps?.password
|
|
26424
|
+
? showPassword
|
|
26425
|
+
? "text"
|
|
26426
|
+
: "password"
|
|
26427
|
+
: "text", helperText: error
|
|
26428
|
+
? error.message
|
|
26429
|
+
: props.fieldProps?.helperText
|
|
26430
|
+
? props.fieldProps.helperText
|
|
26431
|
+
: " ", fullWidth: true, slotProps: {
|
|
26386
26432
|
input: {
|
|
26387
26433
|
// ícono de mostar u ocultar si es campo de contarseña
|
|
26388
|
-
endAdornment: props.extraProps?.password && (jsx(InputAdornment$1, { position:
|
|
26389
|
-
color:
|
|
26390
|
-
|
|
26391
|
-
color:
|
|
26392
|
-
}
|
|
26393
|
-
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) }))
|
|
26394
|
-
}
|
|
26434
|
+
endAdornment: props.extraProps?.password && (jsx(InputAdornment$1, { position: "end", children: jsx(IconButton, { "aria-label": "toggle password visibility", tabIndex: -1, onClick: handleShowPassword, edge: "end", size: "large", sx: {
|
|
26435
|
+
color: "secondary.darker",
|
|
26436
|
+
"&:hover": {
|
|
26437
|
+
color: "secondary.main",
|
|
26438
|
+
},
|
|
26439
|
+
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) })),
|
|
26440
|
+
},
|
|
26395
26441
|
}, ...props.fieldProps }));
|
|
26396
26442
|
} }));
|
|
26397
26443
|
};
|
|
@@ -26451,16 +26497,15 @@ const ControlledTimePicker = (props) => {
|
|
|
26451
26497
|
const filedProps = useMemo(() => {
|
|
26452
26498
|
const defaultProps = {
|
|
26453
26499
|
slotProps: {
|
|
26454
|
-
textField: { size:
|
|
26455
|
-
field: { clearable: true
|
|
26456
|
-
}
|
|
26500
|
+
textField: { size: "small" },
|
|
26501
|
+
field: { clearable: true },
|
|
26502
|
+
},
|
|
26457
26503
|
};
|
|
26458
26504
|
return merge$1({}, defaultProps, props.fieldProps);
|
|
26459
26505
|
}, [props.fieldProps]);
|
|
26460
|
-
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error }
|
|
26461
|
-
const val = convertValueToDayjs(value,
|
|
26462
|
-
return (jsxs(FormGroup, { sx: { width: 1 }, color:
|
|
26463
|
-
jsx(FormHelperText$1, { error: !!error, children: error ? error.message : ' ' })] }));
|
|
26506
|
+
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error } }) => {
|
|
26507
|
+
const val = convertValueToDayjs(value, "time");
|
|
26508
|
+
return (jsxs(FormGroup, { sx: { width: 1 }, color: "secondary", children: [jsx(LocalizationProvider, { dateAdapter: AdapterDayjs, children: jsx(TimePicker, { label: props.label, onChange: (v) => handleChange(v, "time", onChange), value: val || null, ...filedProps }) }), !props.extraProps?.disableHT && (jsx(FormHelperText$1, { error: !!error, children: error ? error.message : " " }))] }));
|
|
26464
26509
|
} }));
|
|
26465
26510
|
};
|
|
26466
26511
|
|
|
@@ -26480,22 +26525,23 @@ const ControlledSlider = (props) => {
|
|
|
26480
26525
|
|
|
26481
26526
|
const DeleteConfirmationDialog = (props) => {
|
|
26482
26527
|
const notifications = useNotifications();
|
|
26483
|
-
const pathname =
|
|
26484
|
-
const id = useMemo(() => props.id || pathname.split(
|
|
26528
|
+
const pathname = "temp";
|
|
26529
|
+
const id = useMemo(() => props.id || pathname.split("/").at(-1), [pathname, props.id]);
|
|
26485
26530
|
const [mutation] = props.mutation();
|
|
26486
26531
|
const schema = object({ confirmation: string() });
|
|
26487
26532
|
const form = useForm({
|
|
26488
26533
|
resolver: zodResolver(schema),
|
|
26489
|
-
defaultValues: { confirmation:
|
|
26534
|
+
defaultValues: { confirmation: "" },
|
|
26490
26535
|
});
|
|
26491
26536
|
const handleClose = () => {
|
|
26492
26537
|
props.handleClose();
|
|
26493
26538
|
form.reset();
|
|
26494
26539
|
};
|
|
26495
|
-
const confirmation = form.watch(
|
|
26496
|
-
const disabled = useMemo(() => confirmation !=
|
|
26540
|
+
const confirmation = form.watch("confirmation").toUpperCase();
|
|
26541
|
+
const disabled = useMemo(() => confirmation != "ELIMINAR", [confirmation]);
|
|
26497
26542
|
const onSubmitHandler = () => {
|
|
26498
|
-
mutation({ id: id })
|
|
26543
|
+
mutation({ id: id })
|
|
26544
|
+
.unwrap()
|
|
26499
26545
|
.then(() => {
|
|
26500
26546
|
if (props.disableNavBack) {
|
|
26501
26547
|
handleClose();
|
|
@@ -26504,25 +26550,25 @@ const DeleteConfirmationDialog = (props) => {
|
|
|
26504
26550
|
// props.navigate(-1);
|
|
26505
26551
|
form.reset();
|
|
26506
26552
|
}
|
|
26507
|
-
notifications.show(
|
|
26553
|
+
notifications.show("Objeto removido exitosamente!", { severity: "success" });
|
|
26508
26554
|
})
|
|
26509
26555
|
.catch((error) => {
|
|
26510
26556
|
console.log(error);
|
|
26511
|
-
notifications.show(
|
|
26557
|
+
notifications.show("Error", { severity: "error" });
|
|
26512
26558
|
});
|
|
26513
26559
|
};
|
|
26514
26560
|
const handleKeyDown = (event) => {
|
|
26515
|
-
if (event.key ===
|
|
26561
|
+
if (event.key === "Enter" && !disabled)
|
|
26516
26562
|
onSubmitHandler();
|
|
26517
26563
|
};
|
|
26518
|
-
return (jsxs(Dialog, { open: props.open, onClose: handleClose, children: [jsx(DialogTitle, { variant:
|
|
26564
|
+
return (jsxs(Dialog, { open: props.open, onClose: handleClose, children: [jsx(DialogTitle, { variant: "h5", children: "Eliminar" }), jsxs(DialogContent$1, { children: [jsx(DialogContentText, { sx: { pb: 2 }, children: "\u00BFEst\u00E1 seguro que quiere eliminar el objeto?" }), jsx(Box, { id: "eliminar-formulario", width: "100%", position: "relative", children: jsx(ControlledText, { name: "confirmation", control: form.control, fieldProps: {
|
|
26519
26565
|
autoFocus: true,
|
|
26520
26566
|
required: true,
|
|
26521
|
-
margin:
|
|
26567
|
+
margin: "dense",
|
|
26522
26568
|
label: "Escribir 'ELIMINAR' para confirmar.",
|
|
26523
26569
|
fullWidth: true,
|
|
26524
|
-
variant:
|
|
26525
|
-
helperText:
|
|
26570
|
+
variant: "standard",
|
|
26571
|
+
helperText: "",
|
|
26526
26572
|
onKeyDown: handleKeyDown,
|
|
26527
26573
|
} }) })] }), jsxs(DialogActions$1, { children: [jsx(Button, { onClick: handleClose, children: "Cancelar" }), jsx(Button, { onClick: onSubmitHandler, disabled: disabled, children: "Eliminar" })] })] }));
|
|
26528
26574
|
};
|
|
@@ -26537,23 +26583,23 @@ const DeleteButton = (props) => {
|
|
|
26537
26583
|
};
|
|
26538
26584
|
// ===== || KEYDOWN || ===== //
|
|
26539
26585
|
const handleKeyPress = useCallback((event) => {
|
|
26540
|
-
if (event.ctrlKey && event.key ===
|
|
26586
|
+
if (event.ctrlKey && event.key === "d") {
|
|
26541
26587
|
event.preventDefault();
|
|
26542
26588
|
handleClick();
|
|
26543
26589
|
}
|
|
26544
26590
|
}, [handleClick]);
|
|
26545
26591
|
useEffect(() => {
|
|
26546
|
-
document.addEventListener(
|
|
26592
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26547
26593
|
return () => {
|
|
26548
|
-
document.removeEventListener(
|
|
26594
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26549
26595
|
};
|
|
26550
26596
|
}, [handleKeyPress]);
|
|
26551
26597
|
return (jsxs(Fragment, { children: [jsx(NormalOrIcon, { buttonProps: {
|
|
26552
|
-
color:
|
|
26553
|
-
variant:
|
|
26598
|
+
color: "error",
|
|
26599
|
+
variant: "contained",
|
|
26554
26600
|
startIcon: jsx(DeleteIcon, {}),
|
|
26555
26601
|
onClick: handleClick,
|
|
26556
|
-
children:
|
|
26602
|
+
children: "Eliminar",
|
|
26557
26603
|
} }), jsx(DeleteConfirmationDialog, { open: open, handleClose: handleClose, ...props })] }));
|
|
26558
26604
|
};
|
|
26559
26605
|
|
|
@@ -26564,115 +26610,114 @@ const SaveCancelButton = (props) => {
|
|
|
26564
26610
|
};
|
|
26565
26611
|
// ===== || KEYDOWN || ===== //
|
|
26566
26612
|
const handleKeyPress = useCallback((event) => {
|
|
26567
|
-
if (event.key ===
|
|
26613
|
+
if (event.key === "Escape") {
|
|
26568
26614
|
event.preventDefault();
|
|
26569
26615
|
handleCancel();
|
|
26570
26616
|
}
|
|
26571
26617
|
}, [handleCancel]);
|
|
26572
26618
|
useEffect(() => {
|
|
26573
|
-
document.addEventListener(
|
|
26619
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26574
26620
|
return () => {
|
|
26575
|
-
document.removeEventListener(
|
|
26621
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26576
26622
|
};
|
|
26577
26623
|
}, [handleKeyPress]);
|
|
26578
26624
|
return (jsxs(ButtonGroup, { sx: {
|
|
26579
26625
|
maxHeight: 40,
|
|
26580
26626
|
}, ...props.slotProps?.buttonGroup, children: [jsx(NormalOrIcon, { buttonProps: {
|
|
26581
|
-
color:
|
|
26582
|
-
variant:
|
|
26627
|
+
color: "error",
|
|
26628
|
+
variant: "contained",
|
|
26583
26629
|
startIcon: jsx(CancelIcon, {}),
|
|
26584
26630
|
onClick: handleCancel,
|
|
26585
26631
|
sx: { height: 1 },
|
|
26586
|
-
children:
|
|
26587
|
-
...props.slotProps?.cancelBtn
|
|
26632
|
+
children: "Cancelar",
|
|
26633
|
+
...props.slotProps?.cancelBtn,
|
|
26588
26634
|
} }), jsx(NormalOrIcon, { buttonProps: {
|
|
26589
|
-
color:
|
|
26590
|
-
variant:
|
|
26635
|
+
color: "secondary",
|
|
26636
|
+
variant: "contained",
|
|
26591
26637
|
startIcon: jsx(SaveIcon, {}),
|
|
26592
|
-
type:
|
|
26593
|
-
form:
|
|
26638
|
+
type: "submit",
|
|
26639
|
+
form: "formulario",
|
|
26594
26640
|
sx: { height: 1 },
|
|
26595
|
-
children:
|
|
26596
|
-
...props.slotProps?.saveBtn
|
|
26641
|
+
children: "Guardar",
|
|
26642
|
+
...props.slotProps?.saveBtn,
|
|
26597
26643
|
} })] }));
|
|
26598
26644
|
};
|
|
26599
26645
|
|
|
26600
26646
|
const CreateButtonBase = (props) => {
|
|
26601
26647
|
// ===== || KEYDOWN || ===== //
|
|
26602
26648
|
const handleKeyPress = useCallback((event) => {
|
|
26603
|
-
if (event.ctrlKey && event.key ===
|
|
26649
|
+
if (event.ctrlKey && event.key === "e") {
|
|
26604
26650
|
event.preventDefault();
|
|
26605
26651
|
props.handleClick();
|
|
26606
26652
|
}
|
|
26607
26653
|
}, []);
|
|
26608
26654
|
useEffect(() => {
|
|
26609
|
-
document.addEventListener(
|
|
26655
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26610
26656
|
return () => {
|
|
26611
|
-
document.removeEventListener(
|
|
26657
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26612
26658
|
};
|
|
26613
26659
|
}, [handleKeyPress]);
|
|
26614
26660
|
return (jsx(NormalOrIcon, { buttonProps: {
|
|
26615
|
-
id:
|
|
26616
|
-
variant:
|
|
26617
|
-
color:
|
|
26661
|
+
id: "create-button",
|
|
26662
|
+
variant: "contained",
|
|
26663
|
+
color: "secondary",
|
|
26618
26664
|
startIcon: jsx(AddIcon, {}),
|
|
26619
26665
|
onClick: props.handleClick,
|
|
26620
|
-
|
|
26621
|
-
|
|
26622
|
-
|
|
26666
|
+
"aria-controls": props.open ? "create-menu" : undefined,
|
|
26667
|
+
"aria-haspopup": true,
|
|
26668
|
+
"aria-expanded": props.open ? "true" : undefined,
|
|
26623
26669
|
endIcon: jsx(KeyboardArrowDownIcon, {}),
|
|
26624
|
-
children:
|
|
26670
|
+
children: "Crear",
|
|
26625
26671
|
...props.buttonProps,
|
|
26626
26672
|
} }));
|
|
26627
26673
|
};
|
|
26628
26674
|
|
|
26629
26675
|
const MenuItemWithLoading = (props) => {
|
|
26630
26676
|
return (jsxs(MenuItem, { onClick: props.handleClick, sx: {
|
|
26631
|
-
position:
|
|
26632
|
-
}, disabled: props.disabled || props.isLoading, children: [props.children, props.isLoading &&
|
|
26633
|
-
|
|
26634
|
-
|
|
26635
|
-
}, px: 2, children: jsx(LinearProgress$1, {}) })] }));
|
|
26677
|
+
position: "relative",
|
|
26678
|
+
}, disabled: props.disabled || props.isLoading, children: [props.children, props.isLoading && (jsx(Box, { position: "absolute", width: 1, top: "50%", left: "50%", sx: {
|
|
26679
|
+
transform: "translate(-50%, -50%)",
|
|
26680
|
+
}, px: 2, children: jsx(LinearProgress$1, {}) }))] }));
|
|
26636
26681
|
};
|
|
26637
26682
|
|
|
26638
26683
|
const StyledMenu = styled$1((props) => (jsx(Menu, { elevation: 0, anchorOrigin: {
|
|
26639
|
-
vertical:
|
|
26640
|
-
horizontal:
|
|
26684
|
+
vertical: "bottom",
|
|
26685
|
+
horizontal: "right",
|
|
26641
26686
|
}, transformOrigin: {
|
|
26642
|
-
vertical:
|
|
26643
|
-
horizontal:
|
|
26687
|
+
vertical: "top",
|
|
26688
|
+
horizontal: "right",
|
|
26644
26689
|
}, ...props })))(({ theme }) => ({
|
|
26645
|
-
|
|
26690
|
+
"& .MuiPaper-root": {
|
|
26646
26691
|
borderRadius: 6,
|
|
26647
26692
|
marginTop: theme.spacing(1),
|
|
26648
26693
|
minWidth: 180,
|
|
26649
|
-
color:
|
|
26650
|
-
|
|
26651
|
-
|
|
26652
|
-
|
|
26694
|
+
color: "rgb(55, 65, 81)",
|
|
26695
|
+
backgroundColor: theme.palette.primary.lighter,
|
|
26696
|
+
boxShadow: "rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px",
|
|
26697
|
+
"& .MuiMenu-list": {
|
|
26698
|
+
padding: "4px 0",
|
|
26653
26699
|
},
|
|
26654
|
-
|
|
26655
|
-
|
|
26656
|
-
|
|
26657
|
-
|
|
26658
|
-
|
|
26659
|
-
|
|
26660
|
-
|
|
26661
|
-
|
|
26700
|
+
"& .MuiMenuItem-root": {
|
|
26701
|
+
borderRadius: 12,
|
|
26702
|
+
"&:hover": {
|
|
26703
|
+
backgroundColor: theme.palette.primary.main,
|
|
26704
|
+
color: "white",
|
|
26705
|
+
"& .MuiSvgIcon-root": {
|
|
26706
|
+
color: "white",
|
|
26707
|
+
},
|
|
26662
26708
|
},
|
|
26663
26709
|
},
|
|
26664
|
-
...theme.applyStyles(
|
|
26710
|
+
...theme.applyStyles("dark", {
|
|
26665
26711
|
color: theme.palette.grey[300],
|
|
26666
26712
|
}),
|
|
26667
26713
|
},
|
|
26668
26714
|
}));
|
|
26669
26715
|
|
|
26670
26716
|
const CreateButtonWithMenuOptions = (props) => {
|
|
26671
|
-
// const permission = useHasPermission_v2(`${props.permission}.add`);
|
|
26672
26717
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
26673
26718
|
const open = Boolean(anchorEl);
|
|
26674
26719
|
const handleClick = () => {
|
|
26675
|
-
setAnchorEl(document.getElementById(
|
|
26720
|
+
setAnchorEl(document.getElementById("create-button"));
|
|
26676
26721
|
};
|
|
26677
26722
|
const handleClose = () => {
|
|
26678
26723
|
setAnchorEl(null);
|
|
@@ -26684,21 +26729,24 @@ const CreateButtonWithMenuOptions = (props) => {
|
|
|
26684
26729
|
const handleToggleClose = () => {
|
|
26685
26730
|
setCSV({ open: false });
|
|
26686
26731
|
};
|
|
26687
|
-
|
|
26688
|
-
|
|
26689
|
-
|
|
26690
|
-
|
|
26691
|
-
|
|
26692
|
-
|
|
26693
|
-
|
|
26694
|
-
|
|
26695
|
-
|
|
26696
|
-
|
|
26697
|
-
|
|
26698
|
-
|
|
26699
|
-
|
|
26700
|
-
|
|
26701
|
-
|
|
26732
|
+
if (!props.permission)
|
|
26733
|
+
return null;
|
|
26734
|
+
return (jsxs(Fragment, { children: [jsx(CreateButtonBase, { open: open, handleClick: handleClick }), jsxs(StyledMenu, { id: "create-menu", MenuListProps: {
|
|
26735
|
+
"aria-labelledby": "create-menu-button",
|
|
26736
|
+
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
26737
|
+
[
|
|
26738
|
+
{
|
|
26739
|
+
title: "CSV",
|
|
26740
|
+
endpoint: props.pathname,
|
|
26741
|
+
icon: AttachFileIcon,
|
|
26742
|
+
},
|
|
26743
|
+
...(props.csv_upload.extraOptions || []),
|
|
26744
|
+
].map((option, index) => {
|
|
26745
|
+
return (jsxs(MenuItem, { onClick: () => {
|
|
26746
|
+
handleToggleOpen(option);
|
|
26747
|
+
handleClose();
|
|
26748
|
+
}, disableRipple: true, children: [option.icon && (jsx(ListItemIcon, { children: jsx(AttachFileIcon, {}) })), option.title] }, index));
|
|
26749
|
+
}), jsx(MenuItem, { onClick: () => {
|
|
26702
26750
|
props.navigate(`crear`);
|
|
26703
26751
|
handleClose();
|
|
26704
26752
|
}, disableRipple: true, children: "Manual" })] }), props.csv_upload?.enable && (jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data }))] }));
|
|
@@ -26711,12 +26759,12 @@ const ButtonWithDrawer = (props) => {
|
|
|
26711
26759
|
let setFunc = setInternalOpen;
|
|
26712
26760
|
if (props.setOpen)
|
|
26713
26761
|
setFunc = props.setOpen;
|
|
26714
|
-
setFunc(prevState => !prevState);
|
|
26762
|
+
setFunc((prevState) => !prevState);
|
|
26715
26763
|
};
|
|
26716
26764
|
const configuracionBase = {
|
|
26717
|
-
variant:
|
|
26765
|
+
variant: "contained",
|
|
26718
26766
|
fullWidth: true,
|
|
26719
|
-
color:
|
|
26767
|
+
color: "primary",
|
|
26720
26768
|
};
|
|
26721
26769
|
const renderButton = () => {
|
|
26722
26770
|
if (props.slots.button)
|
|
@@ -26725,7 +26773,10 @@ const ButtonWithDrawer = (props) => {
|
|
|
26725
26773
|
};
|
|
26726
26774
|
return (jsxs(Fragment, { children: [renderButton(), jsx(MainDrawer, { open: open, drawerToggle: handleClick, title: props.slots.drawer.title, slots: {
|
|
26727
26775
|
button: props.slots.drawer.button,
|
|
26728
|
-
}, children: props.slots.drawer.content({
|
|
26776
|
+
}, children: props.slots.drawer.content({
|
|
26777
|
+
...props.slotProps?.drawer?.content,
|
|
26778
|
+
handleClose: handleClick,
|
|
26779
|
+
}) })] }));
|
|
26729
26780
|
};
|
|
26730
26781
|
|
|
26731
26782
|
const StatusBadge = (props) => {
|
|
@@ -26914,16 +26965,16 @@ const UncontrolledText = (props) => {
|
|
|
26914
26965
|
const handleShowPassword = () => {
|
|
26915
26966
|
setShowPassword(!showPassword);
|
|
26916
26967
|
};
|
|
26917
|
-
return (jsx(TextField, { variant:
|
|
26968
|
+
return (jsx(TextField, { variant: "outlined", id: props.name, name: props.name, label: props.label, type: props.password ? (showPassword ? "text" : "password") : "text", helperText: props.textFieldProps?.helperText ? props.textFieldProps.helperText : " ", slotProps: {
|
|
26918
26969
|
input: {
|
|
26919
26970
|
// ícono de mostar u ocultar si es campo de contarseña
|
|
26920
|
-
endAdornment: props.password && (jsx(InputAdornment$1, { position:
|
|
26921
|
-
color:
|
|
26922
|
-
|
|
26923
|
-
color:
|
|
26924
|
-
}
|
|
26925
|
-
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) }))
|
|
26926
|
-
}
|
|
26971
|
+
endAdornment: props.password && (jsx(InputAdornment$1, { position: "end", children: jsx(IconButton, { "aria-label": "toggle password visibility", tabIndex: -1, onClick: handleShowPassword, edge: "end", size: "large", sx: {
|
|
26972
|
+
color: "secondary.darker",
|
|
26973
|
+
"&:hover": {
|
|
26974
|
+
color: "secondary.main",
|
|
26975
|
+
},
|
|
26976
|
+
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) })),
|
|
26977
|
+
},
|
|
26927
26978
|
}, ...props.textFieldProps }));
|
|
26928
26979
|
};
|
|
26929
26980
|
|
|
@@ -26995,9 +27046,8 @@ const generateSchema = (columns, columnsFilter, id) => {
|
|
|
26995
27046
|
};
|
|
26996
27047
|
|
|
26997
27048
|
const FiltersPopper = (props) => {
|
|
26998
|
-
|
|
26999
|
-
|
|
27000
|
-
const id = 1;
|
|
27049
|
+
const params = useLoaderData();
|
|
27050
|
+
const id = params?.id;
|
|
27001
27051
|
const columns = useGridApiContext().current.getAllColumns();
|
|
27002
27052
|
const [schema, defaultValues] = useMemo(() => generateSchema(columns, props.columnsFilter, id), [columns, id, props.columnsFilter]);
|
|
27003
27053
|
const form = useForm({
|
|
@@ -27007,14 +27057,16 @@ const FiltersPopper = (props) => {
|
|
|
27007
27057
|
const [dirty, setDirty] = useState(false);
|
|
27008
27058
|
useEffect(() => {
|
|
27009
27059
|
if (props.filters.filterModel.items) {
|
|
27010
|
-
if (!every(props.filters.filterModel.items, function (_value, key) {
|
|
27060
|
+
if (!every(props.filters.filterModel.items, function (_value, key) {
|
|
27061
|
+
return includes$1(props.protectFilters, key);
|
|
27062
|
+
})) {
|
|
27011
27063
|
setDirty(true);
|
|
27012
27064
|
}
|
|
27013
27065
|
form.reset(merge$2({}, defaultValues, props.filters.filterModel.items));
|
|
27014
27066
|
}
|
|
27015
27067
|
}, [defaultValues, props.filters.filterModel.items, form, props.protectFilters]);
|
|
27016
27068
|
const handleClose = (event) => {
|
|
27017
|
-
if (props.menuRef.current && event?.target.tagName ==
|
|
27069
|
+
if (props.menuRef.current && event?.target.tagName == "BODY")
|
|
27018
27070
|
return;
|
|
27019
27071
|
props.setOpen(false);
|
|
27020
27072
|
};
|
|
@@ -27022,9 +27074,9 @@ const FiltersPopper = (props) => {
|
|
|
27022
27074
|
setDirty(false);
|
|
27023
27075
|
props.filters.setFilterModel(produce((draft) => {
|
|
27024
27076
|
forEach$1(props.filters.filterModel.items, function (_value, key) {
|
|
27025
|
-
if ([
|
|
27077
|
+
if (["ordering", "search"].concat(props.protectFilters || []).includes(key))
|
|
27026
27078
|
return;
|
|
27027
|
-
delete draft[
|
|
27079
|
+
delete draft["items"][key];
|
|
27028
27080
|
});
|
|
27029
27081
|
}));
|
|
27030
27082
|
form.reset(defaultValues);
|
|
@@ -27032,135 +27084,142 @@ const FiltersPopper = (props) => {
|
|
|
27032
27084
|
};
|
|
27033
27085
|
const onSubmitHandler = (submitData) => {
|
|
27034
27086
|
props.filters.setFilterModel(produce((draft) => {
|
|
27035
|
-
draft[
|
|
27087
|
+
draft["items"] = { ...draft["items"], ...submitData };
|
|
27036
27088
|
}));
|
|
27037
27089
|
handleClose();
|
|
27038
27090
|
};
|
|
27039
27091
|
const onError = (errors) => {
|
|
27040
27092
|
console.log(errors);
|
|
27041
27093
|
};
|
|
27042
|
-
return (jsx(Box, { id:
|
|
27094
|
+
return (jsx(Box, { id: "filtros", children: jsx(Popper, { id: "filters-menu", open: props.open, anchorEl: props.menuRef.current, placement: "bottom-end", transition: true, sx: { zIndex: 1202 }, children: ({ TransitionProps }) => (jsx(Grow$1, { ...TransitionProps, timeout: 350, children: jsx(Paper, { elevation: 5, sx: { zIndex: 5 }, children: jsx(ClickAwayListener, { onClickAway: handleClose, children: jsxs(Grid, { size: 12, container: true, padding: 2, width: 350, maxWidth: "100%", children: [jsx(Grid, { size: 12, container: true, rowSpacing: 2, maxHeight: 300, overflow: "auto", children: columns.map((column, index) => {
|
|
27043
27095
|
if (column.input)
|
|
27044
|
-
return (jsxs(Grid, { size: 12, container: true, direction:
|
|
27045
|
-
|
|
27046
|
-
|
|
27096
|
+
return (jsxs(Grid, { size: 12, container: true, direction: "column", spacing: 0, children: [jsx(Grid, { size: 12, children: jsx(Typography$1, { fontWeight: "bold", gutterBottom: true, children: column.filterName ||
|
|
27097
|
+
column.headerName }) }), jsx(Grid, { size: 12, children: Children.map(column.input, (child) => {
|
|
27098
|
+
let addedProps = {
|
|
27099
|
+
control: form.control,
|
|
27100
|
+
};
|
|
27101
|
+
if (column.type == "number") {
|
|
27047
27102
|
addedProps = {
|
|
27048
27103
|
...addedProps,
|
|
27049
27104
|
extraProps: {
|
|
27050
|
-
...child.props
|
|
27105
|
+
...child.props
|
|
27106
|
+
.extraProps,
|
|
27051
27107
|
getValue: form.getValues,
|
|
27052
27108
|
setValue: form.setValue,
|
|
27053
|
-
}
|
|
27109
|
+
},
|
|
27054
27110
|
};
|
|
27055
27111
|
}
|
|
27056
27112
|
return cloneElement(child, {
|
|
27057
27113
|
...child.props,
|
|
27058
|
-
...addedProps
|
|
27114
|
+
...addedProps,
|
|
27059
27115
|
});
|
|
27060
27116
|
}) })] }, index));
|
|
27061
27117
|
return null;
|
|
27062
|
-
}) }), jsx(Grid, { size: 12, py: 2, children: jsx(Divider, {}) }), jsxs(Grid, { size: 12, display:
|
|
27118
|
+
}) }), jsx(Grid, { size: 12, py: 2, children: jsx(Divider, {}) }), jsxs(Grid, { size: 12, display: "flex", justifyContent: "space-evenly", children: [jsx(Button, { disabled: (!form.formState.isDirty ||
|
|
27119
|
+
props.disableQuickSearch) &&
|
|
27120
|
+
!dirty, startIcon: jsx(ClearIcon$1, {}), variant: "outlined", onClick: handleClear, children: "Limpiar" }), jsx(Button, { loading: props.disableQuickSearch, disabled: !form.formState.isDirty, startIcon: jsx(FilterAltIcon, {}), variant: "outlined", onClick: form.handleSubmit(onSubmitHandler, onError), children: "Aplicar" })] })] }) }) }) })) }) }));
|
|
27063
27121
|
};
|
|
27064
27122
|
|
|
27065
27123
|
const FiltersButton = (props) => {
|
|
27066
27124
|
const [open, setOpen] = useState(false);
|
|
27067
27125
|
const menuRef = useRef(null);
|
|
27068
27126
|
const handleClick = () => {
|
|
27069
|
-
setOpen(prevState => !prevState);
|
|
27127
|
+
setOpen((prevState) => !prevState);
|
|
27070
27128
|
};
|
|
27071
27129
|
const filterCount = useMemo(() => {
|
|
27072
27130
|
return countBy(Object.entries(props.filters.filterModel.items), function (filter) {
|
|
27073
27131
|
const key = filter[0];
|
|
27074
27132
|
const value = filter[1];
|
|
27075
|
-
if (key ==
|
|
27133
|
+
if (key == "ordering" || key == "search")
|
|
27076
27134
|
return;
|
|
27077
|
-
if (props.protectFilters &&
|
|
27135
|
+
if (props.protectFilters &&
|
|
27136
|
+
findIndex(props.protectFilters, function (x) {
|
|
27137
|
+
return x == key;
|
|
27138
|
+
}) > -1)
|
|
27078
27139
|
return;
|
|
27079
27140
|
return (isNumber(value) && value > 0) || !isEmpty$1(value) || isBoolean(value);
|
|
27080
27141
|
}).true;
|
|
27081
|
-
}, [
|
|
27082
|
-
props.filters.filterModel.items, props.protectFilters
|
|
27083
|
-
]);
|
|
27142
|
+
}, [props.filters.filterModel.items, props.protectFilters]);
|
|
27084
27143
|
// ===== || ABRIR CON CTRL + Shift + F || ===== //
|
|
27085
27144
|
const handleKeyPress = useCallback((event) => {
|
|
27086
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27145
|
+
if (event.ctrlKey && event.shiftKey && event.key === "F") {
|
|
27087
27146
|
event.preventDefault();
|
|
27088
27147
|
setOpen(true);
|
|
27089
27148
|
}
|
|
27090
|
-
else if (event.key ===
|
|
27149
|
+
else if (event.key === "Escape" && open) {
|
|
27091
27150
|
setOpen(false);
|
|
27092
27151
|
}
|
|
27093
27152
|
}, [open]);
|
|
27094
27153
|
useEffect(() => {
|
|
27095
|
-
document.addEventListener(
|
|
27154
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27096
27155
|
return () => {
|
|
27097
|
-
document.removeEventListener(
|
|
27156
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27098
27157
|
};
|
|
27099
27158
|
}, [handleKeyPress]);
|
|
27100
|
-
return (jsxs(Fragment, { children: [jsx(Tooltip$1, { title: "Filtros", children: jsx(ToolbarButton, { ref: menuRef, id: "filters-menu-trigger", "aria-controls": "filters-menu", "aria-haspopup": "true", "aria-expanded": open ?
|
|
27101
|
-
if (key.key ==
|
|
27159
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip$1, { title: "Filtros", children: jsx(ToolbarButton, { ref: menuRef, id: "filters-menu-trigger", "aria-controls": "filters-menu", "aria-haspopup": "true", "aria-expanded": open ? "true" : undefined, color: "default", onClick: handleClick, onKeyDown: (key) => {
|
|
27160
|
+
if (key.key == "Escape")
|
|
27102
27161
|
setOpen(false);
|
|
27103
|
-
}, className:
|
|
27162
|
+
}, className: "my-icon-button", children: jsx(Badge, { badgeContent: filterCount, color: "primary", children: jsx(FilterListIcon, { fontSize: "small" }) }) }) }), jsx(FiltersPopper, { ...props, menuRef: menuRef, open: open, setOpen: setOpen })] }));
|
|
27104
27163
|
};
|
|
27105
27164
|
|
|
27106
27165
|
const ExportCSV = (props) => {
|
|
27107
|
-
|
|
27108
|
-
|
|
27109
|
-
|
|
27110
|
-
|
|
27166
|
+
const { pathname } = useLocation();
|
|
27167
|
+
const endpoint = props.slots?.endpoint || pathname;
|
|
27168
|
+
const notifications = useNotifications();
|
|
27169
|
+
const api = useAPI();
|
|
27170
|
+
const [descargarCSV, { isLoading }] = api.useLazyDescargarCSVQuery();
|
|
27111
27171
|
const handleClick = () => {
|
|
27112
27172
|
const extraItems = { variant: props.slots?.variant };
|
|
27113
27173
|
if (props.rowSelectionModel.ids.size > 0)
|
|
27114
|
-
extraItems[`${props.slots?.column_key ||
|
|
27115
|
-
|
|
27116
|
-
|
|
27117
|
-
|
|
27118
|
-
|
|
27119
|
-
|
|
27120
|
-
|
|
27121
|
-
|
|
27122
|
-
|
|
27123
|
-
|
|
27124
|
-
|
|
27125
|
-
|
|
27126
|
-
|
|
27127
|
-
|
|
27128
|
-
|
|
27129
|
-
|
|
27130
|
-
|
|
27131
|
-
|
|
27132
|
-
|
|
27133
|
-
|
|
27134
|
-
|
|
27135
|
-
|
|
27174
|
+
extraItems[`${props.slots?.column_key || "id"}__in`] = Array.from(props.rowSelectionModel.ids).join(",");
|
|
27175
|
+
const filters = merge$2({}, omit(props.filterModel, map(props.ignore?.filters, function (filter) {
|
|
27176
|
+
return `items.${filter}`;
|
|
27177
|
+
}) || []), { items: extraItems });
|
|
27178
|
+
descargarCSV({
|
|
27179
|
+
endpoint: endpoint,
|
|
27180
|
+
filterModel: filters,
|
|
27181
|
+
sortModel: props.sortModel,
|
|
27182
|
+
ignoreSort: props.ignore?.sort,
|
|
27183
|
+
})
|
|
27184
|
+
.unwrap()
|
|
27185
|
+
.then((response) => {
|
|
27186
|
+
const file = document.createElement("a");
|
|
27187
|
+
file.href = response.file;
|
|
27188
|
+
file.download = response.filename;
|
|
27189
|
+
file.click();
|
|
27190
|
+
notifications.show("CSV descargado!", { severity: "success" });
|
|
27191
|
+
props.handleClick();
|
|
27192
|
+
})
|
|
27193
|
+
.catch((error) => {
|
|
27194
|
+
console.log(error);
|
|
27195
|
+
notifications.show("Error al descargar CSV.", { severity: "error" });
|
|
27196
|
+
});
|
|
27136
27197
|
};
|
|
27137
|
-
return (jsx(MenuItemWithLoading, { handleClick: handleClick, isLoading:
|
|
27198
|
+
return (jsx(MenuItemWithLoading, { handleClick: handleClick, isLoading: isLoading, disabled: props.disabledWithoutSelection && !props.rowSelectionModel.ids.size, children: props.slots?.title || "Descargar como CSV" }, "export-dg-csv"));
|
|
27138
27199
|
};
|
|
27139
27200
|
|
|
27140
27201
|
const ExportButton = (props) => {
|
|
27141
27202
|
const [exportMenuOpen, setExportMenuOpen] = useState(false);
|
|
27142
27203
|
const exportMenuTriggerRef = useRef(null);
|
|
27143
|
-
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: "Exportar", children: jsx(ToolbarButton, { ref: exportMenuTriggerRef, id: "export-menu-trigger", "aria-controls": "export-menu", "aria-haspopup": "true", "aria-expanded": exportMenuOpen ?
|
|
27204
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: "Exportar", children: jsx(ToolbarButton, { ref: exportMenuTriggerRef, id: "export-menu-trigger", "aria-controls": "export-menu", "aria-haspopup": "true", "aria-expanded": exportMenuOpen ? "true" : undefined, onClick: () => setExportMenuOpen(true), className: "my-icon-button", children: jsx(FileDownloadIcon, { fontSize: "small" }) }) }), jsxs(Menu$1, { id: "export-menu", anchorEl: exportMenuTriggerRef.current, open: exportMenuOpen, onClose: () => setExportMenuOpen(false), anchorOrigin: { vertical: "bottom", horizontal: "left" }, transformOrigin: { vertical: "top", horizontal: "left" }, slotProps: {
|
|
27144
27205
|
list: {
|
|
27145
|
-
|
|
27206
|
+
"aria-labelledby": "export-menu-trigger",
|
|
27146
27207
|
},
|
|
27147
|
-
}, children: [!props.csvProps?.hide &&
|
|
27148
|
-
|
|
27149
|
-
|
|
27150
|
-
} }), props.extraOptions?.map(item => {
|
|
27208
|
+
}, children: [!props.csvProps?.hide && (jsx(ExportCSV, { handleClick: () => setExportMenuOpen(false), filterModel: props.filterModel, sortModel: props.sortModel, rowSelectionModel: props.rowSelectionModel, slots: {
|
|
27209
|
+
endpoint: props.csvProps?.endpoint,
|
|
27210
|
+
} })), props.extraOptions?.map((item) => {
|
|
27151
27211
|
const csvExport = item.props.csvExport;
|
|
27152
|
-
const remainingProps = omit(item.props,
|
|
27153
|
-
return
|
|
27212
|
+
const remainingProps = omit(item.props, "csvExport");
|
|
27213
|
+
return item.element({
|
|
27154
27214
|
handleClick: () => setExportMenuOpen(false),
|
|
27155
27215
|
filterModel: props.filterModel,
|
|
27156
27216
|
sortModel: props.sortModel,
|
|
27217
|
+
rowSelectionModel: props.rowSelectionModel,
|
|
27157
27218
|
csvExport: {
|
|
27158
|
-
rowSelectionModel: props.rowSelectionModel,
|
|
27159
27219
|
...csvExport,
|
|
27160
27220
|
},
|
|
27161
|
-
endpoint: props.csvProps?.endpoint,
|
|
27162
27221
|
...remainingProps,
|
|
27163
|
-
})
|
|
27222
|
+
});
|
|
27164
27223
|
})] })] }));
|
|
27165
27224
|
};
|
|
27166
27225
|
|
|
@@ -27168,34 +27227,33 @@ const ColumnsButton = () => {
|
|
|
27168
27227
|
const apiRef = useGridApiContext();
|
|
27169
27228
|
const allCols = apiRef.current.getAllColumns().length;
|
|
27170
27229
|
const visibleCols = apiRef.current.getVisibleColumns().length;
|
|
27171
|
-
return (jsx(Tooltip, { title: "Columnas", children: jsx(ColumnsPanelTrigger, { render: jsx(ToolbarButton, { className:
|
|
27230
|
+
return (jsx(Tooltip, { title: "Columnas", children: jsx(ColumnsPanelTrigger, { render: jsx(ToolbarButton, { className: "my-icon-button" }), children: jsx(Badge, { color: "primary", variant: "dot", invisible: visibleCols >= allCols, children: jsx(ViewColumnIcon, { fontSize: "small" }) }) }) }));
|
|
27172
27231
|
};
|
|
27173
27232
|
|
|
27174
27233
|
const RefreshButton = (props) => {
|
|
27175
27234
|
// ===== || EJECUTAR CON CTRL + Shift + R || ===== //
|
|
27176
27235
|
const handleKeyPress = useCallback((event) => {
|
|
27177
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27236
|
+
if (event.ctrlKey && event.shiftKey && event.key === "R") {
|
|
27178
27237
|
event.preventDefault();
|
|
27179
27238
|
if (props.refetch)
|
|
27180
27239
|
props.refetch();
|
|
27181
27240
|
}
|
|
27182
27241
|
}, [props]);
|
|
27183
27242
|
useEffect(() => {
|
|
27184
|
-
document.addEventListener(
|
|
27243
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27185
27244
|
return () => {
|
|
27186
|
-
document.removeEventListener(
|
|
27245
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27187
27246
|
};
|
|
27188
27247
|
}, [handleKeyPress]);
|
|
27189
|
-
return (jsx(Tooltip$1, { title:
|
|
27248
|
+
return (jsx(Tooltip$1, { title: "Refrescar", children: jsx(ToolbarButton, { onClick: props.refetch, children: jsx(RefreshIcon, { fontSize: "small" }) }) }));
|
|
27190
27249
|
};
|
|
27191
27250
|
|
|
27192
27251
|
const CustomToolbar = (props) => {
|
|
27193
27252
|
const [expanded, setExpanded] = useState(true);
|
|
27194
27253
|
return (jsx(Toolbar, { style: {
|
|
27195
|
-
minHeight: expanded ?
|
|
27196
|
-
}, children: expanded ? (jsxs(Fragment, { children: [jsxs(Stack, { direction:
|
|
27197
|
-
jsxs(
|
|
27198
|
-
props.extraButtons.map((button, index) => (jsxs(Box, { display: 'flex', children: [jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(Tooltip$1, { title: button.label, children: jsx(ToolbarButton, { onClick: () => button.onClick(), className: 'my-icon-button', ...button.buttonProps, children: jsx(button.icon, { fontSize: "small" }) }) })] }, `toolbar-button-${index}`))), jsx(SelectedRowsButton, { selection: props.selection, extraActions: props.extraActions })] })] })) : (jsx(Box, { width: 1, display: 'flex', justifyContent: 'center', alignItems: 'center', children: jsx(IconButton, { onClick: () => setExpanded(true), children: jsx(ExpandMoreIcon, {}) }) })) }));
|
|
27254
|
+
minHeight: expanded ? "inherit" : "10px",
|
|
27255
|
+
}, children: expanded ? (jsxs(Fragment, { children: [jsxs(Stack, { direction: "row", width: 0.5, justifyContent: "left", children: [!props.buttons?.refresh?.hide && (jsx(RefreshButton, { refetch: props.buttons?.refresh?.refetch })), !(props.buttons?.refresh?.hide || props.buttons?.export?.hide) && (jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } })), !props.buttons?.export?.hide && (jsx(ExportButton, { filterModel: props.filters.filterModel, sortModel: props.sortModel, rowSelectionModel: props.selection, ...props.buttons.export }))] }), jsx(Box, { width: 1, display: "flex", justifyContent: "center", alignItems: "top", children: jsx(IconButton, { size: "small", onClick: () => setExpanded(false), children: jsx(ExpandLessIcon, {}) }) }), jsxs(Stack, { direction: "row", width: 0.5, justifyContent: "right", children: [jsx(ColumnsButton, {}), !props.buttons.filters?.hide && (jsxs(Fragment, { children: [jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(FiltersButton, { ...props })] })), jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(QuickSearch, { disableQuickSearch: props.disableQuickSearch, filters: props.filters }), props.extraButtons &&
|
|
27256
|
+
props.extraButtons.map((button, index) => (jsxs(Box, { display: "flex", children: [jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(Tooltip$1, { title: button.label, children: jsx(ToolbarButton, { onClick: () => button.onClick(), className: "my-icon-button", ...button.buttonProps, children: jsx(button.icon, { fontSize: "small" }) }) })] }, `toolbar-button-${index}`))), jsx(SelectedRowsButton, { selection: props.selection, extraActions: props.extraActions })] })] })) : (jsx(Box, { width: 1, display: "flex", justifyContent: "center", alignItems: "center", children: jsx(IconButton, { onClick: () => setExpanded(true), children: jsx(ExpandMoreIcon, {}) }) })) }));
|
|
27199
27257
|
};
|
|
27200
27258
|
|
|
27201
27259
|
const StyledGridOverlay = styled$1('div')(({ theme }) => ({
|
|
@@ -27233,20 +27291,22 @@ function CustomPagination() {
|
|
|
27233
27291
|
}
|
|
27234
27292
|
|
|
27235
27293
|
const DraggableRow = (params) => {
|
|
27236
|
-
const { attributes, listeners, setNodeRef, transform, transition
|
|
27294
|
+
const { attributes, listeners, setNodeRef, transform, transition } = useSortable({
|
|
27295
|
+
id: params.rowId.toString(),
|
|
27296
|
+
});
|
|
27237
27297
|
const style = {
|
|
27238
27298
|
transform: CSS.Transform.toString(transform),
|
|
27239
|
-
transition
|
|
27299
|
+
transition,
|
|
27240
27300
|
};
|
|
27241
|
-
return (jsxs(Box, { display:
|
|
27242
|
-
width:
|
|
27301
|
+
return (jsxs(Box, { display: "flex", ref: setNodeRef, style: style, children: [jsx(Box, { ...attributes, ...listeners, sx: {
|
|
27302
|
+
width: "20px",
|
|
27243
27303
|
height: params.rowHeight,
|
|
27244
|
-
background:
|
|
27245
|
-
borderTop:
|
|
27246
|
-
cursor:
|
|
27247
|
-
|
|
27248
|
-
cursor:
|
|
27249
|
-
}
|
|
27304
|
+
background: "repeating-linear-gradient( 45deg, #e0e0e0, #e0e0e0 5px, transparent 5px, transparent 10px)",
|
|
27305
|
+
borderTop: "1px solid rgba(224, 224, 224, 1)",
|
|
27306
|
+
cursor: "grab",
|
|
27307
|
+
"&:active": {
|
|
27308
|
+
cursor: "grabbing",
|
|
27309
|
+
},
|
|
27250
27310
|
} }), jsx(GridRow, { ...params })] }));
|
|
27251
27311
|
};
|
|
27252
27312
|
|
|
@@ -27263,38 +27323,41 @@ const EditGridWrapper = (props) => {
|
|
|
27263
27323
|
const handleClickEdit = () => {
|
|
27264
27324
|
if (edit)
|
|
27265
27325
|
handleCancelarEdit();
|
|
27266
|
-
setEdit(prevState => !prevState);
|
|
27326
|
+
setEdit((prevState) => !prevState);
|
|
27267
27327
|
};
|
|
27268
27328
|
const processRowUpdate = async (newRow, originalRow) => {
|
|
27269
27329
|
const original_data = jsonForm({ submitData: originalRow });
|
|
27270
|
-
const data = jsonForm({
|
|
27330
|
+
const data = jsonForm({
|
|
27331
|
+
submitData: newRow,
|
|
27332
|
+
...(props.parser ? { props: props.parser } : []),
|
|
27333
|
+
});
|
|
27271
27334
|
if (isEqual$1(data, original_data))
|
|
27272
27335
|
return originalRow;
|
|
27273
27336
|
try {
|
|
27274
27337
|
const result = await editMutation(data).unwrap();
|
|
27275
|
-
setErrors(prevState => produce(prevState, draft => {
|
|
27338
|
+
setErrors((prevState) => produce(prevState, (draft) => {
|
|
27276
27339
|
delete draft[newRow.id];
|
|
27277
27340
|
}));
|
|
27278
27341
|
if (props?.postAction)
|
|
27279
27342
|
props.postAction(result);
|
|
27280
|
-
notifications.show(`Información actualizada!`, { severity:
|
|
27343
|
+
notifications.show(`Información actualizada!`, { severity: "success" });
|
|
27281
27344
|
return result.list;
|
|
27282
27345
|
}
|
|
27283
27346
|
catch (e) {
|
|
27284
|
-
setErrors(prevState => produce(prevState, draft => {
|
|
27285
|
-
draft[newRow.id] = get(e,
|
|
27347
|
+
setErrors((prevState) => produce(prevState, (draft) => {
|
|
27348
|
+
draft[newRow.id] = get(e, "data");
|
|
27286
27349
|
}));
|
|
27287
|
-
notifications.show(
|
|
27350
|
+
notifications.show("Error actualizando información!", { severity: "error" });
|
|
27288
27351
|
}
|
|
27289
27352
|
};
|
|
27290
27353
|
// ===== || KEYDOWN || ===== //
|
|
27291
27354
|
const handleKeyPress = useCallback((event) => {
|
|
27292
27355
|
if (props.permission) {
|
|
27293
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27356
|
+
if (event.ctrlKey && event.shiftKey && event.key === "E") {
|
|
27294
27357
|
event.preventDefault();
|
|
27295
27358
|
setEdit(true);
|
|
27296
27359
|
}
|
|
27297
|
-
else if (event.key ===
|
|
27360
|
+
else if (event.key === "Escape" && event.shiftKey && edit) {
|
|
27298
27361
|
event.preventDefault();
|
|
27299
27362
|
handleCancelarEdit();
|
|
27300
27363
|
setEdit(false);
|
|
@@ -27302,9 +27365,9 @@ const EditGridWrapper = (props) => {
|
|
|
27302
27365
|
}
|
|
27303
27366
|
}, [edit, props.permission]);
|
|
27304
27367
|
useEffect(() => {
|
|
27305
|
-
document.addEventListener(
|
|
27368
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27306
27369
|
return () => {
|
|
27307
|
-
document.removeEventListener(
|
|
27370
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27308
27371
|
};
|
|
27309
27372
|
}, [handleKeyPress]);
|
|
27310
27373
|
// ========================= || DRAG N DROP || ========================= //
|
|
@@ -27321,7 +27384,10 @@ const EditGridWrapper = (props) => {
|
|
|
27321
27384
|
if (over) {
|
|
27322
27385
|
const activeRow = rows.find((row) => row.id == active.id);
|
|
27323
27386
|
const overRow = rows.find((row) => row.id == over.id);
|
|
27324
|
-
const mutationArgs = {
|
|
27387
|
+
const mutationArgs = {
|
|
27388
|
+
...props.dnd?.args,
|
|
27389
|
+
id: activeRow.id,
|
|
27390
|
+
};
|
|
27325
27391
|
mutationArgs[field] = get(overRow, field);
|
|
27326
27392
|
editMutation(mutationArgs);
|
|
27327
27393
|
}
|
|
@@ -27339,33 +27405,37 @@ const EditGridWrapper = (props) => {
|
|
|
27339
27405
|
slotProps: {
|
|
27340
27406
|
toolbar: {
|
|
27341
27407
|
extraButtons: [
|
|
27342
|
-
...(props.permission && !props.disabled
|
|
27343
|
-
|
|
27344
|
-
|
|
27345
|
-
|
|
27346
|
-
|
|
27347
|
-
|
|
27348
|
-
|
|
27408
|
+
...(props.permission && !props.disabled
|
|
27409
|
+
? [
|
|
27410
|
+
{
|
|
27411
|
+
label: edit ? "Cancelar" : "Editar",
|
|
27412
|
+
icon: edit ? CancelIcon : EditIcon,
|
|
27413
|
+
onClick: handleClickEdit,
|
|
27414
|
+
},
|
|
27415
|
+
]
|
|
27416
|
+
: []),
|
|
27417
|
+
],
|
|
27418
|
+
},
|
|
27349
27419
|
},
|
|
27350
27420
|
onRowEditStart: ({ reason, row }, event) => {
|
|
27351
|
-
if (!get(row, `obj_permissions.edit`) ||
|
|
27421
|
+
if (!get(row, `obj_permissions.edit`) ||
|
|
27422
|
+
(reason === GridRowEditStartReasons.cellDoubleClick && !edit)) {
|
|
27352
27423
|
event.defaultMuiPrevented = true;
|
|
27353
27424
|
}
|
|
27354
27425
|
},
|
|
27355
27426
|
// edit
|
|
27356
27427
|
checkboxSelection: !edit,
|
|
27357
27428
|
...(edit ? { onRowClick: undefined } : []),
|
|
27358
|
-
editMode:
|
|
27429
|
+
editMode: "row",
|
|
27359
27430
|
rowModesModel: rowModesModel,
|
|
27360
27431
|
onRowModesModelChange: setRowModesModel,
|
|
27361
27432
|
processRowUpdate: processRowUpdate,
|
|
27362
27433
|
loadingParams: [loadingMutation],
|
|
27363
27434
|
}, props.dataGridProps);
|
|
27364
|
-
const renderEditGrid = () => (jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, modifiers: [
|
|
27365
|
-
|
|
27366
|
-
|
|
27367
|
-
|
|
27368
|
-
], autoScroll: false, children: jsx(SortableContext, { items: rows ? rows.map((row) => row.id.toString()) : [], strategy: verticalListSortingStrategy, children: props.renderFunction({ ...props.renderFunctionProps, dataGridProps: editGridProps }) }) }));
|
|
27435
|
+
const renderEditGrid = () => (jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, modifiers: [restrictToVerticalAxis, restrictToWindowEdges, restrictToParentElement], autoScroll: false, children: jsx(SortableContext, { items: rows ? rows.map((row) => row.id.toString()) : [], strategy: verticalListSortingStrategy, children: props.renderFunction({
|
|
27436
|
+
...props.renderFunctionProps,
|
|
27437
|
+
dataGridProps: editGridProps,
|
|
27438
|
+
}) }) }));
|
|
27369
27439
|
return renderEditGrid();
|
|
27370
27440
|
};
|
|
27371
27441
|
|
|
@@ -27386,43 +27456,47 @@ const editColumn = (props) => {
|
|
|
27386
27456
|
[id]: { mode: GridRowModes.View, ignoreModifications: true },
|
|
27387
27457
|
});
|
|
27388
27458
|
};
|
|
27389
|
-
return [
|
|
27390
|
-
|
|
27391
|
-
|
|
27392
|
-
|
|
27459
|
+
return [
|
|
27460
|
+
{
|
|
27461
|
+
field: "edit",
|
|
27462
|
+
headerName: "Editar",
|
|
27463
|
+
type: "actions",
|
|
27393
27464
|
width: 80,
|
|
27394
|
-
cellClassName:
|
|
27465
|
+
cellClassName: "actions",
|
|
27395
27466
|
getActions: ({ id, row }) => {
|
|
27396
|
-
const canEdit = get$1(row,
|
|
27467
|
+
const canEdit = get$1(row, "obj_permissions.edit");
|
|
27397
27468
|
const isInEditMode = props.rowModesModel[id]?.mode === GridRowModes.Edit;
|
|
27398
27469
|
if (isInEditMode) {
|
|
27399
27470
|
return [
|
|
27400
|
-
jsx(GridActionsCellItem, { icon: jsx(SaveIcon, {}), label:
|
|
27401
|
-
jsx(GridActionsCellItem, { icon: jsx(CancelIcon, {}), label:
|
|
27471
|
+
jsx(GridActionsCellItem, { icon: jsx(SaveIcon, {}), label: "Guardar", color: "primary", onClick: handleSaveClick(id) }, "save"),
|
|
27472
|
+
jsx(GridActionsCellItem, { icon: jsx(CancelIcon, {}), label: "Cancelar", className: "textPrimary", onClick: handleCancelClick(id), color: "inherit" }, "cancel"),
|
|
27402
27473
|
];
|
|
27403
27474
|
}
|
|
27404
27475
|
return [
|
|
27405
|
-
jsx(GridActionsCellItem, { icon: jsx(EditIcon, { sx: { color: canEdit ?
|
|
27476
|
+
jsx(GridActionsCellItem, { icon: jsx(EditIcon, { sx: { color: canEdit ? "black" : "inherit" } }), label: "Editar", className: "textPrimary", onClick: handleEditClick(id), disabled: !canEdit }, "edit"),
|
|
27406
27477
|
];
|
|
27407
|
-
}
|
|
27408
|
-
}
|
|
27478
|
+
},
|
|
27479
|
+
},
|
|
27480
|
+
];
|
|
27409
27481
|
};
|
|
27410
27482
|
|
|
27411
27483
|
const deleteColumn = (props) => {
|
|
27412
27484
|
if (!props.displayDelete)
|
|
27413
27485
|
return [];
|
|
27414
|
-
return [
|
|
27415
|
-
|
|
27416
|
-
|
|
27486
|
+
return [
|
|
27487
|
+
{
|
|
27488
|
+
field: "delete",
|
|
27489
|
+
headerName: "Eliminar",
|
|
27417
27490
|
width: 80,
|
|
27418
|
-
cellClassName:
|
|
27491
|
+
cellClassName: "actions",
|
|
27419
27492
|
renderCell: ({ id, row }) => {
|
|
27420
27493
|
const canDelete = get$1(row, `obj_permissions.delete`, false);
|
|
27421
27494
|
return [
|
|
27422
|
-
jsx(GridActionsCellItem, { icon: jsx(DeleteIcon, {}), label:
|
|
27495
|
+
jsx(GridActionsCellItem, { icon: jsx(DeleteIcon, {}), label: "Eliminar", className: "textPrimary", onClick: props.handleOpen(id), color: "primary", disabled: !canDelete }, "delete"),
|
|
27423
27496
|
];
|
|
27424
|
-
}
|
|
27425
|
-
}
|
|
27497
|
+
},
|
|
27498
|
+
},
|
|
27499
|
+
];
|
|
27426
27500
|
};
|
|
27427
27501
|
|
|
27428
27502
|
const DeleteGridWrapper = (props) => {
|
|
@@ -27436,25 +27510,25 @@ const DeleteGridWrapper = (props) => {
|
|
|
27436
27510
|
setDeleteRowId(undefined);
|
|
27437
27511
|
};
|
|
27438
27512
|
const handleClickDelete = () => {
|
|
27439
|
-
setDeleting(prevState => !prevState);
|
|
27513
|
+
setDeleting((prevState) => !prevState);
|
|
27440
27514
|
};
|
|
27441
27515
|
// ===== || KEYDOWN || ===== //
|
|
27442
27516
|
const handleKeyPress = useCallback((event) => {
|
|
27443
27517
|
if (props.permission) {
|
|
27444
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27518
|
+
if (event.ctrlKey && event.shiftKey && event.key === "D") {
|
|
27445
27519
|
event.preventDefault();
|
|
27446
27520
|
setDeleting(true);
|
|
27447
27521
|
}
|
|
27448
|
-
else if (event.key ===
|
|
27522
|
+
else if (event.key === "Escape" && event.shiftKey && deleting) {
|
|
27449
27523
|
event.preventDefault();
|
|
27450
27524
|
setDeleting(false);
|
|
27451
27525
|
}
|
|
27452
27526
|
}
|
|
27453
27527
|
}, [props.permission, deleting]);
|
|
27454
27528
|
useEffect(() => {
|
|
27455
|
-
document.addEventListener(
|
|
27529
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27456
27530
|
return () => {
|
|
27457
|
-
document.removeEventListener(
|
|
27531
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27458
27532
|
};
|
|
27459
27533
|
}, [handleKeyPress]);
|
|
27460
27534
|
// ===== || GRID PROPS || ===== //
|
|
@@ -27468,20 +27542,23 @@ const DeleteGridWrapper = (props) => {
|
|
|
27468
27542
|
slotProps: {
|
|
27469
27543
|
toolbar: {
|
|
27470
27544
|
extraButtons: [
|
|
27471
|
-
...(props.permission
|
|
27472
|
-
|
|
27473
|
-
|
|
27474
|
-
|
|
27475
|
-
|
|
27476
|
-
|
|
27477
|
-
|
|
27545
|
+
...(props.permission
|
|
27546
|
+
? [
|
|
27547
|
+
{
|
|
27548
|
+
label: deleting ? "Cancelar" : "Eliminar",
|
|
27549
|
+
icon: deleting ? CancelIcon : DeleteIcon,
|
|
27550
|
+
onClick: handleClickDelete,
|
|
27551
|
+
},
|
|
27552
|
+
]
|
|
27553
|
+
: []),
|
|
27554
|
+
],
|
|
27555
|
+
},
|
|
27478
27556
|
},
|
|
27479
27557
|
// edit
|
|
27480
27558
|
checkboxSelection: !deleting,
|
|
27481
27559
|
...(deleting ? { onRowClick: undefined } : []),
|
|
27482
27560
|
}, props.dataGridProps);
|
|
27483
|
-
const renderDeleteGrid = () => (jsxs(Fragment, { children: [props.mutation &&
|
|
27484
|
-
jsx(DeleteConfirmationDialog, { mutation: props.mutation, open: !!deleteRowId, handleClose: handleClose, id: deleteRowId, disableNavBack: true }), props.renderFunction({ ...props.renderFunctionProps, dataGridProps: deleteGridProps })] }));
|
|
27561
|
+
const renderDeleteGrid = () => (jsxs(Fragment, { children: [props.mutation && (jsx(DeleteConfirmationDialog, { mutation: props.mutation, open: !!deleteRowId, handleClose: handleClose, id: deleteRowId, disableNavBack: true })), props.renderFunction({ ...props.renderFunctionProps, dataGridProps: deleteGridProps })] }));
|
|
27485
27562
|
return renderDeleteGrid();
|
|
27486
27563
|
};
|
|
27487
27564
|
|
|
@@ -27490,7 +27567,7 @@ const CreateGridWrapper = (props) => {
|
|
|
27490
27567
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
27491
27568
|
const open = Boolean(anchorEl);
|
|
27492
27569
|
const handleClick = () => {
|
|
27493
|
-
setAnchorEl(document.getElementById(
|
|
27570
|
+
setAnchorEl(document.getElementById("create-button"));
|
|
27494
27571
|
};
|
|
27495
27572
|
const handleClose = () => {
|
|
27496
27573
|
setAnchorEl(null);
|
|
@@ -27505,51 +27582,56 @@ const CreateGridWrapper = (props) => {
|
|
|
27505
27582
|
// ===== || KEYDOWN || ===== //
|
|
27506
27583
|
const handleKeyPress = useCallback((event) => {
|
|
27507
27584
|
if (props.permission) {
|
|
27508
|
-
if (event.ctrlKey && event.key ===
|
|
27585
|
+
if (event.ctrlKey && event.key === "e") {
|
|
27509
27586
|
event.preventDefault();
|
|
27510
27587
|
handleClick();
|
|
27511
27588
|
}
|
|
27512
27589
|
}
|
|
27513
27590
|
}, [props.permission]);
|
|
27514
27591
|
useEffect(() => {
|
|
27515
|
-
document.addEventListener(
|
|
27592
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27516
27593
|
return () => {
|
|
27517
|
-
document.removeEventListener(
|
|
27594
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27518
27595
|
};
|
|
27519
27596
|
}, [handleKeyPress]);
|
|
27520
27597
|
const createGridProps = mergeSettings({
|
|
27521
27598
|
slotProps: {
|
|
27522
27599
|
toolbar: {
|
|
27523
27600
|
extraButtons: [
|
|
27524
|
-
...(props.permission
|
|
27525
|
-
|
|
27526
|
-
|
|
27527
|
-
|
|
27528
|
-
|
|
27529
|
-
|
|
27530
|
-
|
|
27531
|
-
|
|
27532
|
-
|
|
27533
|
-
|
|
27601
|
+
...(props.permission
|
|
27602
|
+
? [
|
|
27603
|
+
{
|
|
27604
|
+
label: "Crear",
|
|
27605
|
+
icon: AddIcon,
|
|
27606
|
+
onClick: handleClick,
|
|
27607
|
+
buttonProps: {
|
|
27608
|
+
id: "create-button",
|
|
27609
|
+
},
|
|
27610
|
+
},
|
|
27611
|
+
]
|
|
27612
|
+
: []),
|
|
27613
|
+
],
|
|
27614
|
+
},
|
|
27534
27615
|
},
|
|
27535
27616
|
}, props.dataGridProps);
|
|
27536
|
-
return (jsxs(Fragment, { children: [jsxs(StyledMenu, { id:
|
|
27537
|
-
|
|
27538
|
-
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
27539
|
-
|
|
27540
|
-
|
|
27541
|
-
|
|
27542
|
-
|
|
27543
|
-
|
|
27544
|
-
|
|
27545
|
-
|
|
27546
|
-
|
|
27547
|
-
|
|
27548
|
-
|
|
27549
|
-
|
|
27617
|
+
return (jsxs(Fragment, { children: [jsxs(StyledMenu, { id: "create-menu", MenuListProps: {
|
|
27618
|
+
"aria-labelledby": "create-menu-button",
|
|
27619
|
+
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
27620
|
+
[
|
|
27621
|
+
{
|
|
27622
|
+
title: "CSV",
|
|
27623
|
+
endpoint: props.pathname,
|
|
27624
|
+
},
|
|
27625
|
+
...(props.csv_upload.extraOptions || []),
|
|
27626
|
+
].map((option, index) => {
|
|
27627
|
+
return (jsxs(MenuItem, { onClick: () => {
|
|
27628
|
+
handleToggleOpen(option);
|
|
27629
|
+
handleClose();
|
|
27630
|
+
}, disableRipple: true, children: [jsx(ListItemIcon, { children: jsx(AttachFileIcon, { sx: { transform: "rotate(90deg)" } }) }), option.title] }, index));
|
|
27631
|
+
}), jsxs(MenuItem, { onClick: () => {
|
|
27550
27632
|
navigate(props.navigation ? `${props.navigation}crear` : `crear`);
|
|
27551
27633
|
handleClose();
|
|
27552
|
-
}, disableRipple: true, children: "Manual" })] }), props.csv_upload?.enable && (jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data })), props.renderFunction({ dataGridProps: createGridProps })] }));
|
|
27634
|
+
}, disableRipple: true, children: [jsx(ListItemIcon, { children: jsx(DrawIcon, {}) }), "Manual"] })] }), props.csv_upload?.enable && (jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data })), props.renderFunction({ dataGridProps: createGridProps })] }));
|
|
27553
27635
|
};
|
|
27554
27636
|
|
|
27555
27637
|
const Base = (props) => {
|
|
@@ -27560,14 +27642,20 @@ const Base = (props) => {
|
|
|
27560
27642
|
setFilterModel: setFilterModel,
|
|
27561
27643
|
}));
|
|
27562
27644
|
// ========================= || PAGINADO || ========================= //
|
|
27563
|
-
const [paginationModel, setPaginationModel] = useState({
|
|
27645
|
+
const [paginationModel, setPaginationModel] = useState({
|
|
27646
|
+
page: 0,
|
|
27647
|
+
pageSize: 50,
|
|
27648
|
+
});
|
|
27564
27649
|
// ========================= || ORDENADO || ========================= //
|
|
27565
27650
|
const [sortModel, setSortModel] = useState([]);
|
|
27566
27651
|
// ========================= || FILTRADO || ========================= //
|
|
27567
|
-
const [filterModel, setFilterModel] = useState({
|
|
27652
|
+
const [filterModel, setFilterModel] = useState({
|
|
27653
|
+
items: {},
|
|
27654
|
+
quickFilterValues: "",
|
|
27655
|
+
});
|
|
27568
27656
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
27569
27657
|
const setQuickSearchValue = useCallback(debounce$1((quickSearch) => {
|
|
27570
|
-
setFilterModel(prevState => ({ ...prevState, quickFilterValues: quickSearch }));
|
|
27658
|
+
setFilterModel((prevState) => ({ ...prevState, quickFilterValues: quickSearch }));
|
|
27571
27659
|
}, 500), []);
|
|
27572
27660
|
// ========================= || COLUMNAS || ========================= //
|
|
27573
27661
|
const getTogglableColumns = (columns) => {
|
|
@@ -27575,7 +27663,7 @@ const Base = (props) => {
|
|
|
27575
27663
|
return [];
|
|
27576
27664
|
return columns
|
|
27577
27665
|
.filter((column) => {
|
|
27578
|
-
return ![
|
|
27666
|
+
return !["__check__", "actions"].includes(column.field);
|
|
27579
27667
|
})
|
|
27580
27668
|
.map((column) => column.field);
|
|
27581
27669
|
};
|
|
@@ -27587,7 +27675,7 @@ const Base = (props) => {
|
|
|
27587
27675
|
// ========================= || LAZY QUERY || ========================= //
|
|
27588
27676
|
const [query, { data, isLoading, isFetching, isError, isUninitialized }] = props.api.data.query(props.api.data.options || {});
|
|
27589
27677
|
// ========================= || INITIAL STATE || ========================= //
|
|
27590
|
-
const localStoreName = useMemo(() => `${props.pathname}${props.slotProps?.tab ? `_${props.slotProps?.tab}` :
|
|
27678
|
+
const localStoreName = useMemo(() => `${props.pathname}${props.slotProps?.tab ? `_${props.slotProps?.tab}` : ""}_DG`, [props.pathname, props.slotProps?.tab]);
|
|
27591
27679
|
const internalFilterRef = useRef(filterModel);
|
|
27592
27680
|
const filterRef = props.slotProps?.filtersRef || internalFilterRef;
|
|
27593
27681
|
useEffect(() => {
|
|
@@ -27597,28 +27685,30 @@ const Base = (props) => {
|
|
|
27597
27685
|
const saveSnapshot = useCallback(() => {
|
|
27598
27686
|
if (apiRef?.current?.exportState && localStorage && !props.slotProps?.dontSaveState) {
|
|
27599
27687
|
const currentState = apiRef.current.exportState();
|
|
27600
|
-
set$1(currentState,
|
|
27688
|
+
set$1(currentState, "filters.filterModel", filterRef.current);
|
|
27601
27689
|
setWithExpiry(localStoreName, currentState, 86400000);
|
|
27602
27690
|
}
|
|
27603
27691
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
27604
27692
|
}, [apiRef, props.pathname]);
|
|
27605
27693
|
useLayoutEffect(() => {
|
|
27606
27694
|
const stateFromLocalStorage = getWithExpiry(localStoreName);
|
|
27607
|
-
const init = stateFromLocalStorage
|
|
27608
|
-
|
|
27609
|
-
|
|
27610
|
-
const
|
|
27695
|
+
const init = stateFromLocalStorage
|
|
27696
|
+
? stateFromLocalStorage
|
|
27697
|
+
: get(props, "dataGridProps.initialState", {});
|
|
27698
|
+
const pagination = get(init, "pagination.paginationModel", paginationModel);
|
|
27699
|
+
const sorting = get(init, "sorting.sortModel", sortModel);
|
|
27700
|
+
const filters = get(init, "filters.filterModel", filterModel);
|
|
27611
27701
|
setPaginationModel(pagination);
|
|
27612
27702
|
setSortModel(sorting);
|
|
27613
27703
|
setFilterModel(filters);
|
|
27614
|
-
setColumnVisibilityModel(get(init,
|
|
27704
|
+
setColumnVisibilityModel(get(init, "columns.columnVisibilityModel", columnVisibilityModel));
|
|
27615
27705
|
// handle refresh and navigating away/refreshing
|
|
27616
|
-
window.addEventListener(
|
|
27706
|
+
window.addEventListener("beforeunload", saveSnapshot);
|
|
27617
27707
|
// console.log(getQueryArgs(pagination, sorting, filters, props.api.data.args))
|
|
27618
27708
|
query(getQueryArgs(pagination, sorting, filters, props.api.data.args));
|
|
27619
27709
|
return () => {
|
|
27620
27710
|
// in case of an SPA remove the event-listener
|
|
27621
|
-
window.removeEventListener(
|
|
27711
|
+
window.removeEventListener("beforeunload", saveSnapshot);
|
|
27622
27712
|
saveSnapshot();
|
|
27623
27713
|
};
|
|
27624
27714
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -27637,8 +27727,8 @@ const Base = (props) => {
|
|
|
27637
27727
|
};
|
|
27638
27728
|
// ========================= || SELECCIÓN || ========================= //
|
|
27639
27729
|
const [rowSelectionModel, setRowSelectionModel] = useState({
|
|
27640
|
-
type:
|
|
27641
|
-
ids: new Set()
|
|
27730
|
+
type: "include",
|
|
27731
|
+
ids: new Set(),
|
|
27642
27732
|
});
|
|
27643
27733
|
const handleRowSelectionModelChange = (newSelection) => {
|
|
27644
27734
|
setRowSelectionModel(newSelection);
|
|
@@ -27656,13 +27746,13 @@ const Base = (props) => {
|
|
|
27656
27746
|
const handleRowClick = ({ id }, event) => {
|
|
27657
27747
|
const link_to = `${props.slotProps?.navigation != undefined ? props.slotProps?.navigation : props.pathname}/${id}`;
|
|
27658
27748
|
if (event.ctrlKey) {
|
|
27659
|
-
const newTab = document.createElement(
|
|
27749
|
+
const newTab = document.createElement("a");
|
|
27660
27750
|
newTab.href = link_to;
|
|
27661
|
-
newTab.target =
|
|
27751
|
+
newTab.target = "_blank";
|
|
27662
27752
|
newTab.click();
|
|
27663
27753
|
}
|
|
27664
27754
|
else {
|
|
27665
|
-
navigate(`${props.slotProps?.navigation ? props.slotProps?.navigation : props.pathname}/${id}`);
|
|
27755
|
+
navigate(`${props.slotProps?.navigation || props.slotProps?.navigation === "" ? props.slotProps?.navigation : props.pathname}/${id}`);
|
|
27666
27756
|
}
|
|
27667
27757
|
};
|
|
27668
27758
|
const handleRowEditStop = (params, event) => {
|
|
@@ -27681,13 +27771,13 @@ const Base = (props) => {
|
|
|
27681
27771
|
},
|
|
27682
27772
|
slotProps: {
|
|
27683
27773
|
baseCheckbox: {
|
|
27684
|
-
size:
|
|
27774
|
+
size: "small",
|
|
27685
27775
|
},
|
|
27686
27776
|
toolbar: {
|
|
27687
27777
|
filters: {
|
|
27688
27778
|
filterModel: filterModel,
|
|
27689
27779
|
setFilterModel: setFilterModel,
|
|
27690
|
-
setQuickSearchValue: setQuickSearchValue
|
|
27780
|
+
setQuickSearchValue: setQuickSearchValue,
|
|
27691
27781
|
},
|
|
27692
27782
|
protectFilters: props.api.data.protectFilters,
|
|
27693
27783
|
columnsFilter: props.slotProps?.columnsFilter,
|
|
@@ -27698,27 +27788,27 @@ const Base = (props) => {
|
|
|
27698
27788
|
buttons: {
|
|
27699
27789
|
refresh: {
|
|
27700
27790
|
refetch: handleRefetch,
|
|
27701
|
-
}
|
|
27702
|
-
}
|
|
27791
|
+
},
|
|
27792
|
+
},
|
|
27703
27793
|
},
|
|
27704
27794
|
columnsManagement: {
|
|
27705
27795
|
getTogglableColumns: getTogglableColumns,
|
|
27706
27796
|
},
|
|
27707
27797
|
},
|
|
27708
27798
|
}, props.dataGridProps);
|
|
27709
|
-
const renderDataGrid = ({ dataGridProps: renderDataGridProps }) => {
|
|
27799
|
+
const renderDataGrid = ({ dataGridProps: renderDataGridProps, }) => {
|
|
27710
27800
|
// console.log(dataGridProps)
|
|
27711
27801
|
return (jsx(Box, { width: 1, minHeight: 300, height: 1,
|
|
27712
27802
|
// maxHeight={'calc(100% - 30px)'}
|
|
27713
|
-
display:
|
|
27803
|
+
display: "flex", flexDirection: "column", pb: 0, children: jsx(NoSsr, { children: jsx(DataGrid, { apiRef: apiRef, rows: data?.results || [], loading: some(get(renderDataGridProps, "loadingParams", []), function (x) {
|
|
27714
27804
|
return x;
|
|
27715
27805
|
}),
|
|
27716
27806
|
// paginado //
|
|
27717
|
-
pagination: true, paginationMode:
|
|
27807
|
+
pagination: true, paginationMode: "server", paginationModel: paginationModel, onPaginationModelChange: setPaginationModel, pageSizeOptions: [50, 100, { value: -1, label: "Todos" }],
|
|
27718
27808
|
// ordenado
|
|
27719
|
-
sortingMode:
|
|
27809
|
+
sortingMode: "server", sortModel: sortModel, onSortModelChange: setSortModel,
|
|
27720
27810
|
// filtrado
|
|
27721
|
-
filterMode:
|
|
27811
|
+
filterMode: "server",
|
|
27722
27812
|
// onFilterModelChange={handleFilterChange}
|
|
27723
27813
|
disableColumnFilter: true, showToolbar: true,
|
|
27724
27814
|
// selection
|
|
@@ -27736,13 +27826,13 @@ const Base = (props) => {
|
|
|
27736
27826
|
// row count
|
|
27737
27827
|
rowCount: rowCount,
|
|
27738
27828
|
// settings
|
|
27739
|
-
density:
|
|
27829
|
+
density: "compact",
|
|
27740
27830
|
// striping
|
|
27741
|
-
getRowClassName: (params) => params.indexRelativeToCurrentPage % 2 === 0 ?
|
|
27742
|
-
columnHeaderSortIconLabel:
|
|
27743
|
-
columnMenuSortAsc:
|
|
27744
|
-
columnMenuSortDesc:
|
|
27745
|
-
columnMenuLabel:
|
|
27831
|
+
getRowClassName: (params) => params.indexRelativeToCurrentPage % 2 === 0 ? "even" : "odd", localeText: {
|
|
27832
|
+
columnHeaderSortIconLabel: "Ordenar",
|
|
27833
|
+
columnMenuSortAsc: "Ordenar de menor a mayor",
|
|
27834
|
+
columnMenuSortDesc: "Ordenar de mayor a menor",
|
|
27835
|
+
columnMenuLabel: "Menú",
|
|
27746
27836
|
}, ...renderDataGridProps }) }) }));
|
|
27747
27837
|
};
|
|
27748
27838
|
// ========================= || RETURN || ========================= //
|
|
@@ -27756,7 +27846,7 @@ const Base = (props) => {
|
|
|
27756
27846
|
pathname: props.pathname,
|
|
27757
27847
|
navigation: props.slotProps?.navigation,
|
|
27758
27848
|
...renderProps,
|
|
27759
|
-
...props.api.create
|
|
27849
|
+
...props.api.create,
|
|
27760
27850
|
};
|
|
27761
27851
|
renderFunction = CreateGridWrapper;
|
|
27762
27852
|
}
|
|
@@ -27767,7 +27857,7 @@ const Base = (props) => {
|
|
|
27767
27857
|
renderFunctionProps: renderProps,
|
|
27768
27858
|
dataGridProps: dataGridProps,
|
|
27769
27859
|
baseGridRef: apiRef,
|
|
27770
|
-
...props.api.edit
|
|
27860
|
+
...props.api.edit,
|
|
27771
27861
|
};
|
|
27772
27862
|
renderFunction = EditGridWrapper;
|
|
27773
27863
|
}
|
|
@@ -27777,7 +27867,7 @@ const Base = (props) => {
|
|
|
27777
27867
|
renderFunction: renderFunction,
|
|
27778
27868
|
renderFunctionProps: renderProps,
|
|
27779
27869
|
dataGridProps: dataGridProps,
|
|
27780
|
-
...props.api.delete
|
|
27870
|
+
...props.api.delete,
|
|
27781
27871
|
});
|
|
27782
27872
|
}
|
|
27783
27873
|
return renderFunction(renderProps);
|
|
@@ -27798,13 +27888,13 @@ const ActiveCell = ({ value }) => {
|
|
|
27798
27888
|
}, [value]);
|
|
27799
27889
|
const renderIcon = useCallback(() => {
|
|
27800
27890
|
const iconProps = {
|
|
27801
|
-
size:
|
|
27891
|
+
size: "small",
|
|
27802
27892
|
sx: {
|
|
27803
27893
|
color: color[700],
|
|
27804
|
-
fontSize:
|
|
27894
|
+
fontSize: "30px",
|
|
27805
27895
|
stroke: color[700],
|
|
27806
|
-
strokeWidth: 1.5
|
|
27807
|
-
}
|
|
27896
|
+
strokeWidth: 1.5,
|
|
27897
|
+
},
|
|
27808
27898
|
};
|
|
27809
27899
|
switch (value) {
|
|
27810
27900
|
case true:
|
|
@@ -27815,7 +27905,7 @@ const ActiveCell = ({ value }) => {
|
|
|
27815
27905
|
return jsx(ErrorOutlineIcon, { ...iconProps });
|
|
27816
27906
|
}
|
|
27817
27907
|
}, [color, value]);
|
|
27818
|
-
return (jsx(Box, { px: 2, py: 0.5, display:
|
|
27908
|
+
return (jsx(Box, { px: 2, py: 0.5, display: "flex", alignItems: "center", justifyContent: "center", borderRadius: 2, borderColor: color[900], children: renderIcon() }));
|
|
27819
27909
|
};
|
|
27820
27910
|
|
|
27821
27911
|
const MyGridEditSingleSelect = (props) => {
|
|
@@ -27977,34 +28067,38 @@ const Field = (props) => {
|
|
|
27977
28067
|
return true;
|
|
27978
28068
|
}, [props.data, props.dependantOn]);
|
|
27979
28069
|
const renderField = useCallback(() => {
|
|
27980
|
-
if (!props.pageType || props.pageType ==
|
|
28070
|
+
if (!props.pageType || props.pageType == "list")
|
|
27981
28071
|
return;
|
|
27982
|
-
if (props.pageType ==
|
|
28072
|
+
if (props.pageType == "detail")
|
|
27983
28073
|
return jsx(DetailField, { ...props });
|
|
27984
28074
|
else
|
|
27985
28075
|
return jsx(EditField, { ...props });
|
|
27986
28076
|
}, [props]);
|
|
27987
28077
|
if (!show)
|
|
27988
28078
|
return;
|
|
27989
|
-
return (jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction:
|
|
28079
|
+
return (jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction: "column", ...props.gridProps, children: [jsx(Grid, { size: 12, children: jsx(Typography$1, { variant: "body1", fontWeight: "bold", children: props.label }) }), jsx(Grid, { size: 12, children: renderField() })] }));
|
|
27990
28080
|
};
|
|
27991
28081
|
|
|
27992
28082
|
const EditToolbar = (props) => {
|
|
27993
|
-
return (jsxs(Toolbar, { children: [props.pageType !=
|
|
27994
|
-
jsx(Tooltip$1, { title: 'Crear', children: jsx(ToolbarButton, { onClick: props.handleCreate, children: jsx(AddIcon, { fontSize: "small" }) }) }), !!props.selected &&
|
|
27995
|
-
jsx(Tooltip$1, { title: 'Borrar', children: jsx(ToolbarButton, { onClick: props.handleDelete, children: jsx(DeleteIcon, { fontSize: "small" }) }) })] }));
|
|
28083
|
+
return (jsxs(Toolbar, { children: [props.pageType != "detail" && (jsx(Tooltip$1, { title: "Crear", children: jsx(ToolbarButton, { onClick: props.handleCreate, children: jsx(AddIcon, { fontSize: "small" }) }) })), !!props.selected && (jsx(Tooltip$1, { title: "Borrar", children: jsx(ToolbarButton, { onClick: props.handleDelete, children: jsx(DeleteIcon, { fontSize: "small" }) }) }))] }));
|
|
27996
28084
|
};
|
|
27997
28085
|
const FieldArrayField = (props) => {
|
|
27998
28086
|
const { fields, remove } = useFieldArray({
|
|
27999
28087
|
control: props.form.control,
|
|
28000
28088
|
name: props.name,
|
|
28001
|
-
keyName:
|
|
28089
|
+
keyName: "_id",
|
|
28002
28090
|
});
|
|
28003
|
-
const [drawer, setDrawer] = useState({
|
|
28004
|
-
|
|
28005
|
-
|
|
28091
|
+
const [drawer, setDrawer] = useState({
|
|
28092
|
+
open: false,
|
|
28093
|
+
data: undefined,
|
|
28094
|
+
});
|
|
28095
|
+
const [rowSelectionModel, setRowSelectionModel] = useState({
|
|
28096
|
+
type: "include",
|
|
28097
|
+
ids: new Set(),
|
|
28098
|
+
});
|
|
28099
|
+
const getIndex = useCallback((id) => findIndex(fields, function (field) {
|
|
28006
28100
|
return field._id == id;
|
|
28007
|
-
})
|
|
28101
|
+
}), [fields]);
|
|
28008
28102
|
const handleCreate = () => {
|
|
28009
28103
|
setDrawer({ open: true, data: undefined });
|
|
28010
28104
|
};
|
|
@@ -28027,7 +28121,7 @@ const FieldArrayField = (props) => {
|
|
|
28027
28121
|
const handleRowClick = (e) => {
|
|
28028
28122
|
setDrawer({ open: true, data: e.row });
|
|
28029
28123
|
};
|
|
28030
|
-
return (jsxs(Fragment, { children: [jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction:
|
|
28124
|
+
return (jsxs(Fragment, { children: [jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction: "column", ...props.gridProps, children: [jsx(Grid, { size: 12, children: jsx(Typography$1, { variant: "body1", fontWeight: "bold", children: props.label }) }), jsx(Grid, { size: 12, children: jsx(DataGrid, { ...props.dataGridProps, rows: fields, checkboxSelection: props.pageType != "detail", onRowSelectionModelChange: (newRowSelectionModel) => {
|
|
28031
28125
|
setRowSelectionModel(newRowSelectionModel);
|
|
28032
28126
|
}, showToolbar: true, slots: { toolbar: EditToolbar }, slotProps: {
|
|
28033
28127
|
toolbar: {
|
|
@@ -28036,7 +28130,7 @@ const FieldArrayField = (props) => {
|
|
|
28036
28130
|
handleDelete: handleDelete,
|
|
28037
28131
|
pageType: props.pageType,
|
|
28038
28132
|
},
|
|
28039
|
-
}, disableRowSelectionOnClick: true, onRowClick: handleRowClick, getRowId: (row) => row._id }) })] }), jsx(MainDrawer, { open: drawer.open, drawerToggle: closeDrawer, title:
|
|
28133
|
+
}, disableRowSelectionOnClick: true, onRowClick: handleRowClick, getRowId: (row) => row._id }) })] }), jsx(MainDrawer, { open: drawer.open, drawerToggle: closeDrawer, title: "Cargo Adicional", children: jsx(Grid, { size: 12, container: true, children: props.fields.map((field) => {
|
|
28040
28134
|
const fieldName = `${props.name}.${getIndex(drawer.data?._id)}.${field.name}`;
|
|
28041
28135
|
return (jsx(Field, { ...field, form: props.form, name: fieldName, fieldData: get(drawer.data, field.name) }, fieldName));
|
|
28042
28136
|
}) }) })] }));
|
|
@@ -28134,10 +28228,10 @@ const Logo = () => {
|
|
|
28134
28228
|
// ==============================|| PESTAÑAS ||============================== //
|
|
28135
28229
|
/**
|
|
28136
28230
|
* Pestañas customizables
|
|
28137
|
-
**/
|
|
28231
|
+
**/
|
|
28138
28232
|
const Tabs = (props) => {
|
|
28139
28233
|
// valor inicial
|
|
28140
|
-
const [value, setValue] = useState(props.initialValue ||
|
|
28234
|
+
const [value, setValue] = useState(props.initialValue || "1");
|
|
28141
28235
|
// manejar cambio de pestaña
|
|
28142
28236
|
const handleChange = (_event, newValue) => {
|
|
28143
28237
|
setValue(newValue);
|
|
@@ -28145,29 +28239,33 @@ const Tabs = (props) => {
|
|
|
28145
28239
|
};
|
|
28146
28240
|
// hacer el render del contenido de la pestaña seleccionada
|
|
28147
28241
|
const renderTabs = () => {
|
|
28148
|
-
return
|
|
28242
|
+
return props.tabs.map((option) => {
|
|
28149
28243
|
const renderContent = () => {
|
|
28150
28244
|
return React__default.Children.map(option.children, (child) => {
|
|
28151
28245
|
const cloneProps = { ...child.props };
|
|
28152
|
-
set$1(cloneProps,
|
|
28153
|
-
set$1(cloneProps,
|
|
28246
|
+
set$1(cloneProps, "type", props.type);
|
|
28247
|
+
set$1(cloneProps, "slotProps.tab", option.value);
|
|
28154
28248
|
return React__default.cloneElement(child, cloneProps);
|
|
28155
28249
|
});
|
|
28156
28250
|
};
|
|
28157
28251
|
return (jsx(TabPanel, { value: option.value, sx: {
|
|
28158
|
-
pt: 2,
|
|
28252
|
+
pt: 2,
|
|
28253
|
+
pb: 0,
|
|
28254
|
+
px: 0,
|
|
28255
|
+
width: 1,
|
|
28256
|
+
height: 1,
|
|
28159
28257
|
}, children: renderContent() }, option.value));
|
|
28160
|
-
})
|
|
28258
|
+
});
|
|
28161
28259
|
};
|
|
28162
28260
|
return (
|
|
28163
28261
|
// contexto
|
|
28164
|
-
jsx(Box, { width: 1, height:
|
|
28165
|
-
minHeight: 40
|
|
28262
|
+
jsx(Box, { width: 1, height: "calc(100vh - 175px)", children: jsxs(TabContext, { value: value, children: [jsx(TabList, { onChange: handleChange, "aria-label": "create-work-order-tabs", variant: "scrollable", scrollButtons: "auto", sx: {
|
|
28263
|
+
minHeight: 40,
|
|
28166
28264
|
}, children: props.tabs.map((option) => {
|
|
28167
|
-
return (jsx(Tab, { label: option.label, icon: option.icon, iconPosition:
|
|
28168
|
-
color:
|
|
28265
|
+
return (jsx(Tab, { label: option.label, icon: option.icon, iconPosition: "start", value: option.value, sx: {
|
|
28266
|
+
color: "secondary.light",
|
|
28169
28267
|
py: 0,
|
|
28170
|
-
minHeight: 40
|
|
28268
|
+
minHeight: 40,
|
|
28171
28269
|
} }, option.value));
|
|
28172
28270
|
}) }), jsx(Box, { width: 1, height: 0.935, children: renderTabs() })] }) }));
|
|
28173
28271
|
};
|
|
@@ -28251,7 +28349,7 @@ function DetailPage(props) {
|
|
|
28251
28349
|
resolver: zodResolver(props.edit.schema),
|
|
28252
28350
|
defaultValues: props.edit?.defaultValues,
|
|
28253
28351
|
});
|
|
28254
|
-
const { data, isLoading, isFetching, error: fetchError } = props.api.data.query(!props.api.data.skipToken ? props.api.data.args : skipToken);
|
|
28352
|
+
const { data, isLoading, isFetching, error: fetchError, } = props.api.data.query(!props.api.data.skipToken ? props.api.data.args : skipToken);
|
|
28255
28353
|
useEffect(() => {
|
|
28256
28354
|
if (data) {
|
|
28257
28355
|
// set form data based on query data
|
|
@@ -28259,7 +28357,7 @@ function DetailPage(props) {
|
|
|
28259
28357
|
if (props.slots?.title) {
|
|
28260
28358
|
const title = map(props.slots?.title, function (field) {
|
|
28261
28359
|
return get(data, field);
|
|
28262
|
-
}).join(
|
|
28360
|
+
}).join(" ");
|
|
28263
28361
|
if (title)
|
|
28264
28362
|
dispatch(changeTitle(title));
|
|
28265
28363
|
}
|
|
@@ -28270,60 +28368,64 @@ function DetailPage(props) {
|
|
|
28270
28368
|
form.reset();
|
|
28271
28369
|
navigate(-1);
|
|
28272
28370
|
};
|
|
28273
|
-
const canEdit = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` :
|
|
28274
|
-
const canDelete = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` :
|
|
28371
|
+
const canEdit = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` : ""}obj_permissions.edit`), [data, props.slotProps?.permissionsPath]);
|
|
28372
|
+
const canDelete = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` : ""}obj_permissions.delete`), [data, props.slotProps?.permissionsPath]);
|
|
28275
28373
|
// ==============================|| VALIDATION ||============================== //
|
|
28276
28374
|
useValidateFieldData(props, form);
|
|
28277
28375
|
// ==============================|| QUICK RETURN ||============================== //
|
|
28278
|
-
if ((!canEdit && props.pageType ==
|
|
28376
|
+
if ((!canEdit && props.pageType == "edit") || (fetchError && fetchError.originalStatus == 403))
|
|
28279
28377
|
return jsx(NotAllowed, {});
|
|
28280
28378
|
if (fetchError && fetchError.originalStatus == 404)
|
|
28281
28379
|
return jsx(NotFound, {});
|
|
28282
28380
|
// ==============================|| SUBMIT ||============================== //
|
|
28283
28381
|
const onSubmitHandler = (submitedData) => {
|
|
28284
|
-
const formData =
|
|
28382
|
+
const formData = "nativeEvent" in submitedData ? form.getValues() : submitedData;
|
|
28285
28383
|
const params = { submitData: formData, data: data, props: props.slotProps?.parser };
|
|
28286
28384
|
const dataToSend = props.edit.useFormData ? formDataForm(params) : jsonForm(params);
|
|
28287
|
-
mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args })
|
|
28385
|
+
mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args })
|
|
28386
|
+
.unwrap()
|
|
28288
28387
|
.then(() => {
|
|
28289
28388
|
if (!props.slotProps?.button?.save?.disableNavBack)
|
|
28290
28389
|
navigate(-1);
|
|
28291
28390
|
if (props.slotProps?.button?.save?.onClick)
|
|
28292
28391
|
props.slotProps?.button?.save?.onClick();
|
|
28293
28392
|
form.reset();
|
|
28294
|
-
notifications.show(`${capitalizedObject} ${props.pageType ==
|
|
28393
|
+
notifications.show(`${capitalizedObject} ${props.pageType == "edit" ? "actualizad@" : "cread@"}!`, { severity: "success" });
|
|
28295
28394
|
})
|
|
28296
28395
|
.catch((error) => {
|
|
28297
28396
|
if (error.status === 401) ;
|
|
28298
28397
|
if (error.status === 403) {
|
|
28299
|
-
notifications.show(error.data.detail, { severity:
|
|
28398
|
+
notifications.show(error.data.detail, { severity: "error" });
|
|
28300
28399
|
}
|
|
28301
28400
|
else {
|
|
28302
28401
|
console.log(error);
|
|
28303
28402
|
setErrors(form, error);
|
|
28304
|
-
notifications.show(
|
|
28305
|
-
error.data.detail.join(
|
|
28306
|
-
`Error ${props.pageType ==
|
|
28403
|
+
notifications.show(error.data.detail
|
|
28404
|
+
? error.data.detail.join(", ")
|
|
28405
|
+
: `Error ${props.pageType == "edit" ? "actualizando" : "creando"} ${props.object.name}!`, { severity: "error" });
|
|
28307
28406
|
}
|
|
28308
28407
|
});
|
|
28309
28408
|
};
|
|
28310
28409
|
// ==============================|| RENDER SECTIONS ||============================== //
|
|
28311
28410
|
const renderContent = () => {
|
|
28312
28411
|
let displayed_sections = -1;
|
|
28313
|
-
return (jsxs(Grid, { size: 12, container: true, direction:
|
|
28412
|
+
return (jsxs(Grid, { size: 12, container: true, direction: "column", position: "relative", pb: 2, children: [props.pageType == "detail" && data?.has_history && (jsx(HistorialDrawer, { ...props.slotProps?.historial })), props.sections.map((section, index) => {
|
|
28314
28413
|
if (!section.display)
|
|
28315
28414
|
return null;
|
|
28316
|
-
if (typeof section.display ==
|
|
28415
|
+
if (typeof section.display == "object") {
|
|
28317
28416
|
const validateAgainst = form.watch(section.display.field)?.toString();
|
|
28318
28417
|
if (!section.display.method(validateAgainst, section.display.value))
|
|
28319
28418
|
return null;
|
|
28320
28419
|
}
|
|
28321
28420
|
displayed_sections += 1;
|
|
28322
|
-
return (jsx(Section, { data: data, form: form, bgColor: displayed_sections % 2 == 1 ?
|
|
28421
|
+
return (jsx(Section, { data: data, form: form, bgColor: displayed_sections % 2 == 1 ? "white" : "#F7F7F7", pageType: props.pageType, ...section, first: displayed_sections == 0 }, index));
|
|
28323
28422
|
})] }));
|
|
28324
28423
|
};
|
|
28325
28424
|
const renderPostAction = () => {
|
|
28326
|
-
if (props.api.mutate.postAction &&
|
|
28425
|
+
if (props.api.mutate.postAction &&
|
|
28426
|
+
isSuccess &&
|
|
28427
|
+
"post_action" in mutationResponse &&
|
|
28428
|
+
mutationResponse["post_action"]["type"] === props.api.mutate.postAction.type) {
|
|
28327
28429
|
switch (props.api.mutate.postAction.after) {
|
|
28328
28430
|
// case 'create':
|
|
28329
28431
|
// if (props.pageType === 'create') return addPropsToNode(props.api.mutate.postAction.node, mutationResponse);
|
|
@@ -28332,37 +28434,44 @@ function DetailPage(props) {
|
|
|
28332
28434
|
// if (props.pageType === 'edit') return props.api.mutate.postAction.node;
|
|
28333
28435
|
// break;
|
|
28334
28436
|
default:
|
|
28335
|
-
return addPropsToNode(props.api.mutate.postAction.node, {
|
|
28437
|
+
return addPropsToNode(props.api.mutate.postAction.node, {
|
|
28438
|
+
parent: props.api.data.args["id"],
|
|
28439
|
+
...mutationResponse["post_action"],
|
|
28440
|
+
});
|
|
28336
28441
|
}
|
|
28337
28442
|
}
|
|
28338
28443
|
};
|
|
28339
|
-
const badgeInfo = get(data, props.slots?.badge ||
|
|
28444
|
+
const badgeInfo = get(data, props.slots?.badge || "");
|
|
28340
28445
|
const renderButton = () => {
|
|
28341
28446
|
if (props.slots?.button)
|
|
28342
28447
|
return props.slots?.button;
|
|
28343
|
-
if (props.pageType ==
|
|
28448
|
+
if (props.pageType == "detail") {
|
|
28344
28449
|
if (!canEdit && !canDelete)
|
|
28345
28450
|
return null;
|
|
28346
|
-
return (jsxs(Stack, { direction:
|
|
28451
|
+
return (jsxs(Stack, { direction: "row", spacing: 1, children: [canDelete && props.api.delete && (jsx(DeleteButton, { mutation: props.api.delete.mutation, disableNavBack: props.slotProps?.deleteButton?.disableNavBack })), canEdit && jsx(EditButton, {})] }));
|
|
28347
28452
|
}
|
|
28348
28453
|
else {
|
|
28349
28454
|
return (jsx(SaveCancelButton, { slotProps: {
|
|
28350
28455
|
saveBtn: {
|
|
28351
28456
|
loading: mutationIsLoading,
|
|
28352
28457
|
disabled: !form.formState.isDirty,
|
|
28353
|
-
...(props.slotProps?.button?.save?.type ==
|
|
28354
|
-
|
|
28355
|
-
|
|
28356
|
-
|
|
28458
|
+
...(props.slotProps?.button?.save?.type == "onClick"
|
|
28459
|
+
? {
|
|
28460
|
+
type: "button",
|
|
28461
|
+
onClick: onSubmitHandler,
|
|
28462
|
+
}
|
|
28463
|
+
: {}),
|
|
28357
28464
|
},
|
|
28358
|
-
...(props.slotProps?.button?.cancel
|
|
28359
|
-
|
|
28360
|
-
|
|
28465
|
+
...(props.slotProps?.button?.cancel
|
|
28466
|
+
? { cancelBtn: props.slotProps?.button?.cancel }
|
|
28467
|
+
: {
|
|
28468
|
+
cancelBtn: { onClick: handleCancel },
|
|
28469
|
+
}),
|
|
28361
28470
|
} }));
|
|
28362
28471
|
}
|
|
28363
28472
|
};
|
|
28364
|
-
return (jsxs(Fragment, { children: [jsx(ContentLayout, { button: renderButton(), badge: props.pageType ==
|
|
28365
|
-
jsx(StatusBadge, { title: badgeInfo[
|
|
28473
|
+
return (jsxs(Fragment, { children: [jsx(ContentLayout, { button: renderButton(), badge: props.pageType == "detail" &&
|
|
28474
|
+
badgeInfo && (jsx(StatusBadge, { title: badgeInfo["label"], severity: badgeInfo["value"] })), children: jsx(LoadingComponent, { height: 0.7, isLoading: isLoading || isFetching, children: jsx(FormProvider, { ...form, children: jsx(Box, { id: "formulario", component: "form", autoComplete: "off", noValidate: true, onSubmit: form.handleSubmit(onSubmitHandler), width: "100%", position: "relative", children: renderContent() }) }) }) }), renderPostAction()] }));
|
|
28366
28475
|
}
|
|
28367
28476
|
|
|
28368
28477
|
const ListPage = (props) => {
|
|
@@ -28370,19 +28479,20 @@ const ListPage = (props) => {
|
|
|
28370
28479
|
};
|
|
28371
28480
|
|
|
28372
28481
|
function SlideTransition(props) {
|
|
28373
|
-
return jsx(Slide, { ...props, direction:
|
|
28482
|
+
return jsx(Slide, { ...props, direction: "left" });
|
|
28374
28483
|
}
|
|
28375
28484
|
const BaseProgressSnack = (props) => {
|
|
28376
|
-
|
|
28485
|
+
console.log(props);
|
|
28486
|
+
const dispatch = useDispatch();
|
|
28377
28487
|
const handleClose = (e) => {
|
|
28378
28488
|
if (e?.defaultMuiPrevented)
|
|
28379
28489
|
return;
|
|
28380
|
-
|
|
28490
|
+
dispatch(closeProgressSnack(props.id));
|
|
28381
28491
|
};
|
|
28382
|
-
const finished = useMemo(() => get(props.data,
|
|
28383
|
-
const error = useMemo(() => get(props.data,
|
|
28492
|
+
const finished = useMemo(() => get(props.data, "finished"), [props.data]);
|
|
28493
|
+
const error = useMemo(() => get(props.data, "error"), [props.data]);
|
|
28384
28494
|
const renderItem = useCallback(() => {
|
|
28385
|
-
return (jsx(Snackbar, { anchorOrigin: { vertical:
|
|
28495
|
+
return (jsx(Snackbar, { anchorOrigin: { vertical: "bottom", horizontal: "right" }, open: props.open, onClose: handleClose, slots: {
|
|
28386
28496
|
transition: SlideTransition,
|
|
28387
28497
|
}, slotProps: {
|
|
28388
28498
|
clickAwayListener: {
|
|
@@ -28390,27 +28500,27 @@ const BaseProgressSnack = (props) => {
|
|
|
28390
28500
|
event.defaultMuiPrevented = true;
|
|
28391
28501
|
},
|
|
28392
28502
|
},
|
|
28393
|
-
}, children: jsx(Badge, { invisible: props.index < 1, badgeContent: props.index + 1, color:
|
|
28394
|
-
bgcolor: props.data[
|
|
28503
|
+
}, children: jsx(Badge, { invisible: props.index < 1, badgeContent: props.index + 1, color: "primary", children: jsx(Paper, { elevation: 2, sx: {
|
|
28504
|
+
bgcolor: props.data["error"] ? "primary.main" : "secondary.dark",
|
|
28395
28505
|
minWidth: 300,
|
|
28396
|
-
maxWidth:
|
|
28506
|
+
maxWidth: "100vw",
|
|
28397
28507
|
p: 2,
|
|
28398
|
-
borderRadius:
|
|
28399
|
-
color:
|
|
28400
|
-
}, children: jsxs(Stack, { direction:
|
|
28401
|
-
color:
|
|
28402
|
-
|
|
28403
|
-
backgroundColor:
|
|
28508
|
+
borderRadius: "12px",
|
|
28509
|
+
color: "white",
|
|
28510
|
+
}, children: jsxs(Stack, { direction: "column", spacing: 1, children: [jsxs(Stack, { direction: "row", alignItems: "center", spacing: 1, justifyContent: "space-between", children: [jsx(Typography$1, { pr: 2, color: "inherit", children: props.data.title || "N/A" }), finished && !error && (jsx(Tooltip, { title: "Cerrar", placement: "bottom", children: jsx(IconButton, { color: "secondary", size: "small", onClick: handleClose, sx: {
|
|
28511
|
+
color: "inherit",
|
|
28512
|
+
"&:hover": {
|
|
28513
|
+
backgroundColor: "rgba(255, 255, 255, 0.2)",
|
|
28404
28514
|
},
|
|
28405
|
-
}, children: jsx(CloseIcon, { fontSize:
|
|
28515
|
+
}, children: jsx(CloseIcon, { fontSize: "small" }) }) }))] }), !finished && !error && props.content(props.data)] }) }) }) }));
|
|
28406
28516
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28407
28517
|
}, [finished, props]);
|
|
28408
28518
|
return renderItem();
|
|
28409
28519
|
};
|
|
28410
28520
|
|
|
28411
28521
|
const ObjectProgressStack = (props) => {
|
|
28412
|
-
const snacks = useSelector(state => get(state,
|
|
28413
|
-
return (jsx(Stack, { direction:
|
|
28522
|
+
const snacks = useSelector((state) => get(state, "snackProgress", {}));
|
|
28523
|
+
return (jsx(Stack, { direction: "column", spacing: 2, children: Object.keys(snacks).map((key, index) => {
|
|
28414
28524
|
return (jsx(BaseProgressSnack, { id: key, index: index, ...snacks[key], content: props.content }, key));
|
|
28415
28525
|
}) }));
|
|
28416
28526
|
};
|
|
@@ -28654,5 +28764,5 @@ const theme = () => {
|
|
|
28654
28764
|
return themes;
|
|
28655
28765
|
};
|
|
28656
28766
|
|
|
28657
|
-
export { APIContext, APIProvider, ActiveCell, Base, ButtonWithDrawer, CSVUpload, ContentLayout, ControlledDate, ControlledDropdown, FileUploadBox as ControlledFileUploadBox, ControlledNumber, ControlledPhoneNumber, ControlledPhotoField, ControlledSelect, ControlledSlider as ControlledSimpleSlider, ControlledSlider$1 as ControlledSlider, ControlledSwitch, ControlledText, ControlledTimePicker, ControlledToggleButtons, CoverPage, CreateButtonBase, CreateButtonWithMenuOptions, DeleteButton, DeleteConfirmationDialog, DetailPage, EditButton,
|
|
28767
|
+
export { APIContext, APIProvider, ActiveCell, Base, ButtonWithDrawer, CSVUpload, ContentLayout, ControlledDate, ControlledDropdown, FileUploadBox as ControlledFileUploadBox, ControlledNumber, ControlledPhoneNumber, ControlledPhotoField, ControlledSelect, ControlledSlider as ControlledSimpleSlider, ControlledSlider$1 as ControlledSlider, ControlledSwitch, ControlledText, ControlledTimePicker, ControlledToggleButtons, CoverPage, CreateButtonBase, CreateButtonWithMenuOptions, DeleteButton, DeleteConfirmationDialog, DetailPage, EditButton, ExportCSV, HistorialDrawer, ListPage, Loadable, LoadingComponent, Logo, MainDrawer, MenuItemWithLoading, ModuleCard, MyGridEditSingleSelect, NavigationContext, NavigationProvider, NormalOrIcon, NotAllowed, NotFound, ObjectProgressStack, SaveCancelButton, StatusBadge, StyledMenu, Tabs, Transitions, UncontrolledText, changeTitle, closeProgressSnack, dayjs, deleteColumn, editColumn, filterQuery, formDataForm, header as headerReducer, jsonForm, manualCacheRefresh, mergeSettings, openProgressSnack, query, renderEditCellWithErrorTooltip, setErrors, snackProgress_default as snackProgressReducer, tags, theme, updateProgressSnackData, useAPI, useHasPermission, useNavigation, valueLabel };
|
|
28658
28768
|
//# sourceMappingURL=index.js.map
|