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 NavyForm = () => { 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(directionApp, 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_required")), phone_number: Yup.string().required( t("LoanRequest.error_message_required") ), vehicle_type: Yup.string().required( t("LoanRequest.error_message_required") ), plate_number: Yup.string().required( t("LoanRequest.error_message_required") ), navgan_id: Yup.string().required(t("LoanRequest.error_message_required")), province: Yup.string().required(t("LoanRequest.error_message_required")), national_code: Yup.string().required( t("LoanRequest.error_message_required") ), shenasname_id: Yup.string().required( t("LoanRequest.error_message_required") ), }); // end validation // submit const handleSubmit = async (values, props) => { Notifications(directionApp, 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(directionApp, t, response); }) .catch(function (error) { Notifications(directionApp, 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 NavyForm;