diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json
index 07e2420..b1e8c16 100644
--- a/public/locales/fa/app.json
+++ b/public/locales/fa/app.json
@@ -37,24 +37,30 @@
"LoginPage": {
"text_field_phone_number": "شماره تلفن",
"text_field_enter_your_phone_number": "شماره تلفن خود را وارد کنید",
+ "text_field_verification_code": "کد یکبار مصرف",
+ "text_field_enter_your_verification_code": "کد یکبار مصرف خود را وارد کنید",
"button_submit": "ورود",
"link_routing_back_to": "بازگشت به",
"link_routing_previuos_page": "صفحه قبل",
"link_routing_main_page": "صفحه اصلی",
"error_message_required": "اجباری!",
- "button_make_account": "ایجاد حساب"
+ "button_make_account": "ایجاد حساب",
+ "button_request_verification": "دریافت کد یکبارمصرف"
},
"RegisterPage": {
"link_routing_back_to": "بازگشت به",
"link_routing_login_navy": "صفحه ورود",
"text_field_phone_number": "شماره تلفن",
"text_field_enter_your_phone_number": "شماره تلفن خود را وارد کنید",
+ "text_field_verification_code": "کد یکبار مصرف",
+ "text_field_enter_your_verification_code": "کد یکبار مصرف خود را وارد کنید",
"text_field_national_id": "کد ملی",
"text_field_enter_your_national_id": "کد ملی خود را وارد کنید",
"text_field_navgan_id": "شماره ناوگان",
"text_field_enter_your_navgan_id": "شماره ناوگان خود را وارد کنید",
"error_message_required": "اجباری!",
- "button_request_verification": "دریافت کد یکبارمصرف"
+ "button_request_verification": "دریافت کد یکبارمصرف",
+ "button_submit": "ورود"
},
"Dashboard": {
"dashboard_page": "داشبورد"
diff --git a/src/components/dashboard/loan-request/index.jsx b/src/components/dashboard/loan-request/index.jsx
index 385d6dc..b51837c 100644
--- a/src/components/dashboard/loan-request/index.jsx
+++ b/src/components/dashboard/loan-request/index.jsx
@@ -412,6 +412,7 @@ const DashboardLoanRequestComponent = () => {
width={300}
height={300}
src="/images/login.svg"
+ priority
alt={t("app_name")}
/>
@@ -420,6 +421,7 @@ const DashboardLoanRequestComponent = () => {
width={300}
height={300}
src="/images/login.svg"
+ priority
alt={t("app_name")}
/>
diff --git a/src/components/login-navy/SendToken.jsx b/src/components/login-navy/SendToken.jsx
new file mode 100644
index 0000000..d7fb84b
--- /dev/null
+++ b/src/components/login-navy/SendToken.jsx
@@ -0,0 +1,130 @@
+// import Notifications from "@/core/components/notifications";
+import StyledForm from "@/core/components/StyledForm";
+import { LOGIN } from "@/core/data/apiRoutes";
+import CenterLayout from "@/layouts/CenterLayout";
+import FullPageLayout from "@/layouts/FullPageLayout";
+import useDirection from "@/lib/app/hooks/useDirection";
+import useUser from "@/lib/app/hooks/useUser";
+import LoginIcon from "@mui/icons-material/Login";
+import {
+ Box,
+ Button,
+ Container,
+ Grid,
+ Paper,
+ Stack,
+ TextField,
+ Typography
+} from "@mui/material";
+import axios from "axios";
+import { Field, Formik } from "formik";
+import { useTranslations } from "next-intl";
+import Image from "next/image";
+import * as Yup from "yup";
+
+const SendToken = ({ PhoneNumber }) => {
+ const t = useTranslations();
+ const { directionApp } = useDirection();
+ const { setToken } = useUser();
+
+ const initialValues = {
+ phone_number: PhoneNumber,
+ verification_code: "",
+ };
+ const validationSchema = Yup.object().shape({
+ verification_code: Yup.string().required(
+ t("LoginPage.error_message_required")
+ ),
+ });
+
+ const handleSubmit = async (values, props) => {
+ await axios
+ .post(LOGIN, {
+ phone_number: values.phone_number,
+ verification_code: values.verification_code,
+ })
+ .then(function (response) {
+ setToken(response.data.token);
+ })
+ .catch(function (error) {
+ Notifications(directionApp, error.response, t);
+ props.setSubmitting(false);
+ });
+ };
+
+ return (
+
+
+
+
+
+ {(props) => (
+
+
+
+
+
+ {t("login_navy")}
+
+
+
+
+
+
+ }
+ disabled={props.isSubmitting ? true : false}
+ >
+ {t("LoginPage.button_submit")}
+
+
+
+
+
+
+ )}
+
+
+
+
+
+ );
+};
+
+export default SendToken;
diff --git a/src/components/login-navy/SendUserData.jsx b/src/components/login-navy/SendUserData.jsx
new file mode 100644
index 0000000..c3197b8
--- /dev/null
+++ b/src/components/login-navy/SendUserData.jsx
@@ -0,0 +1,164 @@
+// import Notifications from "@/core/components/notifications";
+import LinkRouting from "@/core/components/LinkRouting";
+import StyledForm from "@/core/components/StyledForm";
+import { LOGIN_SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
+import CenterLayout from "@/layouts/CenterLayout";
+import FullPageLayout from "@/layouts/FullPageLayout";
+import useDirection from "@/lib/app/hooks/useDirection";
+import FingerprintIcon from "@mui/icons-material/Fingerprint";
+import PersonAddIcon from "@mui/icons-material/PersonAdd";
+import {
+ Box,
+ Button,
+ Container,
+ Grid,
+ Paper,
+ Stack,
+ TextField,
+ Typography
+} from "@mui/material";
+import axios from "axios";
+import { Field, Formik } from "formik";
+import { useTranslations } from "next-intl";
+import Image from "next/image";
+import { useSearchParams } from "next/navigation";
+import * as Yup from "yup";
+
+const SendUserData = ({ setOtpToken, setPhoneNumber }) => {
+ const t = useTranslations();
+ const { directionApp } = useDirection();
+
+ const searchParams = useSearchParams();
+ const backUrlDecodedPath = searchParams.get("back_url");
+
+ const initialValues = {
+ phone_number: "",
+ };
+ const validationSchema = Yup.object().shape({
+ phone_number: Yup.string().required(t("LoginPage.error_message_required")),
+ });
+
+ const handleSubmit = async (values, props) => {
+ await axios
+ .post(LOGIN_SEND_OTP_TOKEN, {
+ phone_number: values.phone_number,
+ })
+ .then(function (response) {
+ setPhoneNumber(values.phone_number);
+ setOtpToken(true);
+ })
+ .catch(function (error) {
+ // Notifications(directionApp, error.response, t);
+ props.setSubmitting(false);
+ });
+ };
+
+ return (
+
+
+
+
+
+ {(props) => (
+
+
+
+
+
+ {t("login_navy")}
+
+
+
+
+
+
+
+ }
+ disabled={props.isSubmitting ? true : false}
+ >
+ {t("LoginPage.button_make_account")}
+
+
+
+
+ }
+ disabled={props.isSubmitting ? true : false}
+ >
+ {t("LoginPage.button_request_verification")}
+
+
+
+
+
+
+ )}
+
+
+
+
+
+
+ {t("LoginPage.link_routing_back_to")}{" "}
+ {backUrlDecodedPath
+ ? t("LoginPage.link_routing_previuos_page")
+ : t("LoginPage.link_routing_main_page")}
+
+
+
+ );
+};
+
+export default SendUserData;
diff --git a/src/components/login-navy/index.jsx b/src/components/login-navy/index.jsx
index e3fd879..ba30668 100644
--- a/src/components/login-navy/index.jsx
+++ b/src/components/login-navy/index.jsx
@@ -1,161 +1,18 @@
-import LinkRouting from "@/core/components/LinkRouting";
-// import Notifications from "@/core/components/notifications";
-import StyledForm from "@/core/components/StyledForm";
-// import { GET_USER_TOKEN } from "@/core/data/apiRoutes";
-import CenterLayout from "@/layouts/CenterLayout";
-import FullPageLayout from "@/layouts/FullPageLayout";
-import useDirection from "@/lib/app/hooks/useDirection";
-import useUser from "@/lib/app/hooks/useUser";
-import LoginIcon from "@mui/icons-material/Login";
-import PersonAddIcon from "@mui/icons-material/PersonAdd";
-import {
- Box,
- Button,
- Container,
- Grid,
- Paper,
- Stack,
- TextField,
- Typography,
-} from "@mui/material";
-// import axios from "axios";
-import { Field, Formik } from "formik";
-import { useTranslations } from "next-intl";
-import Image from "next/image";
-import { useSearchParams } from "next/navigation";
-import * as Yup from "yup";
+import SendUserData from "./SendUserData";
+import { useState } from "react";
+import SendToken from "./SendToken";
const LoginComponent = () => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const { setToken } = useUser(); // pass token to set token
+ const [otpToken, setOtpToken] = useState(false);
+ const [PhoneNumber, setPhoneNumber] = useState("");
- // gettin url query
- const searchParams = useSearchParams();
- const backUrlDecodedPath = searchParams.get("back_url");
-
- // formik properties
- // const handleSubmit = async (values, props) => {
- // await axios
- // .post(GET_USER_TOKEN, {
- // phone_number: values.phone_number,
- // })
- // .then(function (response) {
- // setToken(response.data.token);
- // })
- // .catch(function (error) {
- // Notifications(directionApp, error.response, t);
- // props.setSubmitting(false);
- // });
- // };
- const initialValues = {
- phone_number: "",
- };
- const validationSchema = Yup.object().shape({
- phone_number: Yup.string().required(t("LoginPage.error_message_required")),
- });
-
- return (
-
-
-
-
-
- {(props) => (
-
-
-
-
-
- {t("login_navy")}
-
-
-
-
-
-
-
- }
- disabled={props.isSubmitting ? true : false}
- >
- {t("LoginPage.button_make_account")}
-
-
-
-
- }
- disabled={props.isSubmitting ? true : false}
- >
- {t("LoginPage.button_submit")}
-
-
-
-
-
-
- )}
-
-
-
-
-
-
- {t("LoginPage.link_routing_back_to")}{" "}
- {backUrlDecodedPath
- ? t("LoginPage.link_routing_previuos_page")
- : t("LoginPage.link_routing_main_page")}
-
-
-
- );
+ if (!otpToken) {
+ return (
+
+ );
+ } else {
+ return ;
+ }
};
export default LoginComponent;
diff --git a/src/components/login-welfare-services/index.jsx b/src/components/login-welfare-services/index.jsx
index 33dfa38..3ec6b1b 100644
--- a/src/components/login-welfare-services/index.jsx
+++ b/src/components/login-welfare-services/index.jsx
@@ -70,7 +70,12 @@ const LoginComponent = () => {
-
+
{t("login_welfare_services")}
@@ -87,13 +92,16 @@ const LoginComponent = () => {
)}
type={"text"}
error={
- props.touched.phone_number && props.errors.phone_number
+ props.touched.phone_number &&
+ props.errors.phone_number
? true
: false
}
fullWidth
helperText={
- props.touched.phone_number ? props.errors.phone_number : null
+ props.touched.phone_number
+ ? props.errors.phone_number
+ : null
}
/>
{
}}
>
-
+
+
+
+
+ )}
+
+
+
+
+
+ );
+};
+
+export default SendToken;
diff --git a/src/components/register-navy/SendUserData.jsx b/src/components/register-navy/SendUserData.jsx
new file mode 100644
index 0000000..8766d44
--- /dev/null
+++ b/src/components/register-navy/SendUserData.jsx
@@ -0,0 +1,195 @@
+import LinkRouting from "@/core/components/LinkRouting";
+import StyledForm from "@/core/components/StyledForm";
+import { REGISTER_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 {
+ Box,
+ Button,
+ Container,
+ Paper,
+ Stack, TextField, Typography
+} from "@mui/material";
+import axios from "axios";
+import { Field, Formik } from "formik";
+import { useTranslations } from "next-intl";
+import Image from "next/image";
+import { useSearchParams } from "next/navigation";
+import * as Yup from "yup";
+
+const SendUserData = ({
+ setOtpToken,
+ setPhoneNumber,
+ setNationalId,
+ setNavganId,
+ setTypeId,
+}) => {
+ const t = useTranslations();
+
+ const searchParams = useSearchParams();
+ const backUrlDecodedPath = searchParams.get("back_url");
+
+ const initialValues = {
+ type_id: "1",
+ phone_number: "",
+ national_id: "",
+ navgan_id: "",
+ };
+ const validationSchema = Yup.object().shape({
+ phone_number: Yup.string().required(
+ t("RegisterPage.error_message_required")
+ ),
+ national_id: Yup.string().required(
+ t("RegisterPage.error_message_required")
+ ),
+ navgan_id: Yup.string().required(t("RegisterPage.error_message_required")),
+ });
+
+ const handleSubmit = async (values, props) => {
+ await axios
+ .post(REGISTER_SEND_OTP_TOKEN, {
+ type_id: values.type_id,
+ national_id: values.national_id,
+ navgan_id: values.navgan_id,
+ phone_number: values.phone_number,
+ })
+ .then(function (response) {
+ setPhoneNumber(values.phone_number);
+ setNationalId(values.national_id);
+ setNavganId(values.navgan_id);
+ setTypeId(values.type_id);
+ setOtpToken(true)
+ })
+ .catch(function (error) {
+ Notifications(directionApp, error.response, t);
+ props.setSubmitting(false);
+ });
+ };
+
+ return (
+
+
+
+
+
+ {(props) => (
+
+
+
+
+
+ {t("register_navy")}
+
+
+
+
+
+
+ }
+ disabled={props.isSubmitting ? true : false}
+ >
+ {t("RegisterPage.button_request_verification")}
+
+
+
+
+ )}
+
+
+
+
+
+
+ {t("RegisterPage.link_routing_back_to")}{" "}
+ {t("RegisterPage.link_routing_login_navy")}
+
+
+
+ );
+};
+
+export default SendUserData;
diff --git a/src/components/register-navy/index.jsx b/src/components/register-navy/index.jsx
index 6aa2271..7a136c7 100644
--- a/src/components/register-navy/index.jsx
+++ b/src/components/register-navy/index.jsx
@@ -1,191 +1,34 @@
-import StyledForm from "@/core/components/StyledForm";
-import {
- Box,
- Button,
- Container,
- Paper,
- Stack,
- Typography,
- TextField,
-} from "@mui/material";
-import { Field, Formik } from "formik";
-import Image from "next/image";
-import FingerprintIcon from "@mui/icons-material/Fingerprint";
-import FullPageLayout from "@/layouts/FullPageLayout";
-import CenterLayout from "@/layouts/CenterLayout";
-import { useTranslations } from "next-intl";
-import * as Yup from "yup";
-import LinkRouting from "@/core/components/LinkRouting";
-import { useSearchParams } from "next/navigation";
-import useDirection from "@/lib/app/hooks/useDirection";
-import useUser from "@/lib/app/hooks/useUser";
-// import { GET_USER_TOKEN } from "@/core/data/apiRoutes";
-// import axios from "axios";
+import { useState } from "react";
+import SendToken from "./SendToken";
+import SendUserData from "./SendUserData";
const RegisterNavyComponent = () => {
- const t = useTranslations();
+ const [otpToken, setOtpToken] = useState(false);
+ const [PhoneNumber, setPhoneNumber] = useState("");
+ const [nationalId, setNationalId] = useState("");
+ const [navganId, setNavganId] = useState("");
+ const [typeId, setTypeId] = useState("");
- const { directionApp } = useDirection();
- const { setToken } = useUser();
-
- const searchParams = useSearchParams();
- const backUrlDecodedPath = searchParams.get("back_url");
-
- const initialValues = {
- type_id: "1",
- phone_number: "",
- national_id: "",
- navgan_id: "",
- };
- const validationSchema = Yup.object().shape({
- phone_number: Yup.string().required(
- t("RegisterPage.error_message_required")
- ),
- national_id: Yup.string().required(
- t("RegisterPage.error_message_required")
- ),
- navgan_id: Yup.string().required(t("RegisterPage.error_message_required")),
- });
- // const handleSubmit = async (values, props) => {
- // await axios
- // .post(GET_USER_TOKEN, {
- // type_id: values.type_id,
- // national_id: values.national_id,
- // navgan_id: values.navgan_id,
- // phone_number: values.phone_number,
- // })
- // .then(function (response) {
- // setToken(response.data.token);
- // })
- // .catch(function (error) {
- // Notifications(directionApp, error.response, t);
- // props.setSubmitting(false);
- // });
- // };
-
- return (
-
-
-
-
-
- {(props) => (
-
-
-
-
-
- {t("register_navy")}
-
-
-
-
-
-
- }
- disabled={props.isSubmitting ? true : false}
- >
- {t("RegisterPage.button_request_verification")}
-
-
-
-
- )}
-
-
-
-
-
-
- {t("RegisterPage.link_routing_back_to")}{" "}
- {t("RegisterPage.link_routing_login_navy")}
-
-
-
- );
+ if (!otpToken) {
+ return (
+
+ );
+ } else {
+ return (
+
+ );
+ }
};
export default RegisterNavyComponent;
diff --git a/src/components/register-welfare-services/index.jsx b/src/components/register-welfare-services/index.jsx
index e69de29..b9a35c5 100644
--- a/src/components/register-welfare-services/index.jsx
+++ b/src/components/register-welfare-services/index.jsx
@@ -0,0 +1,169 @@
+import StyledForm from "@/core/components/StyledForm";
+import {
+ Box,
+ Button,
+ Container,
+ Paper,
+ Stack,
+ Typography,
+ TextField,
+} from "@mui/material";
+import { Field, Formik } from "formik";
+import Image from "next/image";
+import FingerprintIcon from "@mui/icons-material/Fingerprint";
+import FullPageLayout from "@/layouts/FullPageLayout";
+import CenterLayout from "@/layouts/CenterLayout";
+import { useTranslations } from "next-intl";
+import * as Yup from "yup";
+import LinkRouting from "@/core/components/LinkRouting";
+import { useSearchParams } from "next/navigation";
+import useDirection from "@/lib/app/hooks/useDirection";
+import useUser from "@/lib/app/hooks/useUser";
+// import { GET_USER_TOKEN } from "@/core/data/apiRoutes";
+// import axios from "axios";
+
+const RegisterNavyComponent = () => {
+ const t = useTranslations();
+
+ const { directionApp } = useDirection();
+ const { setToken } = useUser();
+
+ const searchParams = useSearchParams();
+ const backUrlDecodedPath = searchParams.get("back_url");
+
+ const initialValues = {
+ type_id: "2",
+ phone_number: "",
+ national_id: "",
+ navgan_id: "",
+ };
+ const validationSchema = Yup.object().shape({
+ phone_number: Yup.string().required(
+ t("RegisterPage.error_message_required")
+ ),
+ national_id: Yup.string().required(
+ t("RegisterPage.error_message_required")
+ ),
+ });
+ // const handleSubmit = async (values, props) => {
+ // await axios
+ // .post(GET_USER_TOKEN, {
+ // type_id: values.type_id,
+ // national_id: values.national_id,
+ // navgan_id: values.navgan_id,
+ // phone_number: values.phone_number,
+ // })
+ // .then(function (response) {
+ // setToken(response.data.token);
+ // })
+ // .catch(function (error) {
+ // Notifications(directionApp, error.response, t);
+ // props.setSubmitting(false);
+ // });
+ // };
+
+ return (
+
+
+
+
+
+ {(props) => (
+
+
+
+
+
+ {t("register_navy")}
+
+
+
+
+
+ }
+ disabled={props.isSubmitting ? true : false}
+ >
+ {t("RegisterPage.button_request_verification")}
+
+
+
+
+ )}
+
+
+
+
+
+
+ {t("RegisterPage.link_routing_back_to")}{" "}
+ {t("RegisterPage.link_routing_login_navy")}
+
+
+
+ );
+};
+
+export default RegisterNavyComponent;
diff --git a/src/components/register-welfare-services/sendToken.jsx b/src/components/register-welfare-services/sendToken.jsx
new file mode 100644
index 0000000..e69de29
diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js
index e69de29..bd04212 100644
--- a/src/core/data/apiRoutes.js
+++ b/src/core/data/apiRoutes.js
@@ -0,0 +1,9 @@
+const BASE_URL = process.env.NEXT_PUBLIC_BASE_URL + "/api";
+
+export const LOGIN_SEND_OTP_TOKEN = BASE_URL + "/login/send_otp";
+export const LOGIN = BASE_URL + "/login";
+export const REGISTER_SEND_OTP_TOKEN = BASE_URL + "/register/send_otp";
+export const REGISTER = BASE_URL + "/register";
+export const USER_INFO = BASE_URL + "/hamidGiveme";
+
+
diff --git a/src/lib/app/contexts/user.jsx b/src/lib/app/contexts/user.jsx
index 49d55af..e859c58 100644
--- a/src/lib/app/contexts/user.jsx
+++ b/src/lib/app/contexts/user.jsx
@@ -1,7 +1,4 @@
-import {
- GET_USER_ROUTE,
- SET_LANGUAGE
-} from "@/core/data/apiRoutes";
+import { USER_INFO } from "@/core/data/apiRoutes";
import axios from "axios";
import { createContext, useCallback, useEffect, useReducer } from "react";
@@ -51,27 +48,7 @@ export const UserProvider = ({ children }) => {
dispatch({ type: "CHANGE_USER", user });
}, []);
- const changeUserLanguage = useCallback(
- (language) => {
- dispatch({ type: "CHANGE_USER_LANGUAGE", language });
- axios
- .post(
- SET_LANGUAGE,
- { language: language },
- {
- headers: {
- authorization: `Bearer ${state.token}`,
- },
- }
- )
- .then(() => {
- getUser((data) => {
- changeUser(data);
- });
- });
- },
- [state.token]
- );
+ const changeUserLanguage = useCallback(/* for multi language app */);
const changeAuthState = useCallback((isAuth) => {
dispatch({ type: "CHANGE_AUTH_STATE", isAuth });
@@ -92,7 +69,7 @@ export const UserProvider = ({ children }) => {
const getUser = useCallback(
(callback = () => {}) => {
axios
- .get(GET_USER_ROUTE, {
+ .get(USER_INFO, {
headers: { authorization: `Bearer ${state.token}` },
})
.then(({ data }) => {