import Notifications from "@/core/components/notifications"; import SelectBox from "@/core/components/SelectBox"; import StyledForm from "@/core/components/StyledForm"; import UploadSystem from "@/core/components/UploadSystem"; import {GET_PROVINCE_LIST, SEND_LOAN_REQUEST_NAVGAN,} from "@/core/data/apiRoutes"; import useDirection from "@/lib/app/hooks/useDirection"; import useUser from "@/lib/app/hooks/useUser"; import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; import {Box, Button, Stack, TextField} from "@mui/material"; import axios from "axios"; import {Field, Formik} from "formik"; import {useTranslations} from "next-intl"; import {useEffect, useState} from "react"; import * as Yup from "yup"; const AddFormComponent = () => { const t = useTranslations(); const {directionApp} = useDirection(); const {token} = useUser(); // get province list const [provinceList, setProvinceList] = useState([]); useEffect(() => { axios .get(GET_PROVINCE_LIST, { headers: {Authorization: `Bearer ${token}`}, }) .then(({data}) => { const formattedData = data.map((province, index) => ({ id: index, name: province.name, value: province.id, })); setProvinceList(formattedData); }) .catch((error) => { Notifications(t, error.response); }); }, []); // end get province list // upload files const [selectedImageShenasname, setSelectedImageShenasname] = useState( "/images/upload-image.svg" ); const [fileTypeShenasname, setFileTypeShenasname] = useState(null); const [fileNameShenasname, setFileNameShenasname] = useState(null); const [selectedImageNationalCard, setSelectedImageNationalCard] = useState( "/images/upload-image.svg" ); const [fileTypeNationalCard, setFileTypeNationalCard] = useState(null); const [fileNameNationalCard, setFileNameNationalCard] = useState(null); const handleUploadChangeShenasname = (event, setFieldValue) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImageShenasname(URL.createObjectURL(uploadedFile)); setFileTypeShenasname(fileType); setFileNameShenasname(fileName); setFieldValue("shenasname_img", uploadedFile); } }; const handleUploadChangeNationalCard = (event, setFieldValue) => { const uploadedFile = event.target?.files?.[0]; const fileType = event.target.files[0].type; const fileName = event.target.files[0].name; if (uploadedFile) { setSelectedImageNationalCard(URL.createObjectURL(uploadedFile)); setFileTypeNationalCard(fileType); setFileNameNationalCard(fileName); setFieldValue("national_card_img", uploadedFile); } }; // end upload files // initial values const initialValues = { name: "", phone_number: "", vehicle_type: "", plate_number: "", province: "", navgan_id: "", national_code: "", shenasname_id: "", national_card_img: null, shenasname_img: null, }; // end initial values // validation const validationSchema = Yup.object().shape({ name: Yup.string().required(t("LoanRequest.error_message_name")), phone_number: Yup.string().required( t("LoanRequest.error_message_phone_number") ), vehicle_type: Yup.string().required( t("LoanRequest.error_message_vehicle_type") ), plate_number: Yup.string().required( t("LoanRequest.error_message_plate_number") ), navgan_id: Yup.string().required(t("LoanRequest.error_message_navgan_id")), province: Yup.string().required(t("LoanRequest.error_message_province")), national_code: Yup.string().required( t("LoanRequest.error_message_national_code") ), shenasname_id: Yup.string().required( t("LoanRequest.error_message_shenasname_id") ), }); // end validation // submit const handleSubmit = async (values, props) => { Notifications(t, undefined); const formData = new FormData(); formData.append("name", values.name); formData.append("phone_number", values.phone_number); formData.append("vehicle_type", values.vehicle_type); formData.append("plate_number", values.plate_number); formData.append("province_id", values.province); formData.append("navgan_id", values.navgan_id); formData.append("national_code", values.national_code); formData.append("shenasname_id", values.shenasname_id); if (values.shenasname_img != null) formData.append("shenasname_image", values.shenasname_img); if (values.national_card_img != null) formData.append("national_card_image", values.national_card_img); await axios .post(SEND_LOAN_REQUEST_NAVGAN, formData, { headers: { Authorization: `Bearer ${token}`, "Content-Type": "multipart/form-data", }, }) .then(function (response) { Notifications(t, response); }) .catch(function (error) { Notifications(t, error.response); props.setSubmitting(false); }); }; // end submit return ( {(props) => ( handleUploadChangeShenasname(e, props.setFieldValue) } setselectedImage={setSelectedImageShenasname} setFieldValue={props.setFieldValue} fieldname="shenasname_img" fileType={fileTypeShenasname} fileName={fileNameShenasname} imageAlt={t("app_name")} imageSize={[300 /*width*/, 150 /*height*/]} label={t("LoanRequest.file_field_shenasname_image")} /> handleUploadChangeNationalCard(e, props.setFieldValue) } setselectedImage={setSelectedImageNationalCard} setFieldValue={props.setFieldValue} fieldname="national_card_img" fileType={fileTypeNationalCard} fileName={fileNameNationalCard} imageAlt={t("app_name")} imageSize={[300 /*width*/, 150 /*height*/]} label={t("LoanRequest.file_field_national_card_image")} /> )} ); }; export default AddFormComponent;