From 6ad675c3df77b819537559d63e9dc2e58c89c6a9 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 11 Dec 2023 14:54:42 +0330 Subject: [PATCH 01/17] debug witel pakage problems --- .../navgan/add-request-loan/forms/AddForm.jsx | 95 +++---------------- .../navgan/add-request-loan/index.jsx | 12 +-- src/components/login/SendToken.jsx | 5 +- src/components/login/SendUserData.jsx | 5 +- src/components/register/RequestOtp.jsx | 5 +- src/components/register/index.jsx | 5 +- src/components/register/navy/UserRegister.jsx | 5 +- src/core/components/ResendToken.jsx | 7 +- src/pages/register/navy/index.jsx | 2 +- 9 files changed, 26 insertions(+), 115 deletions(-) diff --git a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx index df79a4c..88d33c0 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -1,10 +1,7 @@ -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"; @@ -12,6 +9,7 @@ import {Field, Formik} from "formik"; import {useTranslations} from "next-intl"; import {useEffect, useState} from "react"; import * as Yup from "yup"; +import {useDirection, useUser} from "@witel/webapp-builder"; const AddFormComponent = () => { const t = useTranslations(); @@ -34,7 +32,6 @@ const AddFormComponent = () => { setProvinceList(formattedData); }) .catch((error) => { - Notifications(t, error.response); }); }, []); // end get province list @@ -115,7 +112,6 @@ const AddFormComponent = () => { // 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); @@ -138,10 +134,8 @@ const AddFormComponent = () => { }, }) .then(function (response) { - Notifications(t, response); }) .catch(function (error) { - Notifications(t, error.response); props.setSubmitting(false); }); }; @@ -181,15 +175,23 @@ 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")} - /> - { const t = useTranslations(); const {user} = useUser(); return ( - - - + <> + { - - + ); }; diff --git a/src/components/login/SendToken.jsx b/src/components/login/SendToken.jsx index 2a2f287..044ede9 100644 --- a/src/components/login/SendToken.jsx +++ b/src/components/login/SendToken.jsx @@ -1,9 +1,6 @@ import ResendToken from "@/core/components/ResendToken"; import StyledForm from "@/core/components/StyledForm"; import {LOGIN} from "@/core/data/apiRoutes"; -import CenterLayout from "@/layouts/CenterLayout"; -import FullPageLayout from "@/layouts/FullPageLayout"; -import useUser from "@/lib/app/hooks/useUser"; import ChangeCircleIcon from "@mui/icons-material/ChangeCircle"; import LoginIcon from "@mui/icons-material/Login"; import {Box, Button, Container, Grid, Paper, Stack, TextField, Typography,} from "@mui/material"; @@ -11,8 +8,8 @@ import {Field, Formik} from "formik"; import {useTranslations} from "next-intl"; import * as Yup from "yup"; import SvgLogin from "@/core/components/svgs/SvgLogin"; -import useRequest from "@/lib/app/hooks/useRequest"; import AutoSubmit from "@/core/components/AutoSubmit"; +import {CenterLayout, FullPageLayout, useRequest, useUser} from "@witel/webapp-builder"; const SendTokenComponent = ({ PhoneNumber, diff --git a/src/components/login/SendUserData.jsx b/src/components/login/SendUserData.jsx index 6743799..a4c598a 100644 --- a/src/components/login/SendUserData.jsx +++ b/src/components/login/SendUserData.jsx @@ -1,8 +1,5 @@ -import LinkRouting from "@/core/components/LinkRouting"; import StyledForm from "@/core/components/StyledForm"; import {SEND_OTP_TOKEN} from "@/core/data/apiRoutes"; -import CenterLayout from "@/layouts/CenterLayout"; -import FullPageLayout from "@/layouts/FullPageLayout"; import FingerprintIcon from "@mui/icons-material/Fingerprint"; import PersonAddIcon from "@mui/icons-material/PersonAdd"; import {Button, Container, Grid, Paper, Stack, TextField, Typography,} from "@mui/material"; @@ -11,7 +8,7 @@ import {useTranslations} from "next-intl"; import {useSearchParams} from "next/navigation"; import * as Yup from "yup"; import SvgLogin from "@/core/components/svgs/SvgLogin"; -import useRequest from "@/lib/app/hooks/useRequest"; +import {CenterLayout, FullPageLayout, LinkRouting, useRequest} from "@witel/webapp-builder"; const SendUserDataComponent = ({ setOtpToken, diff --git a/src/components/register/RequestOtp.jsx b/src/components/register/RequestOtp.jsx index a24aa4f..4729226 100644 --- a/src/components/register/RequestOtp.jsx +++ b/src/components/register/RequestOtp.jsx @@ -1,8 +1,5 @@ -import LinkRouting from "@/core/components/LinkRouting"; import StyledForm from "@/core/components/StyledForm"; import {SEND_OTP_TOKEN} from "@/core/data/apiRoutes"; -import CenterLayout from "@/layouts/CenterLayout"; -import FullPageLayout from "@/layouts/FullPageLayout"; import FingerprintIcon from "@mui/icons-material/Fingerprint"; import {Button, Container, Paper, Stack, TextField, Typography,} from "@mui/material"; import {Field, Formik} from "formik"; @@ -10,7 +7,7 @@ import {useTranslations} from "next-intl"; import {useSearchParams} from "next/navigation"; import * as Yup from "yup"; import SvgLogin from "@/core/components/svgs/SvgLogin"; -import useRequest from "@/lib/app/hooks/useRequest"; +import {CenterLayout, FullPageLayout, LinkRouting, useRequest} from "@witel/webapp-builder"; const RequestOtpComponent = ({ setOtpToken, diff --git a/src/components/register/index.jsx b/src/components/register/index.jsx index eb11ad0..9036878 100644 --- a/src/components/register/index.jsx +++ b/src/components/register/index.jsx @@ -1,11 +1,8 @@ -import LinkRouting, {NextLinkComposed} from "@/core/components/LinkRouting"; -import CenterLayout from "@/layouts/CenterLayout"; -import FullPageLayout from "@/layouts/FullPageLayout"; -import useUser from "@/lib/app/hooks/useUser"; import {Box, Button, Grid, Stack} from "@mui/material"; import {useTranslations} from "next-intl"; import {useSearchParams} from "next/navigation"; import SvgDashboard from "@/core/components/svgs/SvgDashboard"; +import {CenterLayout, FullPageLayout, LinkRouting, NextLinkComposed, useUser} from "@witel/webapp-builder"; const RegisterComponent = () => { const t = useTranslations(); diff --git a/src/components/register/navy/UserRegister.jsx b/src/components/register/navy/UserRegister.jsx index 9714636..81a3f45 100644 --- a/src/components/register/navy/UserRegister.jsx +++ b/src/components/register/navy/UserRegister.jsx @@ -1,7 +1,5 @@ import StyledForm from "@/core/components/StyledForm"; import {REGISTER} from "@/core/data/apiRoutes"; -import CenterLayout from "@/layouts/CenterLayout"; -import FullPageLayout from "@/layouts/FullPageLayout"; import LoginIcon from "@mui/icons-material/Login"; import ChangeCircleIcon from "@mui/icons-material/ChangeCircle"; import {Box, Button, Chip, Container, Divider, Paper, Stack, TextField, Typography,} from "@mui/material"; @@ -9,10 +7,9 @@ import {Field, Formik} from "formik"; import {useTranslations} from "next-intl"; import * as Yup from "yup"; import ResendToken from "@/core/components/ResendToken"; -import useUser from "@/lib/app/hooks/useUser"; import SvgRegister from "@/core/components/svgs/SvgRegister"; -import useRequest from "@/lib/app/hooks/useRequest"; import AutoSubmit from "@/core/components/AutoSubmit"; +import {CenterLayout, FullPageLayout, useRequest, useUser} from "@witel/webapp-builder"; const UserRegisterComponent = ({ PhoneNumber, diff --git a/src/core/components/ResendToken.jsx b/src/core/components/ResendToken.jsx index 906581c..d564397 100644 --- a/src/core/components/ResendToken.jsx +++ b/src/core/components/ResendToken.jsx @@ -1,11 +1,8 @@ -import Notifications from "@/core/components/notifications"; -import useDirection from "@/lib/app/hooks/useDirection"; import {Button} from "@mui/material"; -import axios from "axios"; import {useTranslations} from "next-intl"; import {useEffect} from "react"; -import {LOGIN, SEND_OTP_TOKEN} from "../data/apiRoutes"; -import useRequest from "@/lib/app/hooks/useRequest"; +import {SEND_OTP_TOKEN} from "../data/apiRoutes"; +import {useDirection, useRequest} from "@witel/webapp-builder"; const ResendToken = ({initialTimerValue, timer, setTimer, PhoneNumber, disabled}) => { const t = useTranslations(); diff --git a/src/pages/register/navy/index.jsx b/src/pages/register/navy/index.jsx index 2272d57..8c0f278 100644 --- a/src/pages/register/navy/index.jsx +++ b/src/pages/register/navy/index.jsx @@ -1,6 +1,6 @@ import NavyComponent from "@/components/register/navy"; -import WithoutAuthMiddleware from "@/middlewares/WithoutAuth"; import {parse} from "next-useragent"; +import {WithoutAuthMiddleware} from "@witel/webapp-builder"; export default function Register() { return ( From 35bf4f7a7d6d9c77d49efac4d017a076efc56b67 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 11 Dec 2023 15:39:43 +0330 Subject: [PATCH 02/17] replace field with textField and add error validation to it --- public/locales/fa/app.json | 2 + .../navgan/add-request-loan/forms/AddForm.jsx | 536 +++++++----------- 2 files changed, 213 insertions(+), 325 deletions(-) diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 2eeb753..fe291f9 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -136,6 +136,7 @@ "error_message_province_id": "لطفا استان خود را وارد کنید!", "error_message_national_id": "لطفا کد ملی خود را وارد کنید!", "error_message_shenasname_id": "لطفا شماره شناسنامه خود را وارد کنید!", + "error_message_national_code": "لطفا کد ملی خود را وارد کنید!", "text_field_phone_number": "شماره تلفن", "text_field_enter_your_phone_number": "شماره تلفن خود را وارد کنید", "text_field_name": "نام", @@ -145,6 +146,7 @@ "text_field_province_id": "استان", "text_field_loading_provinces_list": "درحال دریافت استان ها", "text_field_error_fetching_provinces": "خطا در دریافت استان ها", + "text_field_enter_your_national_code": "کد ملی خود را وارد کنید", "text_field_enter_your_province_id": "استان خود را وارد کنید", "text_field_navgan_id": "شماره ناوگان", "text_field_enter_your_navgan_id": "شماره ناوگان خود را وارد کنید", diff --git a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx index 88d33c0..ee7687d 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -1,22 +1,17 @@ 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 DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; import {Box, Button, Stack, TextField} from "@mui/material"; import axios from "axios"; -import {Field, Formik} from "formik"; +import {useFormik} from "formik"; import {useTranslations} from "next-intl"; import {useEffect, useState} from "react"; import * as Yup from "yup"; -import {useDirection, useUser} from "@witel/webapp-builder"; +import {useUser} from "@witel/webapp-builder"; const AddFormComponent = () => { const t = useTranslations(); - const {directionApp} = useDirection(); const {token} = useUser(); - - // get province list const [provinceList, setProvinceList] = useState([]); useEffect(() => { axios @@ -31,50 +26,11 @@ const AddFormComponent = () => { })); setProvinceList(formattedData); }) - .catch((error) => { - }); + .catch((error) => {}); }, []); - // 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: "", @@ -85,11 +41,8 @@ const AddFormComponent = () => { 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") ), @@ -108,12 +61,8 @@ const AddFormComponent = () => { t("LoanRequest.error_message_shenasname_id") ), }); - // end validation - - // submit const handleSubmit = async (values, props) => { 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); @@ -139,283 +88,220 @@ const AddFormComponent = () => { props.setSubmitting(false); }); }; - // end submit + + const formik = useFormik({ + initialValues, validationSchema, onSubmit: handleSubmit + }) return ( - - {(props) => ( - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )} - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); }; From 5946daeb2bb53f43eba0c38aa25149f8f18a342c Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Tue, 12 Dec 2023 09:16:13 +0330 Subject: [PATCH 03/17] use request and grid instead of box --- public/locales/fa/app.json | 15 +- .../navgan/add-request-loan/forms/AddForm.jsx | 180 ++++++------------ src/core/components/SelectBox.jsx | 10 +- 3 files changed, 69 insertions(+), 136 deletions(-) diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index fe291f9..9473555 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -140,6 +140,7 @@ "text_field_phone_number": "شماره تلفن", "text_field_enter_your_phone_number": "شماره تلفن خود را وارد کنید", "text_field_name": "نام", + "text_field_city_id": "شهر", "text_field_enter_your_name": "نام خود را وارد کنید", "text_field_vehicle_type": "نام وسیله نقلیه", "text_field_enter_your_vehicle_type": "نام وسیله نقلیه خود را وارد کنید", @@ -148,6 +149,7 @@ "text_field_error_fetching_provinces": "خطا در دریافت استان ها", "text_field_enter_your_national_code": "کد ملی خود را وارد کنید", "text_field_enter_your_province_id": "استان خود را وارد کنید", + "text_field_enter_your_city_id": "شهر خود را وارد کنید", "text_field_navgan_id": "شماره ناوگان", "text_field_enter_your_navgan_id": "شماره ناوگان خود را وارد کنید", "text_field_national_code": "کد ملی", @@ -157,18 +159,7 @@ "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_payan_khedmat_image": "تصویر کارت پایان خدمت", - "error_message_national_card_image": "تصویر کارت ملی خود را وارد کنید", - "error_message_shenasname_image": "تصویر شناسنامه خود را وارد کنید", - "error_message_payan_khedmat_image": "تصویر کارت پایان خدمت خود را وارد کنید", + "error_message_city_id": "لطفا شهر خود را وارد کنید!", "add_loan_request_permission": "اکنون امکان ثبت درخواست جدید برای شما مقدور نیست" }, "EditLoanRequest": { diff --git a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx index ee7687d..f5ab007 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -1,32 +1,28 @@ import SelectBox from "@/core/components/SelectBox"; import {GET_PROVINCE_LIST, SEND_LOAN_REQUEST_NAVGAN,} from "@/core/data/apiRoutes"; import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; -import {Box, Button, Stack, TextField} from "@mui/material"; +import {Box, Button, Grid, TextField} from "@mui/material"; import axios from "axios"; import {useFormik} from "formik"; import {useTranslations} from "next-intl"; import {useEffect, useState} from "react"; import * as Yup from "yup"; -import {useUser} from "@witel/webapp-builder"; +import {useRequest, useUser} from "@witel/webapp-builder"; const AddFormComponent = () => { const t = useTranslations(); const {token} = useUser(); const [provinceList, setProvinceList] = useState([]); + const requestServer = useRequest() 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) => {}); + requestServer(GET_PROVINCE_LIST, "get", {auth : true, notification : false}).then(({data}) => { + const formattedData = data.map((province, index) => ({ + id: index, + name: province.name, + value: province.id, + })); + setProvinceList(formattedData); + }).catch(() => {}); }, []); @@ -35,6 +31,7 @@ const AddFormComponent = () => { vehicle_type: "", plate_number: "", province_id: "", + city_id: "", navgan_id: "", national_code: "", shenasname_id: "", @@ -54,6 +51,7 @@ const AddFormComponent = () => { ), navgan_id: Yup.string().required(t("LoanRequest.error_message_navgan_id")), province_id: Yup.string().required(t("LoanRequest.error_message_province_id")), + city_id: Yup.string().required(t("LoanRequest.error_message_city_id")), national_code: Yup.string().required( t("LoanRequest.error_message_national_code") ), @@ -67,6 +65,7 @@ const AddFormComponent = () => { formData.append("vehicle_type", values.vehicle_type); formData.append("plate_number", values.plate_number); formData.append("province_id", values.province_id); + formData.append("city_id", values.city_id); formData.append("navgan_id", values.navgan_id); formData.append("national_code", values.national_code); formData.append("shenasname_id", values.shenasname_id); @@ -75,18 +74,9 @@ const AddFormComponent = () => { 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) { - }) - .catch(function (error) { - props.setSubmitting(false); - }); + requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", {auth : true, notification : true}).then().catch(() => { + props.setSubmitting(false) + }) }; const formik = useFormik({ @@ -96,21 +86,9 @@ const AddFormComponent = () => { return ( <> - - { helperText={formik.touched.national_code && formik.errors.national_code} fullWidth /> - - + { error={formik.touched.phone_number && Boolean(formik.errors.phone_number)} helperText={formik.touched.phone_number && formik.errors.phone_number} /> - - - - + + + + { error={formik.touched.vehicle_type && Boolean(formik.errors.vehicle_type)} helperText={formik.touched.vehicle_type && formik.errors.vehicle_type} /> - - + + { error={formik.touched.plate_number && Boolean(formik.errors.plate_number)} helperText={formik.touched.plate_number && formik.errors.plate_number} /> - - + + + + + + + + - - - - + + + + + + + { error={formik.touched.navgan_id && Boolean(formik.errors.navgan_id)} helperText={formik.touched.navgan_id && formik.errors.navgan_id} /> - - + + { error={formik.touched.shenasname_id && Boolean(formik.errors.shenasname_id)} helperText={formik.touched.shenasname_id && formik.errors.shenasname_id} /> - - + + { setFieldValue(selectType, event.target.value); }; - const handleBlur = () => { - setFieldTouched(select, true); - }; return ( {label} - {selectors.map((selector) => ( - - {selector.name} + {isLoading ? ( + {t("LoanRequest.text_field_loading_provinces_list")} + ) : errorEcured ? ( + + {t("LoanRequest.text_field_error_fetching_provinces")} - ))} + ) : ( + selectors.map((selector) => ( + + {selector.name} + + )) + )} {helperText} diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index cd90a05..57bafba 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -14,5 +14,6 @@ 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"; +export const GET_CITIES_LIST = BASE_URL + "/cities"; diff --git a/src/lib/app/hooks/useCities.jsx b/src/lib/app/hooks/useCities.jsx new file mode 100644 index 0000000..fba621b --- /dev/null +++ b/src/lib/app/hooks/useCities.jsx @@ -0,0 +1,33 @@ +import {useEffect, useState} from "react"; +import {useRequest} from "@witel/webapp-builder"; +import {useTranslations} from "next-intl"; +import {GET_CITIES_LIST} from "@/core/data/apiRoutes"; +const useCities = () => { + const t = useTranslations(); + const [provinceID, setProvinceID] = useState(null) + const [cityList, setCityList] = useState([]); + const [cityTextField, setCityTextField] = useState(t("LoanRequest.city_id")); + const requestServer = useRequest({auth: true, notification: false}) + + useEffect(()=>{ + if(provinceID === null) return + setCityTextField(t("LoanRequest.text_field_loading_cities_list")) + requestServer(`${GET_CITIES_LIST}?province_id=${provinceID}`, "get", {auth: true, notification: false}) + .then(({data}) => { + const result = data.data; + const formattedData = result.map((city, index) => ({ + id: index, + name: city.name, + value: city.id, + })); + setCityList(formattedData); + setCityTextField(t("LoanRequest.text_field_city_id")) + }).catch(() => { + setCityTextField(t("LoanRequest.text_field_error_fetching_cities")) + }); + },[provinceID]) + + + return{cityTextField, cityList, setProvinceID} +} +export default useCities \ No newline at end of file diff --git a/src/lib/app/hooks/useProvince.jsx b/src/lib/app/hooks/useProvince.jsx index d0fbda0..add55f3 100644 --- a/src/lib/app/hooks/useProvince.jsx +++ b/src/lib/app/hooks/useProvince.jsx @@ -1,28 +1,33 @@ import {GET_PROVINCE_LIST} from "@/core/data/apiRoutes"; -import useRequest from "@/lib/app/hooks/useRequest"; -import useSWR from "swr"; +import {useRequest} from "@witel/webapp-builder"; +import {useEffect, useState} from "react"; const useProvince = () => { + const [isLoadingProvinceList, setIsLoadingProvinceList] = useState(false) + const [errorProvinceList, setErrorProvinceList] = useState(false) + const [provinceList, setProvinceList] = useState([]) const requestServer = useRequest({auth: true, notification: false}) - //swr config - const fetcher = (...args) => { - return requestServer(args, 'get').then(({data}) => { - return data; + useEffect(()=> { + setIsLoadingProvinceList(true) + requestServer(GET_PROVINCE_LIST, 'get',{auth : true, notification : false}).then(({data}) => { + const formattedData = data.map((province, index) => ({ + id: index, + name: province.name, + value: province.id, + })); + setIsLoadingProvinceList(false) + setProvinceList(formattedData); }).catch(() => { + setIsLoadingProvinceList(false) + setErrorProvinceList(true) }) - }; - - const {data, isLoading} = useSWR(GET_PROVINCE_LIST, fetcher, { - revalidateIfStale: false, - revalidateOnFocus: false, - revalidateOnReconnect: false - }); + },[]) return { - provinceList: data, - isLoadingProvinceList: isLoading, - errorProvinceList: !data + provinceList, + isLoadingProvinceList, + errorProvinceList } }; From 4a54f3a8d29bd9d9bc6c6f123a036d4b63c611d2 Mon Sep 17 00:00:00 2001 From: Mohammad Jalali Date: Wed, 13 Dec 2023 15:52:41 +0330 Subject: [PATCH 05/17] mohammad | working on plate component --- public/locales/fa/app.json | 2 +- .../navgan/add-request-loan/forms/AddForm.jsx | 73 ++--- src/core/components/PlateNumber.jsx | 295 ++++++++++-------- 3 files changed, 189 insertions(+), 181 deletions(-) diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 228b3c2..d5fa8b9 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -19,6 +19,7 @@ "online_message": "شما به اینترنت وصل هستید", "offline_message": "اتصال شما به اینترنت قطع شده است", "routing_to": "در حال انتقال به صفحه", + "error_message_plate_number": "لطفا شماره پلاک خود را وارد کنید!", "header": { "open_profile": "پروفایل", "edit_profile": "ویرایش پروفایل", @@ -137,7 +138,6 @@ "error_message_name": "لطفا نام خود را وارد کنید!", "error_message_tel_number": "لطفا شماره ثابت (با پیش شماره استان) خود را وارد کنید!", "error_message_vehicle_type": "لطفا نوع وسیله نقلیه خود را وارد کنید!", - "error_message_plate_number": "لطفا شماره پلاک خود را وارد کنید!", "error_message_navgan_id": "لطفا کد هوشمند خود را وارد کنید!", "error_message_province_id": "لطفا استان خود را وارد کنید!", "error_message_national_id": "لطفا کد ملی خود را وارد کنید!", diff --git a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx index f5417f7..6567b42 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -1,7 +1,7 @@ import SelectBox from "@/core/components/SelectBox"; import {SEND_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes"; import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; -import {Box, Button, FormControl, Grid, Stack, TextField} from "@mui/material"; +import {Box, Button, Grid, TextField} from "@mui/material"; import {useFormik} from "formik"; import {useTranslations} from "next-intl"; import * as Yup from "yup"; @@ -14,8 +14,8 @@ const AddFormComponent = () => { const t = useTranslations(); const {token} = useUser(); const requestServer = useRequest() - const{provinceList, isLoadingProvinceList, errorProvinceList} = useProvince() - const{cityTextField, cityList, setProvinceID}=useCities() + const {provinceList, isLoadingProvinceList, errorProvinceList} = useProvince() + const {cityTextField, cityList, setProvinceID} = useCities() const initialValues = { tel_number: "", @@ -28,10 +28,10 @@ const AddFormComponent = () => { shenasname_id: "", postal_code: "", navgan_type: "", - plate_part1 : "", - plate_part2 : "", - plate_part3 : "", - plate_part4 : "", + plate_part1: "", + plate_part2: "", + plate_part3: "", + plate_part4: "", }; const validationSchema = Yup.object().shape({ @@ -44,36 +44,17 @@ const AddFormComponent = () => { navgan_type: Yup.string().required( t("LoanRequest.error_message_navgan_type") ), - postal_code : Yup.mixed() + postal_code: Yup.mixed() .test("max", `${t("LoanRequest.postal_code_max")}`, (value) => value.toString().length === 10) .required( t("LoanRequest.error_message_postal_code") ), - plate_part1: Yup.mixed() - .test("max", `${t("LoanRequest.plate_part1_max")}`, (value) => value.toString().length === 2) - .required( - t("LoanRequest.error_message_plate_part1") - ), - plate_part2: Yup.mixed() - .required( - t("LoanRequest.error_message_plate_part2") - ), - plate_part3: Yup.mixed() - .test("max", `${t("LoanRequest.plate_part3_max")}`, (value) => value.toString().length === 2) - .required( - t("LoanRequest.error_message_plate_part3") - ), - plate_part4: Yup.mixed() - .test("max", `${t("LoanRequest.plate_part3_max")}`, (value) => value.toString().length === 2) - .required( - t("LoanRequest.error_message_plate_part3") - ), navgan_id: Yup.mixed().required(t("LoanRequest.error_message_navgan_id")), province_id: Yup.string().required(t("LoanRequest.error_message_province_id")), city_id: Yup.string().required(t("LoanRequest.error_message_city_id")), national_code: Yup.mixed() .test("is-number", `${t("LoanRequest.national_code_number")}`, - (value) => !isNaN(value)) + (value) => !isNaN(value)) .test("positive", `${t("LoanRequest.national_code_positive")}`, (value) => value >= 0) .test("max", `${t("LoanRequest.national_code_max")}`, (value) => value.toString().length === 10) .required(t("LoanRequest.error_message_national_id")), @@ -96,7 +77,7 @@ const AddFormComponent = () => { formData.append("national_code", values.national_code); formData.append("shenasname_id", values.shenasname_id); - requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", {auth : true, notification : true}).then().catch(() => { + requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", {auth: true, notification: true}).then().catch(() => { props.setSubmitting(false) }) }; @@ -106,7 +87,7 @@ const AddFormComponent = () => { }) return ( <> - @@ -147,15 +128,15 @@ const AddFormComponent = () => { /> - + { label={t("LoanRequest.text_field_navgan_type")} size="small" selectType="navgan_type" - selectors={[{id : 1, value : 1, name : "مسافری"},{id : 2, value : 2, name : "عمومی"},{id : 3, value : 3, name : "روستایی"}]} + selectors={[{id: 1, value: 1, name: "مسافری"}, {id: 2, value: 2, name: "عمومی"}, { + id: 3, + value: 3, + name: "روستایی" + }]} select={formik.values.navgan_type} - handleChange={(event)=> {formik.setFieldValue('navgan_type', event.target.value)}} + handleChange={(event) => { + formik.setFieldValue('navgan_type', event.target.value) + }} setFieldTouched={formik.setFieldTouched} error={formik.touched.navgan_type && Boolean(formik.errors.navgan_type)} helperText={formik.touched.navgan_type && formik.errors.navgan_type} @@ -213,7 +200,7 @@ const AddFormComponent = () => { /> - + { errorEcured={errorProvinceList} selectors={provinceList} select={formik.values.province_id} - handleChange={(event)=> {formik.setFieldValue('province_id', event.target.value); setProvinceID(event.target.value) + handleChange={(event) => { + formik.setFieldValue('province_id', event.target.value); + setProvinceID(event.target.value) formik.setFieldTouched("city_id", false, false); formik.setFieldValue("city_id", "") }} @@ -243,7 +232,7 @@ const AddFormComponent = () => { disabled={cityList.length === 0} selectors={cityList} select={formik.values.city_id} - handleChange={(event)=>formik.setFieldValue('city_id', event.target.value)} + handleChange={(event) => formik.setFieldValue('city_id', event.target.value)} setFieldTouched={formik.setFieldTouched} error={formik.touched.city_id && Boolean(formik.errors.city_id)} helperText={formik.touched.city_id && formik.errors.city_id} @@ -251,7 +240,7 @@ const AddFormComponent = () => { /> - + { /> - - - - - + + id: 23, + value: "*", + name: }, ] const PlateNumber = ({formik}) => { const t = useTranslations(); - return( - - - + const [plateDrawer, setPlateDrawer] = useState(false); + const [selectedWordName, setSelectedWordName] = useState("الف"); + const [selectedWordValue, setSelectedWordValue] = useState(""); + + return ( + <> + + + + ایران + - - + + - - - formik.setFieldValue('plate_part2', event.target.value)} - setFieldTouched={formik.setFieldTouched} - error={formik.touched.plate_part2 && Boolean(formik.errors.plate_part2)} - helperText={formik.touched.plate_part2 && formik.errors.plate_part2} - onBlur={formik.handleBlur("plate_part2")} - /> - - + + + {/**/} + + setPlateDrawer(false)} + > + + {plate_words.map((item) => ( + + ))} + + + + - - - + + + {t("error_message_plate_number")} + ) } From ea2be91094b2f02ea970584ebecbf81fc4c5d91e Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 18 Dec 2023 09:30:46 +0330 Subject: [PATCH 06/17] merge mohammad changes --- public/locales/fa/app.json | 16 +++- .../navgan/add-request-loan/forms/AddForm.jsx | 80 +++++++++++++------ src/core/MuiDatePicker.jsx | 0 3 files changed, 67 insertions(+), 29 deletions(-) create mode 100644 src/core/MuiDatePicker.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 228b3c2..d24b4c1 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -131,6 +131,8 @@ "personal_info": "اطلاعات شخصی", "national_code_number": "کد ملی می بایست شامل اعداد باشد", "national_code_max": "کد ملی می بایست 10 رقم باشد", + "shenasname_serial_max": "سریال پشت کارت ملی می بایست 10 رقم باشد", + "postal_code_max": "کد پستی می بایست 10 رقم باشد", "tel_number_max": "شماره ثابت می بایست 11 رقم باشد", "national_code_positive": "کد ملی می بایست مثبت باشد", "uploading_documents": "اسناد", @@ -141,8 +143,11 @@ "error_message_navgan_id": "لطفا کد هوشمند خود را وارد کنید!", "error_message_province_id": "لطفا استان خود را وارد کنید!", "error_message_national_id": "لطفا کد ملی خود را وارد کنید!", - "error_message_shenasname_id": "لطفا شماره شناسنامه خود را وارد کنید!", + "error_message_shenasname_serial": "لطفا سریال پشت کارت ملی خود را وارد کنید!", + "error_message_postal_code": "لطفا کد پستی خود را وارد کنید!", "error_message_national_code": "لطفا کد ملی خود را وارد کنید!", + "error_message_navgan_type": "لطفا نوع ناوگان خود را وارد کنید!", + "error_message_address": "لطفا آدرس خود را وارد کنید!", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", "text_field_enter_your_tel_number": "شماره ثابت (با پیش شماره استان) خود را وارد کنید", "text_field_name": "نام", @@ -150,13 +155,18 @@ "text_field_plate_part3": "بخش سوم", "text_field_plate_part2": "بخش دوم", "text_field_plate_part1": "بخش اول", + "text_field_postal_code": "کد پستی", + "text_field_navgan_type": "نوع ناوگان", + "text_field_address": "آدرس", "text_field_enter_your_plate_part1": "بخش اول پلاک را وارد کنید", "text_field_enter_your_plate_part2": "بخش دوم پلاک را وارد کنید", "text_field_enter_your_plate_part3": "بخش سوم پلاک را وارد کنید", "text_field_enter_your_plate_part4": "بخش چهارم پلاک راوارد کنید", + "text_field_enter_your_address": "آدرس خود راوارد کنید", "text_field_loading_cities_list": "درحال دریافت اطلاعات شهر ها...", "text_field_city_id": "شهر", "text_field_enter_your_name": "نام خود را وارد کنید", + "text_field_enter_your_postal_code": "کد پستی خود را وارد کنید", "text_field_vehicle_type": "نوع وسیله نقلیه", "text_field_enter_your_vehicle_type": "نوع وسیله نقلیه خود را وارد کنید", "text_field_province_id": "استان", @@ -169,8 +179,8 @@ "text_field_enter_your_navgan_id": "کد هوشمند ناوگان خود را وارد کنید", "text_field_national_code": "کد ملی", "text_field_enter_your_national_id": "کد ملی خود را وارد کنید", - "text_field_shenasname_id": "شماره شناسنامه", - "text_field_enter_your_shenasname_id": "شماره شناسنامه خود را وارد کنید", + "text_field_shenasname_serial": "سریال پشت کارت ملی", + "text_field_enter_your_shenasname_serial": "سریال پشت کارت ملی خود را وارد کنید", "text_field_plate_number": "شماره پلاک", "text_field_enter_your_plate_number": "شماره پلاک خود را وارد کنید", "text_field_error_fetching_cities": "شهر خود را وارد کنید!", diff --git a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx index f5417f7..8d91c98 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -9,6 +9,7 @@ import {useRequest, useUser} from "@witel/webapp-builder"; import useProvince from "@/lib/app/hooks/useProvince"; import useCities from "@/lib/app/hooks/useCities"; import PlateNumber from "@/core/components/PlateNumber"; +import MuiDatePicker from "@/core/MuiDatePicker"; const AddFormComponent = () => { const t = useTranslations(); @@ -25,13 +26,14 @@ const AddFormComponent = () => { city_id: "", navgan_id: "", national_code: "", - shenasname_id: "", + shenasname_serial: "", postal_code: "", navgan_type: "", plate_part1 : "", plate_part2 : "", plate_part3 : "", plate_part4 : "", + address : "", }; const validationSchema = Yup.object().shape({ @@ -44,6 +46,9 @@ const AddFormComponent = () => { navgan_type: Yup.string().required( t("LoanRequest.error_message_navgan_type") ), + address: Yup.string().required( + t("LoanRequest.error_message_address") + ), postal_code : Yup.mixed() .test("max", `${t("LoanRequest.postal_code_max")}`, (value) => value.toString().length === 10) .required( @@ -77,8 +82,9 @@ const AddFormComponent = () => { .test("positive", `${t("LoanRequest.national_code_positive")}`, (value) => value >= 0) .test("max", `${t("LoanRequest.national_code_max")}`, (value) => value.toString().length === 10) .required(t("LoanRequest.error_message_national_id")), - shenasname_id: Yup.string().required( - t("LoanRequest.error_message_shenasname_id") + shenasname_serial: Yup.mixed() + .test("max", `${t("LoanRequest.shenasname_serial_max")}`, (value) => value.toString().length === 11) + .required(t("LoanRequest.error_message_shenasname_serial") ), }); @@ -92,9 +98,10 @@ const AddFormComponent = () => { formData.append("plate_number", values.plate_number); formData.append("province_id", values.province_id); formData.append("city_id", values.city_id); + formData.append("address", values.address); formData.append("navgan_id", values.navgan_id); formData.append("national_code", values.national_code); - formData.append("shenasname_id", values.shenasname_id); + formData.append("shenasname_serial", values.shenasname_serial); requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", {auth : true, notification : true}).then().catch(() => { props.setSubmitting(false) @@ -131,19 +138,17 @@ const AddFormComponent = () => { > @@ -184,17 +189,19 @@ const AddFormComponent = () => { @@ -255,19 +262,21 @@ const AddFormComponent = () => { + {/**/} @@ -275,6 +284,25 @@ const AddFormComponent = () => { + + + + + Date: Mon, 18 Dec 2023 14:11:07 +0330 Subject: [PATCH 07/17] add postal code address and some validation --- package.json | 2 + public/locales/fa/app.json | 12 +- .../navgan/add-request-loan/forms/AddForm.jsx | 122 +++++++------ .../navgan/add-request-loan/index.jsx | 6 +- src/core/MuiDatePicker.jsx | 0 src/core/components/MuiDatePicker.jsx | 85 +++++++++ src/core/components/PlateNumber.jsx | 166 ++++++++---------- src/core/components/SelectBox.jsx | 12 +- src/lib/app/hooks/useCities.jsx | 17 +- 9 files changed, 247 insertions(+), 175 deletions(-) delete mode 100644 src/core/MuiDatePicker.jsx create mode 100644 src/core/components/MuiDatePicker.jsx diff --git a/package.json b/package.json index 05c6f46..9dc8e07 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,11 @@ "@mui/icons-material": "^5.11.16", "@mui/lab": "^5.0.0-alpha.152", "@mui/material": "^5.12.0", + "@mui/x-date-pickers": "^6.18.5", "@witel/webapp-builder": "^1.1.0", "axios": "^1.4.0", "colord": "^2.9.3", + "date-fns-jalali": "^2.13.0-0", "eslint": "8.36.0", "formik": "^2.2.9", "fs-extra": "^11.1.1", diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 06dc231..2c0b598 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -1,7 +1,14 @@ { "app_name": "سامانه جامع تسهیلات", "app_short_name": "سامانه تسهیلات", + "birthday": "تاریخ تولد", + "birthday_error": "تاریخ تولد خود را وارد کنید!", "dashboard": "داشبورد", + "text_field_city_id": "شهر", + "text_field_error_fetching_cities": "لطفا شهر خود را وارد کنید!", + "text_field_loading_cities_list": "درحال دریافت اطلاعات شهر ها...", + "text_field_loading": "درحال دریافت اطلاعات", + "text_field_error_fetching": "خطا در دریافت اطلاعات", "first_page": "خوش آمدید", "powered_by_witel": "توسعه یافته توسط وایتل", "login": "ورود", @@ -127,7 +134,7 @@ "no_request_found": "درخواستی یافت نشد" }, "LoanRequest": { - "city_id": "شهر", + "cityList_empty": "ابتدا استان را وارد کنید", "loan_request_page": "ثبت درخواست وام", "personal_info": "اطلاعات شخصی", "national_code_number": "کد ملی می بایست شامل اعداد باشد", @@ -163,8 +170,6 @@ "text_field_enter_your_plate_part3": "بخش سوم پلاک را وارد کنید", "text_field_enter_your_plate_part4": "بخش چهارم پلاک راوارد کنید", "text_field_enter_your_address": "آدرس خود راوارد کنید", - "text_field_loading_cities_list": "درحال دریافت اطلاعات شهر ها...", - "text_field_city_id": "شهر", "text_field_enter_your_name": "نام خود را وارد کنید", "text_field_enter_your_postal_code": "کد پستی خود را وارد کنید", "text_field_vehicle_type": "نوع وسیله نقلیه", @@ -183,7 +188,6 @@ "text_field_enter_your_shenasname_serial": "سریال پشت کارت ملی خود را وارد کنید", "text_field_plate_number": "شماره پلاک", "text_field_enter_your_plate_number": "شماره پلاک خود را وارد کنید", - "text_field_error_fetching_cities": "شهر خود را وارد کنید!", "button_submit": "ثبت درخواست", "error_message_city_id": "لطفا شهر خود را وارد کنید!", "add_loan_request_permission": "اکنون امکان ثبت درخواست جدید برای شما مقدور نیست" diff --git a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx index 40eed76..8097ee3 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -9,7 +9,7 @@ import {useRequest, useUser} from "@witel/webapp-builder"; import useProvince from "@/lib/app/hooks/useProvince"; import useCities from "@/lib/app/hooks/useCities"; import PlateNumber from "@/core/components/PlateNumber"; -import MuiDatePicker from "@/core/MuiDatePicker"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; const AddFormComponent = () => { const t = useTranslations(); @@ -34,6 +34,7 @@ const AddFormComponent = () => { plate_part3 : "", plate_part4 : "", address : "", + date_of_birth : "", }; const validationSchema = Yup.object().shape({ @@ -49,6 +50,9 @@ const AddFormComponent = () => { address: Yup.string().required( t("LoanRequest.error_message_address") ), + date_of_birth: Yup.string().required( + t("LoanRequest.error_message_date_of_birth") + ), postal_code: Yup.mixed() .test("max", `${t("LoanRequest.postal_code_max")}`, (value) => value.toString().length === 10) .required( @@ -101,6 +105,7 @@ const AddFormComponent = () => { formData.append("address", values.address); formData.append("navgan_id", values.navgan_id); formData.append("national_code", values.national_code); + formData.append("date_of_birth", values.date_of_birth); formData.append("shenasname_serial", values.shenasname_serial); requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", {auth : true, notification : true}).then().catch(() => { @@ -115,7 +120,7 @@ const AddFormComponent = () => { <> - { fullWidth /> - + + + + + + + + { helperText={formik.touched.postal_code && formik.errors.postal_code} /> - - - - - - - - - - { helperText={formik.touched.tel_number && formik.errors.tel_number} /> + + { onBlur={formik.handleBlur("navgan_type")} /> + + + @@ -244,7 +258,7 @@ const AddFormComponent = () => { { - formik.setFieldValue('vehicle_type', event.target.value)} + error={formik.touched.vehicle_type && Boolean(formik.errors.vehicle_type)} + helperText={formik.touched.vehicle_type && formik.errors.vehicle_type} + onBlur={formik.handleBlur("vehicle_type")} /> - {/**/} - - - - - + diff --git a/src/components/dashboard/navgan/add-request-loan/index.jsx b/src/components/dashboard/navgan/add-request-loan/index.jsx index d8668ed..395ede7 100644 --- a/src/components/dashboard/navgan/add-request-loan/index.jsx +++ b/src/components/dashboard/navgan/add-request-loan/index.jsx @@ -1,20 +1,16 @@ import {Box, Chip, Divider} from "@mui/material"; import {useTranslations} from "next-intl"; import AddFormComponent from "@/components/dashboard/navgan/add-request-loan/forms/AddForm"; -import {CenterLayout, useUser} from "@witel/webapp-builder"; const LoanRequestComponent = () => { const t = useTranslations(); - const {user} = useUser(); return ( <> diff --git a/src/core/MuiDatePicker.jsx b/src/core/MuiDatePicker.jsx deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/components/MuiDatePicker.jsx b/src/core/components/MuiDatePicker.jsx new file mode 100644 index 0000000..5da1afc --- /dev/null +++ b/src/core/components/MuiDatePicker.jsx @@ -0,0 +1,85 @@ +import * as React from 'react'; +import {useState} from 'react'; +import Button from '@mui/material/Button'; +import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali"; +import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; +import {DatePicker} from '@mui/x-date-pickers/DatePicker'; +import {useTranslations} from "next-intl"; +import moment from "jalali-moment"; +import {FormControl, FormHelperText} from "@mui/material"; + +function ButtonField(props) { + const t = useTranslations(); + const { + setOpen, + label, + id, + disabled, + InputProps: {ref} = {}, + inputProps: {'aria-label': ariaLabel} = {}, + } = props; + + return ( + + ); +} + +function ButtonDatePicker(props) { + const t = useTranslations(); + const [open, setOpen] = useState(false); + + return ( + setOpen(false)} + onOpen={() => setOpen(true)} + /> + ); +} + +export default function PickerWithButtonField({formik, error, helperText}) { + const [value, setValue] = useState(null); + + return ( + + + { + setValue(newValue) + }} + + /> + {helperText} + + + ); +} \ No newline at end of file diff --git a/src/core/components/PlateNumber.jsx b/src/core/components/PlateNumber.jsx index 57be9fd..292b764 100644 --- a/src/core/components/PlateNumber.jsx +++ b/src/core/components/PlateNumber.jsx @@ -1,4 +1,4 @@ -import {Box, Button, Drawer, FormHelperText, TextField, Typography} from "@mui/material"; +import {Box, Button, Drawer, FormHelperText, InputBase, Stack} from "@mui/material"; import {useTranslations} from "next-intl"; import AccessibleIcon from '@mui/icons-material/Accessible'; import {useState} from "react"; @@ -128,102 +128,80 @@ const PlateNumber = ({formik}) => { return ( <> - - - - ایران - - + event.target.value.length <= 2 ? formik.setFieldValue("plate_part4", event.target.value) : null} + size={'small'} + placeholder={'xx'} sx={{flexGrow: 2}} + inputProps={{sx: {textAlign: 'center'}}}/> + event.target.value.length <= 3 ? formik.setFieldValue("plate_part3", event.target.value) : null} + size={'small'} placeholder={'xxx'} sx={{ + flexGrow: 3, borderLeft: 1, borderRadius: 0, borderColor: 'divider' + }} inputProps={{sx: {textAlign: 'center'}}}/> + + - setPlateDrawer(false)} > - - {plate_words.map((item) => ( - - ))} - - + {selectedWordName} + - - - - + setPlateDrawer(false)} + > + + {plate_words.map((item) => ( + + ))} + + + event.target.value.length <= 2 ? formik.setFieldValue("plate_part1", event.target.value) : null} + size={'small'} + placeholder={'xx'} + sx={{flexGrow: 2}} + inputProps={{sx: {textAlign: 'center'}}}/> + + + + + + {t("error_message_plate_number")} diff --git a/src/core/components/SelectBox.jsx b/src/core/components/SelectBox.jsx index a1c35c7..2ff2dba 100644 --- a/src/core/components/SelectBox.jsx +++ b/src/core/components/SelectBox.jsx @@ -19,28 +19,26 @@ function SelectBox({ return ( {label}