From 9098881cebb89f6de754df0f02b90a3b3ce3d24e Mon Sep 17 00:00:00 2001 From: Mohammad Jalali Date: Sun, 27 Aug 2023 10:19:23 +0330 Subject: [PATCH] add form of loan request and edit form of it and debuging and cleaning uploadsystem --- example.env.local | 2 - public/locales/fa/app.json | 23 +- .../refahi/add-request-loan/forms/AddForm.jsx | 234 +++++---- .../refahi/add-request-loan/index.jsx | 14 +- .../edit-request-loan/forms/EditForm.jsx | 445 ++++++++++++++++++ .../refahi/edit-request-loan/index.jsx | 17 + src/core/components/UploadSystem.jsx | 179 ++++--- src/core/data/apiRoutes.js | 2 + .../dashboardLayouts/breadcrumbs/index.jsx | 2 +- .../navgan/add-request-loan/index.jsx | 2 +- .../dashboard/navgan/followUp-loan/index.jsx | 2 +- .../refahi/add-request-loan/index.jsx | 2 +- .../refahi/edit-request-loan/[id].jsx | 26 + .../dashboard/refahi/followUp-loan/index.jsx | 4 +- 14 files changed, 747 insertions(+), 207 deletions(-) create mode 100644 src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx create mode 100644 src/components/dashboard/refahi/edit-request-loan/index.jsx create mode 100644 src/pages/dashboard/refahi/edit-request-loan/[id].jsx diff --git a/example.env.local b/example.env.local index 5c69c4b..b8f7ab4 100644 --- a/example.env.local +++ b/example.env.local @@ -6,8 +6,6 @@ NEXT_PUBLIC_DEFAULT_DIRECTION = "rtl" NEXT_PUBLIC_PRIMARY_MAIN = "#084070" NEXT_PUBLIC_SECONDARY_MAIN = "#FF4E00" -NEXT_PUBLIC_API_URL = "http://Your IP:3000" - NEXT_PUBLIC_BASE_URL = "deploy api" NODE_ENV = "development" \ No newline at end of file diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index e595dc3..56aea14 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -14,6 +14,7 @@ "resend_code": "ارسال مجدد کد", "Resend_code_in": "ارسال مجدد کد در", "seconds_later": "ثانیه دیگر", + "upload_file_text": "بارگذاری فایل", "header": { "open_profile": "پروفایل", "edit_profile": "ویرایش پروفایل", @@ -54,7 +55,8 @@ "sidebar": { "dashboard": "داشبورد", "add-request-loan": "درخواست وام", - "followUp-loan": "پیگیری درخواست" + "followUp-loan": "پیگیری درخواست", + "edit-request-loan": "ویرایش درخواست وام" }, "Authorization": { "typography_your_login_is_valid_and_you_do_not_need_to_login_again": "شما دسترسی لازم به این صفحه را دارید نیاز به ورود مجدد نیست.", @@ -109,7 +111,9 @@ "loan_follow_up_page": "پیگیری درخواست" }, "LoanRequest": { - "loan_request_page": "فرم درخواست وام", + "loan_request_page": "ثبت درخواست وام", + "personal_info": "اطلاعات شخصی", + "uploading_documents": "اسناد", "error_message_name": "لطفا نام خود را وارد کنید!", "error_message_phone_number": "لطفا شماره تلفن خود را وارد کنید!", "error_message_vehicle_type": "لطفا نوع وسیله نقلیه خود را وارد کنید!", @@ -135,7 +139,20 @@ "text_field_plate_number": "شماره پلاک", "text_field_enter_your_plate_number": "شماره پلاک خود را وارد کنید", "button_submit": "ثبت درخواست", + "file_field_sherkat_naft_doc": "مجوز شرکت نفت", + "file_field_estate_doc": "سند مالکیت", + "file_field_agreement_doc": "موافقت نامه اصولی", + "error_message_sherkat_naft_doc": "مجوز شرکت نفت خود را وارد کنید", + "error_message_estate_doc": "سند مالکیت خود را وارد کنید", + "error_message_agreement_doc": "موافقت نامه اصولی خود را وارد کنید", "file_field_shenasname_image": "تصویر شناسنامه", - "file_field_national_card_image": "تصویر کارت ملی" + "file_field_national_card_image": "تصویر کارت ملی", + "file_field_payan_khedmat_image": "تصویر کارت پایان خدمت", + "error_message_national_card_image": "تصویر کارت ملی خود را وارد کنید", + "error_message_shenasname_image": "تصویر شناسنامه خود را وارد کنید", + "error_message_payan_khedmat_image": "تصویر کارت پایان خدمت خود را وارد کنید" + }, + "EditLoanRequest": { + "edit_loan_request_page": "ویرایش درخواست وام" } } diff --git a/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx index 319885e..35a583b 100644 --- a/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx @@ -4,8 +4,7 @@ import {GET_PROVINCE_LIST, SEND_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoute 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 {Box, Button, Chip, Divider, Stack, TextField} from "@mui/material"; import {Field, Formik} from "formik"; import {useTranslations} from "next-intl"; import {useEffect, useState} from "react"; @@ -19,8 +18,9 @@ const AddFormComponent = () => { const {token} = useUser(); const requestServer = useRequest() - // get province list const [provinceList, setProvinceList] = useState([]); + + // get province list useEffect(() => { requestServer(GET_PROVINCE_LIST, "get", {auth: true, notification: false}) .then(function ({data}) { @@ -35,42 +35,6 @@ const AddFormComponent = () => { }, []); // 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, validation and request action of form const initialValues = { name: "", @@ -78,8 +42,12 @@ const AddFormComponent = () => { province: "", national_code: "", shenasname_id: "", - national_card_img: null, - shenasname_img: null, + sherkat_naft_doc: null, + estate_doc: null, + agreement_doc: null, + national_card_image: null, + shenasname_image: null, + payan_khedmat_image: null, }; const validationSchema = Yup.object().shape({ @@ -94,8 +62,13 @@ const AddFormComponent = () => { shenasname_id: Yup.string().required( t("LoanRequest.error_message_shenasname_id") ), + sherkat_naft_doc: Yup.mixed().required(t("LoanRequest.error_message_sherkat_naft_doc")), + estate_doc: Yup.mixed().required(t("LoanRequest.error_message_estate_doc")), + agreement_doc: Yup.mixed().required(t("LoanRequest.error_message_agreement_doc")), + national_card_image: Yup.mixed().required(t("LoanRequest.error_message_national_card_image")), + shenasname_image: Yup.mixed().required(t("LoanRequest.error_message_shenasname_image")), + payan_khedmat_image: Yup.mixed().required(t("LoanRequest.error_message_payan_khedmat_image")), }); - const handleSubmit = async (values, props) => { const formData = new FormData(); formData.append("name", values.name); @@ -103,10 +76,18 @@ const AddFormComponent = () => { formData.append("province_id", values.province); formData.append("national_id", 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); + if (values.sherkat_naft_doc != null) + formData.append("sherkat_naft_doc", values.sherkat_naft_doc); + if (values.estate_doc != null) + formData.append("estate_doc", values.estate_doc); + if (values.agreement_doc != null) + formData.append("agreement_doc", values.agreement_doc); + if (values.shenasname_image != null) + formData.append("shenasname_image", values.shenasname_image); + if (values.national_card_image != null) + formData.append("national_card_image", values.national_card_image); + if (values.payan_khedmat_image != null) + formData.append("payan_khedmat_image", values.payan_khedmat_image); requestServer(SEND_LOAN_REQUEST_WELFARE, "post", {auth: true, data: formData}) .then(function (response) { @@ -132,6 +113,13 @@ const AddFormComponent = () => { }} > + + + + + { /> - - - 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")} - /> + + + + + + + + + + + + + + + + + + + + + + + + { return ( - - - - - - - - + ); }; diff --git a/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx b/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx new file mode 100644 index 0000000..31cc170 --- /dev/null +++ b/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx @@ -0,0 +1,445 @@ +import StyledForm from "@/core/components/StyledForm"; +import UploadSystem from "@/core/components/UploadSystem"; +import {GET_PROVINCE_LIST, UPDATE_LOAN_REQUEST_WELFARE, DETAILS_LOAN_REQUEST_WELFARE} 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, Chip, Divider, Stack, TextField} from "@mui/material"; +import axios from "axios"; +import {Field, Formik} from "formik"; +import {useTranslations} from "next-intl"; +import {useEffect, useMemo, useState} from "react"; +import * as Yup from "yup"; +import SelectBox from "@/core/components/SelectBox"; +import useRequest from "@/lib/app/hooks/useRequest"; +import {useRouter} from "next/router"; +import useLoading from "@/lib/app/hooks/useLoading"; + +const EditFormComponent = () => { + const t = useTranslations(); + const {directionApp} = useDirection(); + const {token} = useUser(); + const requestServer = useRequest(); + const router = useRouter(); + const {setLoadingPage} = useLoading(); + + const [provinceList, setProvinceList] = useState(null); + const [initialValues, setInitialValues] = useState(null); + + // get province list + useEffect(() => { + setLoadingPage(true) + requestServer(GET_PROVINCE_LIST, "get", {auth: true, notification: false}) + .then(function ({data}) { + const formattedData = data.map((province, index) => ({ + id: index, + name: province.name, + value: province.id, + })); + setProvinceList(formattedData); + }).catch(() => { + }); + }, []); + + + // get form data + useEffect(() => { + if (!provinceList) return; + requestServer(DETAILS_LOAN_REQUEST_WELFARE + router.query.id, "get", {auth: true, notification: false}) + .then(function ({data}) { + const item = data.data; + const formattedData = { + name: item.name, + phone_number: item.phone_number, + province_id: item.province_id, + national_id: item.national_id, + shenasname_id: item.shenasname_id, + sherkat_naft_doc: item.sherkat_naft_doc, + estate_doc: item.estate_doc, + agreement_doc: item.agreement_doc, + national_card_image: item.national_card_image, + shenasname_image: item.shenasname_image, + payan_khedmat_image: item.payan_khedmat_image, + } + setInitialValues(formattedData); + setLoadingPage(false) + }).catch(() => { + }) + }, [provinceList]); + + // validation and request action of form + 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") + ), + province_id: Yup.string().required(t("LoanRequest.error_message_province")), + national_id: Yup.string().required(t("LoanRequest.error_message_national_code")), + shenasname_id: Yup.string().required(t("LoanRequest.error_message_shenasname_id")), + sherkat_naft_doc: Yup.mixed().required(t("LoanRequest.error_message_sherkat_naft_doc")), + estate_doc: Yup.mixed().required(t("LoanRequest.error_message_estate_doc")), + agreement_doc: Yup.mixed().required(t("LoanRequest.error_message_agreement_doc")), + national_card_image: Yup.mixed().required(t("LoanRequest.error_message_national_card_image")), + shenasname_image: Yup.mixed().required(t("LoanRequest.error_message_shenasname_image")), + payan_khedmat_image: Yup.mixed().required(t("LoanRequest.error_message_payan_khedmat_image")), + }); + + const handleSubmit = async (values, props) => { + const formData = new FormData(); + formData.append("name", values.name); + formData.append("phone_number", values.phone_number); + formData.append("province_id", values.province_id); + formData.append("national_id", values.national_id); + formData.append("shenasname_id", values.shenasname_id); + if (values.sherkat_naft_doc != initialValues.sherkat_naft_doc) + formData.append("sherkat_naft_doc", values.sherkat_naft_doc); + if (values.estate_doc != initialValues.estate_doc) + formData.append("estate_doc", values.estate_doc); + if (values.agreement_doc != initialValues.agreement_doc) + formData.append("agreement_doc", values.agreement_doc); + if (values.shenasname_image != initialValues.shenasname_image) + formData.append("shenasname_image", values.shenasname_image); + if (values.national_card_image != initialValues.national_card_image) + formData.append("national_card_image", values.national_card_image); + if (values.payan_khedmat_image != initialValues.payan_khedmat_image) + formData.append("payan_khedmat_image", values.payan_khedmat_image); + + requestServer(UPDATE_LOAN_REQUEST_WELFARE + router.query.id, "post", {auth: true, data: formData}) + .then(function (response) { + }) + .catch(function (error) { + }) + .finally(function () { + props.setSubmitting(false); + }); + }; + if (!initialValues) return ""; + return ( + + {(props) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )} + + ); +}; + +export default EditFormComponent; \ No newline at end of file diff --git a/src/components/dashboard/refahi/edit-request-loan/index.jsx b/src/components/dashboard/refahi/edit-request-loan/index.jsx new file mode 100644 index 0000000..4be62ff --- /dev/null +++ b/src/components/dashboard/refahi/edit-request-loan/index.jsx @@ -0,0 +1,17 @@ +import DashboardLayouts from "@/layouts/dashboardLayouts"; +import useUser from "@/lib/app/hooks/useUser"; +import {useTranslations} from "next-intl"; +import EditFormComponent from "@/components/dashboard/refahi/edit-request-loan/forms/EditForm"; + +const LoanRequestComponent = () => { + const t = useTranslations(); + const {user} = useUser(); + + return ( + + + + ); +}; + +export default LoanRequestComponent; \ No newline at end of file diff --git a/src/core/components/UploadSystem.jsx b/src/core/components/UploadSystem.jsx index 85f38f8..8c5e058 100644 --- a/src/core/components/UploadSystem.jsx +++ b/src/core/components/UploadSystem.jsx @@ -1,24 +1,56 @@ -import {Box, Button, TextField, Typography} from "@mui/material"; +import {Box, Button, FormHelperText, TextField, Typography} from "@mui/material"; import {useTranslations} from "next-intl"; import Image from "next/image"; import DeleteForeverIcon from "@mui/icons-material/DeleteForever"; -import {useRef} from "react"; +import {useRef, useState} from "react"; const UploadSystem = ({ - selectedImage, - setselectedImage, - handleUploadChange, - fieldname, + fieldName, + default_image, + helperText, + error, setFieldValue, imageAlt, - imageSize, - fileType, - fileName, label, + enableDelete }) => { const t = useTranslations(); const fileInputRef = useRef(null); + const [selectedImage, setSelectedImage] = useState(default_image || "/images/upload-image.svg"); + const [fileType, setFileType] = useState(null); + const [fileName, setFileName] = useState(""); + + // upload files + const handleUploadChange = (event) => { + const uploadedFile = event.target?.files?.[0]; + if (uploadedFile) { + setSelectedImage(URL.createObjectURL(uploadedFile)); + setFileType(uploadedFile.type); + setFileName(uploadedFile.name); + setFieldValue(fieldName, uploadedFile); + } + }; + // end upload files + + const uploadBoxStyle = error ? { + cursor: "pointer", + objectFit: "contain", + border: "1px dashed #d32f2f", + borderRadius: "5px", + padding: "5px", + width: '200px', + height: '200px' + } : { + cursor: "pointer", + objectFit: "contain", + border: "1px dashed #e1e1e1", + borderRadius: "5px", + padding: "5px", + width: '200px', + height: '200px' + } + const handleClick = () => { fileInputRef.current.click(); }; @@ -27,24 +59,13 @@ const UploadSystem = ({ setFieldValue(fieldname, null); }; - const isDocumentFormat = (fileType) => { - const documentFormats = [ - "application/pdf", - "application/msword", - "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "application/vnd.ms-excel", - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - ]; - return documentFormats.includes(fileType); - }; - return ( - + {selectedImage === "/images/upload-image.svg" ? ( {imageAlt} ) : fileType && fileType.startsWith("image/") ? ( {imageAlt} ) : ( - fileType && - isDocumentFormat(fileType) && ( - + - - {fileName} - - - ) + {fileName} + + )} handleUploadChange(e)} inputRef={fileInputRef} /> - + : ""} + {helperText} ); }; export default UploadSystem; - - -//////****** usage document ******///////// -// 1.) use component inside your page -// 2.) list of props that you need to send is down below -// 2.1) selectedImage // this value come from useState that you need to write on your own component -// 2.2) handleUploadChange // use on your own component (explain below more) you should set it to {(e) =>handleUploadChange[your special name]](e, props.setFieldValue)} -// 2.3) setFieldValue // for setting value of file to null when user click on Delete button. you should set it to {props.setFieldValue} -// 2.4) fieldname name that file field has on your formik initialValues. -// 2.5) fileType // type of your file shows its document image etc... -// 2.6) imageAlt // alt of your image. -// 2.7) imageSize // this is size of your image box and value type is like that imageSize={ [width , height] }. -// 2.9) setselectedImage // for making box empty when user click on delete button (explain below more) - -// const [selectedImage[your special name]], setSelectedImage[your special name]] = useState( -// "/images/upload-image.svg" // default image -// ); -// const [fileType[your special name], setFileType[your special name]] = useState(null); -// const [fileName[your special name], setFileName[your special name]] = useState(null); - - -// const handleUploadChange[your special name]] = (event, setFieldValue) => { -// const uploadedFile = event.target?.files?.[0]; -// const fileType = event.target.files[0].type; -// const fileName = event.target.files[0].name; -// if (uploadedFile) { // just check file is uploaded or not -// setSelectedImage[your special name]](URL.createObjectURL(uploadedFile)); // set image value -// setFileType[your special name]](fileType); // set fileType -// setFileName[your special name]](fileName); // set fileName -// setFieldValue("[your special name]]_img", uploadedFile); set field value for sending data (this automaticaly append value in initial state) -// } -// }; -//////****** end usage document ******///////// diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index ff81c33..7482acd 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -8,6 +8,8 @@ export const REGISTER = BASE_URL + "/register"; export const USER_INFO = BASE_URL + "/profile/info"; export const SEND_LOAN_REQUEST_NAVGAN = BASE_URL + "/navgan/loan/store"; export const SEND_LOAN_REQUEST_WELFARE = BASE_URL + "/refahi/loan/store"; +export const UPDATE_LOAN_REQUEST_WELFARE = BASE_URL + "/refahi/loan/update/"; +export const DETAILS_LOAN_REQUEST_WELFARE = BASE_URL + "/refahi/loan/details/"; export const GET_PROVINCE_LIST = BASE_URL + "/provinces"; diff --git a/src/layouts/dashboardLayouts/breadcrumbs/index.jsx b/src/layouts/dashboardLayouts/breadcrumbs/index.jsx index b819a9c..310323e 100644 --- a/src/layouts/dashboardLayouts/breadcrumbs/index.jsx +++ b/src/layouts/dashboardLayouts/breadcrumbs/index.jsx @@ -19,7 +19,7 @@ const BreadCrumbs = (props) => { const RouterArray = pathname.split("/").filter((segment) => segment !== ""); // every part of your router you want to remove add it to this array - const segmentsToRemove = ["navgan", "refahi"]; + const segmentsToRemove = ["navgan", "refahi", "[id]"]; segmentsToRemove.forEach((segmentToRemove) => { const index = RouterArray.indexOf(segmentToRemove); diff --git a/src/pages/dashboard/navgan/add-request-loan/index.jsx b/src/pages/dashboard/navgan/add-request-loan/index.jsx index dd0a19e..bd8a442 100644 --- a/src/pages/dashboard/navgan/add-request-loan/index.jsx +++ b/src/pages/dashboard/navgan/add-request-loan/index.jsx @@ -4,7 +4,7 @@ import UserTypeMiddleware from "@/middlewares/UserType"; import LoanRequestComponent from "@/components/dashboard/navgan/add-request-loan"; const user_type = 1; -export default function LoanRequest() { +export default function AddLoanRequest() { return ( diff --git a/src/pages/dashboard/navgan/followUp-loan/index.jsx b/src/pages/dashboard/navgan/followUp-loan/index.jsx index ec848e4..52f0271 100644 --- a/src/pages/dashboard/navgan/followUp-loan/index.jsx +++ b/src/pages/dashboard/navgan/followUp-loan/index.jsx @@ -4,7 +4,7 @@ import UserTypeMiddleware from "@/middlewares/UserType"; import LoanFollowUpComponent from "@/components/dashboard/navgan/followUp-loan"; const user_type = 1; -export default function LoanRequest() { +export default function FollowUpLoan() { return ( diff --git a/src/pages/dashboard/refahi/add-request-loan/index.jsx b/src/pages/dashboard/refahi/add-request-loan/index.jsx index 37ad8c3..df6c08b 100644 --- a/src/pages/dashboard/refahi/add-request-loan/index.jsx +++ b/src/pages/dashboard/refahi/add-request-loan/index.jsx @@ -4,7 +4,7 @@ import UserTypeMiddleware from "@/middlewares/UserType"; import LoanRequestComponent from "@/components/dashboard/refahi/add-request-loan"; const user_type = 2; -export default function LoanRequest() { +export default function AddLoanRequest() { return ( diff --git a/src/pages/dashboard/refahi/edit-request-loan/[id].jsx b/src/pages/dashboard/refahi/edit-request-loan/[id].jsx new file mode 100644 index 0000000..4b2b477 --- /dev/null +++ b/src/pages/dashboard/refahi/edit-request-loan/[id].jsx @@ -0,0 +1,26 @@ +import WithAuthMiddleware from "@/middlewares/WithAuth"; +import {parse} from "next-useragent"; +import UserTypeMiddleware from "@/middlewares/UserType"; +import LoanRequestComponent from "@/components/dashboard/refahi/edit-request-loan"; + +const user_type = 2; +export default function EditLoanRequest() { + return ( + + + + + + ); +} + +export async function getServerSideProps({req, locale}) { + const {isBot} = parse(req.headers["user-agent"]); + return { + props: { + messages: (await import(`&/locales/${locale}/app.json`)).default, + title: "EditLoanRequest.edit_loan_request_page", + isBot, + }, + }; +} diff --git a/src/pages/dashboard/refahi/followUp-loan/index.jsx b/src/pages/dashboard/refahi/followUp-loan/index.jsx index c0e8222..6f1d858 100644 --- a/src/pages/dashboard/refahi/followUp-loan/index.jsx +++ b/src/pages/dashboard/refahi/followUp-loan/index.jsx @@ -4,7 +4,7 @@ import UserTypeMiddleware from "@/middlewares/UserType"; import LoanFollowUpComponent from "@/components/dashboard/refahi/followUp-loan"; const user_type = 2; -export default function LoanRequest() { +export default function FollowUpLoan() { return ( @@ -19,7 +19,7 @@ export async function getServerSideProps({req, locale}) { return { props: { messages: (await import(`&/locales/${locale}/app.json`)).default, - title: "LoanRequest.loan_request_page", + title: "LoanFollowUp.loan_follow_up_page", isBot, }, };