diff --git a/src/components/dashboard/machinary-office/Form/ConfirmForm/ConfirmContent.jsx b/src/components/dashboard/machinary-office/Form/ConfirmForm/ConfirmContent.jsx index 16b7ca3..ada0a12 100644 --- a/src/components/dashboard/machinary-office/Form/ConfirmForm/ConfirmContent.jsx +++ b/src/components/dashboard/machinary-office/Form/ConfirmForm/ConfirmContent.jsx @@ -1,26 +1,79 @@ import UploadSystem from "@/core/components/UploadSystem"; import useNotification from "@/lib/app/hooks/useNotification"; import useRequest from "@/lib/app/hooks/useRequest"; -import {Button, DialogActions, DialogContent, FormHelperText, Stack, TextField, Typography} from "@mui/material" +import { + Button, + DialogActions, + DialogContent, + FormHelperText, + Grid, + LinearProgress, + Stack, + TextField, + Typography +} from "@mui/material" import {useFormik} from "formik"; import {useTranslations} from "next-intl"; -import {CONFIRM_MACHINARY_OFFICE} from "@/core/data/apiRoutes"; -import {useState} from "react"; +import { + CONFIRM_MACHINARY_OFFICE, + CONFIRM_MACHINARY_OFFICE_DETAILS +} from "@/core/data/apiRoutes"; +import {useEffect, useState} from "react"; import PriceField from "@/core/components/PriceField"; import * as Yup from "yup"; +import CustomAccordion from "@/core/components/CustomAccordion"; +import ImageContent from "@/core/components/ImageContent"; const vehicle_amount = { "اتوبوس": 7000, "مینی بوس": 2000, } -const ConfirmContent = ({mutate, setOpenConfirmDialog, rowId, vehicle_type}) => { +const ConfirmContent = ({mutate, setOpenConfirmDialog, rowId, vehicle_type , handleSizeChangeClick}) => { const t = useTranslations(); const [selectedImage, setSelectedImage] = useState(""); const [fileType, setfileType] = useState(null); const [fileName, setfileName] = useState(null); const [showAddIcon, setShowAddIcon] = useState(true); - const requestServer = useRequest({auth: true}) + const requestServer = useRequest({auth: true , notification: false}) const {update_notification} = useNotification() + const [accordionStates, setAccordionStates] = useState([]); + const [hasImageShown, setHasImageShown] = useState(false); + const [imageLink, setImageLink] = useState(null); + const [detailsList, setDetailsData] = useState(null); + const [loading, setLoading] = useState(true); + const [isSkeleton, setIsSkeleton] = useState(false); + + useEffect(() => { + requestServer(`${CONFIRM_MACHINARY_OFFICE_DETAILS}/${rowId}`, 'get') + .then((response) => { + const booleanData = Array.from({ length: response.data.data.attachment_files.length }, () => false); + setAccordionStates(booleanData); + setDetailsData(response.data) + }) + .catch(() => { + }).finally(() => { + setLoading(false); + }); + }, []); + + const handleAccordionChange = (index) => { + const newAccordionStates = accordionStates.map((state, i) => i === index ? !state : false); + setAccordionStates(newAccordionStates); + + if (!newAccordionStates[index]) + { + handleSizeChangeClick('sm'); + setHasImageShown(false); + setIsSkeleton(false) + } + else { + handleSizeChangeClick('xl'); + setHasImageShown(true); + setImageLink(detailsList.data.attachment_files[index]) + setIsSkeleton(true) + } + }; + const validationSchema = Yup.object().shape({ proposed_amount: Yup.mixed().test( "is-number", @@ -91,77 +144,104 @@ const ConfirmContent = ({mutate, setOpenConfirmDialog, rowId, vehicle_type}) => } }; + const renderCustomAccordions = () => { + if (detailsList && detailsList.data && detailsList.data.attachment_files) { + return detailsList.data.attachment_files.map((file, index) => ( + handleAccordionChange(index)} + accordionIndex={index} + downloadFile={file.attachment} + /> + )); + } + return null; + }; + return ( <> - - - - {t("ConfirmDialog.description")}{t("ConfirmDialog.optional")}} - value={formik.values.description} - onChange={handleDescriptionChange} - fullWidth - variant="outlined" - sx={{mt: 1}} - /> - - - - {t("ConfirmDialog.proposed_amount")}{t("ConfirmDialog.unit")}} - type="text" - inputProps={{ - inputMode: "number", - min: 0, - pattern: "[0-9]*", - }} - variant="outlined" - value={formik.values.proposed_amount} - onChange={handleAmountChange} - onBlur={formik.handleBlur("proposed_amount")} - error={ - formik.touched.proposed_amount && - Boolean(formik.errors.proposed_amount) - } - helperText={ - formik.touched.proposed_amount && formik.errors.proposed_amount - } - sx={{mt: 1}} - fullWidth - /> - - - {t("MachinaryOffice.upload_file")} - - - {formik.touched.confirm_img && formik.errors.confirm_img} - - - + + + {loading ? : renderCustomAccordions()} + + + + {t("ConfirmDialog.description")}{t("ConfirmDialog.optional")}} + value={formik.values.description} + onChange={handleDescriptionChange} + fullWidth + variant="outlined" + sx={{mt: 1}} + /> + + + + {t("ConfirmDialog.proposed_amount")}{t("ConfirmDialog.unit")}} + type="text" + inputProps={{ + inputMode: "number", + min: 0, + pattern: "[0-9]*", + }} + variant="outlined" + value={formik.values.proposed_amount} + onChange={handleAmountChange} + onBlur={formik.handleBlur("proposed_amount")} + error={ + formik.touched.proposed_amount && + Boolean(formik.errors.proposed_amount) + } + helperText={ + formik.touched.proposed_amount && formik.errors.proposed_amount + } + sx={{mt: 1}} + fullWidth + /> + + + {t("MachinaryOffice.upload_file")} + + + {formik.touched.confirm_img && formik.errors.confirm_img} + + + + + + + + + +