shoc-frontend/src/pages/address/components/Form.js

129 lines
4.2 KiB
JavaScript
Raw Normal View History

2025-03-09 19:45:02 -05:00
import React, { useState } from "react";
import Button from "@mui/material/Button";
import TextField from "@mui/material/TextField";
import Dialog from "@mui/material/Dialog";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogContentText from "@mui/material/DialogContentText";
import DialogTitle from "@mui/material/DialogTitle";
import Box from "@mui/material/Box";
import InputLabel from "@mui/material/InputLabel";
import MenuItem from "@mui/material/MenuItem";
import Select from "@mui/material/Select";
import CloseIcon from "@mui/icons-material/Close";
import FormStyles from "./Form.Styles";
import IconButton from "@mui/material/IconButton";
import Typography from "@mui/material/Typography";
import useForm from "../../../hooks/useForm";
import { formValidation } from "../_utility";
import SubmitButtonWithLoader from "../../../components/SubmitButtonWithLoader";
import { form_text_builder, API_SUCCESS_MESSAGE } from "../../../constants";
const ItemForm = ({
userItem,
mode,
open,
setOpen,
apiCall,
setApiStatus,
}) => {
const [isFormLoading, setIsFormLoading] = useState(false);
const [isFormSubmit, setIsFormSubmit] = useState(false);
const classes = FormStyles();
const { PRIMARY_TEXT, SECONDARY_TEXT, BUTTON_TEXT } = form_text_builder(mode);
const { values, errors, handleChangeKV, handleSubmit } = useForm({
initialValues: userItem,
onSubmit(values) {
setIsFormLoading(true);
apiCall(values)
.then((response) => {
setApiStatus({
status: 'success',
message: API_SUCCESS_MESSAGE,
show: true,
});
handleClose();
})
.catch((e) => {
setApiStatus({
status: "failed",
message: e.message,
show: true,
});
handleClose();
});
},
validate: (formValues) => {
if (isFormSubmit) setIsFormSubmit(false);
return formValidation(formValues);
},
});
const handleClose = () => {
setOpen({ open: false });
};
return (
<div style={{ display: "flex", justifyContent: "center" }}>
{values && (
<Dialog fullWidth maxWidth={"sm"} open={open} onClose={handleClose}>
<DialogTitle className={classes.header}>
<Typography className={classes.title}>Address</Typography>
<IconButton onClick={handleClose} style={{ marginLeft: "auto" }}>
<CloseIcon />
</IconButton>
</DialogTitle>
<Box component="form" onSubmit={handleSubmit} noValidate>
<DialogContent>
<DialogContentText className={classes.title}>
2025-05-17 21:51:23 -05:00
{PRIMARY_TEXT.replace("Item", "Address")}
2025-03-09 19:45:02 -05:00
</DialogContentText>
<TextField
2025-05-17 21:51:23 -05:00
id="Title"
2025-03-09 19:45:02 -05:00
label="Name"
variant="outlined"
style={{ width: '100%' }}
margin="normal"
required
2025-05-17 21:51:23 -05:00
name="Title"
value={values.title}
2025-03-09 19:45:02 -05:00
onChange={(event) => {
const { value } = event.target;
2025-05-17 21:51:23 -05:00
handleChangeKV("title", value);
2025-03-09 19:45:02 -05:00
}}
2025-05-17 21:51:23 -05:00
error={!!errors.LastName}
helperText={errors.LastName}
/>
2025-03-09 19:45:02 -05:00
<TextField
2025-05-17 21:51:23 -05:00
id="Name"
label="Address"
2025-03-09 19:45:02 -05:00
variant="outlined"
style={{ width: '100%' }}
margin="normal"
required
2025-05-17 21:51:23 -05:00
name="Name"
value={values.name}
2025-03-09 19:45:02 -05:00
onChange={(event) => {
const { value } = event.target;
2025-05-17 21:51:23 -05:00
handleChangeKV("name", value);
2025-03-09 19:45:02 -05:00
}}
2025-05-17 21:51:23 -05:00
error={!!errors.FirstName}
helperText={errors.FirstName}
/>
2025-03-09 19:45:02 -05:00
</DialogContent>
<DialogActions>
<Button onClick={handleClose}>Cancel</Button>
<SubmitButtonWithLoader
buttonText={BUTTON_TEXT}
loading={isFormLoading}
/>
</DialogActions>
</Box>
</Dialog>
)}
</div>
);
};
export default ItemForm;