@acvl/frontend-components 0.0.26 → 0.0.28
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 +92 -62
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/src/components/v1/forms/utils.d.ts +2 -2
- package/dist/cjs/types/src/components/v1/layout/pages/DetailPage/FieldArrayField/index.d.ts +5 -3
- package/dist/esm/index.js +93 -63
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/src/components/v1/forms/utils.d.ts +2 -2
- package/dist/esm/types/src/components/v1/layout/pages/DetailPage/FieldArrayField/index.d.ts +5 -3
- package/dist/index.d.ts +6 -4
- package/package.json +1 -1
|
@@ -13,6 +13,6 @@ export interface JSONFormProps {
|
|
|
13
13
|
useLabel?: boolean;
|
|
14
14
|
props?: JSONParserProps;
|
|
15
15
|
}
|
|
16
|
-
export declare const jsonForm: ({ submitData, data, useLabel, props }: JSONFormProps) => any;
|
|
17
|
-
export declare const formDataForm: ({ submitData, data, useLabel, props }: JSONFormProps) => FormData;
|
|
16
|
+
export declare const jsonForm: ({ submitData, data, useLabel, props, }: JSONFormProps) => any;
|
|
17
|
+
export declare const formDataForm: ({ submitData, data, useLabel, props, }: JSONFormProps) => FormData;
|
|
18
18
|
export declare const setErrors: (form: any, error: any) => void;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { DataGridProps } from "@mui/x-data-grid";
|
|
2
2
|
import { GridProps } from "@mui/material";
|
|
3
|
-
import { FieldProps } from "../Field";
|
|
4
3
|
import { PageType } from "../../../../types";
|
|
4
|
+
import { JSONParserProps } from "../../../../forms";
|
|
5
5
|
declare module "@mui/x-data-grid" {
|
|
6
6
|
interface ToolbarPropsOverrides {
|
|
7
|
-
selected: number;
|
|
8
7
|
handleCreate: () => void;
|
|
9
8
|
handleDelete: () => void;
|
|
10
9
|
pageType: PageType;
|
|
@@ -13,11 +12,14 @@ declare module "@mui/x-data-grid" {
|
|
|
13
12
|
export interface ArrayFieldProps {
|
|
14
13
|
name: string;
|
|
15
14
|
label: string;
|
|
15
|
+
defaultValues: {
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
};
|
|
16
18
|
form?: any;
|
|
17
|
-
fields: FieldProps[];
|
|
18
19
|
dataGridProps: DataGridProps;
|
|
19
20
|
gridProps?: GridProps;
|
|
20
21
|
pageType?: PageType;
|
|
22
|
+
parser?: JSONParserProps;
|
|
21
23
|
}
|
|
22
24
|
declare const FieldArrayField: (props: ArrayFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
23
25
|
export default FieldArrayField;
|
package/dist/esm/index.js
CHANGED
|
@@ -74,7 +74,7 @@ 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
76
|
import AttachFileIcon from '@mui/icons-material/AttachFile';
|
|
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
|
+
import { useGridApiContext, ToolbarButton, QuickFilter, QuickFilterTrigger, QuickFilterControl, QuickFilterClear, ColumnsPanelTrigger, Toolbar, useGridSelector, gridPaginationSelector, GridRow, GridRowEditStartReasons, GridRowModes, GridActionsCellItem, useGridApiRef, DataGrid, GridRowEditStopReasons, GridEditSingleSelectCell, GridEditInputCell, GridEditBooleanCell, GridActionsCell } from '@mui/x-data-grid';
|
|
78
78
|
import Tooltip$1 from '@mui/material/Tooltip';
|
|
79
79
|
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
80
80
|
import ExpandLessIcon from '@mui/icons-material/ExpandLess';
|
|
@@ -107,8 +107,10 @@ import { useDispatch, useSelector } from 'react-redux';
|
|
|
107
107
|
const NormalOrIcon = (props) => {
|
|
108
108
|
const theme = useTheme();
|
|
109
109
|
const belowLG = useMediaQuery(theme.breakpoints.down("lg"));
|
|
110
|
-
if ((belowLG && !(props.type == "button")) || props.type == "icon")
|
|
111
|
-
|
|
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
|
+
}
|
|
112
114
|
return jsx(Button, { ...props.buttonProps });
|
|
113
115
|
};
|
|
114
116
|
|
|
@@ -25740,8 +25742,7 @@ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, dat
|
|
|
25740
25742
|
}
|
|
25741
25743
|
else {
|
|
25742
25744
|
forEach(object, (value, key2) => {
|
|
25743
|
-
if (
|
|
25744
|
-
isEqual(get$1(data, `${key}.${key2}`), value))
|
|
25745
|
+
if (key2 !== "id" && isEqual(get$1(data, `${key}.${key2}`), value))
|
|
25745
25746
|
return;
|
|
25746
25747
|
typeSwitch({
|
|
25747
25748
|
base_object: value,
|
|
@@ -25761,7 +25762,7 @@ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, dat
|
|
|
25761
25762
|
break;
|
|
25762
25763
|
}
|
|
25763
25764
|
};
|
|
25764
|
-
const jsonForm = ({ submitData, data, useLabel, props }) => {
|
|
25765
|
+
const jsonForm = ({ submitData, data, useLabel, props, }) => {
|
|
25765
25766
|
const response = {};
|
|
25766
25767
|
forEach(submitData, function (value, key) {
|
|
25767
25768
|
if (key != "id" && isEqual(get$1(data, key), value))
|
|
@@ -25779,7 +25780,7 @@ const jsonForm = ({ submitData, data, useLabel, props }) => {
|
|
|
25779
25780
|
});
|
|
25780
25781
|
return response;
|
|
25781
25782
|
};
|
|
25782
|
-
const formDataForm = ({ submitData, data, useLabel, props }) => {
|
|
25783
|
+
const formDataForm = ({ submitData, data, useLabel, props, }) => {
|
|
25783
25784
|
const formData = new FormData();
|
|
25784
25785
|
forEach(submitData, function (value, key) {
|
|
25785
25786
|
if (key != "id" && isEqual(get$1(data, key), value))
|
|
@@ -27345,11 +27346,12 @@ const EditGridWrapper = (props) => {
|
|
|
27345
27346
|
}
|
|
27346
27347
|
catch (e) {
|
|
27347
27348
|
setErrors((prevState) => produce(prevState, (draft) => {
|
|
27348
|
-
draft[newRow.id] = get(e, "data");
|
|
27349
|
+
draft[newRow.id] = get(e, "data.invalid_params");
|
|
27349
27350
|
}));
|
|
27350
27351
|
notifications.show("Error actualizando información!", { severity: "error" });
|
|
27351
27352
|
}
|
|
27352
27353
|
};
|
|
27354
|
+
const handleProcessRowUpdateError = () => { };
|
|
27353
27355
|
// ===== || KEYDOWN || ===== //
|
|
27354
27356
|
const handleKeyPress = useCallback((event) => {
|
|
27355
27357
|
if (props.permission) {
|
|
@@ -27430,6 +27432,7 @@ const EditGridWrapper = (props) => {
|
|
|
27430
27432
|
rowModesModel: rowModesModel,
|
|
27431
27433
|
onRowModesModelChange: setRowModesModel,
|
|
27432
27434
|
processRowUpdate: processRowUpdate,
|
|
27435
|
+
onProcessRowUpdateError: handleProcessRowUpdateError,
|
|
27433
27436
|
loadingParams: [loadingMutation],
|
|
27434
27437
|
}, props.dataGridProps);
|
|
27435
27438
|
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({
|
|
@@ -27464,7 +27467,7 @@ const editColumn = (props) => {
|
|
|
27464
27467
|
width: 80,
|
|
27465
27468
|
cellClassName: "actions",
|
|
27466
27469
|
getActions: ({ id, row }) => {
|
|
27467
|
-
const canEdit = get$1(row, "obj_permissions.edit");
|
|
27470
|
+
const canEdit = get$1(row, "obj_permissions.edit", true);
|
|
27468
27471
|
const isInEditMode = props.rowModesModel[id]?.mode === GridRowModes.Edit;
|
|
27469
27472
|
if (isInEditMode) {
|
|
27470
27473
|
return [
|
|
@@ -27920,7 +27923,7 @@ const MyGridEditSingleSelect = (props) => {
|
|
|
27920
27923
|
} }));
|
|
27921
27924
|
};
|
|
27922
27925
|
|
|
27923
|
-
const StyledTooltip = styled$1(({ className, ...props }) => (jsx(Tooltip, { ...props, placement:
|
|
27926
|
+
const StyledTooltip = styled$1(({ className, ...props }) => (jsx(Tooltip, { ...props, placement: "top", classes: { popper: className } })))(({ theme }) => ({
|
|
27924
27927
|
[`& .${tooltipClasses.tooltip}`]: {
|
|
27925
27928
|
backgroundColor: theme.palette.error.main,
|
|
27926
27929
|
color: theme.palette.error.contrastText,
|
|
@@ -27930,27 +27933,29 @@ const EditCellWithErrorTooltip = (props) => {
|
|
|
27930
27933
|
const { error } = props;
|
|
27931
27934
|
const renderCell = () => {
|
|
27932
27935
|
switch (props.colDef.type) {
|
|
27933
|
-
case
|
|
27936
|
+
case "boolean":
|
|
27934
27937
|
return jsx(GridEditBooleanCell, { ...props });
|
|
27935
|
-
case
|
|
27938
|
+
case "singleSelect":
|
|
27936
27939
|
return jsx(MyGridEditSingleSelect, { ...props });
|
|
27937
27940
|
default:
|
|
27938
|
-
return jsx(GridEditInputCell, { ...props, slotProps: {
|
|
27941
|
+
return (jsx(GridEditInputCell, { ...props, slotProps: {
|
|
27939
27942
|
root: {
|
|
27940
27943
|
onFocus: (e) => {
|
|
27941
|
-
if (props.field ==
|
|
27944
|
+
if (props.field == "cotizacion__total")
|
|
27942
27945
|
return e.target.select();
|
|
27943
27946
|
},
|
|
27944
|
-
}
|
|
27945
|
-
} });
|
|
27947
|
+
},
|
|
27948
|
+
} }));
|
|
27946
27949
|
}
|
|
27947
27950
|
};
|
|
27948
|
-
return (jsx(StyledTooltip, { open: !!error, title: error, children: renderCell() }));
|
|
27951
|
+
return (jsx(StyledTooltip, { open: !!error, title: error?.reason.join(", "), children: jsx("div", { style: { display: "flex" }, children: renderCell() }) }));
|
|
27949
27952
|
};
|
|
27950
27953
|
|
|
27951
27954
|
function renderEditCellWithErrorTooltip(params, mutationErrors, path) {
|
|
27952
|
-
const
|
|
27953
|
-
|
|
27955
|
+
const error = find(get(mutationErrors, params.id), function (e) {
|
|
27956
|
+
return e.name == (path || params.field);
|
|
27957
|
+
});
|
|
27958
|
+
return jsx(EditCellWithErrorTooltip, { ...params, error: error });
|
|
27954
27959
|
}
|
|
27955
27960
|
|
|
27956
27961
|
const CoverPage = (props) => {
|
|
@@ -28080,60 +28085,81 @@ const Field = (props) => {
|
|
|
28080
28085
|
};
|
|
28081
28086
|
|
|
28082
28087
|
const EditToolbar = (props) => {
|
|
28083
|
-
return (
|
|
28088
|
+
return (jsx(Toolbar, { children: props.pageType != "detail" && (jsx(Tooltip$1, { title: "Crear", children: jsx(ToolbarButton, { onClick: props.handleCreate, children: jsx(AddIcon, { fontSize: "small" }) }) })) }));
|
|
28084
28089
|
};
|
|
28085
28090
|
const FieldArrayField = (props) => {
|
|
28086
|
-
const
|
|
28091
|
+
const detail = useMemo(() => props.pageType === "detail", [props.pageType]);
|
|
28092
|
+
const { fields, append, update, remove } = useFieldArray({
|
|
28087
28093
|
control: props.form.control,
|
|
28088
28094
|
name: props.name,
|
|
28089
28095
|
keyName: "_id",
|
|
28090
28096
|
});
|
|
28091
|
-
const [
|
|
28092
|
-
open: false,
|
|
28093
|
-
data: undefined,
|
|
28094
|
-
});
|
|
28095
|
-
const [rowSelectionModel, setRowSelectionModel] = useState({
|
|
28096
|
-
type: "include",
|
|
28097
|
-
ids: new Set(),
|
|
28098
|
-
});
|
|
28097
|
+
const [rowModesModel, setRowModesModel] = useState({});
|
|
28099
28098
|
const getIndex = useCallback((id) => findIndex(fields, function (field) {
|
|
28100
28099
|
return field._id == id;
|
|
28101
28100
|
}), [fields]);
|
|
28102
28101
|
const handleCreate = () => {
|
|
28103
|
-
|
|
28104
|
-
};
|
|
28105
|
-
const handleDelete = () => {
|
|
28106
|
-
remove(Array.from(rowSelectionModel.ids).map((id) => getIndex(id)));
|
|
28102
|
+
append(props.defaultValues);
|
|
28107
28103
|
};
|
|
28108
|
-
const
|
|
28109
|
-
|
|
28104
|
+
const handleDelete = (id) => {
|
|
28105
|
+
remove(getIndex(id));
|
|
28110
28106
|
};
|
|
28111
|
-
|
|
28112
|
-
|
|
28113
|
-
|
|
28114
|
-
|
|
28115
|
-
|
|
28116
|
-
|
|
28117
|
-
|
|
28118
|
-
|
|
28119
|
-
//
|
|
28120
|
-
// }
|
|
28121
|
-
const handleRowClick = (e) => {
|
|
28122
|
-
setDrawer({ open: true, data: e.row });
|
|
28107
|
+
const processRowUpdate = async (newRow, originalRow) => {
|
|
28108
|
+
const original_data = jsonForm({ submitData: originalRow, props: props.parser });
|
|
28109
|
+
const data = jsonForm({ submitData: newRow, props: props.parser });
|
|
28110
|
+
if (isEqual$1(data, original_data))
|
|
28111
|
+
return originalRow;
|
|
28112
|
+
const index = getIndex(data._id);
|
|
28113
|
+
update(index, data);
|
|
28114
|
+
return newRow;
|
|
28123
28115
|
};
|
|
28124
|
-
|
|
28125
|
-
|
|
28126
|
-
|
|
28127
|
-
|
|
28128
|
-
|
|
28129
|
-
|
|
28130
|
-
|
|
28131
|
-
|
|
28132
|
-
|
|
28133
|
-
|
|
28134
|
-
|
|
28135
|
-
|
|
28136
|
-
|
|
28116
|
+
const handleProcessRowUpdateError = () => { };
|
|
28117
|
+
const dataGridProps = mergeSettings({
|
|
28118
|
+
columns: !detail
|
|
28119
|
+
? [
|
|
28120
|
+
...editColumn({
|
|
28121
|
+
displayEdit: true,
|
|
28122
|
+
rowModesModel,
|
|
28123
|
+
setRowModesModel,
|
|
28124
|
+
}),
|
|
28125
|
+
{
|
|
28126
|
+
field: "delete",
|
|
28127
|
+
type: "actions",
|
|
28128
|
+
headerName: "Borrar",
|
|
28129
|
+
renderCell: (params) => (jsx(GridActionsCell, { ...params, children: jsx(GridActionsCellItem, { icon: jsx(DeleteIcon, {}), label: "Delete", color: "primary", onClick: () => handleDelete(params.row._id) }) })),
|
|
28130
|
+
},
|
|
28131
|
+
]
|
|
28132
|
+
: [],
|
|
28133
|
+
rows: fields,
|
|
28134
|
+
disableRowSelectionOnClick: true,
|
|
28135
|
+
disableColumnSelector: true,
|
|
28136
|
+
showToolbar: !detail,
|
|
28137
|
+
slots: { toolbar: EditToolbar },
|
|
28138
|
+
slotProps: {
|
|
28139
|
+
toolbar: {
|
|
28140
|
+
handleCreate: handleCreate,
|
|
28141
|
+
handleDelete: handleDelete,
|
|
28142
|
+
pageType: props.pageType,
|
|
28143
|
+
},
|
|
28144
|
+
baseCheckbox: {
|
|
28145
|
+
size: "small",
|
|
28146
|
+
},
|
|
28147
|
+
},
|
|
28148
|
+
getRowId: (row) => row._id,
|
|
28149
|
+
getRowClassName: (params) => params.indexRelativeToCurrentPage % 2 === 0 ? "even" : "odd",
|
|
28150
|
+
density: "compact",
|
|
28151
|
+
onRowClick: undefined,
|
|
28152
|
+
editMode: "row",
|
|
28153
|
+
rowModesModel: rowModesModel,
|
|
28154
|
+
onRowModesModelChange: setRowModesModel,
|
|
28155
|
+
processRowUpdate: processRowUpdate,
|
|
28156
|
+
onProcessRowUpdateError: handleProcessRowUpdateError,
|
|
28157
|
+
onRowEditStart: ({ reason }, event) => {
|
|
28158
|
+
if (reason === GridRowEditStartReasons.cellDoubleClick && detail)
|
|
28159
|
+
event.defaultMuiPrevented = true;
|
|
28160
|
+
},
|
|
28161
|
+
}, props.dataGridProps);
|
|
28162
|
+
return (jsx(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, { ...dataGridProps }) })] }) }));
|
|
28137
28163
|
};
|
|
28138
28164
|
|
|
28139
28165
|
const Section = (props) => {
|
|
@@ -28380,7 +28406,11 @@ function DetailPage(props) {
|
|
|
28380
28406
|
// ==============================|| SUBMIT ||============================== //
|
|
28381
28407
|
const onSubmitHandler = (submitedData) => {
|
|
28382
28408
|
const formData = "nativeEvent" in submitedData ? form.getValues() : submitedData;
|
|
28383
|
-
const params = {
|
|
28409
|
+
const params = {
|
|
28410
|
+
submitData: formData,
|
|
28411
|
+
data: data,
|
|
28412
|
+
props: props.slotProps?.parser,
|
|
28413
|
+
};
|
|
28384
28414
|
const dataToSend = props.edit.useFormData ? formDataForm(params) : jsonForm(params);
|
|
28385
28415
|
mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args })
|
|
28386
28416
|
.unwrap()
|
|
@@ -28406,6 +28436,7 @@ function DetailPage(props) {
|
|
|
28406
28436
|
}
|
|
28407
28437
|
});
|
|
28408
28438
|
};
|
|
28439
|
+
const onError = (errors) => console.log("Validation Errors:", errors);
|
|
28409
28440
|
// ==============================|| RENDER SECTIONS ||============================== //
|
|
28410
28441
|
const renderContent = () => {
|
|
28411
28442
|
let displayed_sections = -1;
|
|
@@ -28471,7 +28502,7 @@ function DetailPage(props) {
|
|
|
28471
28502
|
}
|
|
28472
28503
|
};
|
|
28473
28504
|
return (jsxs(Fragment, { children: [jsx(ContentLayout, { button: renderButton(), badge: props.pageType == "detail" &&
|
|
28474
|
-
badgeInfo && (jsx(StatusBadge, { title: badgeInfo["label"], severity: badgeInfo["value"] })), children: jsx(LoadingComponent, { height: 0.7, isLoading: isLoading || isFetching, children: jsx(FormProvider, { ...form, children: jsx(Box, { id: "formulario", component: "form", autoComplete: "off", noValidate: true, onSubmit: form.handleSubmit(onSubmitHandler), width: "100%", position: "relative", children: renderContent() }) }) }) }), renderPostAction()] }));
|
|
28505
|
+
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, onError), width: "100%", position: "relative", children: renderContent() }) }) }) }), renderPostAction()] }));
|
|
28475
28506
|
}
|
|
28476
28507
|
|
|
28477
28508
|
const ListPage = (props) => {
|
|
@@ -28482,7 +28513,6 @@ function SlideTransition(props) {
|
|
|
28482
28513
|
return jsx(Slide, { ...props, direction: "left" });
|
|
28483
28514
|
}
|
|
28484
28515
|
const BaseProgressSnack = (props) => {
|
|
28485
|
-
console.log(props);
|
|
28486
28516
|
const dispatch = useDispatch();
|
|
28487
28517
|
const handleClose = (e) => {
|
|
28488
28518
|
if (e?.defaultMuiPrevented)
|