diff --git a/example.env.local b/example.env.local index e8913b3..7b2ec17 100644 --- a/example.env.local +++ b/example.env.local @@ -1,5 +1,5 @@ NEXT_PUBLIC_API_NAME = "Loan Facilities Dashboard" -NEXT_PUBLIC_API_VERSION = "1.22.3" +NEXT_PUBLIC_API_VERSION = "1.28.3" NEXT_PUBLIC_DEFAULT_LANGUAGE = "fa" NEXT_PUBLIC_DEFAULT_DIRECTION = "rtl" 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} + + + + + + + + + + diff --git a/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx b/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx index b33f30d..9747618 100644 --- a/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx +++ b/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx @@ -14,14 +14,8 @@ const Confirm = ({rowId, mutate}) => { } }, [openConfirmDialog]); - const handleSizeChangeClick = (num , state) => { - if (state===true){ - setDialogSize('xl'); - - } - else { - setDialogSize('sm'); - } + const handleSizeChangeClick = (size) => { + setDialogSize(size); }; return ( @@ -39,7 +33,7 @@ const Confirm = ({rowId, mutate}) => { {t("TransportationAssistance.confirm")} - + ) diff --git a/src/core/components/CustomAccordion.jsx b/src/core/components/CustomAccordion.jsx index eb2efcc..20ba932 100644 --- a/src/core/components/CustomAccordion.jsx +++ b/src/core/components/CustomAccordion.jsx @@ -10,29 +10,18 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import VerifiedIcon from '@mui/icons-material/Verified'; import Check from "@mui/icons-material/Check"; import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined"; -import VisibilityRoundedIcon from "@mui/icons-material/VisibilityRounded"; -import {useTranslations} from "next-intl"; import {useState} from "react"; - -const CustomAccordion = ({ title, - hasOpened, - hasAccordionOpened, - handleAccordionChange, - accordionIndex, - handleSizeChange }) => { - const t = useTranslations(); +const CustomAccordion = ({ title, hasOpened, hasAccordionOpened, handleAccordionChange, accordionIndex , downloadFile}) => { const [downloadStatus, setDownloadStatus] = useState('initial'); - const handleDownloadClick = (setStatus) => { - - console.log(setStatus) + const handleDownloadClick = (setStatus , url) => { setStatus('downloading'); + window.open(url, '_blank'); setTimeout(() => { setStatus('completed'); setTimeout(() => { setStatus('initial'); - }, 2500); - }, 2000); - // Perform the actual download logic here + }, 1200); + }, 1000); }; return( handleAccordionChange(accordionIndex)} sx={{ @@ -52,7 +41,7 @@ const CustomAccordion = ({ title, -