@acvl/frontend-components 0.0.25 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +480 -410
- 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 +483 -413
- 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/esm/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
-
import { useTheme, useMediaQuery, Tooltip, IconButton, Button, Grid, FormGroup, FormHelperText as FormHelperText$1, Drawer, Box, Stack, CircularProgress, Typography as Typography$1, List as List$1, ListItem as ListItem$1, ListSubheader, styled as styled$1, LinearProgress, Autocomplete, Checkbox, Slider, Switch, InputAdornment as InputAdornment$1, ToggleButtonGroup, ToggleButton, Dialog, DialogTitle, DialogContent as DialogContent$1, DialogContentText, DialogActions as DialogActions$1, ButtonGroup, Menu,
|
|
3
|
+
import { useTheme, useMediaQuery, Tooltip, IconButton, Button, Grid, FormGroup, FormHelperText as FormHelperText$1, Drawer, Box, Stack, CircularProgress, Typography as Typography$1, List as List$1, ListItem as ListItem$1, ListSubheader, styled as styled$1, LinearProgress, Autocomplete, Checkbox, Slider, Switch, InputAdornment as InputAdornment$1, ToggleButtonGroup, ToggleButton, Dialog, DialogTitle, DialogContent as DialogContent$1, DialogContentText, DialogActions as DialogActions$1, ButtonGroup, Menu, ListItemIcon, Link, Card, CardHeader, Avatar, CardContent, Divider as Divider$1, Popper, Grow as Grow$1, Paper, ClickAwayListener, Badge, TablePagination, NoSsr, tooltipClasses, Collapse, Fade as Fade$1, Slide, Zoom, Snackbar, alpha as alpha$1, lighten, createTheme as createTheme$1, responsiveFontSizes } from '@mui/material';
|
|
4
4
|
import EditIcon from '@mui/icons-material/Edit';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import React__default, { useCallback, useEffect, isValidElement, cloneElement, Children, createContext, useContext, useState, useMemo, useRef, useImperativeHandle, useLayoutEffect, Suspense, forwardRef } from 'react';
|
|
7
|
-
import { useNavigate, useLocation } from 'react-router-dom';
|
|
7
|
+
import { useNavigate, useLocation, useLoaderData } from 'react-router-dom';
|
|
8
8
|
import DeleteIcon from '@mui/icons-material/Delete';
|
|
9
9
|
import { Controller, useForm, useWatch, useFieldArray, FormProvider } from 'react-hook-form';
|
|
10
10
|
import { useSession, PageHeader, useNotifications } from '@toolpad/core';
|
|
@@ -41,7 +41,7 @@ import BaseFocusTrap from '@mui/material/Unstable_TrapFocus';
|
|
|
41
41
|
import DialogContent from '@mui/material/DialogContent';
|
|
42
42
|
import MuiDialog, { dialogClasses } from '@mui/material/Dialog';
|
|
43
43
|
import debounce from 'lodash/debounce';
|
|
44
|
-
import { get, invoke, map, find, forEach as forEach$1, findIndex, mergeWith, isArray, omit, set as set$1, every, includes as includes$1, merge as merge$2, countBy, isNumber, isEmpty as isEmpty$1, isBoolean, isEqual as isEqual$1, debounce as debounce$1, some } from 'lodash';
|
|
44
|
+
import { get, invoke, map, find, groupBy, forEach as forEach$1, findIndex, mergeWith, isArray, omit, set as set$1, every, includes as includes$1, merge as merge$2, countBy, isNumber, isEmpty as isEmpty$1, isBoolean, isEqual as isEqual$1, debounce as debounce$1, some } from 'lodash';
|
|
45
45
|
import { produce } from 'immer';
|
|
46
46
|
import set from 'lodash/set';
|
|
47
47
|
import get$1 from 'lodash/get';
|
|
@@ -73,6 +73,7 @@ import SaveIcon from '@mui/icons-material/Save';
|
|
|
73
73
|
import AddIcon from '@mui/icons-material/Add';
|
|
74
74
|
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
|
|
75
75
|
import LinearProgress$1 from '@mui/material/LinearProgress';
|
|
76
|
+
import AttachFileIcon from '@mui/icons-material/AttachFile';
|
|
76
77
|
import { useGridApiContext, ToolbarButton, QuickFilter, QuickFilterTrigger, QuickFilterControl, QuickFilterClear, ColumnsPanelTrigger, Toolbar, useGridSelector, gridPaginationSelector, GridRow, GridRowEditStartReasons, GridRowModes, GridActionsCellItem, useGridApiRef, DataGrid, GridRowEditStopReasons, GridEditSingleSelectCell, GridEditInputCell, GridEditBooleanCell } from '@mui/x-data-grid';
|
|
77
78
|
import Tooltip$1 from '@mui/material/Tooltip';
|
|
78
79
|
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
@@ -94,6 +95,7 @@ import { useSortable, SortableContext, verticalListSortingStrategy } from '@dnd-
|
|
|
94
95
|
import { CSS } from '@dnd-kit/utilities';
|
|
95
96
|
import { useSensors, useSensor, PointerSensor, DndContext, closestCenter } from '@dnd-kit/core';
|
|
96
97
|
import { restrictToVerticalAxis, restrictToWindowEdges, restrictToParentElement } from '@dnd-kit/modifiers';
|
|
98
|
+
import DrawIcon from '@mui/icons-material/Draw';
|
|
97
99
|
import CloseIcon from '@mui/icons-material/Close';
|
|
98
100
|
import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
|
|
99
101
|
import { skipToken } from '@reduxjs/toolkit/query';
|
|
@@ -104,10 +106,10 @@ import { useDispatch, useSelector } from 'react-redux';
|
|
|
104
106
|
|
|
105
107
|
const NormalOrIcon = (props) => {
|
|
106
108
|
const theme = useTheme();
|
|
107
|
-
const belowLG = useMediaQuery(theme.breakpoints.down(
|
|
108
|
-
if ((belowLG && !(props.type ==
|
|
109
|
+
const belowLG = useMediaQuery(theme.breakpoints.down("lg"));
|
|
110
|
+
if ((belowLG && !(props.type == "button")) || props.type == "icon")
|
|
109
111
|
return (jsx(Tooltip, { title: props.buttonProps.children, children: jsx(IconButton, { ...props.buttonProps, children: props.buttonProps.startIcon }) }));
|
|
110
|
-
return
|
|
112
|
+
return jsx(Button, { ...props.buttonProps });
|
|
111
113
|
};
|
|
112
114
|
|
|
113
115
|
const EditButton = () => {
|
|
@@ -117,23 +119,23 @@ const EditButton = () => {
|
|
|
117
119
|
}, [navigate]);
|
|
118
120
|
// ===== || KEYDOWN || ===== //
|
|
119
121
|
const handleKeyPress = useCallback((event) => {
|
|
120
|
-
if (event.ctrlKey && event.key ===
|
|
122
|
+
if (event.ctrlKey && event.key === "e") {
|
|
121
123
|
event.preventDefault();
|
|
122
124
|
handleClick();
|
|
123
125
|
}
|
|
124
126
|
}, [handleClick]);
|
|
125
127
|
useEffect(() => {
|
|
126
|
-
document.addEventListener(
|
|
128
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
127
129
|
return () => {
|
|
128
|
-
document.removeEventListener(
|
|
130
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
129
131
|
};
|
|
130
132
|
}, [handleKeyPress]);
|
|
131
133
|
return (jsx(NormalOrIcon, { buttonProps: {
|
|
132
|
-
color:
|
|
133
|
-
variant:
|
|
134
|
+
color: "secondary",
|
|
135
|
+
variant: "contained",
|
|
134
136
|
startIcon: jsx(EditIcon, {}),
|
|
135
137
|
onClick: handleClick,
|
|
136
|
-
children:
|
|
138
|
+
children: "Editar",
|
|
137
139
|
} }));
|
|
138
140
|
};
|
|
139
141
|
|
|
@@ -25811,18 +25813,18 @@ const valueLabel = object({
|
|
|
25811
25813
|
|
|
25812
25814
|
const MainDrawer = (props) => {
|
|
25813
25815
|
const theme = useTheme();
|
|
25814
|
-
return (jsx(Drawer, { variant:
|
|
25816
|
+
return (jsx(Drawer, { variant: "temporary", anchor: "right", open: props.open, onClose: props.drawerToggle, sx: {
|
|
25815
25817
|
zIndex: 1202,
|
|
25816
|
-
|
|
25817
|
-
width:
|
|
25818
|
+
"& .MuiDrawer-paper": {
|
|
25819
|
+
width: "100%",
|
|
25818
25820
|
maxWidth: props.width ? props.width : 600,
|
|
25819
25821
|
background: theme.palette.background.default,
|
|
25820
25822
|
color: theme.palette.text.primary,
|
|
25821
|
-
borderRight:
|
|
25822
|
-
borderTopLeftRadius:
|
|
25823
|
-
borderBottomLeftRadius:
|
|
25824
|
-
}
|
|
25825
|
-
}, color:
|
|
25823
|
+
borderRight: "none",
|
|
25824
|
+
borderTopLeftRadius: "12px",
|
|
25825
|
+
borderBottomLeftRadius: "12px",
|
|
25826
|
+
},
|
|
25827
|
+
}, color: "inherit", ...props.drawerProps, children: jsxs(Grid, { container: true, direction: "column", px: 4, py: 2, spacing: 2, children: [jsx(Grid, { display: "flex", justifyContent: "right", pb: 0, children: props.slots?.button ? (props.slots.button) : (jsx(Button, { color: "error", startIcon: jsx(CancelIcon, {}), onClick: props.drawerToggle, children: "Cerrar" })) }), jsx(Grid, { children: jsx(PageHeader, { breadcrumbs: [], title: props.title }) }), jsx(Grid, { size: 12, container: true, position: "relative", children: props.children })] }) }));
|
|
25826
25828
|
};
|
|
25827
25829
|
|
|
25828
25830
|
const LoadingComponent = (props) => {
|
|
@@ -25881,60 +25883,49 @@ const _HistorialDrawer = (props) => {
|
|
|
25881
25883
|
const HistorialDrawer = (props) => {
|
|
25882
25884
|
const [open, setOpen] = useState(false);
|
|
25883
25885
|
const handleDrawer = useCallback(() => {
|
|
25884
|
-
setOpen(prevState => !prevState);
|
|
25886
|
+
setOpen((prevState) => !prevState);
|
|
25885
25887
|
}, []);
|
|
25886
25888
|
// ===== || KEYDOWN || ===== //
|
|
25887
25889
|
const handleKeyPress = useCallback((event) => {
|
|
25888
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
25890
|
+
if (event.ctrlKey && event.shiftKey && event.key === "H") {
|
|
25889
25891
|
event.preventDefault();
|
|
25890
25892
|
handleDrawer();
|
|
25891
25893
|
}
|
|
25892
25894
|
}, [handleDrawer]);
|
|
25893
25895
|
useEffect(() => {
|
|
25894
|
-
document.addEventListener(
|
|
25896
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
25895
25897
|
return () => {
|
|
25896
|
-
document.removeEventListener(
|
|
25898
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
25897
25899
|
};
|
|
25898
25900
|
}, [handleKeyPress]);
|
|
25899
|
-
return (jsxs(Fragment, { children: [jsx(Tooltip, { title:
|
|
25900
|
-
position:
|
|
25901
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: "Historial", children: jsx(IconButton, { color: "primary", onClick: handleDrawer, sx: {
|
|
25902
|
+
position: "absolute",
|
|
25901
25903
|
right: 0,
|
|
25902
25904
|
}, ...props.iconButtonProps, children: jsx(HistoryIcon, {}) }) }), jsx(_HistorialDrawer, { open: open, handleDrawer: handleDrawer, endpoint: props.endpoint })] }));
|
|
25903
25905
|
};
|
|
25904
25906
|
|
|
25905
|
-
const buildListItems = (content) => {
|
|
25906
|
-
const items = [];
|
|
25907
|
-
const loop = (content, error_title) => {
|
|
25908
|
-
if (Array.isArray(content)) {
|
|
25909
|
-
items.push({ title: error_title ? (error_title.charAt(0).toUpperCase() + error_title.slice(1)).split('_').join(' ') : 'N/A', content: content.join(', ') });
|
|
25910
|
-
}
|
|
25911
|
-
else {
|
|
25912
|
-
Object.keys(content).map((row_error) => {
|
|
25913
|
-
loop(content[row_error], row_error);
|
|
25914
|
-
});
|
|
25915
|
-
}
|
|
25916
|
-
};
|
|
25917
|
-
loop(content);
|
|
25918
|
-
return items;
|
|
25919
|
-
};
|
|
25920
25907
|
const RowErrors = (props) => {
|
|
25921
25908
|
return (jsx(List$1, { subheader: jsx(ListSubheader, { sx: {
|
|
25922
25909
|
bgcolor: red[50],
|
|
25923
25910
|
color: red[800],
|
|
25924
|
-
fontWeight:
|
|
25925
|
-
borderRadius:
|
|
25926
|
-
lineHeight:
|
|
25911
|
+
fontWeight: "bold",
|
|
25912
|
+
borderRadius: "12px",
|
|
25913
|
+
lineHeight: "40px",
|
|
25927
25914
|
}, children: `Hilera ${props.row}` }), sx: {
|
|
25928
25915
|
bgcolor: red[50],
|
|
25929
|
-
borderRadius:
|
|
25930
|
-
}, children:
|
|
25916
|
+
borderRadius: "12px",
|
|
25917
|
+
}, children: props.data.map((item) => {
|
|
25918
|
+
const pre_name = item.name.split(".").at(-1);
|
|
25919
|
+
const name = (pre_name.charAt(0).toUpperCase() + pre_name.slice(1))
|
|
25920
|
+
.split("_")
|
|
25921
|
+
.join(" ");
|
|
25931
25922
|
return (jsx(ListItem$1, { sx: {
|
|
25932
|
-
py: 0
|
|
25933
|
-
}, children: jsx(ListItemText, { primary: jsxs(Box, { children: [jsx(Typography$1, { variant:
|
|
25923
|
+
py: 0,
|
|
25924
|
+
}, children: jsx(ListItemText, { primary: jsxs(Box, { children: [jsx(Typography$1, { variant: "caption", pr: 0.5, sx: {
|
|
25934
25925
|
color: red[800],
|
|
25935
|
-
}, children: `${
|
|
25926
|
+
}, children: `${name}:` }), jsx(Typography$1, { variant: "caption", sx: {
|
|
25936
25927
|
color: red[800],
|
|
25937
|
-
}, children: item.
|
|
25928
|
+
}, children: item.reason.join(", ") })] }) }) }));
|
|
25938
25929
|
}) }));
|
|
25939
25930
|
};
|
|
25940
25931
|
|
|
@@ -25974,9 +25965,8 @@ const FileUploadBox = (props) => {
|
|
|
25974
25965
|
props.setValid(true);
|
|
25975
25966
|
})
|
|
25976
25967
|
.catch((e) => {
|
|
25977
|
-
|
|
25978
|
-
|
|
25979
|
-
notifications.show(columnas_inv, { severity: "error" });
|
|
25968
|
+
if (e.data?.detail?.length > 0)
|
|
25969
|
+
notifications.show(e.data.detail[0], { severity: "error" });
|
|
25980
25970
|
props.setValid(false);
|
|
25981
25971
|
});
|
|
25982
25972
|
});
|
|
@@ -26003,19 +25993,22 @@ const FileUploadBox = (props) => {
|
|
|
26003
25993
|
onChange(null);
|
|
26004
25994
|
setFile(null);
|
|
26005
25995
|
};
|
|
25996
|
+
const renderErrorRows = () => {
|
|
25997
|
+
if (!error?.data?.invalid_params)
|
|
25998
|
+
return;
|
|
25999
|
+
const rows = groupBy(error?.data?.invalid_params, function (e) {
|
|
26000
|
+
return e.name.split(".")[0];
|
|
26001
|
+
});
|
|
26002
|
+
if (!rows)
|
|
26003
|
+
return;
|
|
26004
|
+
return Object.entries(rows).map(([row, errors]) => (jsx(RowErrors, { row: row, data: errors }, row)));
|
|
26005
|
+
};
|
|
26006
26006
|
return (jsx(Box$1, { width: 1, children: jsxs(Stack, { spacing: 2, children: [!file && !isLoading && (jsxs(Box$1, { component: "div", width: 1, display: "flex", justifyContent: "center", alignItems: "center", border: "1.5px dashed", borderRadius: "12px", py: 4, px: 2, borderColor: grey[800], bgcolor: grey[50], ...getRootProps(), children: [jsx(VisuallyHiddenInput, { id: "file-upload", type: "file", ...getInputProps() }), jsx(FileUploadIcon, { sx: {
|
|
26007
26007
|
color: grey[800],
|
|
26008
26008
|
pr: 1,
|
|
26009
26009
|
} }), jsx(Typography, { variant: "body2", sx: { color: grey[800] }, children: isDragActive
|
|
26010
26010
|
? "Soltar archivo aquí."
|
|
26011
|
-
: "Arrastra un archivo aquí o haz clic para seleccionar uno." })] })), isLoading && (jsx(Box$1, { children: jsx(LinearProgress, { sx: { height: 5 } }) })), file && (jsx(FileBox, { file: file, handleRemove: handleRemove, loadingRemove: removerLoading })),
|
|
26012
|
-
"data" in error &&
|
|
26013
|
-
Object.keys(error.data).map((row) => {
|
|
26014
|
-
if (typeof error.data[row] == "object") {
|
|
26015
|
-
return jsx(RowErrors, { row: row, data: error.data }, row);
|
|
26016
|
-
}
|
|
26017
|
-
return null;
|
|
26018
|
-
})] }) }));
|
|
26011
|
+
: "Arrastra un archivo aquí o haz clic para seleccionar uno." })] })), isLoading && (jsx(Box$1, { children: jsx(LinearProgress, { sx: { height: 5 } }) })), file && (jsx(FileBox, { file: file, handleRemove: handleRemove, loadingRemove: removerLoading })), renderErrorRows()] }) }));
|
|
26019
26012
|
};
|
|
26020
26013
|
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value } }) => {
|
|
26021
26014
|
return jsx(Dropzone, { onChange: onChange, value: value });
|
|
@@ -26200,7 +26193,7 @@ async function manualCacheRefresh(api, id, dispatch, queryFulfilled, endpoints)
|
|
|
26200
26193
|
const initialState$1 = {};
|
|
26201
26194
|
// == crea el slice == //
|
|
26202
26195
|
const snackProgress = createSlice({
|
|
26203
|
-
name:
|
|
26196
|
+
name: "snackProgress",
|
|
26204
26197
|
initialState: initialState$1,
|
|
26205
26198
|
// declarar acciones que se le pueden hacer a esta sección de la tienda
|
|
26206
26199
|
reducers: {
|
|
@@ -26216,7 +26209,7 @@ const snackProgress = createSlice({
|
|
|
26216
26209
|
closeProgressSnack(state, action) {
|
|
26217
26210
|
return omit(state, action.payload);
|
|
26218
26211
|
},
|
|
26219
|
-
}
|
|
26212
|
+
},
|
|
26220
26213
|
});
|
|
26221
26214
|
// exportar acciones
|
|
26222
26215
|
const { openProgressSnack, updateProgressSnackData, closeProgressSnack } = snackProgress.actions;
|
|
@@ -26242,12 +26235,14 @@ const { changeTitle, } = settings.actions;
|
|
|
26242
26235
|
var header = settings.reducer;
|
|
26243
26236
|
|
|
26244
26237
|
const ControlledDropdown = (props) => {
|
|
26245
|
-
const [inputValue, setInputValue] = useState(
|
|
26238
|
+
const [inputValue, setInputValue] = useState("");
|
|
26246
26239
|
const [options, setOptions] = useState(props.extraProps?.options ? props.extraProps?.options : []);
|
|
26247
26240
|
const args = useMemo(() => {
|
|
26248
26241
|
if (!props.extraProps?.queryArgs)
|
|
26249
26242
|
return undefined;
|
|
26250
|
-
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26243
|
+
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26244
|
+
filters: { nombre__icontains: inputValue },
|
|
26245
|
+
});
|
|
26251
26246
|
}, [inputValue, props.extraProps?.queryArgs]);
|
|
26252
26247
|
const api = useAPI();
|
|
26253
26248
|
const [getOpciones, { isLoading, isFetching, isError }] = api.useLazyGetComoOpcionesQuery();
|
|
@@ -26260,7 +26255,8 @@ const ControlledDropdown = (props) => {
|
|
|
26260
26255
|
};
|
|
26261
26256
|
const handleSearch = useCallback(debounce((args, callback) => {
|
|
26262
26257
|
setOptions([]);
|
|
26263
|
-
getOpciones(args)
|
|
26258
|
+
getOpciones(args)
|
|
26259
|
+
.unwrap()
|
|
26264
26260
|
.then(callback)
|
|
26265
26261
|
.catch(() => {
|
|
26266
26262
|
//
|
|
@@ -26273,7 +26269,7 @@ const ControlledDropdown = (props) => {
|
|
|
26273
26269
|
});
|
|
26274
26270
|
}
|
|
26275
26271
|
}, [args, handleSearch, open]);
|
|
26276
|
-
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange
|
|
26272
|
+
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange }, fieldState: { error } }) => {
|
|
26277
26273
|
const handleChange = (_event, newValue) => {
|
|
26278
26274
|
onChange(newValue);
|
|
26279
26275
|
};
|
|
@@ -26281,10 +26277,10 @@ const ControlledDropdown = (props) => {
|
|
|
26281
26277
|
setInputValue(newInputValue);
|
|
26282
26278
|
}, isOptionEqualToValue: (option, value) => {
|
|
26283
26279
|
return option.value === value.value;
|
|
26284
|
-
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, fullWidth: true, size:
|
|
26280
|
+
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, fullWidth: true, size: "small", disabled: !options || isError, renderInput: (params) => (jsx(TextField, { ...params, label: props.label, error: !!error, helperText: error ? error.message : props.extraProps?.disableHT ? "" : " ", slotProps: {
|
|
26285
26281
|
input: {
|
|
26286
26282
|
...params.InputProps,
|
|
26287
|
-
endAdornment: (jsxs(Fragment, { children: [
|
|
26283
|
+
endAdornment: (jsxs(Fragment, { children: [isLoading || isFetching ? (jsx(CircularProgress, { color: "inherit", size: 20 })) : null, params.InputProps.endAdornment] })),
|
|
26288
26284
|
},
|
|
26289
26285
|
} })), ...props.fieldProps }));
|
|
26290
26286
|
} }));
|
|
@@ -26313,13 +26309,15 @@ const ControlledPhoneNumber = (props) => {
|
|
|
26313
26309
|
};
|
|
26314
26310
|
|
|
26315
26311
|
const ControlledSelect = (props) => {
|
|
26316
|
-
const [inputValue, setInputValue] = useState(
|
|
26312
|
+
const [inputValue, setInputValue] = useState("");
|
|
26317
26313
|
const [options, setOptions] = useState(props.extraProps?.options ? props.extraProps?.options : []);
|
|
26318
26314
|
const [selectedAll, setSelectedAll] = useState(false);
|
|
26319
26315
|
const args = useMemo(() => {
|
|
26320
26316
|
if (!props.extraProps?.queryArgs)
|
|
26321
26317
|
return undefined;
|
|
26322
|
-
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26318
|
+
return mergeSettings(props.extraProps?.queryArgs, {
|
|
26319
|
+
filters: { nombre__icontains: inputValue },
|
|
26320
|
+
});
|
|
26323
26321
|
}, [inputValue, props.extraProps?.queryArgs]);
|
|
26324
26322
|
const api = useAPI();
|
|
26325
26323
|
const [getOpciones, { isLoading, isFetching, isError }] = api.useLazyGetComoOpcionesQuery();
|
|
@@ -26334,7 +26332,8 @@ const ControlledSelect = (props) => {
|
|
|
26334
26332
|
};
|
|
26335
26333
|
const handleSearch = useCallback(debounce((args, callback) => {
|
|
26336
26334
|
setOptions([]);
|
|
26337
|
-
getOpciones(args)
|
|
26335
|
+
getOpciones(args)
|
|
26336
|
+
.unwrap()
|
|
26338
26337
|
.then(callback)
|
|
26339
26338
|
.catch(() => {
|
|
26340
26339
|
//
|
|
@@ -26343,12 +26342,14 @@ const ControlledSelect = (props) => {
|
|
|
26343
26342
|
useEffect(() => {
|
|
26344
26343
|
if (args && open)
|
|
26345
26344
|
handleSearch(args, (filteredOptions) => {
|
|
26346
|
-
setOptions([{ value:
|
|
26345
|
+
setOptions([{ value: "all", label: "All" }].concat(filteredOptions));
|
|
26347
26346
|
});
|
|
26348
26347
|
}, [args, handleSearch, open]);
|
|
26349
26348
|
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { value, onChange }, fieldState: { error } }) => {
|
|
26350
26349
|
const handleChange = (_event, newValue) => {
|
|
26351
|
-
if (find(newValue, function (val) {
|
|
26350
|
+
if (find(newValue, function (val) {
|
|
26351
|
+
return val.value == "all";
|
|
26352
|
+
})) {
|
|
26352
26353
|
if (selectedAll) {
|
|
26353
26354
|
setSelectedAll(false);
|
|
26354
26355
|
onChange(newValue.slice(1));
|
|
@@ -26372,10 +26373,10 @@ const ControlledSelect = (props) => {
|
|
|
26372
26373
|
setInputValue(newInputValue);
|
|
26373
26374
|
}, isOptionEqualToValue: (option, value) => {
|
|
26374
26375
|
return option.value === value.value;
|
|
26375
|
-
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, multiple: true, disableCloseOnSelect: true, limitTags: 1, fullWidth: true, size:
|
|
26376
|
+
}, filterOptions: props.extraProps.queryArgs ? (x) => x : undefined, multiple: true, disableCloseOnSelect: true, limitTags: 1, fullWidth: true, size: "small", disabled: !options || isError, renderInput: (params) => (jsx(TextField, { ...params, label: props.label, error: !!error, helperText: error ? error.message : "", slotProps: {
|
|
26376
26377
|
input: {
|
|
26377
26378
|
...params.InputProps,
|
|
26378
|
-
endAdornment: (jsxs(Fragment, { children: [
|
|
26379
|
+
endAdornment: (jsxs(Fragment, { children: [isLoading || isFetching ? (jsx(CircularProgress, { color: "inherit", size: 20 })) : null, params.InputProps.endAdornment] })),
|
|
26379
26380
|
},
|
|
26380
26381
|
} })), ...props.fieldProps, renderOption: (props, option, { selected }) => {
|
|
26381
26382
|
const { key, ...optionProps } = props;
|
|
@@ -26383,7 +26384,7 @@ const ControlledSelect = (props) => {
|
|
|
26383
26384
|
} }));
|
|
26384
26385
|
} }));
|
|
26385
26386
|
};
|
|
26386
|
-
ControlledSelect.displayName =
|
|
26387
|
+
ControlledSelect.displayName = "ControlledSelect";
|
|
26387
26388
|
|
|
26388
26389
|
// ==============================|| DESLIZADOR CONTROLADO ||============================== //
|
|
26389
26390
|
const ControlledSlider$1 = (props) => {
|
|
@@ -26416,19 +26417,27 @@ const ControlledText = (props) => {
|
|
|
26416
26417
|
};
|
|
26417
26418
|
return (
|
|
26418
26419
|
// controlador
|
|
26419
|
-
jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error }
|
|
26420
|
+
jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error } }) => {
|
|
26420
26421
|
return (
|
|
26421
26422
|
// campo de texto
|
|
26422
|
-
jsx(TextField, { variant:
|
|
26423
|
+
jsx(TextField, { variant: "outlined", size: "small", id: props.name, label: props.label, value: value ? value.toString() : "", onChange: onChange, error: !!error, type: props.extraProps?.password
|
|
26424
|
+
? showPassword
|
|
26425
|
+
? "text"
|
|
26426
|
+
: "password"
|
|
26427
|
+
: "text", helperText: error
|
|
26428
|
+
? error.message
|
|
26429
|
+
: props.fieldProps?.helperText
|
|
26430
|
+
? props.fieldProps.helperText
|
|
26431
|
+
: " ", fullWidth: true, slotProps: {
|
|
26423
26432
|
input: {
|
|
26424
26433
|
// ícono de mostar u ocultar si es campo de contarseña
|
|
26425
|
-
endAdornment: props.extraProps?.password && (jsx(InputAdornment$1, { position:
|
|
26426
|
-
color:
|
|
26427
|
-
|
|
26428
|
-
color:
|
|
26429
|
-
}
|
|
26430
|
-
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) }))
|
|
26431
|
-
}
|
|
26434
|
+
endAdornment: props.extraProps?.password && (jsx(InputAdornment$1, { position: "end", children: jsx(IconButton, { "aria-label": "toggle password visibility", tabIndex: -1, onClick: handleShowPassword, edge: "end", size: "large", sx: {
|
|
26435
|
+
color: "secondary.darker",
|
|
26436
|
+
"&:hover": {
|
|
26437
|
+
color: "secondary.main",
|
|
26438
|
+
},
|
|
26439
|
+
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) })),
|
|
26440
|
+
},
|
|
26432
26441
|
}, ...props.fieldProps }));
|
|
26433
26442
|
} }));
|
|
26434
26443
|
};
|
|
@@ -26488,16 +26497,15 @@ const ControlledTimePicker = (props) => {
|
|
|
26488
26497
|
const filedProps = useMemo(() => {
|
|
26489
26498
|
const defaultProps = {
|
|
26490
26499
|
slotProps: {
|
|
26491
|
-
textField: { size:
|
|
26492
|
-
field: { clearable: true
|
|
26493
|
-
}
|
|
26500
|
+
textField: { size: "small" },
|
|
26501
|
+
field: { clearable: true },
|
|
26502
|
+
},
|
|
26494
26503
|
};
|
|
26495
26504
|
return merge$1({}, defaultProps, props.fieldProps);
|
|
26496
26505
|
}, [props.fieldProps]);
|
|
26497
|
-
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error }
|
|
26498
|
-
const val = convertValueToDayjs(value,
|
|
26499
|
-
return (jsxs(FormGroup, { sx: { width: 1 }, color:
|
|
26500
|
-
jsx(FormHelperText$1, { error: !!error, children: error ? error.message : ' ' })] }));
|
|
26506
|
+
return (jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, fieldState: { error } }) => {
|
|
26507
|
+
const val = convertValueToDayjs(value, "time");
|
|
26508
|
+
return (jsxs(FormGroup, { sx: { width: 1 }, color: "secondary", children: [jsx(LocalizationProvider, { dateAdapter: AdapterDayjs, children: jsx(TimePicker, { label: props.label, onChange: (v) => handleChange(v, "time", onChange), value: val || null, ...filedProps }) }), !props.extraProps?.disableHT && (jsx(FormHelperText$1, { error: !!error, children: error ? error.message : " " }))] }));
|
|
26501
26509
|
} }));
|
|
26502
26510
|
};
|
|
26503
26511
|
|
|
@@ -26517,22 +26525,23 @@ const ControlledSlider = (props) => {
|
|
|
26517
26525
|
|
|
26518
26526
|
const DeleteConfirmationDialog = (props) => {
|
|
26519
26527
|
const notifications = useNotifications();
|
|
26520
|
-
const pathname =
|
|
26521
|
-
const id = useMemo(() => props.id || pathname.split(
|
|
26528
|
+
const pathname = "temp";
|
|
26529
|
+
const id = useMemo(() => props.id || pathname.split("/").at(-1), [pathname, props.id]);
|
|
26522
26530
|
const [mutation] = props.mutation();
|
|
26523
26531
|
const schema = object({ confirmation: string() });
|
|
26524
26532
|
const form = useForm({
|
|
26525
26533
|
resolver: zodResolver(schema),
|
|
26526
|
-
defaultValues: { confirmation:
|
|
26534
|
+
defaultValues: { confirmation: "" },
|
|
26527
26535
|
});
|
|
26528
26536
|
const handleClose = () => {
|
|
26529
26537
|
props.handleClose();
|
|
26530
26538
|
form.reset();
|
|
26531
26539
|
};
|
|
26532
|
-
const confirmation = form.watch(
|
|
26533
|
-
const disabled = useMemo(() => confirmation !=
|
|
26540
|
+
const confirmation = form.watch("confirmation").toUpperCase();
|
|
26541
|
+
const disabled = useMemo(() => confirmation != "ELIMINAR", [confirmation]);
|
|
26534
26542
|
const onSubmitHandler = () => {
|
|
26535
|
-
mutation({ id: id })
|
|
26543
|
+
mutation({ id: id })
|
|
26544
|
+
.unwrap()
|
|
26536
26545
|
.then(() => {
|
|
26537
26546
|
if (props.disableNavBack) {
|
|
26538
26547
|
handleClose();
|
|
@@ -26541,25 +26550,25 @@ const DeleteConfirmationDialog = (props) => {
|
|
|
26541
26550
|
// props.navigate(-1);
|
|
26542
26551
|
form.reset();
|
|
26543
26552
|
}
|
|
26544
|
-
notifications.show(
|
|
26553
|
+
notifications.show("Objeto removido exitosamente!", { severity: "success" });
|
|
26545
26554
|
})
|
|
26546
26555
|
.catch((error) => {
|
|
26547
26556
|
console.log(error);
|
|
26548
|
-
notifications.show(
|
|
26557
|
+
notifications.show("Error", { severity: "error" });
|
|
26549
26558
|
});
|
|
26550
26559
|
};
|
|
26551
26560
|
const handleKeyDown = (event) => {
|
|
26552
|
-
if (event.key ===
|
|
26561
|
+
if (event.key === "Enter" && !disabled)
|
|
26553
26562
|
onSubmitHandler();
|
|
26554
26563
|
};
|
|
26555
|
-
return (jsxs(Dialog, { open: props.open, onClose: handleClose, children: [jsx(DialogTitle, { variant:
|
|
26564
|
+
return (jsxs(Dialog, { open: props.open, onClose: handleClose, children: [jsx(DialogTitle, { variant: "h5", children: "Eliminar" }), jsxs(DialogContent$1, { children: [jsx(DialogContentText, { sx: { pb: 2 }, children: "\u00BFEst\u00E1 seguro que quiere eliminar el objeto?" }), jsx(Box, { id: "eliminar-formulario", width: "100%", position: "relative", children: jsx(ControlledText, { name: "confirmation", control: form.control, fieldProps: {
|
|
26556
26565
|
autoFocus: true,
|
|
26557
26566
|
required: true,
|
|
26558
|
-
margin:
|
|
26567
|
+
margin: "dense",
|
|
26559
26568
|
label: "Escribir 'ELIMINAR' para confirmar.",
|
|
26560
26569
|
fullWidth: true,
|
|
26561
|
-
variant:
|
|
26562
|
-
helperText:
|
|
26570
|
+
variant: "standard",
|
|
26571
|
+
helperText: "",
|
|
26563
26572
|
onKeyDown: handleKeyDown,
|
|
26564
26573
|
} }) })] }), jsxs(DialogActions$1, { children: [jsx(Button, { onClick: handleClose, children: "Cancelar" }), jsx(Button, { onClick: onSubmitHandler, disabled: disabled, children: "Eliminar" })] })] }));
|
|
26565
26574
|
};
|
|
@@ -26574,23 +26583,23 @@ const DeleteButton = (props) => {
|
|
|
26574
26583
|
};
|
|
26575
26584
|
// ===== || KEYDOWN || ===== //
|
|
26576
26585
|
const handleKeyPress = useCallback((event) => {
|
|
26577
|
-
if (event.ctrlKey && event.key ===
|
|
26586
|
+
if (event.ctrlKey && event.key === "d") {
|
|
26578
26587
|
event.preventDefault();
|
|
26579
26588
|
handleClick();
|
|
26580
26589
|
}
|
|
26581
26590
|
}, [handleClick]);
|
|
26582
26591
|
useEffect(() => {
|
|
26583
|
-
document.addEventListener(
|
|
26592
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26584
26593
|
return () => {
|
|
26585
|
-
document.removeEventListener(
|
|
26594
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26586
26595
|
};
|
|
26587
26596
|
}, [handleKeyPress]);
|
|
26588
26597
|
return (jsxs(Fragment, { children: [jsx(NormalOrIcon, { buttonProps: {
|
|
26589
|
-
color:
|
|
26590
|
-
variant:
|
|
26598
|
+
color: "error",
|
|
26599
|
+
variant: "contained",
|
|
26591
26600
|
startIcon: jsx(DeleteIcon, {}),
|
|
26592
26601
|
onClick: handleClick,
|
|
26593
|
-
children:
|
|
26602
|
+
children: "Eliminar",
|
|
26594
26603
|
} }), jsx(DeleteConfirmationDialog, { open: open, handleClose: handleClose, ...props })] }));
|
|
26595
26604
|
};
|
|
26596
26605
|
|
|
@@ -26601,104 +26610,104 @@ const SaveCancelButton = (props) => {
|
|
|
26601
26610
|
};
|
|
26602
26611
|
// ===== || KEYDOWN || ===== //
|
|
26603
26612
|
const handleKeyPress = useCallback((event) => {
|
|
26604
|
-
if (event.key ===
|
|
26613
|
+
if (event.key === "Escape") {
|
|
26605
26614
|
event.preventDefault();
|
|
26606
26615
|
handleCancel();
|
|
26607
26616
|
}
|
|
26608
26617
|
}, [handleCancel]);
|
|
26609
26618
|
useEffect(() => {
|
|
26610
|
-
document.addEventListener(
|
|
26619
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26611
26620
|
return () => {
|
|
26612
|
-
document.removeEventListener(
|
|
26621
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26613
26622
|
};
|
|
26614
26623
|
}, [handleKeyPress]);
|
|
26615
26624
|
return (jsxs(ButtonGroup, { sx: {
|
|
26616
26625
|
maxHeight: 40,
|
|
26617
26626
|
}, ...props.slotProps?.buttonGroup, children: [jsx(NormalOrIcon, { buttonProps: {
|
|
26618
|
-
color:
|
|
26619
|
-
variant:
|
|
26627
|
+
color: "error",
|
|
26628
|
+
variant: "contained",
|
|
26620
26629
|
startIcon: jsx(CancelIcon, {}),
|
|
26621
26630
|
onClick: handleCancel,
|
|
26622
26631
|
sx: { height: 1 },
|
|
26623
|
-
children:
|
|
26624
|
-
...props.slotProps?.cancelBtn
|
|
26632
|
+
children: "Cancelar",
|
|
26633
|
+
...props.slotProps?.cancelBtn,
|
|
26625
26634
|
} }), jsx(NormalOrIcon, { buttonProps: {
|
|
26626
|
-
color:
|
|
26627
|
-
variant:
|
|
26635
|
+
color: "secondary",
|
|
26636
|
+
variant: "contained",
|
|
26628
26637
|
startIcon: jsx(SaveIcon, {}),
|
|
26629
|
-
type:
|
|
26630
|
-
form:
|
|
26638
|
+
type: "submit",
|
|
26639
|
+
form: "formulario",
|
|
26631
26640
|
sx: { height: 1 },
|
|
26632
|
-
children:
|
|
26633
|
-
...props.slotProps?.saveBtn
|
|
26641
|
+
children: "Guardar",
|
|
26642
|
+
...props.slotProps?.saveBtn,
|
|
26634
26643
|
} })] }));
|
|
26635
26644
|
};
|
|
26636
26645
|
|
|
26637
26646
|
const CreateButtonBase = (props) => {
|
|
26638
26647
|
// ===== || KEYDOWN || ===== //
|
|
26639
26648
|
const handleKeyPress = useCallback((event) => {
|
|
26640
|
-
if (event.ctrlKey && event.key ===
|
|
26649
|
+
if (event.ctrlKey && event.key === "e") {
|
|
26641
26650
|
event.preventDefault();
|
|
26642
26651
|
props.handleClick();
|
|
26643
26652
|
}
|
|
26644
26653
|
}, []);
|
|
26645
26654
|
useEffect(() => {
|
|
26646
|
-
document.addEventListener(
|
|
26655
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
26647
26656
|
return () => {
|
|
26648
|
-
document.removeEventListener(
|
|
26657
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
26649
26658
|
};
|
|
26650
26659
|
}, [handleKeyPress]);
|
|
26651
26660
|
return (jsx(NormalOrIcon, { buttonProps: {
|
|
26652
|
-
id:
|
|
26653
|
-
variant:
|
|
26654
|
-
color:
|
|
26661
|
+
id: "create-button",
|
|
26662
|
+
variant: "contained",
|
|
26663
|
+
color: "secondary",
|
|
26655
26664
|
startIcon: jsx(AddIcon, {}),
|
|
26656
26665
|
onClick: props.handleClick,
|
|
26657
|
-
|
|
26658
|
-
|
|
26659
|
-
|
|
26666
|
+
"aria-controls": props.open ? "create-menu" : undefined,
|
|
26667
|
+
"aria-haspopup": true,
|
|
26668
|
+
"aria-expanded": props.open ? "true" : undefined,
|
|
26660
26669
|
endIcon: jsx(KeyboardArrowDownIcon, {}),
|
|
26661
|
-
children:
|
|
26670
|
+
children: "Crear",
|
|
26662
26671
|
...props.buttonProps,
|
|
26663
26672
|
} }));
|
|
26664
26673
|
};
|
|
26665
26674
|
|
|
26666
26675
|
const MenuItemWithLoading = (props) => {
|
|
26667
26676
|
return (jsxs(MenuItem, { onClick: props.handleClick, sx: {
|
|
26668
|
-
position:
|
|
26669
|
-
}, disabled: props.disabled || props.isLoading, children: [props.children, props.isLoading &&
|
|
26670
|
-
|
|
26671
|
-
|
|
26672
|
-
}, px: 2, children: jsx(LinearProgress$1, {}) })] }));
|
|
26677
|
+
position: "relative",
|
|
26678
|
+
}, disabled: props.disabled || props.isLoading, children: [props.children, props.isLoading && (jsx(Box, { position: "absolute", width: 1, top: "50%", left: "50%", sx: {
|
|
26679
|
+
transform: "translate(-50%, -50%)",
|
|
26680
|
+
}, px: 2, children: jsx(LinearProgress$1, {}) }))] }));
|
|
26673
26681
|
};
|
|
26674
26682
|
|
|
26675
26683
|
const StyledMenu = styled$1((props) => (jsx(Menu, { elevation: 0, anchorOrigin: {
|
|
26676
|
-
vertical:
|
|
26677
|
-
horizontal:
|
|
26684
|
+
vertical: "bottom",
|
|
26685
|
+
horizontal: "right",
|
|
26678
26686
|
}, transformOrigin: {
|
|
26679
|
-
vertical:
|
|
26680
|
-
horizontal:
|
|
26687
|
+
vertical: "top",
|
|
26688
|
+
horizontal: "right",
|
|
26681
26689
|
}, ...props })))(({ theme }) => ({
|
|
26682
|
-
|
|
26690
|
+
"& .MuiPaper-root": {
|
|
26683
26691
|
borderRadius: 6,
|
|
26684
26692
|
marginTop: theme.spacing(1),
|
|
26685
26693
|
minWidth: 180,
|
|
26686
|
-
color:
|
|
26687
|
-
|
|
26688
|
-
|
|
26689
|
-
|
|
26694
|
+
color: "rgb(55, 65, 81)",
|
|
26695
|
+
backgroundColor: theme.palette.primary.lighter,
|
|
26696
|
+
boxShadow: "rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px",
|
|
26697
|
+
"& .MuiMenu-list": {
|
|
26698
|
+
padding: "4px 0",
|
|
26690
26699
|
},
|
|
26691
|
-
|
|
26692
|
-
|
|
26693
|
-
|
|
26694
|
-
|
|
26695
|
-
|
|
26696
|
-
|
|
26697
|
-
|
|
26698
|
-
|
|
26700
|
+
"& .MuiMenuItem-root": {
|
|
26701
|
+
borderRadius: 12,
|
|
26702
|
+
"&:hover": {
|
|
26703
|
+
backgroundColor: theme.palette.primary.main,
|
|
26704
|
+
color: "white",
|
|
26705
|
+
"& .MuiSvgIcon-root": {
|
|
26706
|
+
color: "white",
|
|
26707
|
+
},
|
|
26699
26708
|
},
|
|
26700
26709
|
},
|
|
26701
|
-
...theme.applyStyles(
|
|
26710
|
+
...theme.applyStyles("dark", {
|
|
26702
26711
|
color: theme.palette.grey[300],
|
|
26703
26712
|
}),
|
|
26704
26713
|
},
|
|
@@ -26708,7 +26717,7 @@ const CreateButtonWithMenuOptions = (props) => {
|
|
|
26708
26717
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
26709
26718
|
const open = Boolean(anchorEl);
|
|
26710
26719
|
const handleClick = () => {
|
|
26711
|
-
setAnchorEl(document.getElementById(
|
|
26720
|
+
setAnchorEl(document.getElementById("create-button"));
|
|
26712
26721
|
};
|
|
26713
26722
|
const handleClose = () => {
|
|
26714
26723
|
setAnchorEl(null);
|
|
@@ -26722,20 +26731,22 @@ const CreateButtonWithMenuOptions = (props) => {
|
|
|
26722
26731
|
};
|
|
26723
26732
|
if (!props.permission)
|
|
26724
26733
|
return null;
|
|
26725
|
-
return (jsxs(Fragment, { children: [jsx(CreateButtonBase, { open: open, handleClick: handleClick }), jsxs(StyledMenu, { id:
|
|
26726
|
-
|
|
26727
|
-
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
26728
|
-
|
|
26729
|
-
|
|
26730
|
-
|
|
26731
|
-
|
|
26732
|
-
|
|
26733
|
-
|
|
26734
|
-
|
|
26735
|
-
|
|
26736
|
-
|
|
26737
|
-
|
|
26738
|
-
|
|
26734
|
+
return (jsxs(Fragment, { children: [jsx(CreateButtonBase, { open: open, handleClick: handleClick }), jsxs(StyledMenu, { id: "create-menu", MenuListProps: {
|
|
26735
|
+
"aria-labelledby": "create-menu-button",
|
|
26736
|
+
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
26737
|
+
[
|
|
26738
|
+
{
|
|
26739
|
+
title: "CSV",
|
|
26740
|
+
endpoint: props.pathname,
|
|
26741
|
+
icon: AttachFileIcon,
|
|
26742
|
+
},
|
|
26743
|
+
...(props.csv_upload.extraOptions || []),
|
|
26744
|
+
].map((option, index) => {
|
|
26745
|
+
return (jsxs(MenuItem, { onClick: () => {
|
|
26746
|
+
handleToggleOpen(option);
|
|
26747
|
+
handleClose();
|
|
26748
|
+
}, disableRipple: true, children: [option.icon && (jsx(ListItemIcon, { children: jsx(AttachFileIcon, {}) })), option.title] }, index));
|
|
26749
|
+
}), jsx(MenuItem, { onClick: () => {
|
|
26739
26750
|
props.navigate(`crear`);
|
|
26740
26751
|
handleClose();
|
|
26741
26752
|
}, disableRipple: true, children: "Manual" })] }), props.csv_upload?.enable && (jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data }))] }));
|
|
@@ -26748,12 +26759,12 @@ const ButtonWithDrawer = (props) => {
|
|
|
26748
26759
|
let setFunc = setInternalOpen;
|
|
26749
26760
|
if (props.setOpen)
|
|
26750
26761
|
setFunc = props.setOpen;
|
|
26751
|
-
setFunc(prevState => !prevState);
|
|
26762
|
+
setFunc((prevState) => !prevState);
|
|
26752
26763
|
};
|
|
26753
26764
|
const configuracionBase = {
|
|
26754
|
-
variant:
|
|
26765
|
+
variant: "contained",
|
|
26755
26766
|
fullWidth: true,
|
|
26756
|
-
color:
|
|
26767
|
+
color: "primary",
|
|
26757
26768
|
};
|
|
26758
26769
|
const renderButton = () => {
|
|
26759
26770
|
if (props.slots.button)
|
|
@@ -26762,7 +26773,10 @@ const ButtonWithDrawer = (props) => {
|
|
|
26762
26773
|
};
|
|
26763
26774
|
return (jsxs(Fragment, { children: [renderButton(), jsx(MainDrawer, { open: open, drawerToggle: handleClick, title: props.slots.drawer.title, slots: {
|
|
26764
26775
|
button: props.slots.drawer.button,
|
|
26765
|
-
}, children: props.slots.drawer.content({
|
|
26776
|
+
}, children: props.slots.drawer.content({
|
|
26777
|
+
...props.slotProps?.drawer?.content,
|
|
26778
|
+
handleClose: handleClick,
|
|
26779
|
+
}) })] }));
|
|
26766
26780
|
};
|
|
26767
26781
|
|
|
26768
26782
|
const StatusBadge = (props) => {
|
|
@@ -26951,16 +26965,16 @@ const UncontrolledText = (props) => {
|
|
|
26951
26965
|
const handleShowPassword = () => {
|
|
26952
26966
|
setShowPassword(!showPassword);
|
|
26953
26967
|
};
|
|
26954
|
-
return (jsx(TextField, { variant:
|
|
26968
|
+
return (jsx(TextField, { variant: "outlined", id: props.name, name: props.name, label: props.label, type: props.password ? (showPassword ? "text" : "password") : "text", helperText: props.textFieldProps?.helperText ? props.textFieldProps.helperText : " ", slotProps: {
|
|
26955
26969
|
input: {
|
|
26956
26970
|
// ícono de mostar u ocultar si es campo de contarseña
|
|
26957
|
-
endAdornment: props.password && (jsx(InputAdornment$1, { position:
|
|
26958
|
-
color:
|
|
26959
|
-
|
|
26960
|
-
color:
|
|
26961
|
-
}
|
|
26962
|
-
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) }))
|
|
26963
|
-
}
|
|
26971
|
+
endAdornment: props.password && (jsx(InputAdornment$1, { position: "end", children: jsx(IconButton, { "aria-label": "toggle password visibility", tabIndex: -1, onClick: handleShowPassword, edge: "end", size: "large", sx: {
|
|
26972
|
+
color: "secondary.darker",
|
|
26973
|
+
"&:hover": {
|
|
26974
|
+
color: "secondary.main",
|
|
26975
|
+
},
|
|
26976
|
+
}, children: showPassword ? jsx(Visibility, {}) : jsx(VisibilityOff, {}) }) })),
|
|
26977
|
+
},
|
|
26964
26978
|
}, ...props.textFieldProps }));
|
|
26965
26979
|
};
|
|
26966
26980
|
|
|
@@ -27032,9 +27046,8 @@ const generateSchema = (columns, columnsFilter, id) => {
|
|
|
27032
27046
|
};
|
|
27033
27047
|
|
|
27034
27048
|
const FiltersPopper = (props) => {
|
|
27035
|
-
|
|
27036
|
-
|
|
27037
|
-
const id = 1;
|
|
27049
|
+
const params = useLoaderData();
|
|
27050
|
+
const id = params?.id;
|
|
27038
27051
|
const columns = useGridApiContext().current.getAllColumns();
|
|
27039
27052
|
const [schema, defaultValues] = useMemo(() => generateSchema(columns, props.columnsFilter, id), [columns, id, props.columnsFilter]);
|
|
27040
27053
|
const form = useForm({
|
|
@@ -27044,14 +27057,16 @@ const FiltersPopper = (props) => {
|
|
|
27044
27057
|
const [dirty, setDirty] = useState(false);
|
|
27045
27058
|
useEffect(() => {
|
|
27046
27059
|
if (props.filters.filterModel.items) {
|
|
27047
|
-
if (!every(props.filters.filterModel.items, function (_value, key) {
|
|
27060
|
+
if (!every(props.filters.filterModel.items, function (_value, key) {
|
|
27061
|
+
return includes$1(props.protectFilters, key);
|
|
27062
|
+
})) {
|
|
27048
27063
|
setDirty(true);
|
|
27049
27064
|
}
|
|
27050
27065
|
form.reset(merge$2({}, defaultValues, props.filters.filterModel.items));
|
|
27051
27066
|
}
|
|
27052
27067
|
}, [defaultValues, props.filters.filterModel.items, form, props.protectFilters]);
|
|
27053
27068
|
const handleClose = (event) => {
|
|
27054
|
-
if (props.menuRef.current && event?.target.tagName ==
|
|
27069
|
+
if (props.menuRef.current && event?.target.tagName == "BODY")
|
|
27055
27070
|
return;
|
|
27056
27071
|
props.setOpen(false);
|
|
27057
27072
|
};
|
|
@@ -27059,9 +27074,9 @@ const FiltersPopper = (props) => {
|
|
|
27059
27074
|
setDirty(false);
|
|
27060
27075
|
props.filters.setFilterModel(produce((draft) => {
|
|
27061
27076
|
forEach$1(props.filters.filterModel.items, function (_value, key) {
|
|
27062
|
-
if ([
|
|
27077
|
+
if (["ordering", "search"].concat(props.protectFilters || []).includes(key))
|
|
27063
27078
|
return;
|
|
27064
|
-
delete draft[
|
|
27079
|
+
delete draft["items"][key];
|
|
27065
27080
|
});
|
|
27066
27081
|
}));
|
|
27067
27082
|
form.reset(defaultValues);
|
|
@@ -27069,75 +27084,82 @@ const FiltersPopper = (props) => {
|
|
|
27069
27084
|
};
|
|
27070
27085
|
const onSubmitHandler = (submitData) => {
|
|
27071
27086
|
props.filters.setFilterModel(produce((draft) => {
|
|
27072
|
-
draft[
|
|
27087
|
+
draft["items"] = { ...draft["items"], ...submitData };
|
|
27073
27088
|
}));
|
|
27074
27089
|
handleClose();
|
|
27075
27090
|
};
|
|
27076
27091
|
const onError = (errors) => {
|
|
27077
27092
|
console.log(errors);
|
|
27078
27093
|
};
|
|
27079
|
-
return (jsx(Box, { id:
|
|
27094
|
+
return (jsx(Box, { id: "filtros", children: jsx(Popper, { id: "filters-menu", open: props.open, anchorEl: props.menuRef.current, placement: "bottom-end", transition: true, sx: { zIndex: 1202 }, children: ({ TransitionProps }) => (jsx(Grow$1, { ...TransitionProps, timeout: 350, children: jsx(Paper, { elevation: 5, sx: { zIndex: 5 }, children: jsx(ClickAwayListener, { onClickAway: handleClose, children: jsxs(Grid, { size: 12, container: true, padding: 2, width: 350, maxWidth: "100%", children: [jsx(Grid, { size: 12, container: true, rowSpacing: 2, maxHeight: 300, overflow: "auto", children: columns.map((column, index) => {
|
|
27080
27095
|
if (column.input)
|
|
27081
|
-
return (jsxs(Grid, { size: 12, container: true, direction:
|
|
27082
|
-
|
|
27083
|
-
|
|
27096
|
+
return (jsxs(Grid, { size: 12, container: true, direction: "column", spacing: 0, children: [jsx(Grid, { size: 12, children: jsx(Typography$1, { fontWeight: "bold", gutterBottom: true, children: column.filterName ||
|
|
27097
|
+
column.headerName }) }), jsx(Grid, { size: 12, children: Children.map(column.input, (child) => {
|
|
27098
|
+
let addedProps = {
|
|
27099
|
+
control: form.control,
|
|
27100
|
+
};
|
|
27101
|
+
if (column.type == "number") {
|
|
27084
27102
|
addedProps = {
|
|
27085
27103
|
...addedProps,
|
|
27086
27104
|
extraProps: {
|
|
27087
|
-
...child.props
|
|
27105
|
+
...child.props
|
|
27106
|
+
.extraProps,
|
|
27088
27107
|
getValue: form.getValues,
|
|
27089
27108
|
setValue: form.setValue,
|
|
27090
|
-
}
|
|
27109
|
+
},
|
|
27091
27110
|
};
|
|
27092
27111
|
}
|
|
27093
27112
|
return cloneElement(child, {
|
|
27094
27113
|
...child.props,
|
|
27095
|
-
...addedProps
|
|
27114
|
+
...addedProps,
|
|
27096
27115
|
});
|
|
27097
27116
|
}) })] }, index));
|
|
27098
27117
|
return null;
|
|
27099
|
-
}) }), jsx(Grid, { size: 12, py: 2, children: jsx(Divider, {}) }), jsxs(Grid, { size: 12, display:
|
|
27118
|
+
}) }), jsx(Grid, { size: 12, py: 2, children: jsx(Divider, {}) }), jsxs(Grid, { size: 12, display: "flex", justifyContent: "space-evenly", children: [jsx(Button, { disabled: (!form.formState.isDirty ||
|
|
27119
|
+
props.disableQuickSearch) &&
|
|
27120
|
+
!dirty, startIcon: jsx(ClearIcon$1, {}), variant: "outlined", onClick: handleClear, children: "Limpiar" }), jsx(Button, { loading: props.disableQuickSearch, disabled: !form.formState.isDirty, startIcon: jsx(FilterAltIcon, {}), variant: "outlined", onClick: form.handleSubmit(onSubmitHandler, onError), children: "Aplicar" })] })] }) }) }) })) }) }));
|
|
27100
27121
|
};
|
|
27101
27122
|
|
|
27102
27123
|
const FiltersButton = (props) => {
|
|
27103
27124
|
const [open, setOpen] = useState(false);
|
|
27104
27125
|
const menuRef = useRef(null);
|
|
27105
27126
|
const handleClick = () => {
|
|
27106
|
-
setOpen(prevState => !prevState);
|
|
27127
|
+
setOpen((prevState) => !prevState);
|
|
27107
27128
|
};
|
|
27108
27129
|
const filterCount = useMemo(() => {
|
|
27109
27130
|
return countBy(Object.entries(props.filters.filterModel.items), function (filter) {
|
|
27110
27131
|
const key = filter[0];
|
|
27111
27132
|
const value = filter[1];
|
|
27112
|
-
if (key ==
|
|
27133
|
+
if (key == "ordering" || key == "search")
|
|
27113
27134
|
return;
|
|
27114
|
-
if (props.protectFilters &&
|
|
27135
|
+
if (props.protectFilters &&
|
|
27136
|
+
findIndex(props.protectFilters, function (x) {
|
|
27137
|
+
return x == key;
|
|
27138
|
+
}) > -1)
|
|
27115
27139
|
return;
|
|
27116
27140
|
return (isNumber(value) && value > 0) || !isEmpty$1(value) || isBoolean(value);
|
|
27117
27141
|
}).true;
|
|
27118
|
-
}, [
|
|
27119
|
-
props.filters.filterModel.items, props.protectFilters
|
|
27120
|
-
]);
|
|
27142
|
+
}, [props.filters.filterModel.items, props.protectFilters]);
|
|
27121
27143
|
// ===== || ABRIR CON CTRL + Shift + F || ===== //
|
|
27122
27144
|
const handleKeyPress = useCallback((event) => {
|
|
27123
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27145
|
+
if (event.ctrlKey && event.shiftKey && event.key === "F") {
|
|
27124
27146
|
event.preventDefault();
|
|
27125
27147
|
setOpen(true);
|
|
27126
27148
|
}
|
|
27127
|
-
else if (event.key ===
|
|
27149
|
+
else if (event.key === "Escape" && open) {
|
|
27128
27150
|
setOpen(false);
|
|
27129
27151
|
}
|
|
27130
27152
|
}, [open]);
|
|
27131
27153
|
useEffect(() => {
|
|
27132
|
-
document.addEventListener(
|
|
27154
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27133
27155
|
return () => {
|
|
27134
|
-
document.removeEventListener(
|
|
27156
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27135
27157
|
};
|
|
27136
27158
|
}, [handleKeyPress]);
|
|
27137
|
-
return (jsxs(Fragment, { children: [jsx(Tooltip$1, { title: "Filtros", children: jsx(ToolbarButton, { ref: menuRef, id: "filters-menu-trigger", "aria-controls": "filters-menu", "aria-haspopup": "true", "aria-expanded": open ?
|
|
27138
|
-
if (key.key ==
|
|
27159
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip$1, { title: "Filtros", children: jsx(ToolbarButton, { ref: menuRef, id: "filters-menu-trigger", "aria-controls": "filters-menu", "aria-haspopup": "true", "aria-expanded": open ? "true" : undefined, color: "default", onClick: handleClick, onKeyDown: (key) => {
|
|
27160
|
+
if (key.key == "Escape")
|
|
27139
27161
|
setOpen(false);
|
|
27140
|
-
}, className:
|
|
27162
|
+
}, className: "my-icon-button", children: jsx(Badge, { badgeContent: filterCount, color: "primary", children: jsx(FilterListIcon, { fontSize: "small" }) }) }) }), jsx(FiltersPopper, { ...props, menuRef: menuRef, open: open, setOpen: setOpen })] }));
|
|
27141
27163
|
};
|
|
27142
27164
|
|
|
27143
27165
|
const ExportCSV = (props) => {
|
|
@@ -27149,41 +27171,46 @@ const ExportCSV = (props) => {
|
|
|
27149
27171
|
const handleClick = () => {
|
|
27150
27172
|
const extraItems = { variant: props.slots?.variant };
|
|
27151
27173
|
if (props.rowSelectionModel.ids.size > 0)
|
|
27152
|
-
extraItems[`${props.slots?.column_key ||
|
|
27153
|
-
const filters = merge$2({}, omit(props.filterModel, map(props.ignore?.filters, function (filter) {
|
|
27174
|
+
extraItems[`${props.slots?.column_key || "id"}__in`] = Array.from(props.rowSelectionModel.ids).join(",");
|
|
27175
|
+
const filters = merge$2({}, omit(props.filterModel, map(props.ignore?.filters, function (filter) {
|
|
27176
|
+
return `items.${filter}`;
|
|
27177
|
+
}) || []), { items: extraItems });
|
|
27154
27178
|
descargarCSV({
|
|
27155
|
-
endpoint: endpoint,
|
|
27156
|
-
|
|
27179
|
+
endpoint: endpoint,
|
|
27180
|
+
filterModel: filters,
|
|
27181
|
+
sortModel: props.sortModel,
|
|
27182
|
+
ignoreSort: props.ignore?.sort,
|
|
27183
|
+
})
|
|
27184
|
+
.unwrap()
|
|
27157
27185
|
.then((response) => {
|
|
27158
27186
|
const file = document.createElement("a");
|
|
27159
27187
|
file.href = response.file;
|
|
27160
27188
|
file.download = response.filename;
|
|
27161
27189
|
file.click();
|
|
27162
|
-
notifications.show(
|
|
27190
|
+
notifications.show("CSV descargado!", { severity: "success" });
|
|
27163
27191
|
props.handleClick();
|
|
27164
27192
|
})
|
|
27165
27193
|
.catch((error) => {
|
|
27166
27194
|
console.log(error);
|
|
27167
|
-
notifications.show(
|
|
27195
|
+
notifications.show("Error al descargar CSV.", { severity: "error" });
|
|
27168
27196
|
});
|
|
27169
27197
|
};
|
|
27170
|
-
return (jsx(MenuItemWithLoading, { handleClick: handleClick, isLoading: isLoading, disabled: props.disabledWithoutSelection && !props.rowSelectionModel.ids.size, children: props.slots?.title ||
|
|
27198
|
+
return (jsx(MenuItemWithLoading, { handleClick: handleClick, isLoading: isLoading, disabled: props.disabledWithoutSelection && !props.rowSelectionModel.ids.size, children: props.slots?.title || "Descargar como CSV" }, "export-dg-csv"));
|
|
27171
27199
|
};
|
|
27172
27200
|
|
|
27173
27201
|
const ExportButton = (props) => {
|
|
27174
27202
|
const [exportMenuOpen, setExportMenuOpen] = useState(false);
|
|
27175
27203
|
const exportMenuTriggerRef = useRef(null);
|
|
27176
|
-
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: "Exportar", children: jsx(ToolbarButton, { ref: exportMenuTriggerRef, id: "export-menu-trigger", "aria-controls": "export-menu", "aria-haspopup": "true", "aria-expanded": exportMenuOpen ?
|
|
27204
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: "Exportar", children: jsx(ToolbarButton, { ref: exportMenuTriggerRef, id: "export-menu-trigger", "aria-controls": "export-menu", "aria-haspopup": "true", "aria-expanded": exportMenuOpen ? "true" : undefined, onClick: () => setExportMenuOpen(true), className: "my-icon-button", children: jsx(FileDownloadIcon, { fontSize: "small" }) }) }), jsxs(Menu$1, { id: "export-menu", anchorEl: exportMenuTriggerRef.current, open: exportMenuOpen, onClose: () => setExportMenuOpen(false), anchorOrigin: { vertical: "bottom", horizontal: "left" }, transformOrigin: { vertical: "top", horizontal: "left" }, slotProps: {
|
|
27177
27205
|
list: {
|
|
27178
|
-
|
|
27206
|
+
"aria-labelledby": "export-menu-trigger",
|
|
27179
27207
|
},
|
|
27180
|
-
}, children: [!props.csvProps?.hide &&
|
|
27181
|
-
|
|
27182
|
-
|
|
27183
|
-
} }), props.extraOptions?.map(item => {
|
|
27208
|
+
}, children: [!props.csvProps?.hide && (jsx(ExportCSV, { handleClick: () => setExportMenuOpen(false), filterModel: props.filterModel, sortModel: props.sortModel, rowSelectionModel: props.rowSelectionModel, slots: {
|
|
27209
|
+
endpoint: props.csvProps?.endpoint,
|
|
27210
|
+
} })), props.extraOptions?.map((item) => {
|
|
27184
27211
|
const csvExport = item.props.csvExport;
|
|
27185
|
-
const remainingProps = omit(item.props,
|
|
27186
|
-
return
|
|
27212
|
+
const remainingProps = omit(item.props, "csvExport");
|
|
27213
|
+
return item.element({
|
|
27187
27214
|
handleClick: () => setExportMenuOpen(false),
|
|
27188
27215
|
filterModel: props.filterModel,
|
|
27189
27216
|
sortModel: props.sortModel,
|
|
@@ -27192,7 +27219,7 @@ const ExportButton = (props) => {
|
|
|
27192
27219
|
...csvExport,
|
|
27193
27220
|
},
|
|
27194
27221
|
...remainingProps,
|
|
27195
|
-
})
|
|
27222
|
+
});
|
|
27196
27223
|
})] })] }));
|
|
27197
27224
|
};
|
|
27198
27225
|
|
|
@@ -27200,34 +27227,33 @@ const ColumnsButton = () => {
|
|
|
27200
27227
|
const apiRef = useGridApiContext();
|
|
27201
27228
|
const allCols = apiRef.current.getAllColumns().length;
|
|
27202
27229
|
const visibleCols = apiRef.current.getVisibleColumns().length;
|
|
27203
|
-
return (jsx(Tooltip, { title: "Columnas", children: jsx(ColumnsPanelTrigger, { render: jsx(ToolbarButton, { className:
|
|
27230
|
+
return (jsx(Tooltip, { title: "Columnas", children: jsx(ColumnsPanelTrigger, { render: jsx(ToolbarButton, { className: "my-icon-button" }), children: jsx(Badge, { color: "primary", variant: "dot", invisible: visibleCols >= allCols, children: jsx(ViewColumnIcon, { fontSize: "small" }) }) }) }));
|
|
27204
27231
|
};
|
|
27205
27232
|
|
|
27206
27233
|
const RefreshButton = (props) => {
|
|
27207
27234
|
// ===== || EJECUTAR CON CTRL + Shift + R || ===== //
|
|
27208
27235
|
const handleKeyPress = useCallback((event) => {
|
|
27209
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27236
|
+
if (event.ctrlKey && event.shiftKey && event.key === "R") {
|
|
27210
27237
|
event.preventDefault();
|
|
27211
27238
|
if (props.refetch)
|
|
27212
27239
|
props.refetch();
|
|
27213
27240
|
}
|
|
27214
27241
|
}, [props]);
|
|
27215
27242
|
useEffect(() => {
|
|
27216
|
-
document.addEventListener(
|
|
27243
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27217
27244
|
return () => {
|
|
27218
|
-
document.removeEventListener(
|
|
27245
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27219
27246
|
};
|
|
27220
27247
|
}, [handleKeyPress]);
|
|
27221
|
-
return (jsx(Tooltip$1, { title:
|
|
27248
|
+
return (jsx(Tooltip$1, { title: "Refrescar", children: jsx(ToolbarButton, { onClick: props.refetch, children: jsx(RefreshIcon, { fontSize: "small" }) }) }));
|
|
27222
27249
|
};
|
|
27223
27250
|
|
|
27224
27251
|
const CustomToolbar = (props) => {
|
|
27225
27252
|
const [expanded, setExpanded] = useState(true);
|
|
27226
27253
|
return (jsx(Toolbar, { style: {
|
|
27227
|
-
minHeight: expanded ?
|
|
27228
|
-
}, children: expanded ? (jsxs(Fragment, { children: [jsxs(Stack, { direction:
|
|
27229
|
-
jsxs(
|
|
27230
|
-
props.extraButtons.map((button, index) => (jsxs(Box, { display: 'flex', children: [jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(Tooltip$1, { title: button.label, children: jsx(ToolbarButton, { onClick: () => button.onClick(), className: 'my-icon-button', ...button.buttonProps, children: jsx(button.icon, { fontSize: "small" }) }) })] }, `toolbar-button-${index}`))), jsx(SelectedRowsButton, { selection: props.selection, extraActions: props.extraActions })] })] })) : (jsx(Box, { width: 1, display: 'flex', justifyContent: 'center', alignItems: 'center', children: jsx(IconButton, { onClick: () => setExpanded(true), children: jsx(ExpandMoreIcon, {}) }) })) }));
|
|
27254
|
+
minHeight: expanded ? "inherit" : "10px",
|
|
27255
|
+
}, children: expanded ? (jsxs(Fragment, { children: [jsxs(Stack, { direction: "row", width: 0.5, justifyContent: "left", children: [!props.buttons?.refresh?.hide && (jsx(RefreshButton, { refetch: props.buttons?.refresh?.refetch })), !(props.buttons?.refresh?.hide || props.buttons?.export?.hide) && (jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } })), !props.buttons?.export?.hide && (jsx(ExportButton, { filterModel: props.filters.filterModel, sortModel: props.sortModel, rowSelectionModel: props.selection, ...props.buttons.export }))] }), jsx(Box, { width: 1, display: "flex", justifyContent: "center", alignItems: "top", children: jsx(IconButton, { size: "small", onClick: () => setExpanded(false), children: jsx(ExpandLessIcon, {}) }) }), jsxs(Stack, { direction: "row", width: 0.5, justifyContent: "right", children: [jsx(ColumnsButton, {}), !props.buttons.filters?.hide && (jsxs(Fragment, { children: [jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(FiltersButton, { ...props })] })), jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(QuickSearch, { disableQuickSearch: props.disableQuickSearch, filters: props.filters }), props.extraButtons &&
|
|
27256
|
+
props.extraButtons.map((button, index) => (jsxs(Box, { display: "flex", children: [jsx(Divider$1, { orientation: "vertical", variant: "middle", flexItem: true, sx: { mx: 0.5 } }), jsx(Tooltip$1, { title: button.label, children: jsx(ToolbarButton, { onClick: () => button.onClick(), className: "my-icon-button", ...button.buttonProps, children: jsx(button.icon, { fontSize: "small" }) }) })] }, `toolbar-button-${index}`))), jsx(SelectedRowsButton, { selection: props.selection, extraActions: props.extraActions })] })] })) : (jsx(Box, { width: 1, display: "flex", justifyContent: "center", alignItems: "center", children: jsx(IconButton, { onClick: () => setExpanded(true), children: jsx(ExpandMoreIcon, {}) }) })) }));
|
|
27231
27257
|
};
|
|
27232
27258
|
|
|
27233
27259
|
const StyledGridOverlay = styled$1('div')(({ theme }) => ({
|
|
@@ -27265,20 +27291,22 @@ function CustomPagination() {
|
|
|
27265
27291
|
}
|
|
27266
27292
|
|
|
27267
27293
|
const DraggableRow = (params) => {
|
|
27268
|
-
const { attributes, listeners, setNodeRef, transform, transition
|
|
27294
|
+
const { attributes, listeners, setNodeRef, transform, transition } = useSortable({
|
|
27295
|
+
id: params.rowId.toString(),
|
|
27296
|
+
});
|
|
27269
27297
|
const style = {
|
|
27270
27298
|
transform: CSS.Transform.toString(transform),
|
|
27271
|
-
transition
|
|
27299
|
+
transition,
|
|
27272
27300
|
};
|
|
27273
|
-
return (jsxs(Box, { display:
|
|
27274
|
-
width:
|
|
27301
|
+
return (jsxs(Box, { display: "flex", ref: setNodeRef, style: style, children: [jsx(Box, { ...attributes, ...listeners, sx: {
|
|
27302
|
+
width: "20px",
|
|
27275
27303
|
height: params.rowHeight,
|
|
27276
|
-
background:
|
|
27277
|
-
borderTop:
|
|
27278
|
-
cursor:
|
|
27279
|
-
|
|
27280
|
-
cursor:
|
|
27281
|
-
}
|
|
27304
|
+
background: "repeating-linear-gradient( 45deg, #e0e0e0, #e0e0e0 5px, transparent 5px, transparent 10px)",
|
|
27305
|
+
borderTop: "1px solid rgba(224, 224, 224, 1)",
|
|
27306
|
+
cursor: "grab",
|
|
27307
|
+
"&:active": {
|
|
27308
|
+
cursor: "grabbing",
|
|
27309
|
+
},
|
|
27282
27310
|
} }), jsx(GridRow, { ...params })] }));
|
|
27283
27311
|
};
|
|
27284
27312
|
|
|
@@ -27295,38 +27323,41 @@ const EditGridWrapper = (props) => {
|
|
|
27295
27323
|
const handleClickEdit = () => {
|
|
27296
27324
|
if (edit)
|
|
27297
27325
|
handleCancelarEdit();
|
|
27298
|
-
setEdit(prevState => !prevState);
|
|
27326
|
+
setEdit((prevState) => !prevState);
|
|
27299
27327
|
};
|
|
27300
27328
|
const processRowUpdate = async (newRow, originalRow) => {
|
|
27301
27329
|
const original_data = jsonForm({ submitData: originalRow });
|
|
27302
|
-
const data = jsonForm({
|
|
27330
|
+
const data = jsonForm({
|
|
27331
|
+
submitData: newRow,
|
|
27332
|
+
...(props.parser ? { props: props.parser } : []),
|
|
27333
|
+
});
|
|
27303
27334
|
if (isEqual$1(data, original_data))
|
|
27304
27335
|
return originalRow;
|
|
27305
27336
|
try {
|
|
27306
27337
|
const result = await editMutation(data).unwrap();
|
|
27307
|
-
setErrors(prevState => produce(prevState, draft => {
|
|
27338
|
+
setErrors((prevState) => produce(prevState, (draft) => {
|
|
27308
27339
|
delete draft[newRow.id];
|
|
27309
27340
|
}));
|
|
27310
27341
|
if (props?.postAction)
|
|
27311
27342
|
props.postAction(result);
|
|
27312
|
-
notifications.show(`Información actualizada!`, { severity:
|
|
27343
|
+
notifications.show(`Información actualizada!`, { severity: "success" });
|
|
27313
27344
|
return result.list;
|
|
27314
27345
|
}
|
|
27315
27346
|
catch (e) {
|
|
27316
|
-
setErrors(prevState => produce(prevState, draft => {
|
|
27317
|
-
draft[newRow.id] = get(e,
|
|
27347
|
+
setErrors((prevState) => produce(prevState, (draft) => {
|
|
27348
|
+
draft[newRow.id] = get(e, "data");
|
|
27318
27349
|
}));
|
|
27319
|
-
notifications.show(
|
|
27350
|
+
notifications.show("Error actualizando información!", { severity: "error" });
|
|
27320
27351
|
}
|
|
27321
27352
|
};
|
|
27322
27353
|
// ===== || KEYDOWN || ===== //
|
|
27323
27354
|
const handleKeyPress = useCallback((event) => {
|
|
27324
27355
|
if (props.permission) {
|
|
27325
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27356
|
+
if (event.ctrlKey && event.shiftKey && event.key === "E") {
|
|
27326
27357
|
event.preventDefault();
|
|
27327
27358
|
setEdit(true);
|
|
27328
27359
|
}
|
|
27329
|
-
else if (event.key ===
|
|
27360
|
+
else if (event.key === "Escape" && event.shiftKey && edit) {
|
|
27330
27361
|
event.preventDefault();
|
|
27331
27362
|
handleCancelarEdit();
|
|
27332
27363
|
setEdit(false);
|
|
@@ -27334,9 +27365,9 @@ const EditGridWrapper = (props) => {
|
|
|
27334
27365
|
}
|
|
27335
27366
|
}, [edit, props.permission]);
|
|
27336
27367
|
useEffect(() => {
|
|
27337
|
-
document.addEventListener(
|
|
27368
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27338
27369
|
return () => {
|
|
27339
|
-
document.removeEventListener(
|
|
27370
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27340
27371
|
};
|
|
27341
27372
|
}, [handleKeyPress]);
|
|
27342
27373
|
// ========================= || DRAG N DROP || ========================= //
|
|
@@ -27353,7 +27384,10 @@ const EditGridWrapper = (props) => {
|
|
|
27353
27384
|
if (over) {
|
|
27354
27385
|
const activeRow = rows.find((row) => row.id == active.id);
|
|
27355
27386
|
const overRow = rows.find((row) => row.id == over.id);
|
|
27356
|
-
const mutationArgs = {
|
|
27387
|
+
const mutationArgs = {
|
|
27388
|
+
...props.dnd?.args,
|
|
27389
|
+
id: activeRow.id,
|
|
27390
|
+
};
|
|
27357
27391
|
mutationArgs[field] = get(overRow, field);
|
|
27358
27392
|
editMutation(mutationArgs);
|
|
27359
27393
|
}
|
|
@@ -27371,33 +27405,37 @@ const EditGridWrapper = (props) => {
|
|
|
27371
27405
|
slotProps: {
|
|
27372
27406
|
toolbar: {
|
|
27373
27407
|
extraButtons: [
|
|
27374
|
-
...(props.permission && !props.disabled
|
|
27375
|
-
|
|
27376
|
-
|
|
27377
|
-
|
|
27378
|
-
|
|
27379
|
-
|
|
27380
|
-
|
|
27408
|
+
...(props.permission && !props.disabled
|
|
27409
|
+
? [
|
|
27410
|
+
{
|
|
27411
|
+
label: edit ? "Cancelar" : "Editar",
|
|
27412
|
+
icon: edit ? CancelIcon : EditIcon,
|
|
27413
|
+
onClick: handleClickEdit,
|
|
27414
|
+
},
|
|
27415
|
+
]
|
|
27416
|
+
: []),
|
|
27417
|
+
],
|
|
27418
|
+
},
|
|
27381
27419
|
},
|
|
27382
27420
|
onRowEditStart: ({ reason, row }, event) => {
|
|
27383
|
-
if (!get(row, `obj_permissions.edit`) ||
|
|
27421
|
+
if (!get(row, `obj_permissions.edit`) ||
|
|
27422
|
+
(reason === GridRowEditStartReasons.cellDoubleClick && !edit)) {
|
|
27384
27423
|
event.defaultMuiPrevented = true;
|
|
27385
27424
|
}
|
|
27386
27425
|
},
|
|
27387
27426
|
// edit
|
|
27388
27427
|
checkboxSelection: !edit,
|
|
27389
27428
|
...(edit ? { onRowClick: undefined } : []),
|
|
27390
|
-
editMode:
|
|
27429
|
+
editMode: "row",
|
|
27391
27430
|
rowModesModel: rowModesModel,
|
|
27392
27431
|
onRowModesModelChange: setRowModesModel,
|
|
27393
27432
|
processRowUpdate: processRowUpdate,
|
|
27394
27433
|
loadingParams: [loadingMutation],
|
|
27395
27434
|
}, props.dataGridProps);
|
|
27396
|
-
const renderEditGrid = () => (jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, modifiers: [
|
|
27397
|
-
|
|
27398
|
-
|
|
27399
|
-
|
|
27400
|
-
], autoScroll: false, children: jsx(SortableContext, { items: rows ? rows.map((row) => row.id.toString()) : [], strategy: verticalListSortingStrategy, children: props.renderFunction({ ...props.renderFunctionProps, dataGridProps: editGridProps }) }) }));
|
|
27435
|
+
const renderEditGrid = () => (jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, modifiers: [restrictToVerticalAxis, restrictToWindowEdges, restrictToParentElement], autoScroll: false, children: jsx(SortableContext, { items: rows ? rows.map((row) => row.id.toString()) : [], strategy: verticalListSortingStrategy, children: props.renderFunction({
|
|
27436
|
+
...props.renderFunctionProps,
|
|
27437
|
+
dataGridProps: editGridProps,
|
|
27438
|
+
}) }) }));
|
|
27401
27439
|
return renderEditGrid();
|
|
27402
27440
|
};
|
|
27403
27441
|
|
|
@@ -27418,43 +27456,47 @@ const editColumn = (props) => {
|
|
|
27418
27456
|
[id]: { mode: GridRowModes.View, ignoreModifications: true },
|
|
27419
27457
|
});
|
|
27420
27458
|
};
|
|
27421
|
-
return [
|
|
27422
|
-
|
|
27423
|
-
|
|
27424
|
-
|
|
27459
|
+
return [
|
|
27460
|
+
{
|
|
27461
|
+
field: "edit",
|
|
27462
|
+
headerName: "Editar",
|
|
27463
|
+
type: "actions",
|
|
27425
27464
|
width: 80,
|
|
27426
|
-
cellClassName:
|
|
27465
|
+
cellClassName: "actions",
|
|
27427
27466
|
getActions: ({ id, row }) => {
|
|
27428
|
-
const canEdit = get$1(row,
|
|
27467
|
+
const canEdit = get$1(row, "obj_permissions.edit");
|
|
27429
27468
|
const isInEditMode = props.rowModesModel[id]?.mode === GridRowModes.Edit;
|
|
27430
27469
|
if (isInEditMode) {
|
|
27431
27470
|
return [
|
|
27432
|
-
jsx(GridActionsCellItem, { icon: jsx(SaveIcon, {}), label:
|
|
27433
|
-
jsx(GridActionsCellItem, { icon: jsx(CancelIcon, {}), label:
|
|
27471
|
+
jsx(GridActionsCellItem, { icon: jsx(SaveIcon, {}), label: "Guardar", color: "primary", onClick: handleSaveClick(id) }, "save"),
|
|
27472
|
+
jsx(GridActionsCellItem, { icon: jsx(CancelIcon, {}), label: "Cancelar", className: "textPrimary", onClick: handleCancelClick(id), color: "inherit" }, "cancel"),
|
|
27434
27473
|
];
|
|
27435
27474
|
}
|
|
27436
27475
|
return [
|
|
27437
|
-
jsx(GridActionsCellItem, { icon: jsx(EditIcon, { sx: { color: canEdit ?
|
|
27476
|
+
jsx(GridActionsCellItem, { icon: jsx(EditIcon, { sx: { color: canEdit ? "black" : "inherit" } }), label: "Editar", className: "textPrimary", onClick: handleEditClick(id), disabled: !canEdit }, "edit"),
|
|
27438
27477
|
];
|
|
27439
|
-
}
|
|
27440
|
-
}
|
|
27478
|
+
},
|
|
27479
|
+
},
|
|
27480
|
+
];
|
|
27441
27481
|
};
|
|
27442
27482
|
|
|
27443
27483
|
const deleteColumn = (props) => {
|
|
27444
27484
|
if (!props.displayDelete)
|
|
27445
27485
|
return [];
|
|
27446
|
-
return [
|
|
27447
|
-
|
|
27448
|
-
|
|
27486
|
+
return [
|
|
27487
|
+
{
|
|
27488
|
+
field: "delete",
|
|
27489
|
+
headerName: "Eliminar",
|
|
27449
27490
|
width: 80,
|
|
27450
|
-
cellClassName:
|
|
27491
|
+
cellClassName: "actions",
|
|
27451
27492
|
renderCell: ({ id, row }) => {
|
|
27452
27493
|
const canDelete = get$1(row, `obj_permissions.delete`, false);
|
|
27453
27494
|
return [
|
|
27454
|
-
jsx(GridActionsCellItem, { icon: jsx(DeleteIcon, {}), label:
|
|
27495
|
+
jsx(GridActionsCellItem, { icon: jsx(DeleteIcon, {}), label: "Eliminar", className: "textPrimary", onClick: props.handleOpen(id), color: "primary", disabled: !canDelete }, "delete"),
|
|
27455
27496
|
];
|
|
27456
|
-
}
|
|
27457
|
-
}
|
|
27497
|
+
},
|
|
27498
|
+
},
|
|
27499
|
+
];
|
|
27458
27500
|
};
|
|
27459
27501
|
|
|
27460
27502
|
const DeleteGridWrapper = (props) => {
|
|
@@ -27468,25 +27510,25 @@ const DeleteGridWrapper = (props) => {
|
|
|
27468
27510
|
setDeleteRowId(undefined);
|
|
27469
27511
|
};
|
|
27470
27512
|
const handleClickDelete = () => {
|
|
27471
|
-
setDeleting(prevState => !prevState);
|
|
27513
|
+
setDeleting((prevState) => !prevState);
|
|
27472
27514
|
};
|
|
27473
27515
|
// ===== || KEYDOWN || ===== //
|
|
27474
27516
|
const handleKeyPress = useCallback((event) => {
|
|
27475
27517
|
if (props.permission) {
|
|
27476
|
-
if (event.ctrlKey && event.shiftKey && event.key ===
|
|
27518
|
+
if (event.ctrlKey && event.shiftKey && event.key === "D") {
|
|
27477
27519
|
event.preventDefault();
|
|
27478
27520
|
setDeleting(true);
|
|
27479
27521
|
}
|
|
27480
|
-
else if (event.key ===
|
|
27522
|
+
else if (event.key === "Escape" && event.shiftKey && deleting) {
|
|
27481
27523
|
event.preventDefault();
|
|
27482
27524
|
setDeleting(false);
|
|
27483
27525
|
}
|
|
27484
27526
|
}
|
|
27485
27527
|
}, [props.permission, deleting]);
|
|
27486
27528
|
useEffect(() => {
|
|
27487
|
-
document.addEventListener(
|
|
27529
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27488
27530
|
return () => {
|
|
27489
|
-
document.removeEventListener(
|
|
27531
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27490
27532
|
};
|
|
27491
27533
|
}, [handleKeyPress]);
|
|
27492
27534
|
// ===== || GRID PROPS || ===== //
|
|
@@ -27500,20 +27542,23 @@ const DeleteGridWrapper = (props) => {
|
|
|
27500
27542
|
slotProps: {
|
|
27501
27543
|
toolbar: {
|
|
27502
27544
|
extraButtons: [
|
|
27503
|
-
...(props.permission
|
|
27504
|
-
|
|
27505
|
-
|
|
27506
|
-
|
|
27507
|
-
|
|
27508
|
-
|
|
27509
|
-
|
|
27545
|
+
...(props.permission
|
|
27546
|
+
? [
|
|
27547
|
+
{
|
|
27548
|
+
label: deleting ? "Cancelar" : "Eliminar",
|
|
27549
|
+
icon: deleting ? CancelIcon : DeleteIcon,
|
|
27550
|
+
onClick: handleClickDelete,
|
|
27551
|
+
},
|
|
27552
|
+
]
|
|
27553
|
+
: []),
|
|
27554
|
+
],
|
|
27555
|
+
},
|
|
27510
27556
|
},
|
|
27511
27557
|
// edit
|
|
27512
27558
|
checkboxSelection: !deleting,
|
|
27513
27559
|
...(deleting ? { onRowClick: undefined } : []),
|
|
27514
27560
|
}, props.dataGridProps);
|
|
27515
|
-
const renderDeleteGrid = () => (jsxs(Fragment, { children: [props.mutation &&
|
|
27516
|
-
jsx(DeleteConfirmationDialog, { mutation: props.mutation, open: !!deleteRowId, handleClose: handleClose, id: deleteRowId, disableNavBack: true }), props.renderFunction({ ...props.renderFunctionProps, dataGridProps: deleteGridProps })] }));
|
|
27561
|
+
const renderDeleteGrid = () => (jsxs(Fragment, { children: [props.mutation && (jsx(DeleteConfirmationDialog, { mutation: props.mutation, open: !!deleteRowId, handleClose: handleClose, id: deleteRowId, disableNavBack: true })), props.renderFunction({ ...props.renderFunctionProps, dataGridProps: deleteGridProps })] }));
|
|
27517
27562
|
return renderDeleteGrid();
|
|
27518
27563
|
};
|
|
27519
27564
|
|
|
@@ -27522,7 +27567,7 @@ const CreateGridWrapper = (props) => {
|
|
|
27522
27567
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
27523
27568
|
const open = Boolean(anchorEl);
|
|
27524
27569
|
const handleClick = () => {
|
|
27525
|
-
setAnchorEl(document.getElementById(
|
|
27570
|
+
setAnchorEl(document.getElementById("create-button"));
|
|
27526
27571
|
};
|
|
27527
27572
|
const handleClose = () => {
|
|
27528
27573
|
setAnchorEl(null);
|
|
@@ -27537,51 +27582,56 @@ const CreateGridWrapper = (props) => {
|
|
|
27537
27582
|
// ===== || KEYDOWN || ===== //
|
|
27538
27583
|
const handleKeyPress = useCallback((event) => {
|
|
27539
27584
|
if (props.permission) {
|
|
27540
|
-
if (event.ctrlKey && event.key ===
|
|
27585
|
+
if (event.ctrlKey && event.key === "e") {
|
|
27541
27586
|
event.preventDefault();
|
|
27542
27587
|
handleClick();
|
|
27543
27588
|
}
|
|
27544
27589
|
}
|
|
27545
27590
|
}, [props.permission]);
|
|
27546
27591
|
useEffect(() => {
|
|
27547
|
-
document.addEventListener(
|
|
27592
|
+
document.addEventListener("keydown", handleKeyPress);
|
|
27548
27593
|
return () => {
|
|
27549
|
-
document.removeEventListener(
|
|
27594
|
+
document.removeEventListener("keydown", handleKeyPress);
|
|
27550
27595
|
};
|
|
27551
27596
|
}, [handleKeyPress]);
|
|
27552
27597
|
const createGridProps = mergeSettings({
|
|
27553
27598
|
slotProps: {
|
|
27554
27599
|
toolbar: {
|
|
27555
27600
|
extraButtons: [
|
|
27556
|
-
...(props.permission
|
|
27557
|
-
|
|
27558
|
-
|
|
27559
|
-
|
|
27560
|
-
|
|
27561
|
-
|
|
27562
|
-
|
|
27563
|
-
|
|
27564
|
-
|
|
27565
|
-
|
|
27601
|
+
...(props.permission
|
|
27602
|
+
? [
|
|
27603
|
+
{
|
|
27604
|
+
label: "Crear",
|
|
27605
|
+
icon: AddIcon,
|
|
27606
|
+
onClick: handleClick,
|
|
27607
|
+
buttonProps: {
|
|
27608
|
+
id: "create-button",
|
|
27609
|
+
},
|
|
27610
|
+
},
|
|
27611
|
+
]
|
|
27612
|
+
: []),
|
|
27613
|
+
],
|
|
27614
|
+
},
|
|
27566
27615
|
},
|
|
27567
27616
|
}, props.dataGridProps);
|
|
27568
|
-
return (jsxs(Fragment, { children: [jsxs(StyledMenu, { id:
|
|
27569
|
-
|
|
27570
|
-
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
27571
|
-
|
|
27572
|
-
|
|
27573
|
-
|
|
27574
|
-
|
|
27575
|
-
|
|
27576
|
-
|
|
27577
|
-
|
|
27578
|
-
|
|
27579
|
-
|
|
27580
|
-
|
|
27581
|
-
|
|
27617
|
+
return (jsxs(Fragment, { children: [jsxs(StyledMenu, { id: "create-menu", MenuListProps: {
|
|
27618
|
+
"aria-labelledby": "create-menu-button",
|
|
27619
|
+
}, anchorEl: anchorEl, open: open, onClose: handleClose, children: [props.csv_upload?.enable &&
|
|
27620
|
+
[
|
|
27621
|
+
{
|
|
27622
|
+
title: "CSV",
|
|
27623
|
+
endpoint: props.pathname,
|
|
27624
|
+
},
|
|
27625
|
+
...(props.csv_upload.extraOptions || []),
|
|
27626
|
+
].map((option, index) => {
|
|
27627
|
+
return (jsxs(MenuItem, { onClick: () => {
|
|
27628
|
+
handleToggleOpen(option);
|
|
27629
|
+
handleClose();
|
|
27630
|
+
}, disableRipple: true, children: [jsx(ListItemIcon, { children: jsx(AttachFileIcon, { sx: { transform: "rotate(90deg)" } }) }), option.title] }, index));
|
|
27631
|
+
}), jsxs(MenuItem, { onClick: () => {
|
|
27582
27632
|
navigate(props.navigation ? `${props.navigation}crear` : `crear`);
|
|
27583
27633
|
handleClose();
|
|
27584
|
-
}, disableRipple: true, children: "Manual" })] }), props.csv_upload?.enable && (jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data })), props.renderFunction({ dataGridProps: createGridProps })] }));
|
|
27634
|
+
}, disableRipple: true, children: [jsx(ListItemIcon, { children: jsx(DrawIcon, {}) }), "Manual"] })] }), props.csv_upload?.enable && (jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data })), props.renderFunction({ dataGridProps: createGridProps })] }));
|
|
27585
27635
|
};
|
|
27586
27636
|
|
|
27587
27637
|
const Base = (props) => {
|
|
@@ -27838,13 +27888,13 @@ const ActiveCell = ({ value }) => {
|
|
|
27838
27888
|
}, [value]);
|
|
27839
27889
|
const renderIcon = useCallback(() => {
|
|
27840
27890
|
const iconProps = {
|
|
27841
|
-
size:
|
|
27891
|
+
size: "small",
|
|
27842
27892
|
sx: {
|
|
27843
27893
|
color: color[700],
|
|
27844
|
-
fontSize:
|
|
27894
|
+
fontSize: "30px",
|
|
27845
27895
|
stroke: color[700],
|
|
27846
|
-
strokeWidth: 1.5
|
|
27847
|
-
}
|
|
27896
|
+
strokeWidth: 1.5,
|
|
27897
|
+
},
|
|
27848
27898
|
};
|
|
27849
27899
|
switch (value) {
|
|
27850
27900
|
case true:
|
|
@@ -27855,7 +27905,7 @@ const ActiveCell = ({ value }) => {
|
|
|
27855
27905
|
return jsx(ErrorOutlineIcon, { ...iconProps });
|
|
27856
27906
|
}
|
|
27857
27907
|
}, [color, value]);
|
|
27858
|
-
return (jsx(Box, { px: 2, py: 0.5, display:
|
|
27908
|
+
return (jsx(Box, { px: 2, py: 0.5, display: "flex", alignItems: "center", justifyContent: "center", borderRadius: 2, borderColor: color[900], children: renderIcon() }));
|
|
27859
27909
|
};
|
|
27860
27910
|
|
|
27861
27911
|
const MyGridEditSingleSelect = (props) => {
|
|
@@ -28017,34 +28067,38 @@ const Field = (props) => {
|
|
|
28017
28067
|
return true;
|
|
28018
28068
|
}, [props.data, props.dependantOn]);
|
|
28019
28069
|
const renderField = useCallback(() => {
|
|
28020
|
-
if (!props.pageType || props.pageType ==
|
|
28070
|
+
if (!props.pageType || props.pageType == "list")
|
|
28021
28071
|
return;
|
|
28022
|
-
if (props.pageType ==
|
|
28072
|
+
if (props.pageType == "detail")
|
|
28023
28073
|
return jsx(DetailField, { ...props });
|
|
28024
28074
|
else
|
|
28025
28075
|
return jsx(EditField, { ...props });
|
|
28026
28076
|
}, [props]);
|
|
28027
28077
|
if (!show)
|
|
28028
28078
|
return;
|
|
28029
|
-
return (jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction:
|
|
28079
|
+
return (jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction: "column", ...props.gridProps, children: [jsx(Grid, { size: 12, children: jsx(Typography$1, { variant: "body1", fontWeight: "bold", children: props.label }) }), jsx(Grid, { size: 12, children: renderField() })] }));
|
|
28030
28080
|
};
|
|
28031
28081
|
|
|
28032
28082
|
const EditToolbar = (props) => {
|
|
28033
|
-
return (jsxs(Toolbar, { children: [props.pageType !=
|
|
28034
|
-
jsx(Tooltip$1, { title: 'Crear', children: jsx(ToolbarButton, { onClick: props.handleCreate, children: jsx(AddIcon, { fontSize: "small" }) }) }), !!props.selected &&
|
|
28035
|
-
jsx(Tooltip$1, { title: 'Borrar', children: jsx(ToolbarButton, { onClick: props.handleDelete, children: jsx(DeleteIcon, { fontSize: "small" }) }) })] }));
|
|
28083
|
+
return (jsxs(Toolbar, { children: [props.pageType != "detail" && (jsx(Tooltip$1, { title: "Crear", children: jsx(ToolbarButton, { onClick: props.handleCreate, children: jsx(AddIcon, { fontSize: "small" }) }) })), !!props.selected && (jsx(Tooltip$1, { title: "Borrar", children: jsx(ToolbarButton, { onClick: props.handleDelete, children: jsx(DeleteIcon, { fontSize: "small" }) }) }))] }));
|
|
28036
28084
|
};
|
|
28037
28085
|
const FieldArrayField = (props) => {
|
|
28038
28086
|
const { fields, remove } = useFieldArray({
|
|
28039
28087
|
control: props.form.control,
|
|
28040
28088
|
name: props.name,
|
|
28041
|
-
keyName:
|
|
28089
|
+
keyName: "_id",
|
|
28042
28090
|
});
|
|
28043
|
-
const [drawer, setDrawer] = useState({
|
|
28044
|
-
|
|
28045
|
-
|
|
28091
|
+
const [drawer, setDrawer] = useState({
|
|
28092
|
+
open: false,
|
|
28093
|
+
data: undefined,
|
|
28094
|
+
});
|
|
28095
|
+
const [rowSelectionModel, setRowSelectionModel] = useState({
|
|
28096
|
+
type: "include",
|
|
28097
|
+
ids: new Set(),
|
|
28098
|
+
});
|
|
28099
|
+
const getIndex = useCallback((id) => findIndex(fields, function (field) {
|
|
28046
28100
|
return field._id == id;
|
|
28047
|
-
})
|
|
28101
|
+
}), [fields]);
|
|
28048
28102
|
const handleCreate = () => {
|
|
28049
28103
|
setDrawer({ open: true, data: undefined });
|
|
28050
28104
|
};
|
|
@@ -28067,7 +28121,7 @@ const FieldArrayField = (props) => {
|
|
|
28067
28121
|
const handleRowClick = (e) => {
|
|
28068
28122
|
setDrawer({ open: true, data: e.row });
|
|
28069
28123
|
};
|
|
28070
|
-
return (jsxs(Fragment, { children: [jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction:
|
|
28124
|
+
return (jsxs(Fragment, { children: [jsxs(Grid, { rowSpacing: 1, container: true, size: "grow", direction: "column", ...props.gridProps, children: [jsx(Grid, { size: 12, children: jsx(Typography$1, { variant: "body1", fontWeight: "bold", children: props.label }) }), jsx(Grid, { size: 12, children: jsx(DataGrid, { ...props.dataGridProps, rows: fields, checkboxSelection: props.pageType != "detail", onRowSelectionModelChange: (newRowSelectionModel) => {
|
|
28071
28125
|
setRowSelectionModel(newRowSelectionModel);
|
|
28072
28126
|
}, showToolbar: true, slots: { toolbar: EditToolbar }, slotProps: {
|
|
28073
28127
|
toolbar: {
|
|
@@ -28076,7 +28130,7 @@ const FieldArrayField = (props) => {
|
|
|
28076
28130
|
handleDelete: handleDelete,
|
|
28077
28131
|
pageType: props.pageType,
|
|
28078
28132
|
},
|
|
28079
|
-
}, disableRowSelectionOnClick: true, onRowClick: handleRowClick, getRowId: (row) => row._id }) })] }), jsx(MainDrawer, { open: drawer.open, drawerToggle: closeDrawer, title:
|
|
28133
|
+
}, disableRowSelectionOnClick: true, onRowClick: handleRowClick, getRowId: (row) => row._id }) })] }), jsx(MainDrawer, { open: drawer.open, drawerToggle: closeDrawer, title: "Cargo Adicional", children: jsx(Grid, { size: 12, container: true, children: props.fields.map((field) => {
|
|
28080
28134
|
const fieldName = `${props.name}.${getIndex(drawer.data?._id)}.${field.name}`;
|
|
28081
28135
|
return (jsx(Field, { ...field, form: props.form, name: fieldName, fieldData: get(drawer.data, field.name) }, fieldName));
|
|
28082
28136
|
}) }) })] }));
|
|
@@ -28174,10 +28228,10 @@ const Logo = () => {
|
|
|
28174
28228
|
// ==============================|| PESTAÑAS ||============================== //
|
|
28175
28229
|
/**
|
|
28176
28230
|
* Pestañas customizables
|
|
28177
|
-
**/
|
|
28231
|
+
**/
|
|
28178
28232
|
const Tabs = (props) => {
|
|
28179
28233
|
// valor inicial
|
|
28180
|
-
const [value, setValue] = useState(props.initialValue ||
|
|
28234
|
+
const [value, setValue] = useState(props.initialValue || "1");
|
|
28181
28235
|
// manejar cambio de pestaña
|
|
28182
28236
|
const handleChange = (_event, newValue) => {
|
|
28183
28237
|
setValue(newValue);
|
|
@@ -28185,29 +28239,33 @@ const Tabs = (props) => {
|
|
|
28185
28239
|
};
|
|
28186
28240
|
// hacer el render del contenido de la pestaña seleccionada
|
|
28187
28241
|
const renderTabs = () => {
|
|
28188
|
-
return
|
|
28242
|
+
return props.tabs.map((option) => {
|
|
28189
28243
|
const renderContent = () => {
|
|
28190
28244
|
return React__default.Children.map(option.children, (child) => {
|
|
28191
28245
|
const cloneProps = { ...child.props };
|
|
28192
|
-
set$1(cloneProps,
|
|
28193
|
-
set$1(cloneProps,
|
|
28246
|
+
set$1(cloneProps, "type", props.type);
|
|
28247
|
+
set$1(cloneProps, "slotProps.tab", option.value);
|
|
28194
28248
|
return React__default.cloneElement(child, cloneProps);
|
|
28195
28249
|
});
|
|
28196
28250
|
};
|
|
28197
28251
|
return (jsx(TabPanel, { value: option.value, sx: {
|
|
28198
|
-
pt: 2,
|
|
28252
|
+
pt: 2,
|
|
28253
|
+
pb: 0,
|
|
28254
|
+
px: 0,
|
|
28255
|
+
width: 1,
|
|
28256
|
+
height: 1,
|
|
28199
28257
|
}, children: renderContent() }, option.value));
|
|
28200
|
-
})
|
|
28258
|
+
});
|
|
28201
28259
|
};
|
|
28202
28260
|
return (
|
|
28203
28261
|
// contexto
|
|
28204
|
-
jsx(Box, { width: 1, height:
|
|
28205
|
-
minHeight: 40
|
|
28262
|
+
jsx(Box, { width: 1, height: "calc(100vh - 175px)", children: jsxs(TabContext, { value: value, children: [jsx(TabList, { onChange: handleChange, "aria-label": "create-work-order-tabs", variant: "scrollable", scrollButtons: "auto", sx: {
|
|
28263
|
+
minHeight: 40,
|
|
28206
28264
|
}, children: props.tabs.map((option) => {
|
|
28207
|
-
return (jsx(Tab, { label: option.label, icon: option.icon, iconPosition:
|
|
28208
|
-
color:
|
|
28265
|
+
return (jsx(Tab, { label: option.label, icon: option.icon, iconPosition: "start", value: option.value, sx: {
|
|
28266
|
+
color: "secondary.light",
|
|
28209
28267
|
py: 0,
|
|
28210
|
-
minHeight: 40
|
|
28268
|
+
minHeight: 40,
|
|
28211
28269
|
} }, option.value));
|
|
28212
28270
|
}) }), jsx(Box, { width: 1, height: 0.935, children: renderTabs() })] }) }));
|
|
28213
28271
|
};
|
|
@@ -28291,7 +28349,7 @@ function DetailPage(props) {
|
|
|
28291
28349
|
resolver: zodResolver(props.edit.schema),
|
|
28292
28350
|
defaultValues: props.edit?.defaultValues,
|
|
28293
28351
|
});
|
|
28294
|
-
const { data, isLoading, isFetching, error: fetchError } = props.api.data.query(!props.api.data.skipToken ? props.api.data.args : skipToken);
|
|
28352
|
+
const { data, isLoading, isFetching, error: fetchError, } = props.api.data.query(!props.api.data.skipToken ? props.api.data.args : skipToken);
|
|
28295
28353
|
useEffect(() => {
|
|
28296
28354
|
if (data) {
|
|
28297
28355
|
// set form data based on query data
|
|
@@ -28299,7 +28357,7 @@ function DetailPage(props) {
|
|
|
28299
28357
|
if (props.slots?.title) {
|
|
28300
28358
|
const title = map(props.slots?.title, function (field) {
|
|
28301
28359
|
return get(data, field);
|
|
28302
|
-
}).join(
|
|
28360
|
+
}).join(" ");
|
|
28303
28361
|
if (title)
|
|
28304
28362
|
dispatch(changeTitle(title));
|
|
28305
28363
|
}
|
|
@@ -28310,60 +28368,64 @@ function DetailPage(props) {
|
|
|
28310
28368
|
form.reset();
|
|
28311
28369
|
navigate(-1);
|
|
28312
28370
|
};
|
|
28313
|
-
const canEdit = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` :
|
|
28314
|
-
const canDelete = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` :
|
|
28371
|
+
const canEdit = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` : ""}obj_permissions.edit`), [data, props.slotProps?.permissionsPath]);
|
|
28372
|
+
const canDelete = useMemo(() => get(data, `${props.slotProps?.permissionsPath ? `${props.slotProps?.permissionsPath}.` : ""}obj_permissions.delete`), [data, props.slotProps?.permissionsPath]);
|
|
28315
28373
|
// ==============================|| VALIDATION ||============================== //
|
|
28316
28374
|
useValidateFieldData(props, form);
|
|
28317
28375
|
// ==============================|| QUICK RETURN ||============================== //
|
|
28318
|
-
if ((!canEdit && props.pageType ==
|
|
28376
|
+
if ((!canEdit && props.pageType == "edit") || (fetchError && fetchError.originalStatus == 403))
|
|
28319
28377
|
return jsx(NotAllowed, {});
|
|
28320
28378
|
if (fetchError && fetchError.originalStatus == 404)
|
|
28321
28379
|
return jsx(NotFound, {});
|
|
28322
28380
|
// ==============================|| SUBMIT ||============================== //
|
|
28323
28381
|
const onSubmitHandler = (submitedData) => {
|
|
28324
|
-
const formData =
|
|
28382
|
+
const formData = "nativeEvent" in submitedData ? form.getValues() : submitedData;
|
|
28325
28383
|
const params = { submitData: formData, data: data, props: props.slotProps?.parser };
|
|
28326
28384
|
const dataToSend = props.edit.useFormData ? formDataForm(params) : jsonForm(params);
|
|
28327
|
-
mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args })
|
|
28385
|
+
mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args })
|
|
28386
|
+
.unwrap()
|
|
28328
28387
|
.then(() => {
|
|
28329
28388
|
if (!props.slotProps?.button?.save?.disableNavBack)
|
|
28330
28389
|
navigate(-1);
|
|
28331
28390
|
if (props.slotProps?.button?.save?.onClick)
|
|
28332
28391
|
props.slotProps?.button?.save?.onClick();
|
|
28333
28392
|
form.reset();
|
|
28334
|
-
notifications.show(`${capitalizedObject} ${props.pageType ==
|
|
28393
|
+
notifications.show(`${capitalizedObject} ${props.pageType == "edit" ? "actualizad@" : "cread@"}!`, { severity: "success" });
|
|
28335
28394
|
})
|
|
28336
28395
|
.catch((error) => {
|
|
28337
28396
|
if (error.status === 401) ;
|
|
28338
28397
|
if (error.status === 403) {
|
|
28339
|
-
notifications.show(error.data.detail, { severity:
|
|
28398
|
+
notifications.show(error.data.detail, { severity: "error" });
|
|
28340
28399
|
}
|
|
28341
28400
|
else {
|
|
28342
28401
|
console.log(error);
|
|
28343
28402
|
setErrors(form, error);
|
|
28344
|
-
notifications.show(
|
|
28345
|
-
error.data.detail.join(
|
|
28346
|
-
`Error ${props.pageType ==
|
|
28403
|
+
notifications.show(error.data.detail
|
|
28404
|
+
? error.data.detail.join(", ")
|
|
28405
|
+
: `Error ${props.pageType == "edit" ? "actualizando" : "creando"} ${props.object.name}!`, { severity: "error" });
|
|
28347
28406
|
}
|
|
28348
28407
|
});
|
|
28349
28408
|
};
|
|
28350
28409
|
// ==============================|| RENDER SECTIONS ||============================== //
|
|
28351
28410
|
const renderContent = () => {
|
|
28352
28411
|
let displayed_sections = -1;
|
|
28353
|
-
return (jsxs(Grid, { size: 12, container: true, direction:
|
|
28412
|
+
return (jsxs(Grid, { size: 12, container: true, direction: "column", position: "relative", pb: 2, children: [props.pageType == "detail" && data?.has_history && (jsx(HistorialDrawer, { ...props.slotProps?.historial })), props.sections.map((section, index) => {
|
|
28354
28413
|
if (!section.display)
|
|
28355
28414
|
return null;
|
|
28356
|
-
if (typeof section.display ==
|
|
28415
|
+
if (typeof section.display == "object") {
|
|
28357
28416
|
const validateAgainst = form.watch(section.display.field)?.toString();
|
|
28358
28417
|
if (!section.display.method(validateAgainst, section.display.value))
|
|
28359
28418
|
return null;
|
|
28360
28419
|
}
|
|
28361
28420
|
displayed_sections += 1;
|
|
28362
|
-
return (jsx(Section, { data: data, form: form, bgColor: displayed_sections % 2 == 1 ?
|
|
28421
|
+
return (jsx(Section, { data: data, form: form, bgColor: displayed_sections % 2 == 1 ? "white" : "#F7F7F7", pageType: props.pageType, ...section, first: displayed_sections == 0 }, index));
|
|
28363
28422
|
})] }));
|
|
28364
28423
|
};
|
|
28365
28424
|
const renderPostAction = () => {
|
|
28366
|
-
if (props.api.mutate.postAction &&
|
|
28425
|
+
if (props.api.mutate.postAction &&
|
|
28426
|
+
isSuccess &&
|
|
28427
|
+
"post_action" in mutationResponse &&
|
|
28428
|
+
mutationResponse["post_action"]["type"] === props.api.mutate.postAction.type) {
|
|
28367
28429
|
switch (props.api.mutate.postAction.after) {
|
|
28368
28430
|
// case 'create':
|
|
28369
28431
|
// if (props.pageType === 'create') return addPropsToNode(props.api.mutate.postAction.node, mutationResponse);
|
|
@@ -28372,37 +28434,44 @@ function DetailPage(props) {
|
|
|
28372
28434
|
// if (props.pageType === 'edit') return props.api.mutate.postAction.node;
|
|
28373
28435
|
// break;
|
|
28374
28436
|
default:
|
|
28375
|
-
return addPropsToNode(props.api.mutate.postAction.node, {
|
|
28437
|
+
return addPropsToNode(props.api.mutate.postAction.node, {
|
|
28438
|
+
parent: props.api.data.args["id"],
|
|
28439
|
+
...mutationResponse["post_action"],
|
|
28440
|
+
});
|
|
28376
28441
|
}
|
|
28377
28442
|
}
|
|
28378
28443
|
};
|
|
28379
|
-
const badgeInfo = get(data, props.slots?.badge ||
|
|
28444
|
+
const badgeInfo = get(data, props.slots?.badge || "");
|
|
28380
28445
|
const renderButton = () => {
|
|
28381
28446
|
if (props.slots?.button)
|
|
28382
28447
|
return props.slots?.button;
|
|
28383
|
-
if (props.pageType ==
|
|
28448
|
+
if (props.pageType == "detail") {
|
|
28384
28449
|
if (!canEdit && !canDelete)
|
|
28385
28450
|
return null;
|
|
28386
|
-
return (jsxs(Stack, { direction:
|
|
28451
|
+
return (jsxs(Stack, { direction: "row", spacing: 1, children: [canDelete && props.api.delete && (jsx(DeleteButton, { mutation: props.api.delete.mutation, disableNavBack: props.slotProps?.deleteButton?.disableNavBack })), canEdit && jsx(EditButton, {})] }));
|
|
28387
28452
|
}
|
|
28388
28453
|
else {
|
|
28389
28454
|
return (jsx(SaveCancelButton, { slotProps: {
|
|
28390
28455
|
saveBtn: {
|
|
28391
28456
|
loading: mutationIsLoading,
|
|
28392
28457
|
disabled: !form.formState.isDirty,
|
|
28393
|
-
...(props.slotProps?.button?.save?.type ==
|
|
28394
|
-
|
|
28395
|
-
|
|
28396
|
-
|
|
28458
|
+
...(props.slotProps?.button?.save?.type == "onClick"
|
|
28459
|
+
? {
|
|
28460
|
+
type: "button",
|
|
28461
|
+
onClick: onSubmitHandler,
|
|
28462
|
+
}
|
|
28463
|
+
: {}),
|
|
28397
28464
|
},
|
|
28398
|
-
...(props.slotProps?.button?.cancel
|
|
28399
|
-
|
|
28400
|
-
|
|
28465
|
+
...(props.slotProps?.button?.cancel
|
|
28466
|
+
? { cancelBtn: props.slotProps?.button?.cancel }
|
|
28467
|
+
: {
|
|
28468
|
+
cancelBtn: { onClick: handleCancel },
|
|
28469
|
+
}),
|
|
28401
28470
|
} }));
|
|
28402
28471
|
}
|
|
28403
28472
|
};
|
|
28404
|
-
return (jsxs(Fragment, { children: [jsx(ContentLayout, { button: renderButton(), badge: props.pageType ==
|
|
28405
|
-
jsx(StatusBadge, { title: badgeInfo[
|
|
28473
|
+
return (jsxs(Fragment, { children: [jsx(ContentLayout, { button: renderButton(), badge: props.pageType == "detail" &&
|
|
28474
|
+
badgeInfo && (jsx(StatusBadge, { title: badgeInfo["label"], severity: badgeInfo["value"] })), children: jsx(LoadingComponent, { height: 0.7, isLoading: isLoading || isFetching, children: jsx(FormProvider, { ...form, children: jsx(Box, { id: "formulario", component: "form", autoComplete: "off", noValidate: true, onSubmit: form.handleSubmit(onSubmitHandler), width: "100%", position: "relative", children: renderContent() }) }) }) }), renderPostAction()] }));
|
|
28406
28475
|
}
|
|
28407
28476
|
|
|
28408
28477
|
const ListPage = (props) => {
|
|
@@ -28410,19 +28479,20 @@ const ListPage = (props) => {
|
|
|
28410
28479
|
};
|
|
28411
28480
|
|
|
28412
28481
|
function SlideTransition(props) {
|
|
28413
|
-
return jsx(Slide, { ...props, direction:
|
|
28482
|
+
return jsx(Slide, { ...props, direction: "left" });
|
|
28414
28483
|
}
|
|
28415
28484
|
const BaseProgressSnack = (props) => {
|
|
28416
|
-
|
|
28485
|
+
console.log(props);
|
|
28486
|
+
const dispatch = useDispatch();
|
|
28417
28487
|
const handleClose = (e) => {
|
|
28418
28488
|
if (e?.defaultMuiPrevented)
|
|
28419
28489
|
return;
|
|
28420
|
-
|
|
28490
|
+
dispatch(closeProgressSnack(props.id));
|
|
28421
28491
|
};
|
|
28422
|
-
const finished = useMemo(() => get(props.data,
|
|
28423
|
-
const error = useMemo(() => get(props.data,
|
|
28492
|
+
const finished = useMemo(() => get(props.data, "finished"), [props.data]);
|
|
28493
|
+
const error = useMemo(() => get(props.data, "error"), [props.data]);
|
|
28424
28494
|
const renderItem = useCallback(() => {
|
|
28425
|
-
return (jsx(Snackbar, { anchorOrigin: { vertical:
|
|
28495
|
+
return (jsx(Snackbar, { anchorOrigin: { vertical: "bottom", horizontal: "right" }, open: props.open, onClose: handleClose, slots: {
|
|
28426
28496
|
transition: SlideTransition,
|
|
28427
28497
|
}, slotProps: {
|
|
28428
28498
|
clickAwayListener: {
|
|
@@ -28430,27 +28500,27 @@ const BaseProgressSnack = (props) => {
|
|
|
28430
28500
|
event.defaultMuiPrevented = true;
|
|
28431
28501
|
},
|
|
28432
28502
|
},
|
|
28433
|
-
}, children: jsx(Badge, { invisible: props.index < 1, badgeContent: props.index + 1, color:
|
|
28434
|
-
bgcolor: props.data[
|
|
28503
|
+
}, children: jsx(Badge, { invisible: props.index < 1, badgeContent: props.index + 1, color: "primary", children: jsx(Paper, { elevation: 2, sx: {
|
|
28504
|
+
bgcolor: props.data["error"] ? "primary.main" : "secondary.dark",
|
|
28435
28505
|
minWidth: 300,
|
|
28436
|
-
maxWidth:
|
|
28506
|
+
maxWidth: "100vw",
|
|
28437
28507
|
p: 2,
|
|
28438
|
-
borderRadius:
|
|
28439
|
-
color:
|
|
28440
|
-
}, children: jsxs(Stack, { direction:
|
|
28441
|
-
color:
|
|
28442
|
-
|
|
28443
|
-
backgroundColor:
|
|
28508
|
+
borderRadius: "12px",
|
|
28509
|
+
color: "white",
|
|
28510
|
+
}, children: jsxs(Stack, { direction: "column", spacing: 1, children: [jsxs(Stack, { direction: "row", alignItems: "center", spacing: 1, justifyContent: "space-between", children: [jsx(Typography$1, { pr: 2, color: "inherit", children: props.data.title || "N/A" }), finished && !error && (jsx(Tooltip, { title: "Cerrar", placement: "bottom", children: jsx(IconButton, { color: "secondary", size: "small", onClick: handleClose, sx: {
|
|
28511
|
+
color: "inherit",
|
|
28512
|
+
"&:hover": {
|
|
28513
|
+
backgroundColor: "rgba(255, 255, 255, 0.2)",
|
|
28444
28514
|
},
|
|
28445
|
-
}, children: jsx(CloseIcon, { fontSize:
|
|
28515
|
+
}, children: jsx(CloseIcon, { fontSize: "small" }) }) }))] }), !finished && !error && props.content(props.data)] }) }) }) }));
|
|
28446
28516
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28447
28517
|
}, [finished, props]);
|
|
28448
28518
|
return renderItem();
|
|
28449
28519
|
};
|
|
28450
28520
|
|
|
28451
28521
|
const ObjectProgressStack = (props) => {
|
|
28452
|
-
const snacks = useSelector(state => get(state,
|
|
28453
|
-
return (jsx(Stack, { direction:
|
|
28522
|
+
const snacks = useSelector((state) => get(state, "snackProgress", {}));
|
|
28523
|
+
return (jsx(Stack, { direction: "column", spacing: 2, children: Object.keys(snacks).map((key, index) => {
|
|
28454
28524
|
return (jsx(BaseProgressSnack, { id: key, index: index, ...snacks[key], content: props.content }, key));
|
|
28455
28525
|
}) }));
|
|
28456
28526
|
};
|