diff --git a/package.json b/package.json index 39f3ec4..e1b7982 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@mui/material": "^5.12.0", "@mui/x-date-pickers": "^6.18.5", "@witel/webapp-builder": "^1.1.0", + "@witel/webapp-builder": "^1.2.1", "axios": "^1.4.0", "colord": "^2.9.3", "date-fns-jalali": "^2.13.0-0", @@ -45,4 +46,4 @@ "@faker-js/faker": "^7.6.0", "eslint-config-next": "^13.3.0" } -} \ No newline at end of file +} diff --git a/public/images/bg-firstpage-bus.png b/public/images/bg-firstpage-bus.png new file mode 100644 index 0000000..276d67b Binary files /dev/null and b/public/images/bg-firstpage-bus.png differ diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 7ebdf39..5486997 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -5,6 +5,7 @@ "first_page": "خوش آمدید", "powered_by_witel": "توسعه یافته توسط وایتل", "login": "ورود", + "today": "امروز", "pending": "درحال اجرا...", "login_user_panel": "ورود به پنل کاربران", "register_navy": "ثبت نام اعضای ناوگان", @@ -45,7 +46,7 @@ "button_back_dashboard": "بازگشت به صفحه اصلی" }, "Titles": { - "title_login_page": "صفحه ورود", + "title_login_page": "ورود به سامانه", "title_register_page": "صفحه ثبت نام", "title_login_navy_page": "ورود اعضای ناوگان", "title_login_welfare_services_page": "ورود اعضای خدمات رفاهی", @@ -125,7 +126,12 @@ "loan_request_correction": "اصلاح درخواست", "loan_request_detail": "مشاهده جزئیات", "request_number": "درخواست شماره", - "no_request_found": "درخواستی یافت نشد" + "no_request_found": "درخواستی یافت نشد", + "loan_unique_code": "کد یکتا", + "loan_date": "تاریخ درخواست", + "loan_status": "وضعیت", + "loan_bank_branch": "اطلاعات شعبه", + "loan_details": "نمایش" }, "LoanRequest": { "city_id": "شهر", diff --git a/src/components/dashboard/navgan/followUp-loan/index.jsx b/src/components/dashboard/navgan/followUp-loan/index.jsx index de3176c..558babb 100644 --- a/src/components/dashboard/navgan/followUp-loan/index.jsx +++ b/src/components/dashboard/navgan/followUp-loan/index.jsx @@ -1,14 +1,12 @@ -import DashboardLayouts from "@/layouts/dashboardLayouts"; import { Grid, Stack, } from "@mui/material"; import {useEffect, useState} from "react"; import {SHOW_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes"; -import useLoading from "@/lib/app/hooks/useLoading"; -import useRequest from "@/lib/app/hooks/useRequest"; import moment from "jalali-moment"; import RequestCard from "@/components/dashboard/navgan/followUp-loan/RequestCard"; +import {useLoading, useRequest} from "@witel/webapp-builder"; const LoanFollowUpComponent = () => { const requestServer = useRequest(); @@ -34,7 +32,6 @@ const LoanFollowUpComponent = () => { }, []); return ( - { ))} - ); }; diff --git a/src/components/dashboard/refahi/add-request-loan/accessibility/index.jsx b/src/components/dashboard/refahi/add-request-loan/accessibility/index.jsx deleted file mode 100644 index 3618d0b..0000000 --- a/src/components/dashboard/refahi/add-request-loan/accessibility/index.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import {Button, Typography} from "@mui/material"; -import {useTranslations} from "next-intl"; -import CenterLayout from "@/layouts/CenterLayout"; -import {useRouter} from "next/router"; -import {NextLinkComposed} from "@/core/components/LinkRouting"; - -const AccessibilityComponent = () => { - const t = useTranslations(); - const router = useRouter(); - - return ( - - - {t("LoanRequest.add_loan_request_permission")} - - - - ); -}; - -export default AccessibilityComponent; diff --git a/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx deleted file mode 100644 index 4051854..0000000 --- a/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx +++ /dev/null @@ -1,439 +0,0 @@ -import StyledForm from "@/core/components/StyledForm"; -import UploadSystem from "@/core/components/UploadSystem"; -import {SEND_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoutes"; -import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; -import { - Box, - Button, - Chip, - Divider, - FormControl, - FormHelperText, - InputLabel, - MenuItem, - Select, - Stack, - TextField -} from "@mui/material"; -import {Field, Formik} from "formik"; -import {useTranslations} from "next-intl"; -import * as Yup from "yup"; -import useRequest from "@/lib/app/hooks/useRequest"; -import useProvince from "@/lib/app/hooks/useProvince"; -import {useRouter} from "next/router"; - -const AddFormComponent = () => { - const t = useTranslations(); - const requestServer = useRequest() - const {provinceList, isLoadingProvinceList, errorProvinceList} = useProvince(); - const router = useRouter(); - - // initial values, validation and request action of form - const initialValues = { - name: "", - phone_number: "", - province_id: "", - national_id: "", - shenasname_id: "", - 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({ - 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_id")), - national_id: Yup.string().required( - t("LoanRequest.error_message_national_id") - ), - 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 = (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 != 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) { - router.replace('/dashboard/refahi/followUp-loan'); - }) - .catch(function (error) { - }) - .finally(function () { - props.setSubmitting(false); - }); - }; - // end initial values, validation and request action of form - - return ( - - {(props) => ( - - - - - - - - - - - - - - - - - {t("LoanRequest.text_field_province_id")} - - - {props.touched.province_id && props.errors.province_id ? props.errors.province_id : ""} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )} - - ); -}; - -export default AddFormComponent; \ No newline at end of file diff --git a/src/components/dashboard/refahi/add-request-loan/index.jsx b/src/components/dashboard/refahi/add-request-loan/index.jsx deleted file mode 100644 index bc82ac7..0000000 --- a/src/components/dashboard/refahi/add-request-loan/index.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import DashboardLayouts from "@/layouts/dashboardLayouts"; -import useUser from "@/lib/app/hooks/useUser"; -import {useTranslations} from "next-intl"; -import AddFormComponent from "@/components/dashboard/refahi/add-request-loan/forms/AddForm"; -import AccessibilityComponent from "@/components/dashboard/refahi/add-request-loan/accessibility"; - -const LoanRequestComponent = () => { - const t = useTranslations(); - const {user} = useUser(); - return ( - - {user.can_request_a_new_loan ? : } - - ); -}; - -export default LoanRequestComponent; diff --git a/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx b/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx deleted file mode 100644 index 36f5aa0..0000000 --- a/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx +++ /dev/null @@ -1,397 +0,0 @@ -import StyledForm from "@/core/components/StyledForm"; -import UploadSystem from "@/core/components/UploadSystem"; -import {UPDATE_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 {Field, Formik} from "formik"; -import {useTranslations} from "next-intl"; -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 = ({provinceList, initialValues}) => { - const t = useTranslations(); - const requestServer = useRequest(); - const router = useRouter(); - - - // 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_id")), - national_id: Yup.string().required(t("LoanRequest.error_message_national_id")), - 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 = (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 deleted file mode 100644 index 89de937..0000000 --- a/src/components/dashboard/refahi/edit-request-loan/index.jsx +++ /dev/null @@ -1,81 +0,0 @@ -import DashboardLayouts from "@/layouts/dashboardLayouts"; -import EditFormComponent from "@/components/dashboard/refahi/edit-request-loan/forms/EditForm"; -import {useEffect, useState} from "react"; -import {DETAILS_LOAN_REQUEST_WELFARE, GET_PROVINCE_LIST} from "@/core/data/apiRoutes"; -import useLoading from "@/lib/app/hooks/useLoading"; -import useRequest from "@/lib/app/hooks/useRequest"; -import {useRouter} from "next/router"; -import {log} from "next/dist/server/typescript/utils"; - -const LoanRequestComponent = () => { - const requestServer = useRequest(); - const {setLoadingPage} = useLoading(); - const router = useRouter(); - - 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(() => { - setLoadingPage(false); - }); - }, []); - - // get form data - useEffect(() => { - if (!provinceList) return; - setLoadingPage(true); - 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, - state_id: item.state_id - }; - setInitialValues(formattedData); - }) - .catch(() => { - setLoadingPage(false); - }); - }, [provinceList, router]); - - // Redirect to /dashboard/refahi/followUp-loan if state_id is not 7 - useEffect(() => { - if (!initialValues) return - if (initialValues.state_id === 7) return - - router.replace('/dashboard/refahi/followUp-loan'); - }, [initialValues]); - - return ( - <> - {initialValues && initialValues.state_id === 7 && ( - - - - )} - - ); -}; - -export default LoanRequestComponent; \ No newline at end of file diff --git a/src/components/dashboard/refahi/followUp-loan/RequestCard.jsx b/src/components/dashboard/refahi/followUp-loan/RequestCard.jsx deleted file mode 100644 index 799d296..0000000 --- a/src/components/dashboard/refahi/followUp-loan/RequestCard.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import { - Card, - CardContent, - CardHeader, - Grid, IconButton, Tooltip, - Typography, -} from "@mui/material"; -import SellIcon from '@mui/icons-material/Sell'; -import EditIcon from '@mui/icons-material/Edit'; -import {useTranslations} from "next-intl"; -import {NextLinkComposed} from "@/core/components/LinkRouting"; - - -const RequestCard = ({item}) => { - const t = useTranslations(); - return ( - - - } - title={`${t("LoanFollowUp.request_number")}: (${item.id})`} - subheader={item.latest_history_created_at} - action={ - item.state_id === 7 ? ( // Use the ternary operator or if/else inside curly braces - - - - - - ) : null - } - /> - - - {item.loan_state} - - - - - ); -}; - -export default RequestCard; \ No newline at end of file diff --git a/src/components/dashboard/refahi/followUp-loan/index.jsx b/src/components/dashboard/refahi/followUp-loan/index.jsx deleted file mode 100644 index 32b121d..0000000 --- a/src/components/dashboard/refahi/followUp-loan/index.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Grid, Stack, Typography,} from "@mui/material"; -import {useEffect, useState} from "react"; -import {SHOW_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoutes"; -import useLoading from "@/lib/app/hooks/useLoading"; -import useRequest from "@/lib/app/hooks/useRequest"; -import moment from "jalali-moment"; -import RequestCard from "@/components/dashboard/refahi/followUp-loan/RequestCard"; -import {useTranslations} from "next-intl"; - -const LoanFollowUpComponent = () => { - const t = useTranslations() - const requestServer = useRequest(); - const {setLoadingPage} = useLoading(); - const [requestsList, setRequestsList] = useState(null); - // get form data - useEffect(() => { - setLoadingPage(true) - requestServer(SHOW_LOAN_REQUEST_WELFARE, "get", {auth: true, notification: false}) - .then(function ({data}) { - const items = data.data; - const formattedData = items.map((item, index) => ({ - id: item.id, - latest_history_created_at: moment(item.latest_history_created_at).locale("fa").format("HH:mm | YYYY/MM/DD"), - state_id: item.state_id, - loan_state: item.loan_state, - })); - setRequestsList(formattedData); - setLoadingPage(false) - }) - .catch(function (error) { - }) - }, []); - - return ( - - {requestsList == null ? '' : requestsList.length ? ( - {requestsList.map((item, index) => ())} - ) : ({t('LoanFollowUp.no_request_found')})} - - ); -}; - -export default LoanFollowUpComponent; diff --git a/src/components/first/LoanDescription/TimeLineDetails.jsx b/src/components/first/LoanDescription/TimeLineDetails.jsx index 02e2fed..f4470e9 100644 --- a/src/components/first/LoanDescription/TimeLineDetails.jsx +++ b/src/components/first/LoanDescription/TimeLineDetails.jsx @@ -60,15 +60,5 @@ const TimeLineDetails = () => { )} ) - // return ( - // - // - // - // - // - // ) } export default TimeLineDetails \ No newline at end of file diff --git a/src/components/first/LoanRegister.jsx b/src/components/first/LoanRegister.jsx index c665eb2..810c5da 100644 --- a/src/components/first/LoanRegister.jsx +++ b/src/components/first/LoanRegister.jsx @@ -5,16 +5,16 @@ import {LinkRouting} from "@witel/webapp-builder"; const LoanRegister = () => { const t = useTranslations(); return ( - + - + {t("app_name")} - + وام نوسازی ناوگان به هدف رشد و پیشرفت استان های کشور از طریق ارتقای بهره وری و توسعه اعطا میشود. برای استفاده از تسهیلات این سامانه و درخواست وام می بایست ابتدا وارد سامانه شوید. @@ -30,18 +30,6 @@ const LoanRegister = () => { padding: 1 }}> - - {t("firstPage.login_button")} - - - - - {t("firstPage.register_button")} diff --git a/src/components/login/SendUserData.jsx b/src/components/login/SendUserData.jsx index a4c598a..d791869 100644 --- a/src/components/login/SendUserData.jsx +++ b/src/components/login/SendUserData.jsx @@ -10,6 +10,7 @@ import * as Yup from "yup"; import SvgLogin from "@/core/components/svgs/SvgLogin"; import {CenterLayout, FullPageLayout, LinkRouting, useRequest} from "@witel/webapp-builder"; + const SendUserDataComponent = ({ setOtpToken, setPhoneNumber, @@ -94,21 +95,6 @@ const SendUserDataComponent = ({ flexDirection: {xs: "column-reverse", sm: "row"}, }} > - - - - - - - diff --git a/src/components/register/RequestOtp.jsx b/src/components/register/RequestOtp.jsx deleted file mode 100644 index a24aa4f..0000000 --- a/src/components/register/RequestOtp.jsx +++ /dev/null @@ -1,131 +0,0 @@ -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"; -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"; - -const RequestOtpComponent = ({ - setOtpToken, - setPhoneNumber, - PhoneNumber, - setTimer, - initialTimerValue, - }) => { - const t = useTranslations(); - const requestServer = useRequest(); - - const searchParams = useSearchParams(); - const backUrlDecodedPath = searchParams.get("back_url"); - - const initialValues = { - phone_number: PhoneNumber, - }; - const validationSchema = Yup.object().shape({ - phone_number: Yup.string().required( - t("RegisterPage.error_message_phone_number") - ), - }); - - const handleSubmit = (values, props) => { - requestServer(SEND_OTP_TOKEN, "post", { - auth: false, data: { - phone_number: values.phone_number, - } - }) - .then(function (response) { - setPhoneNumber(values.phone_number); - setOtpToken(true); - setTimer(initialTimerValue); - }).catch(function (error) { - props.setSubmitting(false); - }); - }; - - return ( - - - - - - {(props) => ( - - - - - - {t("Titles.title_register_page")} - - - - - - - - - )} - - - - - - - {t("RegisterPage.link_routing_back_to")}{" "} - {backUrlDecodedPath - ? t("RegisterPage.link_routing_previuos_page") - : t("RegisterPage.link_routing_register")} - - - - ); -}; - -export default RequestOtpComponent; diff --git a/src/components/register/index.jsx b/src/components/register/index.jsx deleted file mode 100644 index eb11ad0..0000000 --- a/src/components/register/index.jsx +++ /dev/null @@ -1,90 +0,0 @@ -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"; - -const RegisterComponent = () => { - const t = useTranslations(); - const {isAuth} = useUser(); - - const searchParams = useSearchParams(); - const backUrlDecodedPath = searchParams.get("back_url"); - - return ( - - - - {isAuth ? ( - - ) : ( - - - - - - {/**/} - {/* */} - {/* {t("register_welfare_services")}*/} - {/* */} - {/**/} - - - )} - - - - {t("RegisterPage.link_routing_back_to")}{" "} - {backUrlDecodedPath - ? t("RegisterPage.link_routing_previuos_page") - : t("LoginPage.link_routing_main_page")} - - - - ); -}; - -export default RegisterComponent; diff --git a/src/components/register/navy/UserRegister.jsx b/src/components/register/navy/UserRegister.jsx deleted file mode 100644 index 9714636..0000000 --- a/src/components/register/navy/UserRegister.jsx +++ /dev/null @@ -1,176 +0,0 @@ -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"; -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"; - -const UserRegisterComponent = ({ - PhoneNumber, - setOtpToken, - initialTimerValue, - timer, - setTimer, - }) => { - const t = useTranslations(); - const {setToken} = useUser(); - const requestServer = useRequest(); - - const initialValues = { - type_id: "1", - verification_code: "", - phone_number: PhoneNumber, - national_id: "", - }; - - const validationSchema = Yup.object().shape({ - verification_code: Yup.string().required( - t("RegisterPage.error_message_verification_code") - ), - national_id: Yup.string().required( - t("RegisterPage.error_message_national_id") - ), - }); - - const handleSubmit = (values, props) => { - requestServer(REGISTER, "post", { - auth: false, data: { - type_id: values.type_id, - national_id: values.national_id, - phone_number: values.phone_number, - verification_code: values.verification_code, - } - }) - .then(function (response) { - setOtpToken(true); - setToken(response.data.token); - }).catch(function (error) { - props.setSubmitting(false); - }); - }; - - return ( - - - - - - {(props) => ( - - - - - - {t("register_navy")} - - - - - - {t("LoginPage.sent_token_to")}: {PhoneNumber} - - - - e.target.value.length <= 6 ? props.setFieldValue("verification_code", e.target.value) : ""} - /> - - - - - - - - - - - )} - - - - - - ); -}; - -export default UserRegisterComponent; diff --git a/src/components/register/navy/index.jsx b/src/components/register/navy/index.jsx deleted file mode 100644 index 9296f78..0000000 --- a/src/components/register/navy/index.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import {useState} from "react"; -import RequestOtpComponent from "../RequestOtp"; -import UserRegisterComponent from "./UserRegister"; - -const NavyComponent = () => { - const [otpToken, setOtpToken] = useState(false); - const [PhoneNumber, setPhoneNumber] = useState(""); - - // For Resend Token (read ResendToken Component Doc) - const initialTimerValue = 30; - const [timer, setTimer] = useState(initialTimerValue); - // End For Resend Token - - if (!otpToken) { - return ( - - ); - } else { - return ( - - ); - } -}; - -export default NavyComponent; diff --git a/src/components/register/welfare-services/UserRegister.jsx b/src/components/register/welfare-services/UserRegister.jsx deleted file mode 100644 index a043a53..0000000 --- a/src/components/register/welfare-services/UserRegister.jsx +++ /dev/null @@ -1,174 +0,0 @@ -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"; -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"; - -const UserRegisterComponent = ({ - PhoneNumber, - setOtpToken, - initialTimerValue, - timer, - setTimer, - }) => { - const t = useTranslations(); - const {setToken} = useUser(); - const requestServer = useRequest(); - - const initialValues = { - type_id: "2", - verification_code: "", - phone_number: PhoneNumber, - national_id: "", - }; - - const validationSchema = Yup.object().shape({ - verification_code: Yup.string().required( - t("RegisterPage.error_message_verification_code") - ), - national_id: Yup.string().required( - t("RegisterPage.error_message_national_id") - ), - }); - - const handleSubmit = (values, props) => { - requestServer(REGISTER, "post", { - auth: false, data: { - type_id: values.type_id, - national_id: values.national_id, - phone_number: values.phone_number, - verification_code: values.verification_code, - } - }) - .then(function (response) { - setOtpToken(true); - setToken(response.data.token); - }).catch(function (error) { - props.setSubmitting(false); - }); - }; - - return ( - - - - - - {(props) => ( - - - - - - {t("register_welfare_services")} - - - - - - {t("LoginPage.sent_token_to")}: {PhoneNumber} - - - - - - - - - - - - - - )} - - - - - - ); -}; - -export default UserRegisterComponent; diff --git a/src/components/register/welfare-services/index.jsx b/src/components/register/welfare-services/index.jsx deleted file mode 100644 index 322490f..0000000 --- a/src/components/register/welfare-services/index.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import {useState} from "react"; -import RequestOtpComponent from "../RequestOtp"; -import UserRegisterComponent from "./UserRegister"; - -const WelfareServicesComponent = () => { - const [otpToken, setOtpToken] = useState(false); - const [PhoneNumber, setPhoneNumber] = useState(""); - - // For Resend Token (read ResendToken Component Doc) - const initialTimerValue = 30; - const [timer, setTimer] = useState(initialTimerValue); - // End For Resend Token - - if (!otpToken) { - return ( - - ); - } else { - return ( - - ); - } -}; - -export default WelfareServicesComponent; diff --git a/src/core/components/GlobalHead.jsx b/src/core/components/GlobalHead.jsx index 9036b85..002199d 100644 --- a/src/core/components/GlobalHead.jsx +++ b/src/core/components/GlobalHead.jsx @@ -39,14 +39,6 @@ const GlobalHead = () => { /> - diff --git a/src/core/components/ResendToken.jsx b/src/core/components/ResendToken.jsx index d564397..a2a075b 100644 --- a/src/core/components/ResendToken.jsx +++ b/src/core/components/ResendToken.jsx @@ -2,6 +2,7 @@ import {Button} from "@mui/material"; import {useTranslations} from "next-intl"; import {useEffect} from "react"; import {SEND_OTP_TOKEN} from "../data/apiRoutes"; +import {SEND_OTP_TOKEN} from "../data/apiRoutes"; import {useDirection, useRequest} from "@witel/webapp-builder"; const ResendToken = ({initialTimerValue, timer, setTimer, PhoneNumber, disabled}) => { diff --git a/src/core/data/sidebarMenu.js b/src/core/data/sidebarMenu.js index 5f24a93..ef2c7d8 100644 --- a/src/core/data/sidebarMenu.js +++ b/src/core/data/sidebarMenu.js @@ -20,7 +20,7 @@ const sidebarMenu = [ route: "/dashboard/navgan/add-request-loan", icon: , selected: false, - permission: "can_request_a_new_loan" + permission: "can_request_navgan_loan" }, { key: "sidebar.followUp-loan", diff --git a/src/layouts/dashboard.jsx b/src/layouts/dashboard.jsx index 9b1a916..a814c9a 100644 --- a/src/layouts/dashboard.jsx +++ b/src/layouts/dashboard.jsx @@ -2,18 +2,24 @@ import {DashboardLayout as DashboardLayoutPure, useUser} from "@witel/webapp-bui import headerProfileItems from "@/core/data/headerProfileItems"; import sidebarMenu from "@/core/data/sidebarMenu"; import {GET_SIDEBAR_NOTIFICATION} from "@/core/data/apiRoutes"; +import UserInfo from "@/middlewares/UserInfo"; +import {useTranslations} from "next-intl"; +import moment from "jalali-moment"; const DashboardLayout = (props) => { const {user} = useUser() + const middlewaresProps = props.middlewaresProps || {} + const t = useTranslations() return ( <> diff --git a/src/middlewares/UserInfo.jsx b/src/middlewares/UserInfo.jsx new file mode 100644 index 0000000..3f594c4 --- /dev/null +++ b/src/middlewares/UserInfo.jsx @@ -0,0 +1,9 @@ +import {useUser} from "@witel/webapp-builder"; + +const UserInfo = ({children}) => { + const {user} = useUser(); + const userAccess = user.profile_completed; + return userAccess ? <>{children} : ''; +}; + +export default UserInfo; diff --git a/src/pages/dashboard/navgan/add-request-loan/index.jsx b/src/pages/dashboard/navgan/add-request-loan/index.jsx index 5af141c..1f04bf3 100644 --- a/src/pages/dashboard/navgan/add-request-loan/index.jsx +++ b/src/pages/dashboard/navgan/add-request-loan/index.jsx @@ -15,7 +15,7 @@ export async function getServerSideProps({req, locale}) { title: "LoanRequest.loan_request_page", isBot, locale, - layout: {name: 'DashboardLayout'} + layout: {name: 'DashboardLayout', permissions: ["can_request_navgan_loan"]} }, }; } diff --git a/src/pages/login.jsx b/src/pages/login.jsx index 63e88c7..39502a9 100644 --- a/src/pages/login.jsx +++ b/src/pages/login.jsx @@ -4,7 +4,7 @@ import {WithoutAuthMiddleware} from "@witel/webapp-builder"; export default function Login() { return ( - + ); diff --git a/src/pages/register/index.jsx b/src/pages/register/index.jsx deleted file mode 100644 index 3f078d7..0000000 --- a/src/pages/register/index.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import RegisterComponent from "@/components/register"; -import {parse} from "next-useragent"; -import {WithoutAuthMiddleware} from "@witel/webapp-builder"; - -export default function Register() { - 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: "Titles.title_register_page", - isBot, - }, - }; -} diff --git a/src/pages/register/navy/index.jsx b/src/pages/register/navy/index.jsx deleted file mode 100644 index 2272d57..0000000 --- a/src/pages/register/navy/index.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import NavyComponent from "@/components/register/navy"; -import WithoutAuthMiddleware from "@/middlewares/WithoutAuth"; -import {parse} from "next-useragent"; - -export default function Register() { - 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: "Titles.title_register_navy_page", - isBot, - }, - }; -} diff --git a/src/pages/register/welfare-services/index.jsx b/src/pages/register/welfare-services/index.jsx deleted file mode 100644 index ce05a4f..0000000 --- a/src/pages/register/welfare-services/index.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import WithoutAuthMiddleware from "@/middlewares/WithoutAuth"; -import {parse} from "next-useragent"; - -export default function Register() { - 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: "Titles.title_register_welfare_services_page", - isBot, - }, - }; -}