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