@acvl/frontend-components 0.0.25 → 0.0.27
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 +496 -421
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/src/components/v1/buttons/CreateButton/CreateButtonWithMenuOptions.d.ts +1 -0
- 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/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 +1 -1
- 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/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 +499 -424
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/src/components/v1/buttons/CreateButton/CreateButtonWithMenuOptions.d.ts +1 -0
- 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/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 +1 -1
- 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/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 +14 -12
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -74,6 +74,7 @@ var SaveIcon = require('@mui/icons-material/Save');
|
|
|
74
74
|
var AddIcon = require('@mui/icons-material/Add');
|
|
75
75
|
var KeyboardArrowDownIcon = require('@mui/icons-material/KeyboardArrowDown');
|
|
76
76
|
var LinearProgress = require('@mui/material/LinearProgress');
|
|
77
|
+
var AttachFileIcon = require('@mui/icons-material/AttachFile');
|
|
77
78
|
var xDataGrid = require('@mui/x-data-grid');
|
|
78
79
|
var Tooltip = require('@mui/material/Tooltip');
|
|
79
80
|
var ExpandMoreIcon = require('@mui/icons-material/ExpandMore');
|
|
@@ -95,6 +96,7 @@ var sortable = require('@dnd-kit/sortable');
|
|
|
95
96
|
var utilities = require('@dnd-kit/utilities');
|
|
96
97
|
var core$1 = require('@dnd-kit/core');
|
|
97
98
|
var modifiers = require('@dnd-kit/modifiers');
|
|
99
|
+
var DrawIcon = require('@mui/icons-material/Draw');
|
|
98
100
|
var CloseIcon = require('@mui/icons-material/Close');
|
|
99
101
|
var ErrorOutlineIcon = require('@mui/icons-material/ErrorOutline');
|
|
100
102
|
var query$1 = require('@reduxjs/toolkit/query');
|
|
@@ -124,10 +126,12 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
124
126
|
|
|
125
127
|
const NormalOrIcon = (props) => {
|
|
126
128
|
const theme = material.useTheme();
|
|
127
|
-
const belowLG = material.useMediaQuery(theme.breakpoints.down(
|
|
128
|
-
if ((belowLG && !(props.type ==
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
const belowLG = material.useMediaQuery(theme.breakpoints.down("lg"));
|
|
130
|
+
if ((belowLG && !(props.type == "button")) || props.type == "icon") {
|
|
131
|
+
const { startIcon, ...others } = props.buttonProps;
|
|
132
|
+
return (jsxRuntime.jsx(material.Tooltip, { title: props.buttonProps.children, children: jsxRuntime.jsx(material.IconButton, { ...others, children: startIcon }) }));
|
|
133
|
+
}
|
|
134
|
+
return jsxRuntime.jsx(material.Button, { ...props.buttonProps });
|
|
131
135
|
};
|
|
132
136
|
|
|
133
137
|
const EditButton = () => {
|
|
@@ -137,23 +141,23 @@ const EditButton = () => {
|
|
|
137
141
|
}, [navigate]);
|
|
138
142
|
// ===== || KEYDOWN || ===== //
|
|
139
143
|
const handleKeyPress = React.useCallback((event) => {
|
|
140
|
-
if (event.ctrlKey && event.key ===
|
|
144
|
+
if (event.ctrlKey && event.key === "e") {
|
|
141
145
|
event.preventDefault();
|
|
142
146
|
handleClick();
|
|
143
147
|
}
|
|
144
148
|
}, [handleClick]);
|
|
145
149
|
React.useEffect(() => {
|
|
146
|
-
document.addEventListener(
|
|
150
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
147
151
|
return () => {
|
|
148
|
-
document.removeEventListener(
|
|
152
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
149
153
|
};
|
|
150
154
|
}, [handleKeyPress]);
|
|
151
155
|
return (jsxRuntime.jsx(NormalOrIcon, { buttonProps: {
|
|
152
|
-
color:
|
|
153
|
-
variant:
|
|
156
|
+
color: "secondary",
|
|
157
|
+
variant: "contained",
|
|
154
158
|
startIcon: jsxRuntime.jsx(EditIcon, {}),
|
|
155
159
|
onClick: handleClick,
|
|
156
|
-
children:
|
|
160
|
+
children: "Editar",
|
|
157
161
|
} }));
|
|
158
162
|
};
|
|
159
163
|
|
|
@@ -25831,18 +25835,18 @@ const valueLabel = zod.object({
|
|
|
25831
25835
|
|
|
25832
25836
|
const MainDrawer = (props) => {
|
|
25833
25837
|
const theme = material.useTheme();
|
|
25834
|
-
return (jsxRuntime.jsx(material.Drawer, { variant:
|
|
25838
|
+
return (jsxRuntime.jsx(material.Drawer, { variant: "temporary", anchor: "right", open: props.open, onClose: props.drawerToggle, sx: {
|
|
25835
25839
|
zIndex: 1202,
|
|
25836
|
-
|
|
25837
|
-
width:
|
|
25840
|
+
"& .MuiDrawer-paper": {
|
|
25841
|
+
width: "100%",
|
|
25838
25842
|
maxWidth: props.width ? props.width : 600,
|
|
25839
25843
|
background: theme.palette.background.default,
|
|
25840
25844
|
color: theme.palette.text.primary,
|
|
25841
|
-
borderRight:
|
|
25842
|
-
borderTopLeftRadius:
|
|
25843
|
-
borderBottomLeftRadius:
|
|
25844
|
-
}
|
|
25845
|
-
}, color:
|
|
25845
|
+
borderRight: "none",
|
|
25846
|
+
borderTopLeftRadius: "12px",
|
|
25847
|
+
borderBottomLeftRadius: "12px",
|
|
25848
|
+
},
|
|
25849
|
+
}, color: "inherit", ...props.drawerProps, children: jsxRuntime.jsxs(material.Grid, { container: true, direction: "column", px: 4, py: 2, spacing: 2, children: [jsxRuntime.jsx(material.Grid, { display: "flex", justifyContent: "right", pb: 0, children: props.slots?.button ? (props.slots.button) : (jsxRuntime.jsx(material.Button, { color: "error", startIcon: jsxRuntime.jsx(CancelIcon, {}), onClick: props.drawerToggle, children: "Cerrar" })) }), jsxRuntime.jsx(material.Grid, { children: jsxRuntime.jsx(core.PageHeader, { breadcrumbs: [], title: props.title }) }), jsxRuntime.jsx(material.Grid, { size: 12, container: true, position: "relative", children: props.children })] }) }));
|
|
25846
25850
|
};
|
|
25847
25851
|
|
|
25848
25852
|
const LoadingComponent = (props) => {
|
|
@@ -25901,60 +25905,49 @@ const _HistorialDrawer = (props) => {
|
|
|
25901
25905
|
const HistorialDrawer = (props) => {
|
|
25902
25906
|
const [open, setOpen] = React.useState(false);
|
|
25903
25907
|
const handleDrawer = React.useCallback(() => {
|
|
25904
|
-
setOpen(prevState => !prevState);
|
|
25908
|
+
setOpen((prevState) => !prevState);
|
|
25905
25909
|
}, []);
|
|
25906
25910
|
// ===== || KEYDOWN || ===== //
|
|
25907
25911
|
const handleKeyPress = React.useCallback((event) => {
|
|
25908
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
25912
|
+
if (event.ctrlKey && event.shiftKey && event.key === "H") {
|
|
25909
25913
|
event.preventDefault();
|
|
25910
25914
|
handleDrawer();
|
|
25911
25915
|
}
|
|
25912
25916
|
}, [handleDrawer]);
|
|
25913
25917
|
React.useEffect(() => {
|
|
25914
|
-
document.addEventListener(
|
|
25918
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
25915
25919
|
return () => {
|
|
25916
|
-
document.removeEventListener(
|
|
25920
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
25917
25921
|
};
|
|
25918
25922
|
}, [handleKeyPress]);
|
|
25919
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.Tooltip, { title:
|
|
25920
|
-
position:
|
|
25923
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.Tooltip, { title: "Historial", children: jsxRuntime.jsx(material.IconButton, { color: "primary", onClick: handleDrawer, sx: {
|
|
25924
|
+
position: "absolute",
|
|
25921
25925
|
right: 0,
|
|
25922
25926
|
}, ...props.iconButtonProps, children: jsxRuntime.jsx(HistoryIcon, {}) }) }), jsxRuntime.jsx(_HistorialDrawer, { open: open, handleDrawer: handleDrawer, endpoint: props.endpoint })] }));
|
|
25923
25927
|
};
|
|
25924
25928
|
|
|
25925
|
-
const buildListItems = (content) => {
|
|
25926
|
-
const items = [];
|
|
25927
|
-
const loop = (content, error_title) => {
|
|
25928
|
-
if (Array.isArray(content)) {
|
|
25929
|
-
items.push({ title: error_title ? (error_title.charAt(0).toUpperCase() + error_title.slice(1)).split('_').join(' ') : 'N/A', content: content.join(', ') });
|
|
25930
|
-
}
|
|
25931
|
-
else {
|
|
25932
|
-
Object.keys(content).map((row_error) => {
|
|
25933
|
-
loop(content[row_error], row_error);
|
|
25934
|
-
});
|
|
25935
|
-
}
|
|
25936
|
-
};
|
|
25937
|
-
loop(content);
|
|
25938
|
-
return items;
|
|
25939
|
-
};
|
|
25940
25929
|
const RowErrors = (props) => {
|
|
25941
25930
|
return (jsxRuntime.jsx(material.List, { subheader: jsxRuntime.jsx(material.ListSubheader, { sx: {
|
|
25942
25931
|
bgcolor: colors.red[50],
|
|
25943
25932
|
color: colors.red[800],
|
|
25944
|
-
fontWeight:
|
|
25945
|
-
borderRadius:
|
|
25946
|
-
lineHeight:
|
|
25933
|
+
fontWeight: "bold",
|
|
25934
|
+
borderRadius: "12px",
|
|
25935
|
+
lineHeight: "40px",
|
|
25947
25936
|
}, children: `Hilera ${props.row}` }), sx: {
|
|
25948
25937
|
bgcolor: colors.red[50],
|
|
25949
|
-
borderRadius:
|
|
25950
|
-
}, children:
|
|
25938
|
+
borderRadius: "12px",
|
|
25939
|
+
}, children: props.data.map((item) => {
|
|
25940
|
+
const pre_name = item.name.split(".").at(-1);
|
|
25941
|
+
const name = (pre_name.charAt(0).toUpperCase() + pre_name.slice(1))
|
|
25942
|
+
.split("_")
|
|
25943
|
+
.join(" ");
|
|
25951
25944
|
return (jsxRuntime.jsx(material.ListItem, { sx: {
|
|
25952
|
-
py: 0
|
|
25953
|
-
}, children: jsxRuntime.jsx(ListItemText, { primary: jsxRuntime.jsxs(material.Box, { children: [jsxRuntime.jsx(material.Typography, { variant:
|
|
25945
|
+
py: 0,
|
|
25946
|
+
}, children: jsxRuntime.jsx(ListItemText, { primary: jsxRuntime.jsxs(material.Box, { children: [jsxRuntime.jsx(material.Typography, { variant: "caption", pr: 0.5, sx: {
|
|
25954
25947
|
color: colors.red[800],
|
|
25955
|
-
}, children: `${
|
|
25948
|
+
}, children: `${name}:` }), jsxRuntime.jsx(material.Typography, { variant: "caption", sx: {
|
|
25956
25949
|
color: colors.red[800],
|
|
25957
|
-
}, children: item.
|
|
25950
|
+
}, children: item.reason.join(", ") })] }) }) }));
|
|
25958
25951
|
}) }));
|
|
25959
25952
|
};
|
|
25960
25953
|
|
|
@@ -25994,9 +25987,8 @@ const FileUploadBox = (props) => {
|
|
|
25994
25987
|
props.setValid(true);
|
|
25995
25988
|
})
|
|
25996
25989
|
.catch((e) => {
|
|
25997
|
-
|
|
25998
|
-
|
|
25999
|
-
notifications.show(columnas_inv, { severity: "error" });
|
|
25990
|
+
if (e.data?.detail?.length > 0)
|
|
25991
|
+
notifications.show(e.data.detail[0], { severity: "error" });
|
|
26000
25992
|
props.setValid(false);
|
|
26001
25993
|
});
|
|
26002
25994
|
});
|
|
@@ -26023,19 +26015,22 @@ const FileUploadBox = (props) => {
|
|
|
26023
26015
|
onChange(null);
|
|
26024
26016
|
setFile(null);
|
|
26025
26017
|
};
|
|
26018
|
+
const renderErrorRows = () => {
|
|
26019
|
+
if (!error?.data?.invalid_params)
|
|
26020
|
+
return;
|
|
26021
|
+
const rows = lodash.groupBy(error?.data?.invalid_params, function (e) {
|
|
26022
|
+
return e.name.split(".")[0];
|
|
26023
|
+
});
|
|
26024
|
+
if (!rows)
|
|
26025
|
+
return;
|
|
26026
|
+
return Object.entries(rows).map(([row, errors]) => (jsxRuntime.jsx(RowErrors, { row: row, data: errors }, row)));
|
|
26027
|
+
};
|
|
26026
26028
|
return (jsxRuntime.jsx(Box, { width: 1, children: jsxRuntime.jsxs(material.Stack, { spacing: 2, children: [!file && !isLoading && (jsxRuntime.jsxs(Box, { component: "div", width: 1, display: "flex", justifyContent: "center", alignItems: "center", border: "1.5px dashed", borderRadius: "12px", py: 4, px: 2, borderColor: colors.grey[800], bgcolor: colors.grey[50], ...getRootProps(), children: [jsxRuntime.jsx(VisuallyHiddenInput, { id: "file-upload", type: "file", ...getInputProps() }), jsxRuntime.jsx(FileUploadIcon, { sx: {
|
|
26027
26029
|
color: colors.grey[800],
|
|
26028
26030
|
pr: 1,
|
|
26029
26031
|
} }), jsxRuntime.jsx(Typography, { variant: "body2", sx: { color: colors.grey[800] }, children: isDragActive
|
|
26030
26032
|
? "Soltar archivo aquí."
|
|
26031
|
-
: "Arrastra un archivo aquí o haz clic para seleccionar uno." })] })), isLoading && (jsxRuntime.jsx(Box, { children: jsxRuntime.jsx(material.LinearProgress, { sx: { height: 5 } }) })), file && (jsxRuntime.jsx(FileBox, { file: file, handleRemove: handleRemove, loadingRemove: removerLoading })),
|
|
26032
|
-
"data" in error &&
|
|
26033
|
-
Object.keys(error.data).map((row) => {
|
|
26034
|
-
if (typeof error.data[row] == "object") {
|
|
26035
|
-
return jsxRuntime.jsx(RowErrors, { row: row, data: error.data }, row);
|
|
26036
|
-
}
|
|
26037
|
-
return null;
|
|
26038
|
-
})] }) }));
|
|
26033
|
+
: "Arrastra un archivo aquí o haz clic para seleccionar uno." })] })), isLoading && (jsxRuntime.jsx(Box, { children: jsxRuntime.jsx(material.LinearProgress, { sx: { height: 5 } }) })), file && (jsxRuntime.jsx(FileBox, { file: file, handleRemove: handleRemove, loadingRemove: removerLoading })), renderErrorRows()] }) }));
|
|
26039
26034
|
};
|
|
26040
26035
|
return (jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value } }) => {
|
|
26041
26036
|
return jsxRuntime.jsx(Dropzone, { onChange: onChange, value: value });
|
|
@@ -26220,7 +26215,7 @@ async function manualCacheRefresh(api, id, dispatch, queryFulfilled, endpoints)
|
|
|
26220
26215
|
const initialState$1 = {};
|
|
26221
26216
|
// == crea el slice == //
|
|
26222
26217
|
const snackProgress = toolkit.createSlice({
|
|
26223
|
-
name:
|
|
26218
|
+
name: "snackProgress",
|
|
26224
26219
|
initialState: initialState$1,
|
|
26225
26220
|
// declarar acciones que se le pueden hacer a esta sección de la tienda
|
|
26226
26221
|
reducers: {
|
|
@@ -26236,7 +26231,7 @@ const snackProgress = toolkit.createSlice({
|
|
|
26236
26231
|
closeProgressSnack(state, action) {
|
|
26237
26232
|
return lodash.omit(state, action.payload);
|
|
26238
26233
|
},
|
|
26239
|
-
}
|
|
26234
|
+
},
|
|
26240
26235
|
});
|
|
26241
26236
|
// exportar acciones
|
|
26242
26237
|
const { openProgressSnack, updateProgressSnackData, closeProgressSnack } = snackProgress.actions;
|
|
@@ -26262,12 +26257,14 @@ const { changeTitle, } = settings.actions;
|
|
|
26262
26257
|
var header = settings.reducer;
|
|
26263
26258
|
|
|
26264
26259
|
const ControlledDropdown = (props) => {
|
|
26265
|
-
const [inputValue, setInputValue] = React.useState(
|
|
26260
|
+
const [inputValue, setInputValue] = React.useState("");
|
|
26266
26261
|
const [options, setOptions] = React.useState(props.extraProps?.options ? props.extraProps?.options : []);
|
|
26267
26262
|
const args = React.useMemo(() => {
|
|
26268
26263
|
if (!props.extraProps?.queryArgs)
|
|
26269
26264
|
return undefined;
|
|
26270
|
-
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26265
|
+
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26266
|
+
filters: { nombre__icontains: inputValue },
|
|
26267
|
+
});
|
|
26271
26268
|
}, [inputValue, props.extraProps?.queryArgs]);
|
|
26272
26269
|
const api = useAPI();
|
|
26273
26270
|
const [getOpciones, { isLoading, isFetching, isError }] = api.useLazyGetComoOpcionesQuery();
|
|
@@ -26280,7 +26277,8 @@ const ControlledDropdown = (props) => {
|
|
|
26280
26277
|
};
|
|
26281
26278
|
const handleSearch = React.useCallback(debounce((args, callback) => {
|
|
26282
26279
|
setOptions([]);
|
|
26283
|
-
getOpciones(args)
|
|
26280
|
+
getOpciones(args)
|
|
26281
|
+
.unwrap()
|
|
26284
26282
|
.then(callback)
|
|
26285
26283
|
.catch(() => {
|
|
26286
26284
|
//
|
|
@@ -26293,7 +26291,7 @@ const ControlledDropdown = (props) => {
|
|
|
26293
26291
|
});
|
|
26294
26292
|
}
|
|
26295
26293
|
}, [args, handleSearch, open]);
|
|
26296
|
-
return (jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange
|
|
26294
|
+
return (jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange }, fieldState: { error } }) => {
|
|
26297
26295
|
const handleChange = (_event, newValue) => {
|
|
26298
26296
|
onChange(newValue);
|
|
26299
26297
|
};
|
|
@@ -26301,10 +26299,10 @@ const ControlledDropdown = (props) => {
|
|
|
26301
26299
|
setInputValue(newInputValue);
|
|
26302
26300
|
}, isOptionEqualToValue: (option, value) => {
|
|
26303
26301
|
return option.value === value.value;
|
|
26304
|
-
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, fullWidth: true, size:
|
|
26302
|
+
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, fullWidth: true, size: "small", disabled: !options || isError, renderInput: (params) => (jsxRuntime.jsx(TextField, { ...params, label: props.label, error: !!error, helperText: error ? error.message : props.extraProps?.disableHT ? "" : " ", slotProps: {
|
|
26305
26303
|
input: {
|
|
26306
26304
|
...params.InputProps,
|
|
26307
|
-
endAdornment: (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
26305
|
+
endAdornment: (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isLoading || isFetching ? (jsxRuntime.jsx(material.CircularProgress, { color: "inherit", size: 20 })) : null, params.InputProps.endAdornment] })),
|
|
26308
26306
|
},
|
|
26309
26307
|
} })), ...props.fieldProps }));
|
|
26310
26308
|
} }));
|
|
@@ -26333,13 +26331,15 @@ const ControlledPhoneNumber = (props) => {
|
|
|
26333
26331
|
};
|
|
26334
26332
|
|
|
26335
26333
|
const ControlledSelect = (props) => {
|
|
26336
|
-
const [inputValue, setInputValue] = React.useState(
|
|
26334
|
+
const [inputValue, setInputValue] = React.useState("");
|
|
26337
26335
|
const [options, setOptions] = React.useState(props.extraProps?.options ? props.extraProps?.options : []);
|
|
26338
26336
|
const [selectedAll, setSelectedAll] = React.useState(false);
|
|
26339
26337
|
const args = React.useMemo(() => {
|
|
26340
26338
|
if (!props.extraProps?.queryArgs)
|
|
26341
26339
|
return undefined;
|
|
26342
|
-
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26340
|
+
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26341
|
+
filters: { nombre__icontains: inputValue },
|
|
26342
|
+
});
|
|
26343
26343
|
}, [inputValue, props.extraProps?.queryArgs]);
|
|
26344
26344
|
const api = useAPI();
|
|
26345
26345
|
const [getOpciones, { isLoading, isFetching, isError }] = api.useLazyGetComoOpcionesQuery();
|
|
@@ -26354,7 +26354,8 @@ const ControlledSelect = (props) => {
|
|
|
26354
26354
|
};
|
|
26355
26355
|
const handleSearch = React.useCallback(debounce((args, callback) => {
|
|
26356
26356
|
setOptions([]);
|
|
26357
|
-
getOpciones(args)
|
|
26357
|
+
getOpciones(args)
|
|
26358
|
+
.unwrap()
|
|
26358
26359
|
.then(callback)
|
|
26359
26360
|
.catch(() => {
|
|
26360
26361
|
//
|
|
@@ -26363,12 +26364,14 @@ const ControlledSelect = (props) => {
|
|
|
26363
26364
|
React.useEffect(() => {
|
|
26364
26365
|
if (args && open)
|
|
26365
26366
|
handleSearch(args, (filteredOptions) => {
|
|
26366
|
-
setOptions([{ value:
|
|
26367
|
+
setOptions([{ value: "all", label: "All" }].concat(filteredOptions));
|
|
26367
26368
|
});
|
|
26368
26369
|
}, [args, handleSearch, open]);
|
|
26369
26370
|
return (jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange }, fieldState: { error } }) => {
|
|
26370
26371
|
const handleChange = (_event, newValue) => {
|
|
26371
|
-
if (lodash.find(newValue, function (val) {
|
|
26372
|
+
if (lodash.find(newValue, function (val) {
|
|
26373
|
+
return val.value == "all";
|
|
26374
|
+
})) {
|
|
26372
26375
|
if (selectedAll) {
|
|
26373
26376
|
setSelectedAll(false);
|
|
26374
26377
|
onChange(newValue.slice(1));
|
|
@@ -26392,10 +26395,10 @@ const ControlledSelect = (props) => {
|
|
|
26392
26395
|
setInputValue(newInputValue);
|
|
26393
26396
|
}, isOptionEqualToValue: (option, value) => {
|
|
26394
26397
|
return option.value === value.value;
|
|
26395
|
-
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, multiple: true, disableCloseOnSelect: true, limitTags: 1, fullWidth: true, size:
|
|
26398
|
+
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, multiple: true, disableCloseOnSelect: true, limitTags: 1, fullWidth: true, size: "small", disabled: !options || isError, renderInput: (params) => (jsxRuntime.jsx(TextField, { ...params, label: props.label, error: !!error, helperText: error ? error.message : "", slotProps: {
|
|
26396
26399
|
input: {
|
|
26397
26400
|
...params.InputProps,
|
|
26398
|
-
endAdornment: (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
26401
|
+
endAdornment: (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isLoading || isFetching ? (jsxRuntime.jsx(material.CircularProgress, { color: "inherit", size: 20 })) : null, params.InputProps.endAdornment] })),
|
|
26399
26402
|
},
|
|
26400
26403
|
} })), ...props.fieldProps, renderOption: (props, option, { selected }) => {
|
|
26401
26404
|
const { key, ...optionProps } = props;
|
|
@@ -26403,7 +26406,7 @@ const ControlledSelect = (props) => {
|
|
|
26403
26406
|
} }));
|
|
26404
26407
|
} }));
|
|
26405
26408
|
};
|
|
26406
|
-
ControlledSelect.displayName =
|
|
26409
|
+
ControlledSelect.displayName = "ControlledSelect";
|
|
26407
26410
|
|
|
26408
26411
|
// ==============================|| DESLIZADOR CONTROLADO ||============================== //
|
|
26409
26412
|
const ControlledSlider$1 = (props) => {
|
|
@@ -26436,19 +26439,27 @@ const ControlledText = (props) => {
|
|
|
26436
26439
|
};
|
|
26437
26440
|
return (
|
|
26438
26441
|
// controlador
|
|
26439
|
-
jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error }
|
|
26442
|
+
jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error } }) => {
|
|
26440
26443
|
return (
|
|
26441
26444
|
// campo de texto
|
|
26442
|
-
jsxRuntime.jsx(TextField, { variant:
|
|
26445
|
+
jsxRuntime.jsx(TextField, { variant: "outlined", size: "small", id: props.name, label: props.label, value: value ? value.toString() : "", onChange: onChange, error: !!error, type: props.extraProps?.password
|
|
26446
|
+
? showPassword
|
|
26447
|
+
? "text"
|
|
26448
|
+
: "password"
|
|
26449
|
+
: "text", helperText: error
|
|
26450
|
+
? error.message
|
|
26451
|
+
: props.fieldProps?.helperText
|
|
26452
|
+
? props.fieldProps.helperText
|
|
26453
|
+
: " ", fullWidth: true, slotProps: {
|
|
26443
26454
|
input: {
|
|
26444
26455
|
// ícono de mostar u ocultar si es campo de contarseña
|
|
26445
|
-
endAdornment: props.extraProps?.password && (jsxRuntime.jsx(material.InputAdornment, { position:
|
|
26446
|
-
color:
|
|
26447
|
-
|
|
26448
|
-
color:
|
|
26449
|
-
}
|
|
26450
|
-
}, children: showPassword ? jsxRuntime.jsx(iconsMaterial.Visibility, {}) : jsxRuntime.jsx(iconsMaterial.VisibilityOff, {}) }) }))
|
|
26451
|
-
}
|
|
26456
|
+
endAdornment: props.extraProps?.password && (jsxRuntime.jsx(material.InputAdornment, { position: "end", children: jsxRuntime.jsx(material.IconButton, { "aria-label": "toggle password visibility", tabIndex: -1, onClick: handleShowPassword, edge: "end", size: "large", sx: {
|
|
26457
|
+
color: "secondary.darker",
|
|
26458
|
+
"&:hover": {
|
|
26459
|
+
color: "secondary.main",
|
|
26460
|
+
},
|
|
26461
|
+
}, children: showPassword ? jsxRuntime.jsx(iconsMaterial.Visibility, {}) : jsxRuntime.jsx(iconsMaterial.VisibilityOff, {}) }) })),
|
|
26462
|
+
},
|
|
26452
26463
|
}, ...props.fieldProps }));
|
|
26453
26464
|
} }));
|
|
26454
26465
|
};
|
|
@@ -26508,16 +26519,15 @@ const ControlledTimePicker = (props) => {
|
|
|
26508
26519
|
const filedProps = React.useMemo(() => {
|
|
26509
26520
|
const defaultProps = {
|
|
26510
26521
|
slotProps: {
|
|
26511
|
-
textField: { size:
|
|
26512
|
-
field: { clearable: true
|
|
26513
|
-
}
|
|
26522
|
+
textField: { size: "small" },
|
|
26523
|
+
field: { clearable: true },
|
|
26524
|
+
},
|
|
26514
26525
|
};
|
|
26515
26526
|
return merge$1({}, defaultProps, props.fieldProps);
|
|
26516
26527
|
}, [props.fieldProps]);
|
|
26517
|
-
return (jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error }
|
|
26518
|
-
const val = convertValueToDayjs(value,
|
|
26519
|
-
return (jsxRuntime.jsxs(material.FormGroup, { sx: { width: 1 }, color:
|
|
26520
|
-
jsxRuntime.jsx(material.FormHelperText, { error: !!error, children: error ? error.message : ' ' })] }));
|
|
26528
|
+
return (jsxRuntime.jsx(reactHookForm.Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error } }) => {
|
|
26529
|
+
const val = convertValueToDayjs(value, "time");
|
|
26530
|
+
return (jsxRuntime.jsxs(material.FormGroup, { sx: { width: 1 }, color: "secondary", children: [jsxRuntime.jsx(LocalizationProvider, { dateAdapter: AdapterDayjs, children: jsxRuntime.jsx(TimePicker, { label: props.label, onChange: (v) => handleChange(v, "time", onChange), value: val || null, ...filedProps }) }), !props.extraProps?.disableHT && (jsxRuntime.jsx(material.FormHelperText, { error: !!error, children: error ? error.message : " " }))] }));
|
|
26521
26531
|
} }));
|
|
26522
26532
|
};
|
|
26523
26533
|
|
|
@@ -26537,22 +26547,23 @@ const ControlledSlider = (props) => {
|
|
|
26537
26547
|
|
|
26538
26548
|
const DeleteConfirmationDialog = (props) => {
|
|
26539
26549
|
const notifications = core.useNotifications();
|
|
26540
|
-
const pathname =
|
|
26541
|
-
const id = React.useMemo(() => props.id || pathname.split(
|
|
26550
|
+
const pathname = "temp";
|
|
26551
|
+
const id = React.useMemo(() => props.id || pathname.split("/").at(-1), [pathname, props.id]);
|
|
26542
26552
|
const [mutation] = props.mutation();
|
|
26543
26553
|
const schema = zod.object({ confirmation: zod.string() });
|
|
26544
26554
|
const form = reactHookForm.useForm({
|
|
26545
26555
|
resolver: zod$1.zodResolver(schema),
|
|
26546
|
-
defaultValues: { confirmation:
|
|
26556
|
+
defaultValues: { confirmation: "" },
|
|
26547
26557
|
});
|
|
26548
26558
|
const handleClose = () => {
|
|
26549
26559
|
props.handleClose();
|
|
26550
26560
|
form.reset();
|
|
26551
26561
|
};
|
|
26552
|
-
const confirmation = form.watch(
|
|
26553
|
-
const disabled = React.useMemo(() => confirmation !=
|
|
26562
|
+
const confirmation = form.watch("confirmation").toUpperCase();
|
|
26563
|
+
const disabled = React.useMemo(() => confirmation != "ELIMINAR", [confirmation]);
|
|
26554
26564
|
const onSubmitHandler = () => {
|
|
26555
|
-
mutation({ id: id })
|
|
26565
|
+
mutation({ id: id })
|
|
26566
|
+
.unwrap()
|
|
26556
26567
|
.then(() => {
|
|
26557
26568
|
if (props.disableNavBack) {
|
|
26558
26569
|
handleClose();
|
|
@@ -26561,25 +26572,25 @@ const DeleteConfirmationDialog = (props) => {
|
|
|
26561
26572
|
// props.navigate(-1);
|
|
26562
26573
|
form.reset();
|
|
26563
26574
|
}
|
|
26564
|
-
notifications.show(
|
|
26575
|
+
notifications.show("Objeto removido exitosamente!", { severity: "success" });
|
|
26565
26576
|
})
|
|
26566
26577
|
.catch((error) => {
|
|
26567
26578
|
console.log(error);
|
|
26568
|
-
notifications.show(
|
|
26579
|
+
notifications.show("Error", { severity: "error" });
|
|
26569
26580
|
});
|
|
26570
26581
|
};
|
|
26571
26582
|
const handleKeyDown = (event) => {
|
|
26572
|
-
if (event.key ===
|
|
26583
|
+
if (event.key === "Enter" && !disabled)
|
|
26573
26584
|
onSubmitHandler();
|
|
26574
26585
|
};
|
|
26575
|
-
return (jsxRuntime.jsxs(material.Dialog, { open: props.open, onClose: handleClose, children: [jsxRuntime.jsx(material.DialogTitle, { variant:
|
|
26586
|
+
return (jsxRuntime.jsxs(material.Dialog, { open: props.open, onClose: handleClose, children: [jsxRuntime.jsx(material.DialogTitle, { variant: "h5", children: "Eliminar" }), jsxRuntime.jsxs(material.DialogContent, { children: [jsxRuntime.jsx(material.DialogContentText, { sx: { pb: 2 }, children: "\u00BFEst\u00E1 seguro que quiere eliminar el objeto?" }), jsxRuntime.jsx(material.Box, { id: "eliminar-formulario", width: "100%", position: "relative", children: jsxRuntime.jsx(ControlledText, { name: "confirmation", control: form.control, fieldProps: {
|
|
26576
26587
|
autoFocus: true,
|
|
26577
26588
|
required: true,
|
|
26578
|
-
margin:
|
|
26589
|
+
margin: "dense",
|
|
26579
26590
|
label: "Escribir 'ELIMINAR' para confirmar.",
|
|
26580
26591
|
fullWidth: true,
|
|
26581
|
-
variant:
|
|
26582
|
-
helperText:
|
|
26592
|
+
variant: "standard",
|
|
26593
|
+
helperText: "",
|
|
26583
26594
|
onKeyDown: handleKeyDown,
|
|
26584
26595
|
} }) })] }), jsxRuntime.jsxs(material.DialogActions, { children: [jsxRuntime.jsx(material.Button, { onClick: handleClose, children: "Cancelar" }), jsxRuntime.jsx(material.Button, { onClick: onSubmitHandler, disabled: disabled, children: "Eliminar" })] })] }));
|
|
26585
26596
|
};
|
|
@@ -26594,23 +26605,23 @@ const DeleteButton = (props) => {
|
|
|
26594
26605
|
};
|
|
26595
26606
|
// ===== || KEYDOWN || ===== //
|
|
26596
26607
|
const handleKeyPress = React.useCallback((event) => {
|
|
26597
|
-
if (event.ctrlKey && event.key ===
|
|
26608
|
+
if (event.ctrlKey && event.key === "d") {
|
|
26598
26609
|
event.preventDefault();
|
|
26599
26610
|
handleClick();
|
|
26600
26611
|
}
|
|
26601
26612
|
}, [handleClick]);
|
|
26602
26613
|
React.useEffect(() => {
|
|
26603
|
-
document.addEventListener(
|
|
26614
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26604
26615
|
return () => {
|
|
26605
|
-
document.removeEventListener(
|
|
26616
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26606
26617
|
};
|
|
26607
26618
|
}, [handleKeyPress]);
|
|
26608
26619
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(NormalOrIcon, { buttonProps: {
|
|
26609
|
-
color:
|
|
26610
|
-
variant:
|
|
26620
|
+
color: "error",
|
|
26621
|
+
variant: "contained",
|
|
26611
26622
|
startIcon: jsxRuntime.jsx(DeleteIcon, {}),
|
|
26612
26623
|
onClick: handleClick,
|
|
26613
|
-
children:
|
|
26624
|
+
children: "Eliminar",
|
|
26614
26625
|
} }), jsxRuntime.jsx(DeleteConfirmationDialog, { open: open, handleClose: handleClose, ...props })] }));
|
|
26615
26626
|
};
|
|
26616
26627
|
|
|
@@ -26621,104 +26632,104 @@ const SaveCancelButton = (props) => {
|
|
|
26621
26632
|
};
|
|
26622
26633
|
// ===== || KEYDOWN || ===== //
|
|
26623
26634
|
const handleKeyPress = React.useCallback((event) => {
|
|
26624
|
-
if (event.key ===
|
|
26635
|
+
if (event.key === "Escape") {
|
|
26625
26636
|
event.preventDefault();
|
|
26626
26637
|
handleCancel();
|
|
26627
26638
|
}
|
|
26628
26639
|
}, [handleCancel]);
|
|
26629
26640
|
React.useEffect(() => {
|
|
26630
|
-
document.addEventListener(
|
|
26641
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26631
26642
|
return () => {
|
|
26632
|
-
document.removeEventListener(
|
|
26643
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26633
26644
|
};
|
|
26634
26645
|
}, [handleKeyPress]);
|
|
26635
26646
|
return (jsxRuntime.jsxs(material.ButtonGroup, { sx: {
|
|
26636
26647
|
maxHeight: 40,
|
|
26637
26648
|
}, ...props.slotProps?.buttonGroup, children: [jsxRuntime.jsx(NormalOrIcon, { buttonProps: {
|
|
26638
|
-
color:
|
|
26639
|
-
variant:
|
|
26649
|
+
color: "error",
|
|
26650
|
+
variant: "contained",
|
|
26640
26651
|
startIcon: jsxRuntime.jsx(CancelIcon, {}),
|
|
26641
26652
|
onClick: handleCancel,
|
|
26642
26653
|
sx: { height: 1 },
|
|
26643
|
-
children:
|
|
26644
|
-
...props.slotProps?.cancelBtn
|
|
26654
|
+
children: "Cancelar",
|
|
26655
|
+
...props.slotProps?.cancelBtn,
|
|
26645
26656
|
} }), jsxRuntime.jsx(NormalOrIcon, { buttonProps: {
|
|
26646
|
-
color:
|
|
26647
|
-
variant:
|
|
26657
|
+
color: "secondary",
|
|
26658
|
+
variant: "contained",
|
|
26648
26659
|
startIcon: jsxRuntime.jsx(SaveIcon, {}),
|
|
26649
|
-
type:
|
|
26650
|
-
form:
|
|
26660
|
+
type: "submit",
|
|
26661
|
+
form: "formulario",
|
|
26651
26662
|
sx: { height: 1 },
|
|
26652
|
-
children:
|
|
26653
|
-
...props.slotProps?.saveBtn
|
|
26663
|
+
children: "Guardar",
|
|
26664
|
+
...props.slotProps?.saveBtn,
|
|
26654
26665
|
} })] }));
|
|
26655
26666
|
};
|
|
26656
26667
|
|
|
26657
26668
|
const CreateButtonBase = (props) => {
|
|
26658
26669
|
// ===== || KEYDOWN || ===== //
|
|
26659
26670
|
const handleKeyPress = React.useCallback((event) => {
|
|
26660
|
-
if (event.ctrlKey && event.key ===
|
|
26671
|
+
if (event.ctrlKey && event.key === "e") {
|
|
26661
26672
|
event.preventDefault();
|
|
26662
26673
|
props.handleClick();
|
|
26663
26674
|
}
|
|
26664
26675
|
}, []);
|
|
26665
26676
|
React.useEffect(() => {
|
|
26666
|
-
document.addEventListener(
|
|
26677
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26667
26678
|
return () => {
|
|
26668
|
-
document.removeEventListener(
|
|
26679
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26669
26680
|
};
|
|
26670
26681
|
}, [handleKeyPress]);
|
|
26671
26682
|
return (jsxRuntime.jsx(NormalOrIcon, { buttonProps: {
|
|
26672
|
-
id:
|
|
26673
|
-
variant:
|
|
26674
|
-
color:
|
|
26683
|
+
id: "create-button",
|
|
26684
|
+
variant: "contained",
|
|
26685
|
+
color: "secondary",
|
|
26675
26686
|
startIcon: jsxRuntime.jsx(AddIcon, {}),
|
|
26676
26687
|
onClick: props.handleClick,
|
|
26677
|
-
|
|
26678
|
-
|
|
26679
|
-
|
|
26688
|
+
"aria-controls": props.open ? "create-menu" : undefined,
|
|
26689
|
+
"aria-haspopup": true,
|
|
26690
|
+
"aria-expanded": props.open ? "true" : undefined,
|
|
26680
26691
|
endIcon: jsxRuntime.jsx(KeyboardArrowDownIcon, {}),
|
|
26681
|
-
children:
|
|
26692
|
+
children: "Crear",
|
|
26682
26693
|
...props.buttonProps,
|
|
26683
26694
|
} }));
|
|
26684
26695
|
};
|
|
26685
26696
|
|
|
26686
26697
|
const MenuItemWithLoading = (props) => {
|
|
26687
26698
|
return (jsxRuntime.jsxs(MenuItem, { onClick: props.handleClick, sx: {
|
|
26688
|
-
position:
|
|
26689
|
-
}, disabled: props.disabled || props.isLoading, children: [props.children, props.isLoading &&
|
|
26690
|
-
|
|
26691
|
-
|
|
26692
|
-
}, px: 2, children: jsxRuntime.jsx(LinearProgress, {}) })] }));
|
|
26699
|
+
position: "relative",
|
|
26700
|
+
}, disabled: props.disabled || props.isLoading, children: [props.children, props.isLoading && (jsxRuntime.jsx(material.Box, { position: "absolute", width: 1, top: "50%", left: "50%", sx: {
|
|
26701
|
+
transform: "translate(-50%, -50%)",
|
|
26702
|
+
}, px: 2, children: jsxRuntime.jsx(LinearProgress, {}) }))] }));
|
|
26693
26703
|
};
|
|
26694
26704
|
|
|
26695
26705
|
const StyledMenu = material.styled((props) => (jsxRuntime.jsx(material.Menu, { elevation: 0, anchorOrigin: {
|
|
26696
|
-
vertical:
|
|
26697
|
-
horizontal:
|
|
26706
|
+
vertical: "bottom",
|
|
26707
|
+
horizontal: "right",
|
|
26698
26708
|
}, transformOrigin: {
|
|
26699
|
-
vertical:
|
|
26700
|
-
horizontal:
|
|
26709
|
+
vertical: "top",
|
|
26710
|
+
horizontal: "right",
|
|
26701
26711
|
}, ...props })))(({ theme }) => ({
|
|
26702
|
-
|
|
26712
|
+
"& .MuiPaper-root": {
|
|
26703
26713
|
borderRadius: 6,
|
|
26704
26714
|
marginTop: theme.spacing(1),
|
|
26705
26715
|
minWidth: 180,
|
|
26706
|
-
color:
|
|
26707
|
-
|
|
26708
|
-
|
|
26709
|
-
|
|
26716
|
+
color: "rgb(55, 65, 81)",
|
|
26717
|
+
backgroundColor: theme.palette.primary.lighter,
|
|
26718
|
+
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",
|
|
26719
|
+
"& .MuiMenu-list": {
|
|
26720
|
+
padding: "4px 0",
|
|
26710
26721
|
},
|
|
26711
|
-
|
|
26712
|
-
|
|
26713
|
-
|
|
26714
|
-
|
|
26715
|
-
|
|
26716
|
-
|
|
26717
|
-
|
|
26718
|
-
|
|
26722
|
+
"& .MuiMenuItem-root": {
|
|
26723
|
+
borderRadius: 12,
|
|
26724
|
+
"&:hover": {
|
|
26725
|
+
backgroundColor: theme.palette.primary.main,
|
|
26726
|
+
color: "white",
|
|
26727
|
+
"& .MuiSvgIcon-root": {
|
|
26728
|
+
color: "white",
|
|
26729
|
+
},
|
|
26719
26730
|
},
|
|
26720
26731
|
},
|
|
26721
|
-
...theme.applyStyles(
|
|
26732
|
+
...theme.applyStyles("dark", {
|
|
26722
26733
|
color: theme.palette.grey[300],
|
|
26723
26734
|
}),
|
|
26724
26735
|
},
|
|
@@ -26728,7 +26739,7 @@ const CreateButtonWithMenuOptions = (props) => {
|
|
|
26728
26739
|
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
26729
26740
|
const open = Boolean(anchorEl);
|
|
26730
26741
|
const handleClick = () => {
|
|
26731
|
-
setAnchorEl(document.getElementById(
|
|
26742
|
+
setAnchorEl(document.getElementById("create-button"));
|
|
26732
26743
|
};
|
|
26733
26744
|
const handleClose = () => {
|
|
26734
26745
|
setAnchorEl(null);
|
|
@@ -26742,20 +26753,22 @@ const CreateButtonWithMenuOptions = (props) => {
|
|
|
26742
26753
|
};
|
|
26743
26754
|
if (!props.permission)
|
|
26744
26755
|
return null;
|
|
26745
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(CreateButtonBase, { open: open, handleClick: handleClick }), jsxRuntime.jsxs(StyledMenu, { id:
|
|
26746
|
-
|
|
26747
|
-
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
26748
|
-
|
|
26749
|
-
|
|
26750
|
-
|
|
26751
|
-
|
|
26752
|
-
|
|
26753
|
-
|
|
26754
|
-
|
|
26755
|
-
|
|
26756
|
-
|
|
26757
|
-
|
|
26758
|
-
|
|
26756
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(CreateButtonBase, { open: open, handleClick: handleClick }), jsxRuntime.jsxs(StyledMenu, { id: "create-menu", MenuListProps: {
|
|
26757
|
+
"aria-labelledby": "create-menu-button",
|
|
26758
|
+
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
26759
|
+
[
|
|
26760
|
+
{
|
|
26761
|
+
title: "CSV",
|
|
26762
|
+
endpoint: props.pathname,
|
|
26763
|
+
icon: AttachFileIcon,
|
|
26764
|
+
},
|
|
26765
|
+
...(props.csv_upload.extraOptions || []),
|
|
26766
|
+
].map((option, index) => {
|
|
26767
|
+
return (jsxRuntime.jsxs(MenuItem, { onClick: () => {
|
|
26768
|
+
handleToggleOpen(option);
|
|
26769
|
+
handleClose();
|
|
26770
|
+
}, disableRipple: true, children: [option.icon && (jsxRuntime.jsx(material.ListItemIcon, { children: jsxRuntime.jsx(AttachFileIcon, {}) })), option.title] }, index));
|
|
26771
|
+
}), jsxRuntime.jsx(MenuItem, { onClick: () => {
|
|
26759
26772
|
props.navigate(`crear`);
|
|
26760
26773
|
handleClose();
|
|
26761
26774
|
}, disableRipple: true, children: "Manual" })] }), props.csv_upload?.enable && (jsxRuntime.jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data }))] }));
|
|
@@ -26768,12 +26781,12 @@ const ButtonWithDrawer = (props) => {
|
|
|
26768
26781
|
let setFunc = setInternalOpen;
|
|
26769
26782
|
if (props.setOpen)
|
|
26770
26783
|
setFunc = props.setOpen;
|
|
26771
|
-
setFunc(prevState => !prevState);
|
|
26784
|
+
setFunc((prevState) => !prevState);
|
|
26772
26785
|
};
|
|
26773
26786
|
const configuracionBase = {
|
|
26774
|
-
variant:
|
|
26787
|
+
variant: "contained",
|
|
26775
26788
|
fullWidth: true,
|
|
26776
|
-
color:
|
|
26789
|
+
color: "primary",
|
|
26777
26790
|
};
|
|
26778
26791
|
const renderButton = () => {
|
|
26779
26792
|
if (props.slots.button)
|
|
@@ -26782,7 +26795,10 @@ const ButtonWithDrawer = (props) => {
|
|
|
26782
26795
|
};
|
|
26783
26796
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [renderButton(), jsxRuntime.jsx(MainDrawer, { open: open, drawerToggle: handleClick, title: props.slots.drawer.title, slots: {
|
|
26784
26797
|
button: props.slots.drawer.button,
|
|
26785
|
-
}, children: props.slots.drawer.content({
|
|
26798
|
+
}, children: props.slots.drawer.content({
|
|
26799
|
+
...props.slotProps?.drawer?.content,
|
|
26800
|
+
handleClose: handleClick,
|
|
26801
|
+
}) })] }));
|
|
26786
26802
|
};
|
|
26787
26803
|
|
|
26788
26804
|
const StatusBadge = (props) => {
|
|
@@ -26971,16 +26987,16 @@ const UncontrolledText = (props) => {
|
|
|
26971
26987
|
const handleShowPassword = () => {
|
|
26972
26988
|
setShowPassword(!showPassword);
|
|
26973
26989
|
};
|
|
26974
|
-
return (jsxRuntime.jsx(TextField, { variant:
|
|
26990
|
+
return (jsxRuntime.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: {
|
|
26975
26991
|
input: {
|
|
26976
26992
|
// ícono de mostar u ocultar si es campo de contarseña
|
|
26977
|
-
endAdornment: props.password && (jsxRuntime.jsx(material.InputAdornment, { position:
|
|
26978
|
-
color:
|
|
26979
|
-
|
|
26980
|
-
color:
|
|
26981
|
-
}
|
|
26982
|
-
}, children: showPassword ? jsxRuntime.jsx(iconsMaterial.Visibility, {}) : jsxRuntime.jsx(iconsMaterial.VisibilityOff, {}) }) }))
|
|
26983
|
-
}
|
|
26993
|
+
endAdornment: props.password && (jsxRuntime.jsx(material.InputAdornment, { position: "end", children: jsxRuntime.jsx(material.IconButton, { "aria-label": "toggle password visibility", tabIndex: -1, onClick: handleShowPassword, edge: "end", size: "large", sx: {
|
|
26994
|
+
color: "secondary.darker",
|
|
26995
|
+
"&:hover": {
|
|
26996
|
+
color: "secondary.main",
|
|
26997
|
+
},
|
|
26998
|
+
}, children: showPassword ? jsxRuntime.jsx(iconsMaterial.Visibility, {}) : jsxRuntime.jsx(iconsMaterial.VisibilityOff, {}) }) })),
|
|
26999
|
+
},
|
|
26984
27000
|
}, ...props.textFieldProps }));
|
|
26985
27001
|
};
|
|
26986
27002
|
|
|
@@ -27052,9 +27068,8 @@ const generateSchema = (columns, columnsFilter, id) => {
|
|
|
27052
27068
|
};
|
|
27053
27069
|
|
|
27054
27070
|
const FiltersPopper = (props) => {
|
|
27055
|
-
|
|
27056
|
-
|
|
27057
|
-
const id = 1;
|
|
27071
|
+
const params = reactRouterDom.useLoaderData();
|
|
27072
|
+
const id = params?.id;
|
|
27058
27073
|
const columns = xDataGrid.useGridApiContext().current.getAllColumns();
|
|
27059
27074
|
const [schema, defaultValues] = React.useMemo(() => generateSchema(columns, props.columnsFilter, id), [columns, id, props.columnsFilter]);
|
|
27060
27075
|
const form = reactHookForm.useForm({
|
|
@@ -27064,14 +27079,16 @@ const FiltersPopper = (props) => {
|
|
|
27064
27079
|
const [dirty, setDirty] = React.useState(false);
|
|
27065
27080
|
React.useEffect(() => {
|
|
27066
27081
|
if (props.filters.filterModel.items) {
|
|
27067
|
-
if (!lodash.every(props.filters.filterModel.items, function (_value, key) {
|
|
27082
|
+
if (!lodash.every(props.filters.filterModel.items, function (_value, key) {
|
|
27083
|
+
return lodash.includes(props.protectFilters, key);
|
|
27084
|
+
})) {
|
|
27068
27085
|
setDirty(true);
|
|
27069
27086
|
}
|
|
27070
27087
|
form.reset(lodash.merge({}, defaultValues, props.filters.filterModel.items));
|
|
27071
27088
|
}
|
|
27072
27089
|
}, [defaultValues, props.filters.filterModel.items, form, props.protectFilters]);
|
|
27073
27090
|
const handleClose = (event) => {
|
|
27074
|
-
if (props.menuRef.current && event?.target.tagName ==
|
|
27091
|
+
if (props.menuRef.current && event?.target.tagName == "BODY")
|
|
27075
27092
|
return;
|
|
27076
27093
|
props.setOpen(false);
|
|
27077
27094
|
};
|
|
@@ -27079,9 +27096,9 @@ const FiltersPopper = (props) => {
|
|
|
27079
27096
|
setDirty(false);
|
|
27080
27097
|
props.filters.setFilterModel(immer.produce((draft) => {
|
|
27081
27098
|
lodash.forEach(props.filters.filterModel.items, function (_value, key) {
|
|
27082
|
-
if ([
|
|
27099
|
+
if (["ordering", "search"].concat(props.protectFilters || []).includes(key))
|
|
27083
27100
|
return;
|
|
27084
|
-
delete draft[
|
|
27101
|
+
delete draft["items"][key];
|
|
27085
27102
|
});
|
|
27086
27103
|
}));
|
|
27087
27104
|
form.reset(defaultValues);
|
|
@@ -27089,75 +27106,82 @@ const FiltersPopper = (props) => {
|
|
|
27089
27106
|
};
|
|
27090
27107
|
const onSubmitHandler = (submitData) => {
|
|
27091
27108
|
props.filters.setFilterModel(immer.produce((draft) => {
|
|
27092
|
-
draft[
|
|
27109
|
+
draft["items"] = { ...draft["items"], ...submitData };
|
|
27093
27110
|
}));
|
|
27094
27111
|
handleClose();
|
|
27095
27112
|
};
|
|
27096
27113
|
const onError = (errors) => {
|
|
27097
27114
|
console.log(errors);
|
|
27098
27115
|
};
|
|
27099
|
-
return (jsxRuntime.jsx(material.Box, { id:
|
|
27116
|
+
return (jsxRuntime.jsx(material.Box, { id: "filtros", children: jsxRuntime.jsx(material.Popper, { id: "filters-menu", open: props.open, anchorEl: props.menuRef.current, placement: "bottom-end", transition: true, sx: { zIndex: 1202 }, children: ({ TransitionProps }) => (jsxRuntime.jsx(material.Grow, { ...TransitionProps, timeout: 350, children: jsxRuntime.jsx(material.Paper, { elevation: 5, sx: { zIndex: 5 }, children: jsxRuntime.jsx(material.ClickAwayListener, { onClickAway: handleClose, children: jsxRuntime.jsxs(material.Grid, { size: 12, container: true, padding: 2, width: 350, maxWidth: "100%", children: [jsxRuntime.jsx(material.Grid, { size: 12, container: true, rowSpacing: 2, maxHeight: 300, overflow: "auto", children: columns.map((column, index) => {
|
|
27100
27117
|
if (column.input)
|
|
27101
|
-
return (jsxRuntime.jsxs(material.Grid, { size: 12, container: true, direction:
|
|
27102
|
-
|
|
27103
|
-
|
|
27118
|
+
return (jsxRuntime.jsxs(material.Grid, { size: 12, container: true, direction: "column", spacing: 0, children: [jsxRuntime.jsx(material.Grid, { size: 12, children: jsxRuntime.jsx(material.Typography, { fontWeight: "bold", gutterBottom: true, children: column.filterName ||
|
|
27119
|
+
column.headerName }) }), jsxRuntime.jsx(material.Grid, { size: 12, children: React.Children.map(column.input, (child) => {
|
|
27120
|
+
let addedProps = {
|
|
27121
|
+
control: form.control,
|
|
27122
|
+
};
|
|
27123
|
+
if (column.type == "number") {
|
|
27104
27124
|
addedProps = {
|
|
27105
27125
|
...addedProps,
|
|
27106
27126
|
extraProps: {
|
|
27107
|
-
...child.props
|
|
27127
|
+
...child.props
|
|
27128
|
+
.extraProps,
|
|
27108
27129
|
getValue: form.getValues,
|
|
27109
27130
|
setValue: form.setValue,
|
|
27110
|
-
}
|
|
27131
|
+
},
|
|
27111
27132
|
};
|
|
27112
27133
|
}
|
|
27113
27134
|
return React.cloneElement(child, {
|
|
27114
27135
|
...child.props,
|
|
27115
|
-
...addedProps
|
|
27136
|
+
...addedProps,
|
|
27116
27137
|
});
|
|
27117
27138
|
}) })] }, index));
|
|
27118
27139
|
return null;
|
|
27119
|
-
}) }), jsxRuntime.jsx(material.Grid, { size: 12, py: 2, children: jsxRuntime.jsx(Divider, {}) }), jsxRuntime.jsxs(material.Grid, { size: 12, display:
|
|
27140
|
+
}) }), jsxRuntime.jsx(material.Grid, { size: 12, py: 2, children: jsxRuntime.jsx(Divider, {}) }), jsxRuntime.jsxs(material.Grid, { size: 12, display: "flex", justifyContent: "space-evenly", children: [jsxRuntime.jsx(material.Button, { disabled: (!form.formState.isDirty ||
|
|
27141
|
+
props.disableQuickSearch) &&
|
|
27142
|
+
!dirty, startIcon: jsxRuntime.jsx(ClearIcon$1, {}), variant: "outlined", onClick: handleClear, children: "Limpiar" }), jsxRuntime.jsx(material.Button, { loading: props.disableQuickSearch, disabled: !form.formState.isDirty, startIcon: jsxRuntime.jsx(FilterAltIcon, {}), variant: "outlined", onClick: form.handleSubmit(onSubmitHandler, onError), children: "Aplicar" })] })] }) }) }) })) }) }));
|
|
27120
27143
|
};
|
|
27121
27144
|
|
|
27122
27145
|
const FiltersButton = (props) => {
|
|
27123
27146
|
const [open, setOpen] = React.useState(false);
|
|
27124
27147
|
const menuRef = React.useRef(null);
|
|
27125
27148
|
const handleClick = () => {
|
|
27126
|
-
setOpen(prevState => !prevState);
|
|
27149
|
+
setOpen((prevState) => !prevState);
|
|
27127
27150
|
};
|
|
27128
27151
|
const filterCount = React.useMemo(() => {
|
|
27129
27152
|
return lodash.countBy(Object.entries(props.filters.filterModel.items), function (filter) {
|
|
27130
27153
|
const key = filter[0];
|
|
27131
27154
|
const value = filter[1];
|
|
27132
|
-
if (key ==
|
|
27155
|
+
if (key == "ordering" || key == "search")
|
|
27133
27156
|
return;
|
|
27134
|
-
if (props.protectFilters &&
|
|
27157
|
+
if (props.protectFilters &&
|
|
27158
|
+
lodash.findIndex(props.protectFilters, function (x) {
|
|
27159
|
+
return x == key;
|
|
27160
|
+
}) > -1)
|
|
27135
27161
|
return;
|
|
27136
27162
|
return (lodash.isNumber(value) && value > 0) || !lodash.isEmpty(value) || lodash.isBoolean(value);
|
|
27137
27163
|
}).true;
|
|
27138
|
-
}, [
|
|
27139
|
-
props.filters.filterModel.items, props.protectFilters
|
|
27140
|
-
]);
|
|
27164
|
+
}, [props.filters.filterModel.items, props.protectFilters]);
|
|
27141
27165
|
// ===== || ABRIR CON CTRL + Shift + F || ===== //
|
|
27142
27166
|
const handleKeyPress = React.useCallback((event) => {
|
|
27143
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27167
|
+
if (event.ctrlKey && event.shiftKey && event.key === "F") {
|
|
27144
27168
|
event.preventDefault();
|
|
27145
27169
|
setOpen(true);
|
|
27146
27170
|
}
|
|
27147
|
-
else if (event.key ===
|
|
27171
|
+
else if (event.key === "Escape" && open) {
|
|
27148
27172
|
setOpen(false);
|
|
27149
27173
|
}
|
|
27150
27174
|
}, [open]);
|
|
27151
27175
|
React.useEffect(() => {
|
|
27152
|
-
document.addEventListener(
|
|
27176
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27153
27177
|
return () => {
|
|
27154
|
-
document.removeEventListener(
|
|
27178
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27155
27179
|
};
|
|
27156
27180
|
}, [handleKeyPress]);
|
|
27157
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Tooltip, { title: "Filtros", children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { ref: menuRef, id: "filters-menu-trigger", "aria-controls": "filters-menu", "aria-haspopup": "true", "aria-expanded": open ?
|
|
27158
|
-
if (key.key ==
|
|
27181
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Tooltip, { title: "Filtros", children: jsxRuntime.jsx(xDataGrid.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) => {
|
|
27182
|
+
if (key.key == "Escape")
|
|
27159
27183
|
setOpen(false);
|
|
27160
|
-
}, className:
|
|
27184
|
+
}, className: "my-icon-button", children: jsxRuntime.jsx(material.Badge, { badgeContent: filterCount, color: "primary", children: jsxRuntime.jsx(FilterListIcon, { fontSize: "small" }) }) }) }), jsxRuntime.jsx(FiltersPopper, { ...props, menuRef: menuRef, open: open, setOpen: setOpen })] }));
|
|
27161
27185
|
};
|
|
27162
27186
|
|
|
27163
27187
|
const ExportCSV = (props) => {
|
|
@@ -27169,41 +27193,46 @@ const ExportCSV = (props) => {
|
|
|
27169
27193
|
const handleClick = () => {
|
|
27170
27194
|
const extraItems = { variant: props.slots?.variant };
|
|
27171
27195
|
if (props.rowSelectionModel.ids.size > 0)
|
|
27172
|
-
extraItems[`${props.slots?.column_key ||
|
|
27173
|
-
const filters = lodash.merge({}, lodash.omit(props.filterModel, lodash.map(props.ignore?.filters, function (filter) {
|
|
27196
|
+
extraItems[`${props.slots?.column_key || "id"}__in`] = Array.from(props.rowSelectionModel.ids).join(",");
|
|
27197
|
+
const filters = lodash.merge({}, lodash.omit(props.filterModel, lodash.map(props.ignore?.filters, function (filter) {
|
|
27198
|
+
return `items.${filter}`;
|
|
27199
|
+
}) || []), { items: extraItems });
|
|
27174
27200
|
descargarCSV({
|
|
27175
|
-
endpoint: endpoint,
|
|
27176
|
-
|
|
27201
|
+
endpoint: endpoint,
|
|
27202
|
+
filterModel: filters,
|
|
27203
|
+
sortModel: props.sortModel,
|
|
27204
|
+
ignoreSort: props.ignore?.sort,
|
|
27205
|
+
})
|
|
27206
|
+
.unwrap()
|
|
27177
27207
|
.then((response) => {
|
|
27178
27208
|
const file = document.createElement("a");
|
|
27179
27209
|
file.href = response.file;
|
|
27180
27210
|
file.download = response.filename;
|
|
27181
27211
|
file.click();
|
|
27182
|
-
notifications.show(
|
|
27212
|
+
notifications.show("CSV descargado!", { severity: "success" });
|
|
27183
27213
|
props.handleClick();
|
|
27184
27214
|
})
|
|
27185
27215
|
.catch((error) => {
|
|
27186
27216
|
console.log(error);
|
|
27187
|
-
notifications.show(
|
|
27217
|
+
notifications.show("Error al descargar CSV.", { severity: "error" });
|
|
27188
27218
|
});
|
|
27189
27219
|
};
|
|
27190
|
-
return (jsxRuntime.jsx(MenuItemWithLoading, { handleClick: handleClick, isLoading: isLoading, disabled: props.disabledWithoutSelection && !props.rowSelectionModel.ids.size, children: props.slots?.title ||
|
|
27220
|
+
return (jsxRuntime.jsx(MenuItemWithLoading, { handleClick: handleClick, isLoading: isLoading, disabled: props.disabledWithoutSelection && !props.rowSelectionModel.ids.size, children: props.slots?.title || "Descargar como CSV" }, "export-dg-csv"));
|
|
27191
27221
|
};
|
|
27192
27222
|
|
|
27193
27223
|
const ExportButton = (props) => {
|
|
27194
27224
|
const [exportMenuOpen, setExportMenuOpen] = React.useState(false);
|
|
27195
27225
|
const exportMenuTriggerRef = React.useRef(null);
|
|
27196
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.Tooltip, { title: "Exportar", children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { ref: exportMenuTriggerRef, id: "export-menu-trigger", "aria-controls": "export-menu", "aria-haspopup": "true", "aria-expanded": exportMenuOpen ?
|
|
27226
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.Tooltip, { title: "Exportar", children: jsxRuntime.jsx(xDataGrid.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: jsxRuntime.jsx(FileDownloadIcon, { fontSize: "small" }) }) }), jsxRuntime.jsxs(Menu, { id: "export-menu", anchorEl: exportMenuTriggerRef.current, open: exportMenuOpen, onClose: () => setExportMenuOpen(false), anchorOrigin: { vertical: "bottom", horizontal: "left" }, transformOrigin: { vertical: "top", horizontal: "left" }, slotProps: {
|
|
27197
27227
|
list: {
|
|
27198
|
-
|
|
27228
|
+
"aria-labelledby": "export-menu-trigger",
|
|
27199
27229
|
},
|
|
27200
|
-
}, children: [!props.csvProps?.hide &&
|
|
27201
|
-
|
|
27202
|
-
|
|
27203
|
-
} }), props.extraOptions?.map(item => {
|
|
27230
|
+
}, children: [!props.csvProps?.hide && (jsxRuntime.jsx(ExportCSV, { handleClick: () => setExportMenuOpen(false), filterModel: props.filterModel, sortModel: props.sortModel, rowSelectionModel: props.rowSelectionModel, slots: {
|
|
27231
|
+
endpoint: props.csvProps?.endpoint,
|
|
27232
|
+
} })), props.extraOptions?.map((item) => {
|
|
27204
27233
|
const csvExport = item.props.csvExport;
|
|
27205
|
-
const remainingProps = lodash.omit(item.props,
|
|
27206
|
-
return
|
|
27234
|
+
const remainingProps = lodash.omit(item.props, "csvExport");
|
|
27235
|
+
return item.element({
|
|
27207
27236
|
handleClick: () => setExportMenuOpen(false),
|
|
27208
27237
|
filterModel: props.filterModel,
|
|
27209
27238
|
sortModel: props.sortModel,
|
|
@@ -27212,7 +27241,7 @@ const ExportButton = (props) => {
|
|
|
27212
27241
|
...csvExport,
|
|
27213
27242
|
},
|
|
27214
27243
|
...remainingProps,
|
|
27215
|
-
})
|
|
27244
|
+
});
|
|
27216
27245
|
})] })] }));
|
|
27217
27246
|
};
|
|
27218
27247
|
|
|
@@ -27220,34 +27249,33 @@ const ColumnsButton = () => {
|
|
|
27220
27249
|
const apiRef = xDataGrid.useGridApiContext();
|
|
27221
27250
|
const allCols = apiRef.current.getAllColumns().length;
|
|
27222
27251
|
const visibleCols = apiRef.current.getVisibleColumns().length;
|
|
27223
|
-
return (jsxRuntime.jsx(material.Tooltip, { title: "Columnas", children: jsxRuntime.jsx(xDataGrid.ColumnsPanelTrigger, { render: jsxRuntime.jsx(xDataGrid.ToolbarButton, { className:
|
|
27252
|
+
return (jsxRuntime.jsx(material.Tooltip, { title: "Columnas", children: jsxRuntime.jsx(xDataGrid.ColumnsPanelTrigger, { render: jsxRuntime.jsx(xDataGrid.ToolbarButton, { className: "my-icon-button" }), children: jsxRuntime.jsx(material.Badge, { color: "primary", variant: "dot", invisible: visibleCols >= allCols, children: jsxRuntime.jsx(ViewColumnIcon, { fontSize: "small" }) }) }) }));
|
|
27224
27253
|
};
|
|
27225
27254
|
|
|
27226
27255
|
const RefreshButton = (props) => {
|
|
27227
27256
|
// ===== || EJECUTAR CON CTRL + Shift + R || ===== //
|
|
27228
27257
|
const handleKeyPress = React.useCallback((event) => {
|
|
27229
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27258
|
+
if (event.ctrlKey && event.shiftKey && event.key === "R") {
|
|
27230
27259
|
event.preventDefault();
|
|
27231
27260
|
if (props.refetch)
|
|
27232
27261
|
props.refetch();
|
|
27233
27262
|
}
|
|
27234
27263
|
}, [props]);
|
|
27235
27264
|
React.useEffect(() => {
|
|
27236
|
-
document.addEventListener(
|
|
27265
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27237
27266
|
return () => {
|
|
27238
|
-
document.removeEventListener(
|
|
27267
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27239
27268
|
};
|
|
27240
27269
|
}, [handleKeyPress]);
|
|
27241
|
-
return (jsxRuntime.jsx(Tooltip, { title:
|
|
27270
|
+
return (jsxRuntime.jsx(Tooltip, { title: "Refrescar", children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { onClick: props.refetch, children: jsxRuntime.jsx(RefreshIcon, { fontSize: "small" }) }) }));
|
|
27242
27271
|
};
|
|
27243
27272
|
|
|
27244
27273
|
const CustomToolbar = (props) => {
|
|
27245
27274
|
const [expanded, setExpanded] = React.useState(true);
|
|
27246
27275
|
return (jsxRuntime.jsx(xDataGrid.Toolbar, { style: {
|
|
27247
|
-
minHeight: expanded ?
|
|
27248
|
-
}, children: expanded ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(material.Stack, { direction:
|
|
27249
|
-
jsxRuntime.jsxs(
|
|
27250
|
-
props.extraButtons.map((button, index) => (jsxRuntime.jsxs(material.Box, { display: 'flex', children: [jsxRuntime.jsx(material.Divider, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsxRuntime.jsx(Tooltip, { title: button.label, children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { onClick: () => button.onClick(), className: 'my-icon-button', ...button.buttonProps, children: jsxRuntime.jsx(button.icon, { fontSize: "small" }) }) })] }, `toolbar-button-${index}`))), jsxRuntime.jsx(SelectedRowsButton, { selection: props.selection, extraActions: props.extraActions })] })] })) : (jsxRuntime.jsx(material.Box, { width: 1, display: 'flex', justifyContent: 'center', alignItems: 'center', children: jsxRuntime.jsx(material.IconButton, { onClick: () => setExpanded(true), children: jsxRuntime.jsx(ExpandMoreIcon, {}) }) })) }));
|
|
27276
|
+
minHeight: expanded ? "inherit" : "10px",
|
|
27277
|
+
}, children: expanded ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(material.Stack, { direction: "row", width: 0.5, justifyContent: "left", children: [!props.buttons?.refresh?.hide && (jsxRuntime.jsx(RefreshButton, { refetch: props.buttons?.refresh?.refetch })), !(props.buttons?.refresh?.hide || props.buttons?.export?.hide) && (jsxRuntime.jsx(material.Divider, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } })), !props.buttons?.export?.hide && (jsxRuntime.jsx(ExportButton, { filterModel: props.filters.filterModel, sortModel: props.sortModel, rowSelectionModel: props.selection, ...props.buttons.export }))] }), jsxRuntime.jsx(material.Box, { width: 1, display: "flex", justifyContent: "center", alignItems: "top", children: jsxRuntime.jsx(material.IconButton, { size: "small", onClick: () => setExpanded(false), children: jsxRuntime.jsx(ExpandLessIcon, {}) }) }), jsxRuntime.jsxs(material.Stack, { direction: "row", width: 0.5, justifyContent: "right", children: [jsxRuntime.jsx(ColumnsButton, {}), !props.buttons.filters?.hide && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.Divider, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsxRuntime.jsx(FiltersButton, { ...props })] })), jsxRuntime.jsx(material.Divider, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsxRuntime.jsx(QuickSearch, { disableQuickSearch: props.disableQuickSearch, filters: props.filters }), props.extraButtons &&
|
|
27278
|
+
props.extraButtons.map((button, index) => (jsxRuntime.jsxs(material.Box, { display: "flex", children: [jsxRuntime.jsx(material.Divider, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsxRuntime.jsx(Tooltip, { title: button.label, children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { onClick: () => button.onClick(), className: "my-icon-button", ...button.buttonProps, children: jsxRuntime.jsx(button.icon, { fontSize: "small" }) }) })] }, `toolbar-button-${index}`))), jsxRuntime.jsx(SelectedRowsButton, { selection: props.selection, extraActions: props.extraActions })] })] })) : (jsxRuntime.jsx(material.Box, { width: 1, display: "flex", justifyContent: "center", alignItems: "center", children: jsxRuntime.jsx(material.IconButton, { onClick: () => setExpanded(true), children: jsxRuntime.jsx(ExpandMoreIcon, {}) }) })) }));
|
|
27251
27279
|
};
|
|
27252
27280
|
|
|
27253
27281
|
const StyledGridOverlay = material.styled('div')(({ theme }) => ({
|
|
@@ -27285,20 +27313,22 @@ function CustomPagination() {
|
|
|
27285
27313
|
}
|
|
27286
27314
|
|
|
27287
27315
|
const DraggableRow = (params) => {
|
|
27288
|
-
const { attributes, listeners, setNodeRef, transform, transition
|
|
27316
|
+
const { attributes, listeners, setNodeRef, transform, transition } = sortable.useSortable({
|
|
27317
|
+
id: params.rowId.toString(),
|
|
27318
|
+
});
|
|
27289
27319
|
const style = {
|
|
27290
27320
|
transform: utilities.CSS.Transform.toString(transform),
|
|
27291
|
-
transition
|
|
27321
|
+
transition,
|
|
27292
27322
|
};
|
|
27293
|
-
return (jsxRuntime.jsxs(material.Box, { display:
|
|
27294
|
-
width:
|
|
27323
|
+
return (jsxRuntime.jsxs(material.Box, { display: "flex", ref: setNodeRef, style: style, children: [jsxRuntime.jsx(material.Box, { ...attributes, ...listeners, sx: {
|
|
27324
|
+
width: "20px",
|
|
27295
27325
|
height: params.rowHeight,
|
|
27296
|
-
background:
|
|
27297
|
-
borderTop:
|
|
27298
|
-
cursor:
|
|
27299
|
-
|
|
27300
|
-
cursor:
|
|
27301
|
-
}
|
|
27326
|
+
background: "repeating-linear-gradient( 45deg, #e0e0e0, #e0e0e0 5px, transparent 5px, transparent 10px)",
|
|
27327
|
+
borderTop: "1px solid rgba(224, 224, 224, 1)",
|
|
27328
|
+
cursor: "grab",
|
|
27329
|
+
"&:active": {
|
|
27330
|
+
cursor: "grabbing",
|
|
27331
|
+
},
|
|
27302
27332
|
} }), jsxRuntime.jsx(xDataGrid.GridRow, { ...params })] }));
|
|
27303
27333
|
};
|
|
27304
27334
|
|
|
@@ -27315,38 +27345,42 @@ const EditGridWrapper = (props) => {
|
|
|
27315
27345
|
const handleClickEdit = () => {
|
|
27316
27346
|
if (edit)
|
|
27317
27347
|
handleCancelarEdit();
|
|
27318
|
-
setEdit(prevState => !prevState);
|
|
27348
|
+
setEdit((prevState) => !prevState);
|
|
27319
27349
|
};
|
|
27320
27350
|
const processRowUpdate = async (newRow, originalRow) => {
|
|
27321
27351
|
const original_data = jsonForm({ submitData: originalRow });
|
|
27322
|
-
const data = jsonForm({
|
|
27352
|
+
const data = jsonForm({
|
|
27353
|
+
submitData: newRow,
|
|
27354
|
+
...(props.parser ? { props: props.parser } : []),
|
|
27355
|
+
});
|
|
27323
27356
|
if (lodash.isEqual(data, original_data))
|
|
27324
27357
|
return originalRow;
|
|
27325
27358
|
try {
|
|
27326
27359
|
const result = await editMutation(data).unwrap();
|
|
27327
|
-
setErrors(prevState => immer.produce(prevState, draft => {
|
|
27360
|
+
setErrors((prevState) => immer.produce(prevState, (draft) => {
|
|
27328
27361
|
delete draft[newRow.id];
|
|
27329
27362
|
}));
|
|
27330
27363
|
if (props?.postAction)
|
|
27331
27364
|
props.postAction(result);
|
|
27332
|
-
notifications.show(`Información actualizada!`, { severity:
|
|
27365
|
+
notifications.show(`Información actualizada!`, { severity: "success" });
|
|
27333
27366
|
return result.list;
|
|
27334
27367
|
}
|
|
27335
27368
|
catch (e) {
|
|
27336
|
-
setErrors(prevState => immer.produce(prevState, draft => {
|
|
27337
|
-
draft[newRow.id] = lodash.get(e,
|
|
27369
|
+
setErrors((prevState) => immer.produce(prevState, (draft) => {
|
|
27370
|
+
draft[newRow.id] = lodash.get(e, "data.invalid_params");
|
|
27338
27371
|
}));
|
|
27339
|
-
notifications.show(
|
|
27372
|
+
notifications.show("Error actualizando información!", { severity: "error" });
|
|
27340
27373
|
}
|
|
27341
27374
|
};
|
|
27375
|
+
const handleProcessRowUpdateError = () => { };
|
|
27342
27376
|
// ===== || KEYDOWN || ===== //
|
|
27343
27377
|
const handleKeyPress = React.useCallback((event) => {
|
|
27344
27378
|
if (props.permission) {
|
|
27345
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27379
|
+
if (event.ctrlKey && event.shiftKey && event.key === "E") {
|
|
27346
27380
|
event.preventDefault();
|
|
27347
27381
|
setEdit(true);
|
|
27348
27382
|
}
|
|
27349
|
-
else if (event.key ===
|
|
27383
|
+
else if (event.key === "Escape" && event.shiftKey && edit) {
|
|
27350
27384
|
event.preventDefault();
|
|
27351
27385
|
handleCancelarEdit();
|
|
27352
27386
|
setEdit(false);
|
|
@@ -27354,9 +27388,9 @@ const EditGridWrapper = (props) => {
|
|
|
27354
27388
|
}
|
|
27355
27389
|
}, [edit, props.permission]);
|
|
27356
27390
|
React.useEffect(() => {
|
|
27357
|
-
document.addEventListener(
|
|
27391
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27358
27392
|
return () => {
|
|
27359
|
-
document.removeEventListener(
|
|
27393
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27360
27394
|
};
|
|
27361
27395
|
}, [handleKeyPress]);
|
|
27362
27396
|
// ========================= || DRAG N DROP || ========================= //
|
|
@@ -27373,7 +27407,10 @@ const EditGridWrapper = (props) => {
|
|
|
27373
27407
|
if (over) {
|
|
27374
27408
|
const activeRow = rows.find((row) => row.id == active.id);
|
|
27375
27409
|
const overRow = rows.find((row) => row.id == over.id);
|
|
27376
|
-
const mutationArgs = {
|
|
27410
|
+
const mutationArgs = {
|
|
27411
|
+
...props.dnd?.args,
|
|
27412
|
+
id: activeRow.id,
|
|
27413
|
+
};
|
|
27377
27414
|
mutationArgs[field] = lodash.get(overRow, field);
|
|
27378
27415
|
editMutation(mutationArgs);
|
|
27379
27416
|
}
|
|
@@ -27391,33 +27428,38 @@ const EditGridWrapper = (props) => {
|
|
|
27391
27428
|
slotProps: {
|
|
27392
27429
|
toolbar: {
|
|
27393
27430
|
extraButtons: [
|
|
27394
|
-
...(props.permission && !props.disabled
|
|
27395
|
-
|
|
27396
|
-
|
|
27397
|
-
|
|
27398
|
-
|
|
27399
|
-
|
|
27400
|
-
|
|
27431
|
+
...(props.permission && !props.disabled
|
|
27432
|
+
? [
|
|
27433
|
+
{
|
|
27434
|
+
label: edit ? "Cancelar" : "Editar",
|
|
27435
|
+
icon: edit ? CancelIcon : EditIcon,
|
|
27436
|
+
onClick: handleClickEdit,
|
|
27437
|
+
},
|
|
27438
|
+
]
|
|
27439
|
+
: []),
|
|
27440
|
+
],
|
|
27441
|
+
},
|
|
27401
27442
|
},
|
|
27402
27443
|
onRowEditStart: ({ reason, row }, event) => {
|
|
27403
|
-
if (!lodash.get(row, `obj_permissions.edit`) ||
|
|
27444
|
+
if (!lodash.get(row, `obj_permissions.edit`) ||
|
|
27445
|
+
(reason === xDataGrid.GridRowEditStartReasons.cellDoubleClick && !edit)) {
|
|
27404
27446
|
event.defaultMuiPrevented = true;
|
|
27405
27447
|
}
|
|
27406
27448
|
},
|
|
27407
27449
|
// edit
|
|
27408
27450
|
checkboxSelection: !edit,
|
|
27409
27451
|
...(edit ? { onRowClick: undefined } : []),
|
|
27410
|
-
editMode:
|
|
27452
|
+
editMode: "row",
|
|
27411
27453
|
rowModesModel: rowModesModel,
|
|
27412
27454
|
onRowModesModelChange: setRowModesModel,
|
|
27413
27455
|
processRowUpdate: processRowUpdate,
|
|
27456
|
+
onProcessRowUpdateError: handleProcessRowUpdateError,
|
|
27414
27457
|
loadingParams: [loadingMutation],
|
|
27415
27458
|
}, props.dataGridProps);
|
|
27416
|
-
const renderEditGrid = () => (jsxRuntime.jsx(core$1.DndContext, { sensors: sensors, collisionDetection: core$1.closestCenter, onDragEnd: handleDragEnd, modifiers: [
|
|
27417
|
-
|
|
27418
|
-
|
|
27419
|
-
|
|
27420
|
-
], autoScroll: false, children: jsxRuntime.jsx(sortable.SortableContext, { items: rows ? rows.map((row) => row.id.toString()) : [], strategy: sortable.verticalListSortingStrategy, children: props.renderFunction({ ...props.renderFunctionProps, dataGridProps: editGridProps }) }) }));
|
|
27459
|
+
const renderEditGrid = () => (jsxRuntime.jsx(core$1.DndContext, { sensors: sensors, collisionDetection: core$1.closestCenter, onDragEnd: handleDragEnd, modifiers: [modifiers.restrictToVerticalAxis, modifiers.restrictToWindowEdges, modifiers.restrictToParentElement], autoScroll: false, children: jsxRuntime.jsx(sortable.SortableContext, { items: rows ? rows.map((row) => row.id.toString()) : [], strategy: sortable.verticalListSortingStrategy, children: props.renderFunction({
|
|
27460
|
+
...props.renderFunctionProps,
|
|
27461
|
+
dataGridProps: editGridProps,
|
|
27462
|
+
}) }) }));
|
|
27421
27463
|
return renderEditGrid();
|
|
27422
27464
|
};
|
|
27423
27465
|
|
|
@@ -27438,43 +27480,47 @@ const editColumn = (props) => {
|
|
|
27438
27480
|
[id]: { mode: xDataGrid.GridRowModes.View, ignoreModifications: true },
|
|
27439
27481
|
});
|
|
27440
27482
|
};
|
|
27441
|
-
return [
|
|
27442
|
-
|
|
27443
|
-
|
|
27444
|
-
|
|
27483
|
+
return [
|
|
27484
|
+
{
|
|
27485
|
+
field: "edit",
|
|
27486
|
+
headerName: "Editar",
|
|
27487
|
+
type: "actions",
|
|
27445
27488
|
width: 80,
|
|
27446
|
-
cellClassName:
|
|
27489
|
+
cellClassName: "actions",
|
|
27447
27490
|
getActions: ({ id, row }) => {
|
|
27448
|
-
const canEdit = get(row,
|
|
27491
|
+
const canEdit = get(row, "obj_permissions.edit");
|
|
27449
27492
|
const isInEditMode = props.rowModesModel[id]?.mode === xDataGrid.GridRowModes.Edit;
|
|
27450
27493
|
if (isInEditMode) {
|
|
27451
27494
|
return [
|
|
27452
|
-
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(SaveIcon, {}), label:
|
|
27453
|
-
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(CancelIcon, {}), label:
|
|
27495
|
+
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(SaveIcon, {}), label: "Guardar", color: "primary", onClick: handleSaveClick(id) }, "save"),
|
|
27496
|
+
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(CancelIcon, {}), label: "Cancelar", className: "textPrimary", onClick: handleCancelClick(id), color: "inherit" }, "cancel"),
|
|
27454
27497
|
];
|
|
27455
27498
|
}
|
|
27456
27499
|
return [
|
|
27457
|
-
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(EditIcon, { sx: { color: canEdit ?
|
|
27500
|
+
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(EditIcon, { sx: { color: canEdit ? "black" : "inherit" } }), label: "Editar", className: "textPrimary", onClick: handleEditClick(id), disabled: !canEdit }, "edit"),
|
|
27458
27501
|
];
|
|
27459
|
-
}
|
|
27460
|
-
}
|
|
27502
|
+
},
|
|
27503
|
+
},
|
|
27504
|
+
];
|
|
27461
27505
|
};
|
|
27462
27506
|
|
|
27463
27507
|
const deleteColumn = (props) => {
|
|
27464
27508
|
if (!props.displayDelete)
|
|
27465
27509
|
return [];
|
|
27466
|
-
return [
|
|
27467
|
-
|
|
27468
|
-
|
|
27510
|
+
return [
|
|
27511
|
+
{
|
|
27512
|
+
field: "delete",
|
|
27513
|
+
headerName: "Eliminar",
|
|
27469
27514
|
width: 80,
|
|
27470
|
-
cellClassName:
|
|
27515
|
+
cellClassName: "actions",
|
|
27471
27516
|
renderCell: ({ id, row }) => {
|
|
27472
27517
|
const canDelete = get(row, `obj_permissions.delete`, false);
|
|
27473
27518
|
return [
|
|
27474
|
-
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(DeleteIcon, {}), label:
|
|
27519
|
+
jsxRuntime.jsx(xDataGrid.GridActionsCellItem, { icon: jsxRuntime.jsx(DeleteIcon, {}), label: "Eliminar", className: "textPrimary", onClick: props.handleOpen(id), color: "primary", disabled: !canDelete }, "delete"),
|
|
27475
27520
|
];
|
|
27476
|
-
}
|
|
27477
|
-
}
|
|
27521
|
+
},
|
|
27522
|
+
},
|
|
27523
|
+
];
|
|
27478
27524
|
};
|
|
27479
27525
|
|
|
27480
27526
|
const DeleteGridWrapper = (props) => {
|
|
@@ -27488,25 +27534,25 @@ const DeleteGridWrapper = (props) => {
|
|
|
27488
27534
|
setDeleteRowId(undefined);
|
|
27489
27535
|
};
|
|
27490
27536
|
const handleClickDelete = () => {
|
|
27491
|
-
setDeleting(prevState => !prevState);
|
|
27537
|
+
setDeleting((prevState) => !prevState);
|
|
27492
27538
|
};
|
|
27493
27539
|
// ===== || KEYDOWN || ===== //
|
|
27494
27540
|
const handleKeyPress = React.useCallback((event) => {
|
|
27495
27541
|
if (props.permission) {
|
|
27496
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27542
|
+
if (event.ctrlKey && event.shiftKey && event.key === "D") {
|
|
27497
27543
|
event.preventDefault();
|
|
27498
27544
|
setDeleting(true);
|
|
27499
27545
|
}
|
|
27500
|
-
else if (event.key ===
|
|
27546
|
+
else if (event.key === "Escape" && event.shiftKey && deleting) {
|
|
27501
27547
|
event.preventDefault();
|
|
27502
27548
|
setDeleting(false);
|
|
27503
27549
|
}
|
|
27504
27550
|
}
|
|
27505
27551
|
}, [props.permission, deleting]);
|
|
27506
27552
|
React.useEffect(() => {
|
|
27507
|
-
document.addEventListener(
|
|
27553
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27508
27554
|
return () => {
|
|
27509
|
-
document.removeEventListener(
|
|
27555
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27510
27556
|
};
|
|
27511
27557
|
}, [handleKeyPress]);
|
|
27512
27558
|
// ===== || GRID PROPS || ===== //
|
|
@@ -27520,20 +27566,23 @@ const DeleteGridWrapper = (props) => {
|
|
|
27520
27566
|
slotProps: {
|
|
27521
27567
|
toolbar: {
|
|
27522
27568
|
extraButtons: [
|
|
27523
|
-
...(props.permission
|
|
27524
|
-
|
|
27525
|
-
|
|
27526
|
-
|
|
27527
|
-
|
|
27528
|
-
|
|
27529
|
-
|
|
27569
|
+
...(props.permission
|
|
27570
|
+
? [
|
|
27571
|
+
{
|
|
27572
|
+
label: deleting ? "Cancelar" : "Eliminar",
|
|
27573
|
+
icon: deleting ? CancelIcon : DeleteIcon,
|
|
27574
|
+
onClick: handleClickDelete,
|
|
27575
|
+
},
|
|
27576
|
+
]
|
|
27577
|
+
: []),
|
|
27578
|
+
],
|
|
27579
|
+
},
|
|
27530
27580
|
},
|
|
27531
27581
|
// edit
|
|
27532
27582
|
checkboxSelection: !deleting,
|
|
27533
27583
|
...(deleting ? { onRowClick: undefined } : []),
|
|
27534
27584
|
}, props.dataGridProps);
|
|
27535
|
-
const renderDeleteGrid = () => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [props.mutation &&
|
|
27536
|
-
jsxRuntime.jsx(DeleteConfirmationDialog, { mutation: props.mutation, open: !!deleteRowId, handleClose: handleClose, id: deleteRowId, disableNavBack: true }), props.renderFunction({ ...props.renderFunctionProps, dataGridProps: deleteGridProps })] }));
|
|
27585
|
+
const renderDeleteGrid = () => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [props.mutation && (jsxRuntime.jsx(DeleteConfirmationDialog, { mutation: props.mutation, open: !!deleteRowId, handleClose: handleClose, id: deleteRowId, disableNavBack: true })), props.renderFunction({ ...props.renderFunctionProps, dataGridProps: deleteGridProps })] }));
|
|
27537
27586
|
return renderDeleteGrid();
|
|
27538
27587
|
};
|
|
27539
27588
|
|
|
@@ -27542,7 +27591,7 @@ const CreateGridWrapper = (props) => {
|
|
|
27542
27591
|
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
27543
27592
|
const open = Boolean(anchorEl);
|
|
27544
27593
|
const handleClick = () => {
|
|
27545
|
-
setAnchorEl(document.getElementById(
|
|
27594
|
+
setAnchorEl(document.getElementById("create-button"));
|
|
27546
27595
|
};
|
|
27547
27596
|
const handleClose = () => {
|
|
27548
27597
|
setAnchorEl(null);
|
|
@@ -27557,51 +27606,56 @@ const CreateGridWrapper = (props) => {
|
|
|
27557
27606
|
// ===== || KEYDOWN || ===== //
|
|
27558
27607
|
const handleKeyPress = React.useCallback((event) => {
|
|
27559
27608
|
if (props.permission) {
|
|
27560
|
-
if (event.ctrlKey && event.key ===
|
|
27609
|
+
if (event.ctrlKey && event.key === "e") {
|
|
27561
27610
|
event.preventDefault();
|
|
27562
27611
|
handleClick();
|
|
27563
27612
|
}
|
|
27564
27613
|
}
|
|
27565
27614
|
}, [props.permission]);
|
|
27566
27615
|
React.useEffect(() => {
|
|
27567
|
-
document.addEventListener(
|
|
27616
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27568
27617
|
return () => {
|
|
27569
|
-
document.removeEventListener(
|
|
27618
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27570
27619
|
};
|
|
27571
27620
|
}, [handleKeyPress]);
|
|
27572
27621
|
const createGridProps = mergeSettings({
|
|
27573
27622
|
slotProps: {
|
|
27574
27623
|
toolbar: {
|
|
27575
27624
|
extraButtons: [
|
|
27576
|
-
...(props.permission
|
|
27577
|
-
|
|
27578
|
-
|
|
27579
|
-
|
|
27580
|
-
|
|
27581
|
-
|
|
27582
|
-
|
|
27583
|
-
|
|
27584
|
-
|
|
27585
|
-
|
|
27625
|
+
...(props.permission
|
|
27626
|
+
? [
|
|
27627
|
+
{
|
|
27628
|
+
label: "Crear",
|
|
27629
|
+
icon: AddIcon,
|
|
27630
|
+
onClick: handleClick,
|
|
27631
|
+
buttonProps: {
|
|
27632
|
+
id: "create-button",
|
|
27633
|
+
},
|
|
27634
|
+
},
|
|
27635
|
+
]
|
|
27636
|
+
: []),
|
|
27637
|
+
],
|
|
27638
|
+
},
|
|
27586
27639
|
},
|
|
27587
27640
|
}, props.dataGridProps);
|
|
27588
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(StyledMenu, { id:
|
|
27589
|
-
|
|
27590
|
-
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
27591
|
-
|
|
27592
|
-
|
|
27593
|
-
|
|
27594
|
-
|
|
27595
|
-
|
|
27596
|
-
|
|
27597
|
-
|
|
27598
|
-
|
|
27599
|
-
|
|
27600
|
-
|
|
27601
|
-
|
|
27641
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(StyledMenu, { id: "create-menu", MenuListProps: {
|
|
27642
|
+
"aria-labelledby": "create-menu-button",
|
|
27643
|
+
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
27644
|
+
[
|
|
27645
|
+
{
|
|
27646
|
+
title: "CSV",
|
|
27647
|
+
endpoint: props.pathname,
|
|
27648
|
+
},
|
|
27649
|
+
...(props.csv_upload.extraOptions || []),
|
|
27650
|
+
].map((option, index) => {
|
|
27651
|
+
return (jsxRuntime.jsxs(MenuItem, { onClick: () => {
|
|
27652
|
+
handleToggleOpen(option);
|
|
27653
|
+
handleClose();
|
|
27654
|
+
}, disableRipple: true, children: [jsxRuntime.jsx(material.ListItemIcon, { children: jsxRuntime.jsx(AttachFileIcon, { sx: { transform: "rotate(90deg)" } }) }), option.title] }, index));
|
|
27655
|
+
}), jsxRuntime.jsxs(MenuItem, { onClick: () => {
|
|
27602
27656
|
navigate(props.navigation ? `${props.navigation}crear` : `crear`);
|
|
27603
27657
|
handleClose();
|
|
27604
|
-
}, disableRipple: true, children: "Manual" })] }), props.csv_upload?.enable && (jsxRuntime.jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data })), props.renderFunction({ dataGridProps: createGridProps })] }));
|
|
27658
|
+
}, disableRipple: true, children: [jsxRuntime.jsx(material.ListItemIcon, { children: jsxRuntime.jsx(DrawIcon, {}) }), "Manual"] })] }), props.csv_upload?.enable && (jsxRuntime.jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data })), props.renderFunction({ dataGridProps: createGridProps })] }));
|
|
27605
27659
|
};
|
|
27606
27660
|
|
|
27607
27661
|
const Base = (props) => {
|
|
@@ -27858,13 +27912,13 @@ const ActiveCell = ({ value }) => {
|
|
|
27858
27912
|
}, [value]);
|
|
27859
27913
|
const renderIcon = React.useCallback(() => {
|
|
27860
27914
|
const iconProps = {
|
|
27861
|
-
size:
|
|
27915
|
+
size: "small",
|
|
27862
27916
|
sx: {
|
|
27863
27917
|
color: color[700],
|
|
27864
|
-
fontSize:
|
|
27918
|
+
fontSize: "30px",
|
|
27865
27919
|
stroke: color[700],
|
|
27866
|
-
strokeWidth: 1.5
|
|
27867
|
-
}
|
|
27920
|
+
strokeWidth: 1.5,
|
|
27921
|
+
},
|
|
27868
27922
|
};
|
|
27869
27923
|
switch (value) {
|
|
27870
27924
|
case true:
|
|
@@ -27875,7 +27929,7 @@ const ActiveCell = ({ value }) => {
|
|
|
27875
27929
|
return jsxRuntime.jsx(ErrorOutlineIcon, { ...iconProps });
|
|
27876
27930
|
}
|
|
27877
27931
|
}, [color, value]);
|
|
27878
|
-
return (jsxRuntime.jsx(material.Box, { px: 2, py: 0.5, display:
|
|
27932
|
+
return (jsxRuntime.jsx(material.Box, { px: 2, py: 0.5, display: "flex", alignItems: "center", justifyContent: "center", borderRadius: 2, borderColor: color[900], children: renderIcon() }));
|
|
27879
27933
|
};
|
|
27880
27934
|
|
|
27881
27935
|
const MyGridEditSingleSelect = (props) => {
|
|
@@ -27890,7 +27944,7 @@ const MyGridEditSingleSelect = (props) => {
|
|
|
27890
27944
|
} }));
|
|
27891
27945
|
};
|
|
27892
27946
|
|
|
27893
|
-
const StyledTooltip = material.styled(({ className, ...props }) => (jsxRuntime.jsx(material.Tooltip, { ...props, placement:
|
|
27947
|
+
const StyledTooltip = material.styled(({ className, ...props }) => (jsxRuntime.jsx(material.Tooltip, { ...props, placement: "top", classes: { popper: className } })))(({ theme }) => ({
|
|
27894
27948
|
[`& .${material.tooltipClasses.tooltip}`]: {
|
|
27895
27949
|
backgroundColor: theme.palette.error.main,
|
|
27896
27950
|
color: theme.palette.error.contrastText,
|
|
@@ -27900,27 +27954,29 @@ const EditCellWithErrorTooltip = (props) => {
|
|
|
27900
27954
|
const { error } = props;
|
|
27901
27955
|
const renderCell = () => {
|
|
27902
27956
|
switch (props.colDef.type) {
|
|
27903
|
-
case
|
|
27957
|
+
case "boolean":
|
|
27904
27958
|
return jsxRuntime.jsx(xDataGrid.GridEditBooleanCell, { ...props });
|
|
27905
|
-
case
|
|
27959
|
+
case "singleSelect":
|
|
27906
27960
|
return jsxRuntime.jsx(MyGridEditSingleSelect, { ...props });
|
|
27907
27961
|
default:
|
|
27908
|
-
return jsxRuntime.jsx(xDataGrid.GridEditInputCell, { ...props, slotProps: {
|
|
27962
|
+
return (jsxRuntime.jsx(xDataGrid.GridEditInputCell, { ...props, slotProps: {
|
|
27909
27963
|
root: {
|
|
27910
27964
|
onFocus: (e) => {
|
|
27911
|
-
if (props.field ==
|
|
27965
|
+
if (props.field == "cotizacion__total")
|
|
27912
27966
|
return e.target.select();
|
|
27913
27967
|
},
|
|
27914
|
-
}
|
|
27915
|
-
} });
|
|
27968
|
+
},
|
|
27969
|
+
} }));
|
|
27916
27970
|
}
|
|
27917
27971
|
};
|
|
27918
|
-
return (jsxRuntime.jsx(StyledTooltip, { open: !!error, title: error, children: renderCell() }));
|
|
27972
|
+
return (jsxRuntime.jsx(StyledTooltip, { open: !!error, title: error?.reason.join(", "), children: jsxRuntime.jsx("div", { style: { display: "flex" }, children: renderCell() }) }));
|
|
27919
27973
|
};
|
|
27920
27974
|
|
|
27921
27975
|
function renderEditCellWithErrorTooltip(params, mutationErrors, path) {
|
|
27922
|
-
const
|
|
27923
|
-
|
|
27976
|
+
const error = lodash.find(lodash.get(mutationErrors, params.id), function (e) {
|
|
27977
|
+
return e.name == (path || params.field);
|
|
27978
|
+
});
|
|
27979
|
+
return jsxRuntime.jsx(EditCellWithErrorTooltip, { ...params, error: error });
|
|
27924
27980
|
}
|
|
27925
27981
|
|
|
27926
27982
|
const CoverPage = (props) => {
|
|
@@ -28037,34 +28093,38 @@ const Field = (props) => {
|
|
|
28037
28093
|
return true;
|
|
28038
28094
|
}, [props.data, props.dependantOn]);
|
|
28039
28095
|
const renderField = React.useCallback(() => {
|
|
28040
|
-
if (!props.pageType || props.pageType ==
|
|
28096
|
+
if (!props.pageType || props.pageType == "list")
|
|
28041
28097
|
return;
|
|
28042
|
-
if (props.pageType ==
|
|
28098
|
+
if (props.pageType == "detail")
|
|
28043
28099
|
return jsxRuntime.jsx(DetailField, { ...props });
|
|
28044
28100
|
else
|
|
28045
28101
|
return jsxRuntime.jsx(EditField, { ...props });
|
|
28046
28102
|
}, [props]);
|
|
28047
28103
|
if (!show)
|
|
28048
28104
|
return;
|
|
28049
|
-
return (jsxRuntime.jsxs(material.Grid, { rowSpacing: 1, container: true, size: "grow", direction:
|
|
28105
|
+
return (jsxRuntime.jsxs(material.Grid, { rowSpacing: 1, container: true, size: "grow", direction: "column", ...props.gridProps, children: [jsxRuntime.jsx(material.Grid, { size: 12, children: jsxRuntime.jsx(material.Typography, { variant: "body1", fontWeight: "bold", children: props.label }) }), jsxRuntime.jsx(material.Grid, { size: 12, children: renderField() })] }));
|
|
28050
28106
|
};
|
|
28051
28107
|
|
|
28052
28108
|
const EditToolbar = (props) => {
|
|
28053
|
-
return (jsxRuntime.jsxs(xDataGrid.Toolbar, { children: [props.pageType !=
|
|
28054
|
-
jsxRuntime.jsx(Tooltip, { title: 'Crear', children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { onClick: props.handleCreate, children: jsxRuntime.jsx(AddIcon, { fontSize: "small" }) }) }), !!props.selected &&
|
|
28055
|
-
jsxRuntime.jsx(Tooltip, { title: 'Borrar', children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { onClick: props.handleDelete, children: jsxRuntime.jsx(DeleteIcon, { fontSize: "small" }) }) })] }));
|
|
28109
|
+
return (jsxRuntime.jsxs(xDataGrid.Toolbar, { children: [props.pageType != "detail" && (jsxRuntime.jsx(Tooltip, { title: "Crear", children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { onClick: props.handleCreate, children: jsxRuntime.jsx(AddIcon, { fontSize: "small" }) }) })), !!props.selected && (jsxRuntime.jsx(Tooltip, { title: "Borrar", children: jsxRuntime.jsx(xDataGrid.ToolbarButton, { onClick: props.handleDelete, children: jsxRuntime.jsx(DeleteIcon, { fontSize: "small" }) }) }))] }));
|
|
28056
28110
|
};
|
|
28057
28111
|
const FieldArrayField = (props) => {
|
|
28058
28112
|
const { fields, remove } = reactHookForm.useFieldArray({
|
|
28059
28113
|
control: props.form.control,
|
|
28060
28114
|
name: props.name,
|
|
28061
|
-
keyName:
|
|
28115
|
+
keyName: "_id",
|
|
28116
|
+
});
|
|
28117
|
+
const [drawer, setDrawer] = React.useState({
|
|
28118
|
+
open: false,
|
|
28119
|
+
data: undefined,
|
|
28062
28120
|
});
|
|
28063
|
-
const [
|
|
28064
|
-
|
|
28065
|
-
|
|
28121
|
+
const [rowSelectionModel, setRowSelectionModel] = React.useState({
|
|
28122
|
+
type: "include",
|
|
28123
|
+
ids: new Set(),
|
|
28124
|
+
});
|
|
28125
|
+
const getIndex = React.useCallback((id) => lodash.findIndex(fields, function (field) {
|
|
28066
28126
|
return field._id == id;
|
|
28067
|
-
})
|
|
28127
|
+
}), [fields]);
|
|
28068
28128
|
const handleCreate = () => {
|
|
28069
28129
|
setDrawer({ open: true, data: undefined });
|
|
28070
28130
|
};
|
|
@@ -28087,7 +28147,7 @@ const FieldArrayField = (props) => {
|
|
|
28087
28147
|
const handleRowClick = (e) => {
|
|
28088
28148
|
setDrawer({ open: true, data: e.row });
|
|
28089
28149
|
};
|
|
28090
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(material.Grid, { rowSpacing: 1, container: true, size: "grow", direction:
|
|
28150
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(material.Grid, { rowSpacing: 1, container: true, size: "grow", direction: "column", ...props.gridProps, children: [jsxRuntime.jsx(material.Grid, { size: 12, children: jsxRuntime.jsx(material.Typography, { variant: "body1", fontWeight: "bold", children: props.label }) }), jsxRuntime.jsx(material.Grid, { size: 12, children: jsxRuntime.jsx(xDataGrid.DataGrid, { ...props.dataGridProps, rows: fields, checkboxSelection: props.pageType != "detail", onRowSelectionModelChange: (newRowSelectionModel) => {
|
|
28091
28151
|
setRowSelectionModel(newRowSelectionModel);
|
|
28092
28152
|
}, showToolbar: true, slots: { toolbar: EditToolbar }, slotProps: {
|
|
28093
28153
|
toolbar: {
|
|
@@ -28096,7 +28156,7 @@ const FieldArrayField = (props) => {
|
|
|
28096
28156
|
handleDelete: handleDelete,
|
|
28097
28157
|
pageType: props.pageType,
|
|
28098
28158
|
},
|
|
28099
|
-
}, disableRowSelectionOnClick: true, onRowClick: handleRowClick, getRowId: (row) => row._id }) })] }), jsxRuntime.jsx(MainDrawer, { open: drawer.open, drawerToggle: closeDrawer, title:
|
|
28159
|
+
}, disableRowSelectionOnClick: true, onRowClick: handleRowClick, getRowId: (row) => row._id }) })] }), jsxRuntime.jsx(MainDrawer, { open: drawer.open, drawerToggle: closeDrawer, title: "Cargo Adicional", children: jsxRuntime.jsx(material.Grid, { size: 12, container: true, children: props.fields.map((field) => {
|
|
28100
28160
|
const fieldName = `${props.name}.${getIndex(drawer.data?._id)}.${field.name}`;
|
|
28101
28161
|
return (jsxRuntime.jsx(Field, { ...field, form: props.form, name: fieldName, fieldData: lodash.get(drawer.data, field.name) }, fieldName));
|
|
28102
28162
|
}) }) })] }));
|
|
@@ -28194,10 +28254,10 @@ const Logo = () => {
|
|
|
28194
28254
|
// ==============================|| PESTAÑAS ||============================== //
|
|
28195
28255
|
/**
|
|
28196
28256
|
* Pestañas customizables
|
|
28197
|
-
**/
|
|
28257
|
+
**/
|
|
28198
28258
|
const Tabs = (props) => {
|
|
28199
28259
|
// valor inicial
|
|
28200
|
-
const [value, setValue] = React.useState(props.initialValue ||
|
|
28260
|
+
const [value, setValue] = React.useState(props.initialValue || "1");
|
|
28201
28261
|
// manejar cambio de pestaña
|
|
28202
28262
|
const handleChange = (_event, newValue) => {
|
|
28203
28263
|
setValue(newValue);
|
|
@@ -28205,29 +28265,33 @@ const Tabs = (props) => {
|
|
|
28205
28265
|
};
|
|
28206
28266
|
// hacer el render del contenido de la pestaña seleccionada
|
|
28207
28267
|
const renderTabs = () => {
|
|
28208
|
-
return
|
|
28268
|
+
return props.tabs.map((option) => {
|
|
28209
28269
|
const renderContent = () => {
|
|
28210
28270
|
return React.Children.map(option.children, (child) => {
|
|
28211
28271
|
const cloneProps = { ...child.props };
|
|
28212
|
-
lodash.set(cloneProps,
|
|
28213
|
-
lodash.set(cloneProps,
|
|
28272
|
+
lodash.set(cloneProps, "type", props.type);
|
|
28273
|
+
lodash.set(cloneProps, "slotProps.tab", option.value);
|
|
28214
28274
|
return React.cloneElement(child, cloneProps);
|
|
28215
28275
|
});
|
|
28216
28276
|
};
|
|
28217
28277
|
return (jsxRuntime.jsx(TabPanel, { value: option.value, sx: {
|
|
28218
|
-
pt: 2,
|
|
28278
|
+
pt: 2,
|
|
28279
|
+
pb: 0,
|
|
28280
|
+
px: 0,
|
|
28281
|
+
width: 1,
|
|
28282
|
+
height: 1,
|
|
28219
28283
|
}, children: renderContent() }, option.value));
|
|
28220
|
-
})
|
|
28284
|
+
});
|
|
28221
28285
|
};
|
|
28222
28286
|
return (
|
|
28223
28287
|
// contexto
|
|
28224
|
-
jsxRuntime.jsx(material.Box, { width: 1, height:
|
|
28225
|
-
minHeight: 40
|
|
28288
|
+
jsxRuntime.jsx(material.Box, { width: 1, height: "calc(100vh - 175px)", children: jsxRuntime.jsxs(TabContext, { value: value, children: [jsxRuntime.jsx(TabList, { onChange: handleChange, "aria-label": "create-work-order-tabs", variant: "scrollable", scrollButtons: "auto", sx: {
|
|
28289
|
+
minHeight: 40,
|
|
28226
28290
|
}, children: props.tabs.map((option) => {
|
|
28227
|
-
return (jsxRuntime.jsx(Tab, { label: option.label, icon: option.icon, iconPosition:
|
|
28228
|
-
color:
|
|
28291
|
+
return (jsxRuntime.jsx(Tab, { label: option.label, icon: option.icon, iconPosition: "start", value: option.value, sx: {
|
|
28292
|
+
color: "secondary.light",
|
|
28229
28293
|
py: 0,
|
|
28230
|
-
minHeight: 40
|
|
28294
|
+
minHeight: 40,
|
|
28231
28295
|
} }, option.value));
|
|
28232
28296
|
}) }), jsxRuntime.jsx(material.Box, { width: 1, height: 0.935, children: renderTabs() })] }) }));
|
|
28233
28297
|
};
|
|
@@ -28311,7 +28375,7 @@ function DetailPage(props) {
|
|
|
28311
28375
|
resolver: zod$1.zodResolver(props.edit.schema),
|
|
28312
28376
|
defaultValues: props.edit?.defaultValues,
|
|
28313
28377
|
});
|
|
28314
|
-
const { data, isLoading, isFetching, error: fetchError } = props.api.data.query(!props.api.data.skipToken ? props.api.data.args : query$1.skipToken);
|
|
28378
|
+
const { data, isLoading, isFetching, error: fetchError, } = props.api.data.query(!props.api.data.skipToken ? props.api.data.args : query$1.skipToken);
|
|
28315
28379
|
React.useEffect(() => {
|
|
28316
28380
|
if (data) {
|
|
28317
28381
|
// set form data based on query data
|
|
@@ -28319,7 +28383,7 @@ function DetailPage(props) {
|
|
|
28319
28383
|
if (props.slots?.title) {
|
|
28320
28384
|
const title = lodash.map(props.slots?.title, function (field) {
|
|
28321
28385
|
return lodash.get(data, field);
|
|
28322
|
-
}).join(
|
|
28386
|
+
}).join(" ");
|
|
28323
28387
|
if (title)
|
|
28324
28388
|
dispatch(changeTitle(title));
|
|
28325
28389
|
}
|
|
@@ -28330,60 +28394,64 @@ function DetailPage(props) {
|
|
|
28330
28394
|
form.reset();
|
|
28331
28395
|
navigate(-1);
|
|
28332
28396
|
};
|
|
28333
|
-
const canEdit = React.useMemo(() => lodash.get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` :
|
|
28334
|
-
const canDelete = React.useMemo(() => lodash.get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` :
|
|
28397
|
+
const canEdit = React.useMemo(() => lodash.get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` : ""}obj_permissions.edit`), [data, props.slotProps?.permissionsPath]);
|
|
28398
|
+
const canDelete = React.useMemo(() => lodash.get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` : ""}obj_permissions.delete`), [data, props.slotProps?.permissionsPath]);
|
|
28335
28399
|
// ==============================|| VALIDATION ||============================== //
|
|
28336
28400
|
useValidateFieldData(props, form);
|
|
28337
28401
|
// ==============================|| QUICK RETURN ||============================== //
|
|
28338
|
-
if ((!canEdit && props.pageType ==
|
|
28402
|
+
if ((!canEdit && props.pageType == "edit") || (fetchError && fetchError.originalStatus == 403))
|
|
28339
28403
|
return jsxRuntime.jsx(NotAllowed, {});
|
|
28340
28404
|
if (fetchError && fetchError.originalStatus == 404)
|
|
28341
28405
|
return jsxRuntime.jsx(NotFound, {});
|
|
28342
28406
|
// ==============================|| SUBMIT ||============================== //
|
|
28343
28407
|
const onSubmitHandler = (submitedData) => {
|
|
28344
|
-
const formData =
|
|
28408
|
+
const formData = "nativeEvent" in submitedData ? form.getValues() : submitedData;
|
|
28345
28409
|
const params = { submitData: formData, data: data, props: props.slotProps?.parser };
|
|
28346
28410
|
const dataToSend = props.edit.useFormData ? formDataForm(params) : jsonForm(params);
|
|
28347
|
-
mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args })
|
|
28411
|
+
mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args })
|
|
28412
|
+
.unwrap()
|
|
28348
28413
|
.then(() => {
|
|
28349
28414
|
if (!props.slotProps?.button?.save?.disableNavBack)
|
|
28350
28415
|
navigate(-1);
|
|
28351
28416
|
if (props.slotProps?.button?.save?.onClick)
|
|
28352
28417
|
props.slotProps?.button?.save?.onClick();
|
|
28353
28418
|
form.reset();
|
|
28354
|
-
notifications.show(`${capitalizedObject} ${props.pageType ==
|
|
28419
|
+
notifications.show(`${capitalizedObject} ${props.pageType == "edit" ? "actualizad@" : "cread@"}!`, { severity: "success" });
|
|
28355
28420
|
})
|
|
28356
28421
|
.catch((error) => {
|
|
28357
28422
|
if (error.status === 401) ;
|
|
28358
28423
|
if (error.status === 403) {
|
|
28359
|
-
notifications.show(error.data.detail, { severity:
|
|
28424
|
+
notifications.show(error.data.detail, { severity: "error" });
|
|
28360
28425
|
}
|
|
28361
28426
|
else {
|
|
28362
28427
|
console.log(error);
|
|
28363
28428
|
setErrors(form, error);
|
|
28364
|
-
notifications.show(
|
|
28365
|
-
error.data.detail.join(
|
|
28366
|
-
`Error ${props.pageType ==
|
|
28429
|
+
notifications.show(error.data.detail
|
|
28430
|
+
? error.data.detail.join(", ")
|
|
28431
|
+
: `Error ${props.pageType == "edit" ? "actualizando" : "creando"} ${props.object.name}!`, { severity: "error" });
|
|
28367
28432
|
}
|
|
28368
28433
|
});
|
|
28369
28434
|
};
|
|
28370
28435
|
// ==============================|| RENDER SECTIONS ||============================== //
|
|
28371
28436
|
const renderContent = () => {
|
|
28372
28437
|
let displayed_sections = -1;
|
|
28373
|
-
return (jsxRuntime.jsxs(material.Grid, { size: 12, container: true, direction:
|
|
28438
|
+
return (jsxRuntime.jsxs(material.Grid, { size: 12, container: true, direction: "column", position: "relative", pb: 2, children: [props.pageType == "detail" && data?.has_history && (jsxRuntime.jsx(HistorialDrawer, { ...props.slotProps?.historial })), props.sections.map((section, index) => {
|
|
28374
28439
|
if (!section.display)
|
|
28375
28440
|
return null;
|
|
28376
|
-
if (typeof section.display ==
|
|
28441
|
+
if (typeof section.display == "object") {
|
|
28377
28442
|
const validateAgainst = form.watch(section.display.field)?.toString();
|
|
28378
28443
|
if (!section.display.method(validateAgainst, section.display.value))
|
|
28379
28444
|
return null;
|
|
28380
28445
|
}
|
|
28381
28446
|
displayed_sections += 1;
|
|
28382
|
-
return (jsxRuntime.jsx(Section, { data: data, form: form, bgColor: displayed_sections % 2 == 1 ?
|
|
28447
|
+
return (jsxRuntime.jsx(Section, { data: data, form: form, bgColor: displayed_sections % 2 == 1 ? "white" : "#F7F7F7", pageType: props.pageType, ...section, first: displayed_sections == 0 }, index));
|
|
28383
28448
|
})] }));
|
|
28384
28449
|
};
|
|
28385
28450
|
const renderPostAction = () => {
|
|
28386
|
-
if (props.api.mutate.postAction &&
|
|
28451
|
+
if (props.api.mutate.postAction &&
|
|
28452
|
+
isSuccess &&
|
|
28453
|
+
"post_action" in mutationResponse &&
|
|
28454
|
+
mutationResponse["post_action"]["type"] === props.api.mutate.postAction.type) {
|
|
28387
28455
|
switch (props.api.mutate.postAction.after) {
|
|
28388
28456
|
// case 'create':
|
|
28389
28457
|
// if (props.pageType === 'create') return addPropsToNode(props.api.mutate.postAction.node, mutationResponse);
|
|
@@ -28392,37 +28460,44 @@ function DetailPage(props) {
|
|
|
28392
28460
|
// if (props.pageType === 'edit') return props.api.mutate.postAction.node;
|
|
28393
28461
|
// break;
|
|
28394
28462
|
default:
|
|
28395
|
-
return addPropsToNode(props.api.mutate.postAction.node, {
|
|
28463
|
+
return addPropsToNode(props.api.mutate.postAction.node, {
|
|
28464
|
+
parent: props.api.data.args["id"],
|
|
28465
|
+
...mutationResponse["post_action"],
|
|
28466
|
+
});
|
|
28396
28467
|
}
|
|
28397
28468
|
}
|
|
28398
28469
|
};
|
|
28399
|
-
const badgeInfo = lodash.get(data, props.slots?.badge ||
|
|
28470
|
+
const badgeInfo = lodash.get(data, props.slots?.badge || "");
|
|
28400
28471
|
const renderButton = () => {
|
|
28401
28472
|
if (props.slots?.button)
|
|
28402
28473
|
return props.slots?.button;
|
|
28403
|
-
if (props.pageType ==
|
|
28474
|
+
if (props.pageType == "detail") {
|
|
28404
28475
|
if (!canEdit && !canDelete)
|
|
28405
28476
|
return null;
|
|
28406
|
-
return (jsxRuntime.jsxs(material.Stack, { direction:
|
|
28477
|
+
return (jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 1, children: [canDelete && props.api.delete && (jsxRuntime.jsx(DeleteButton, { mutation: props.api.delete.mutation, disableNavBack: props.slotProps?.deleteButton?.disableNavBack })), canEdit && jsxRuntime.jsx(EditButton, {})] }));
|
|
28407
28478
|
}
|
|
28408
28479
|
else {
|
|
28409
28480
|
return (jsxRuntime.jsx(SaveCancelButton, { slotProps: {
|
|
28410
28481
|
saveBtn: {
|
|
28411
28482
|
loading: mutationIsLoading,
|
|
28412
28483
|
disabled: !form.formState.isDirty,
|
|
28413
|
-
...(props.slotProps?.button?.save?.type ==
|
|
28414
|
-
|
|
28415
|
-
|
|
28416
|
-
|
|
28484
|
+
...(props.slotProps?.button?.save?.type == "onClick"
|
|
28485
|
+
? {
|
|
28486
|
+
type: "button",
|
|
28487
|
+
onClick: onSubmitHandler,
|
|
28488
|
+
}
|
|
28489
|
+
: {}),
|
|
28417
28490
|
},
|
|
28418
|
-
...(props.slotProps?.button?.cancel
|
|
28419
|
-
|
|
28420
|
-
|
|
28491
|
+
...(props.slotProps?.button?.cancel
|
|
28492
|
+
? { cancelBtn: props.slotProps?.button?.cancel }
|
|
28493
|
+
: {
|
|
28494
|
+
cancelBtn: { onClick: handleCancel },
|
|
28495
|
+
}),
|
|
28421
28496
|
} }));
|
|
28422
28497
|
}
|
|
28423
28498
|
};
|
|
28424
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ContentLayout, { button: renderButton(), badge: props.pageType ==
|
|
28425
|
-
jsxRuntime.jsx(StatusBadge, { title: badgeInfo[
|
|
28499
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ContentLayout, { button: renderButton(), badge: props.pageType == "detail" &&
|
|
28500
|
+
badgeInfo && (jsxRuntime.jsx(StatusBadge, { title: badgeInfo["label"], severity: badgeInfo["value"] })), children: jsxRuntime.jsx(LoadingComponent, { height: 0.7, isLoading: isLoading || isFetching, children: jsxRuntime.jsx(reactHookForm.FormProvider, { ...form, children: jsxRuntime.jsx(material.Box, { id: "formulario", component: "form", autoComplete: "off", noValidate: true, onSubmit: form.handleSubmit(onSubmitHandler), width: "100%", position: "relative", children: renderContent() }) }) }) }), renderPostAction()] }));
|
|
28426
28501
|
}
|
|
28427
28502
|
|
|
28428
28503
|
const ListPage = (props) => {
|
|
@@ -28430,19 +28505,19 @@ const ListPage = (props) => {
|
|
|
28430
28505
|
};
|
|
28431
28506
|
|
|
28432
28507
|
function SlideTransition(props) {
|
|
28433
|
-
return jsxRuntime.jsx(material.Slide, { ...props, direction:
|
|
28508
|
+
return jsxRuntime.jsx(material.Slide, { ...props, direction: "left" });
|
|
28434
28509
|
}
|
|
28435
28510
|
const BaseProgressSnack = (props) => {
|
|
28436
|
-
|
|
28511
|
+
const dispatch = reactRedux.useDispatch();
|
|
28437
28512
|
const handleClose = (e) => {
|
|
28438
28513
|
if (e?.defaultMuiPrevented)
|
|
28439
28514
|
return;
|
|
28440
|
-
|
|
28515
|
+
dispatch(closeProgressSnack(props.id));
|
|
28441
28516
|
};
|
|
28442
|
-
const finished = React.useMemo(() => lodash.get(props.data,
|
|
28443
|
-
const error = React.useMemo(() => lodash.get(props.data,
|
|
28517
|
+
const finished = React.useMemo(() => lodash.get(props.data, "finished"), [props.data]);
|
|
28518
|
+
const error = React.useMemo(() => lodash.get(props.data, "error"), [props.data]);
|
|
28444
28519
|
const renderItem = React.useCallback(() => {
|
|
28445
|
-
return (jsxRuntime.jsx(material.Snackbar, { anchorOrigin: { vertical:
|
|
28520
|
+
return (jsxRuntime.jsx(material.Snackbar, { anchorOrigin: { vertical: "bottom", horizontal: "right" }, open: props.open, onClose: handleClose, slots: {
|
|
28446
28521
|
transition: SlideTransition,
|
|
28447
28522
|
}, slotProps: {
|
|
28448
28523
|
clickAwayListener: {
|
|
@@ -28450,27 +28525,27 @@ const BaseProgressSnack = (props) => {
|
|
|
28450
28525
|
event.defaultMuiPrevented = true;
|
|
28451
28526
|
},
|
|
28452
28527
|
},
|
|
28453
|
-
}, children: jsxRuntime.jsx(material.Badge, { invisible: props.index < 1, badgeContent: props.index + 1, color:
|
|
28454
|
-
bgcolor: props.data[
|
|
28528
|
+
}, children: jsxRuntime.jsx(material.Badge, { invisible: props.index < 1, badgeContent: props.index + 1, color: "primary", children: jsxRuntime.jsx(material.Paper, { elevation: 2, sx: {
|
|
28529
|
+
bgcolor: props.data["error"] ? "primary.main" : "secondary.dark",
|
|
28455
28530
|
minWidth: 300,
|
|
28456
|
-
maxWidth:
|
|
28531
|
+
maxWidth: "100vw",
|
|
28457
28532
|
p: 2,
|
|
28458
|
-
borderRadius:
|
|
28459
|
-
color:
|
|
28460
|
-
}, children: jsxRuntime.jsxs(material.Stack, { direction:
|
|
28461
|
-
color:
|
|
28462
|
-
|
|
28463
|
-
backgroundColor:
|
|
28533
|
+
borderRadius: "12px",
|
|
28534
|
+
color: "white",
|
|
28535
|
+
}, children: jsxRuntime.jsxs(material.Stack, { direction: "column", spacing: 1, children: [jsxRuntime.jsxs(material.Stack, { direction: "row", alignItems: "center", spacing: 1, justifyContent: "space-between", children: [jsxRuntime.jsx(material.Typography, { pr: 2, color: "inherit", children: props.data.title || "N/A" }), finished && !error && (jsxRuntime.jsx(material.Tooltip, { title: "Cerrar", placement: "bottom", children: jsxRuntime.jsx(material.IconButton, { color: "secondary", size: "small", onClick: handleClose, sx: {
|
|
28536
|
+
color: "inherit",
|
|
28537
|
+
"&:hover": {
|
|
28538
|
+
backgroundColor: "rgba(255, 255, 255, 0.2)",
|
|
28464
28539
|
},
|
|
28465
|
-
}, children: jsxRuntime.jsx(CloseIcon, { fontSize:
|
|
28540
|
+
}, children: jsxRuntime.jsx(CloseIcon, { fontSize: "small" }) }) }))] }), !finished && !error && props.content(props.data)] }) }) }) }));
|
|
28466
28541
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28467
28542
|
}, [finished, props]);
|
|
28468
28543
|
return renderItem();
|
|
28469
28544
|
};
|
|
28470
28545
|
|
|
28471
28546
|
const ObjectProgressStack = (props) => {
|
|
28472
|
-
const snacks = reactRedux.useSelector(state => lodash.get(state,
|
|
28473
|
-
return (jsxRuntime.jsx(material.Stack, { direction:
|
|
28547
|
+
const snacks = reactRedux.useSelector((state) => lodash.get(state, "snackProgress", {}));
|
|
28548
|
+
return (jsxRuntime.jsx(material.Stack, { direction: "column", spacing: 2, children: Object.keys(snacks).map((key, index) => {
|
|
28474
28549
|
return (jsxRuntime.jsx(BaseProgressSnack, { id: key, index: index, ...snacks[key], content: props.content }, key));
|
|
28475
28550
|
}) }));
|
|
28476
28551
|
};
|