diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json
index b2b1a92..f1b9ed2 100644
--- a/public/locales/fa/app.json
+++ b/public/locales/fa/app.json
@@ -4,14 +4,16 @@
"dashboard": "داشبورد",
"first_page": "خوش آمدید",
"login": "ورود",
- "login_navy": "ورود اعضای ناوگان",
+ "login_user_panel": "ورود به پنل کاربران",
"register_navy": "ثبت نام اعضای ناوگان",
- "login_welfare_services": "ورود اعضای خدمات رفاهی",
"register_welfare_services": "ثبت نام اعضای خدمات رفاهی",
"pending": "درحال اجرا...",
"user_navy": "ناوگان",
"page_not_found": "صفحه مورد نظر یافت نشد",
"delete": "حذف",
+ "resend_code": "ارسال مجدد کد",
+ "Resend_code_in": "ارسال مجدد کد در",
+ "seconds_later": "ثانیه دیگر",
"header": {
"open_profile": "پروفایل",
"edit_profile": "ویرایش پروفایل",
@@ -27,6 +29,7 @@
},
"Titles": {
"title_login_page": "صفحه ورود",
+ "title_register_page": "صفحه ثبت نام",
"title_login_navy_page": "ورود اعضای ناوگان",
"title_login_welfare_services_page": "ورود اعضای خدمات رفاهی",
"title_register_navy_page": "ثبت نام اعضای ناوگان",
@@ -57,13 +60,13 @@
"error_message_required": "اجباری!",
"button_make_account": "ایجاد حساب",
"button_request_verification": "دریافت کد یکبارمصرف",
- "resend_code": "ارسال دوباره کد",
- "Resend_code_in": "ارسال مجدد کد در",
- "seconds_later": "ثانیه دیگر"
+ "sent_token_to": "ارسال کد یکبار مصرف به شماره",
+ "change_phone_number": "تغییر شماره"
},
"RegisterPage": {
"link_routing_back_to": "بازگشت به",
- "link_routing_login_navy": "صفحه ورود",
+ "link_routing_register": "صفحه انتخاب نوع ثبت نام",
+ "link_routing_login": "صفحه ورود",
"text_field_phone_number": "شماره تلفن",
"text_field_enter_your_phone_number": "شماره تلفن خود را وارد کنید",
"text_field_verification_code": "کد یکبار مصرف",
@@ -74,11 +77,11 @@
"text_field_enter_your_navgan_id": "شماره ناوگان خود را وارد کنید",
"error_message_required": "اجباری!",
"button_request_verification": "دریافت کد یکبارمصرف",
- "button_submit": "ورود",
+ "button_submit": "ثبت و ورود",
"button_back_to_send_data": "بازگشت",
"sent_token_to": "ارسال کد یکبار مصرف به شماره",
"change_phone_number": "تغییر شماره",
- "resend_code": "ارسال دوباره کد"
+ "complete_information": "مشخصات"
},
"Dashboard": {
"dashboard_page": "داشبورد"
diff --git a/src/components/first/index.jsx b/src/components/first/index.jsx
index edd3a8a..1436752 100644
--- a/src/components/first/index.jsx
+++ b/src/components/first/index.jsx
@@ -4,7 +4,7 @@ import StyledImage from "@/core/components/StyledImage";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useUser from "@/lib/app/hooks/useUser";
-import { Box, Button, Grid, Typography } from "@mui/material";
+import { Button, Typography } from "@mui/material";
import { useTranslations } from "next-intl";
const FirstComponent = () => {
@@ -35,43 +35,17 @@ const FirstComponent = () => {
{t("dashboard")}
) : (
-
-
-
-
-
-
-
-
-
-
+
)}
diff --git a/src/components/login-navy/SendToken.jsx b/src/components/login-navy/SendToken.jsx
deleted file mode 100644
index 08a0de6..0000000
--- a/src/components/login-navy/SendToken.jsx
+++ /dev/null
@@ -1,196 +0,0 @@
-import Notifications from "@/core/components/notifications";
-import StyledForm from "@/core/components/StyledForm";
-import { LOGIN, 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 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,
- Link,
- 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 { useEffect } from "react";
-import * as Yup from "yup";
-
-const SendToken = ({ PhoneNumber, setOtpToken, timer, setTimer }) => {
- 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) => {
- Notifications(directionApp, t, undefined);
- await axios
- .post(LOGIN, {
- phone_number: values.phone_number,
- verification_code: values.verification_code,
- })
- .then(function (response) {
- Notifications(directionApp, t, response);
- setToken(response.data.token);
- })
- .catch(function (error) {
- Notifications(directionApp, t, error.response);
- props.setSubmitting(false);
- });
- };
-
- useEffect(() => {
- let interval;
- if (timer > 0) {
- interval = setInterval(() => {
- setTimer((prevTimer) => prevTimer - 1);
- }, 1000);
- } else {
- clearInterval(interval);
- }
-
- return () => clearInterval(interval);
- }, [timer]);
-
- const handleResendClick = async () => {
- // work on it
- if (timer != 0) return
- Notifications(directionApp, t, undefined);
- await axios
- .post(LOGIN_SEND_OTP_TOKEN, {
- phone_number: PhoneNumber,
- })
- .then(function (response) {
- Notifications(directionApp, t, response);
- setTimer(30);
- })
- .catch(function (error) {
- Notifications(directionApp, t, error.response);
- });
- };
-
- return (
-
-
-
-
-
- {(props) => (
-
-
-
-
-
- {t("login_navy")}
-
-
-
-
-
- {t("RegisterPage.sent_token_to")}: {PhoneNumber}
-
- }
- variant="outlined"
- onClick={() => setOtpToken(false)}
- >
- {t("RegisterPage.change_phone_number")}
-
-
-
-
-
- }
- disabled={props.isSubmitting ? true : false}
- >
- {t("LoginPage.button_submit")}
-
-
-
-
- {timer > 0
- ? `${t("LoginPage.Resend_code_in")}: ${timer} ${t(
- "LoginPage.seconds_later"
- )}`
- : t("LoginPage.resend_code")}
-
-
-
-
- )}
-
-
-
-
-
- );
-};
-
-export default SendToken;
diff --git a/src/components/login-navy/SendUserData.jsx b/src/components/login-navy/SendUserData.jsx
deleted file mode 100644
index 26b4d52..0000000
--- a/src/components/login-navy/SendUserData.jsx
+++ /dev/null
@@ -1,166 +0,0 @@
-import LinkRouting from "@/core/components/LinkRouting";
-import Notifications from "@/core/components/notifications";
-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, PhoneNumber }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
-
- 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("LoginPage.error_message_required")),
- });
-
- const handleSubmit = async (values, props) => {
- Notifications(directionApp, t, undefined);
- await axios
- .post(LOGIN_SEND_OTP_TOKEN, {
- phone_number: values.phone_number,
- })
- .then(function (response) {
- Notifications(directionApp, t, response);
- setPhoneNumber(values.phone_number);
- setOtpToken(true);
- })
- .catch(function (error) {
- Notifications(directionApp, t, error.response);
- 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-welfare-services/index.jsx b/src/components/login-welfare-services/index.jsx
deleted file mode 100644
index 304e4a4..0000000
--- a/src/components/login-welfare-services/index.jsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import SendUserData from "./SendUserData";
-import { useState } from "react";
-import SendToken from "./sendToken";
-
-const LoginComponent = () => {
- const [otpToken, setOtpToken] = useState(false);
- const [PhoneNumber, setPhoneNumber] = useState("");
-
- if (!otpToken) {
- return (
-
- );
- } else {
- return ;
- }
-};
-
-export default LoginComponent;
diff --git a/src/components/login-welfare-services/sendToken.jsx b/src/components/login/SendToken.jsx
similarity index 84%
rename from src/components/login-welfare-services/sendToken.jsx
rename to src/components/login/SendToken.jsx
index 2193883..6567084 100644
--- a/src/components/login-welfare-services/sendToken.jsx
+++ b/src/components/login/SendToken.jsx
@@ -1,12 +1,13 @@
import Notifications from "@/core/components/notifications";
+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 useDirection from "@/lib/app/hooks/useDirection";
import useUser from "@/lib/app/hooks/useUser";
-import LoginIcon from "@mui/icons-material/Login";
import ChangeCircleIcon from "@mui/icons-material/ChangeCircle";
+import LoginIcon from "@mui/icons-material/Login";
import {
Box,
Button,
@@ -23,7 +24,13 @@ import { useTranslations } from "next-intl";
import Image from "next/image";
import * as Yup from "yup";
-const SendToken = ({ PhoneNumber, setOtpToken }) => {
+const SendToken = ({
+ PhoneNumber,
+ setOtpToken,
+ timer,
+ setTimer,
+ initialTimerValue,
+}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const { setToken } = useUser();
@@ -78,27 +85,29 @@ const SendToken = ({ PhoneNumber, setOtpToken }) => {
/>
- {t("login_welfare_services")}
+ {t("login")}
-
- {t("RegisterPage.sent_token_to")}: {PhoneNumber}{" "}
+
+ {t("LoginPage.sent_token_to")}: {PhoneNumber}
}
variant="outlined"
onClick={() => setOtpToken(false)}
+ sx={{ whiteSpace: "nowrap", my: { xs: 1, sm: 0 } }}
>
- {t("RegisterPage.change_phone_number")}
+ {t("LoginPage.change_phone_number")}
{
+
diff --git a/src/components/login-welfare-services/SendUserData.jsx b/src/components/login/SendUserData.jsx
similarity index 95%
rename from src/components/login-welfare-services/SendUserData.jsx
rename to src/components/login/SendUserData.jsx
index d9f5e2b..bb14087 100644
--- a/src/components/login-welfare-services/SendUserData.jsx
+++ b/src/components/login/SendUserData.jsx
@@ -1,7 +1,7 @@
-import Notifications from "@/core/components/notifications";
import LinkRouting from "@/core/components/LinkRouting";
+import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
-import { LOGIN_SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
+import { SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useDirection from "@/lib/app/hooks/useDirection";
@@ -24,7 +24,13 @@ import Image from "next/image";
import { useSearchParams } from "next/navigation";
import * as Yup from "yup";
-const SendUserData = ({ setOtpToken, setPhoneNumber, PhoneNumber }) => {
+const SendUserData = ({
+ setOtpToken,
+ setPhoneNumber,
+ PhoneNumber,
+ setTimer,
+ initialTimerValue,
+}) => {
const t = useTranslations();
const { directionApp } = useDirection();
@@ -41,13 +47,14 @@ const SendUserData = ({ setOtpToken, setPhoneNumber, PhoneNumber }) => {
const handleSubmit = async (values, props) => {
Notifications(directionApp, t, undefined);
await axios
- .post(LOGIN_SEND_OTP_TOKEN, {
+ .post(SEND_OTP_TOKEN, {
phone_number: values.phone_number,
})
.then(function (response) {
Notifications(directionApp, t, response);
setPhoneNumber(values.phone_number);
setOtpToken(true);
+ setTimer(initialTimerValue);
})
.catch(function (error) {
Notifications(directionApp, t, error.response);
@@ -78,7 +85,7 @@ const SendUserData = ({ setOtpToken, setPhoneNumber, PhoneNumber }) => {
/>
- {t("login_welfare_services")}
+ {t("Titles.title_login_page")}
@@ -112,7 +119,7 @@ const SendUserData = ({ setOtpToken, setPhoneNumber, PhoneNumber }) => {
}}
>
-
+
-
-
- }
- disabled={props.isSubmitting ? true : false}
- >
- {t("RegisterPage.button_submit")}
-
-
-
-
- )}
-
-
-
-
-
- );
-};
-
-export default SendToken;
diff --git a/src/components/register-navy/index.jsx b/src/components/register-navy/index.jsx
deleted file mode 100644
index 89b3596..0000000
--- a/src/components/register-navy/index.jsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { useState } from "react";
-import SendToken from "./SendToken";
-import SendUserData from "./SendUserData";
-
-const RegisterNavyComponent = () => {
- const [otpToken, setOtpToken] = useState(false);
- const [PhoneNumber, setPhoneNumber] = useState("");
- const [nationalId, setNationalId] = useState("");
- const [navganId, setNavganId] = useState("");
- const [typeId, setTypeId] = useState("");
-
- 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
deleted file mode 100644
index b62e482..0000000
--- a/src/components/register-welfare-services/index.jsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useState } from "react";
-import SendToken from "./sendToken";
-import SendUserData from "./SendUserData";
-
-const RegisterNavyComponent = () => {
- const [otpToken, setOtpToken] = useState(false);
- const [PhoneNumber, setPhoneNumber] = useState("");
- const [nationalId, setNationalId] = useState("");
- const [typeId, setTypeId] = useState("");
-
- if (!otpToken) {
- return (
-
- );
- } else {
- return (
-
- );
- }
-};
-
-export default RegisterNavyComponent;
diff --git a/src/components/register-welfare-services/SendUserData.jsx b/src/components/register/RequestOtp.jsx
similarity index 74%
rename from src/components/register-welfare-services/SendUserData.jsx
rename to src/components/register/RequestOtp.jsx
index ce818fa..3c209d9 100644
--- a/src/components/register-welfare-services/SendUserData.jsx
+++ b/src/components/register/RequestOtp.jsx
@@ -1,7 +1,7 @@
import LinkRouting from "@/core/components/LinkRouting";
import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
-import { REGISTER_SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
+import { SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useDirection from "@/lib/app/hooks/useDirection";
@@ -22,13 +22,12 @@ import Image from "next/image";
import { useSearchParams } from "next/navigation";
import * as Yup from "yup";
-const SendUserData = ({
+const RequestOtp = ({
setOtpToken,
setPhoneNumber,
- setNationalId,
- setTypeId,
PhoneNumber,
- nationalId,
+ setTimer,
+ initialTimerValue,
}) => {
const t = useTranslations();
const { directionApp } = useDirection();
@@ -37,33 +36,25 @@ const SendUserData = ({
const backUrlDecodedPath = searchParams.get("back_url");
const initialValues = {
- type_id: "2",
phone_number: PhoneNumber,
- national_id: nationalId,
};
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) => {
Notifications(directionApp, t, undefined);
await axios
- .post(REGISTER_SEND_OTP_TOKEN, {
- type_id: values.type_id,
- national_id: values.national_id,
+ .post(SEND_OTP_TOKEN, {
phone_number: values.phone_number,
})
.then(function (response) {
Notifications(directionApp, t, response);
setPhoneNumber(values.phone_number);
- setNationalId(values.national_id);
- setTypeId(values.type_id);
setOtpToken(true);
+ setTimer(initialTimerValue);
})
.catch(function (error) {
Notifications(directionApp, t, error.response);
@@ -88,13 +79,13 @@ const SendUserData = ({
>
- {t("register_welfare_services")}
+ {t("Titles.title_register_page")}
@@ -120,27 +111,6 @@ const SendUserData = ({
: null
}
/>
-
{t("RegisterPage.link_routing_back_to")}{" "}
- {t("RegisterPage.link_routing_login_navy")}
+ {backUrlDecodedPath
+ ? t("RegisterPage.link_routing_previuos_page")
+ : t("RegisterPage.link_routing_register")}
);
};
-export default SendUserData;
+export default RequestOtp;
diff --git a/src/components/register/index.jsx b/src/components/register/index.jsx
new file mode 100644
index 0000000..f71ba2a
--- /dev/null
+++ b/src/components/register/index.jsx
@@ -0,0 +1,98 @@
+import dahsboardImage from "&/images/dashboard.svg";
+import LinkRouting from "@/core/components/LinkRouting";
+import { NextLinkComposed } from "@/core/components/LinkRouting";
+import StyledImage from "@/core/components/StyledImage";
+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";
+
+const RegisterComponent = () => {
+ const t = useTranslations();
+ const { isAuth } = useUser();
+
+ const searchParams = useSearchParams();
+ const backUrlDecodedPath = searchParams.get("back_url");
+
+ return (
+
+
+
+ {isAuth ? (
+
+ {t("dashboard")}
+
+ ) : (
+
+
+
+
+ {t("register_navy")}
+
+
+
+
+ {t("register_welfare_services")}
+
+
+
+
+ )}
+
+
+
+ {t("RegisterPage.link_routing_back_to")}{" "}
+ {backUrlDecodedPath
+ ? t("RegisterPage.link_routing_previuos_page")
+ : t("RegisterPage.link_routing_login")}
+
+
+
+ );
+};
+
+export default RegisterComponent;
diff --git a/src/components/register-navy/SendUserData.jsx b/src/components/register/navy/UserRegister.jsx
similarity index 66%
rename from src/components/register-navy/SendUserData.jsx
rename to src/components/register/navy/UserRegister.jsx
index 5bb09f4..e9d618a 100644
--- a/src/components/register-navy/SendUserData.jsx
+++ b/src/components/register/navy/UserRegister.jsx
@@ -1,49 +1,51 @@
-import LinkRouting from "@/core/components/LinkRouting";
import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
-import { REGISTER_SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
+import { REGISTER } 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 LoginIcon from "@mui/icons-material/Login";
+import ChangeCircleIcon from "@mui/icons-material/ChangeCircle";
import {
Box,
Button,
+ Chip,
Container,
+ Divider,
Paper,
- Stack, TextField, Typography
+ 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 ResendToken from "@/core/components/ResendToken";
+import useUser from "@/lib/app/hooks/useUser";
-const SendUserData = ({
- setOtpToken,
- setPhoneNumber,
+const UserRegister = ({
PhoneNumber,
- setNationalId,
- nationalId,
- setNavganId,
- navganId,
- setTypeId,
+ setOtpToken,
+ initialTimerValue,
+ timer,
+ setTimer,
}) => {
const t = useTranslations();
const { directionApp } = useDirection();
-
- const searchParams = useSearchParams();
- const backUrlDecodedPath = searchParams.get("back_url");
+ const { setToken } = useUser();
const initialValues = {
type_id: "1",
+ verification_code: "",
phone_number: PhoneNumber,
- national_id: nationalId,
- navgan_id: navganId,
+ national_id: "",
+ navgan_id: "",
};
+
const validationSchema = Yup.object().shape({
- phone_number: Yup.string().required(
+ verification_code: Yup.string().required(
t("RegisterPage.error_message_required")
),
national_id: Yup.string().required(
@@ -54,20 +56,19 @@ const SendUserData = ({
const handleSubmit = async (values, props) => {
Notifications(directionApp, t, undefined);
+ console.log(initialValues);
await axios
- .post(REGISTER_SEND_OTP_TOKEN, {
+ .post(REGISTER, {
type_id: values.type_id,
national_id: values.national_id,
navgan_id: values.navgan_id,
phone_number: values.phone_number,
+ verification_code: values.verification_code,
})
.then(function (response) {
Notifications(directionApp, t, response);
- setPhoneNumber(values.phone_number);
- setNationalId(values.national_id);
- setNavganId(values.navgan_id);
- setTypeId(values.type_id);
- setOtpToken(true)
+ setOtpToken(true);
+ setToken(response.data.token);
})
.catch(function (error) {
Notifications(directionApp, t, error.response);
@@ -102,28 +103,58 @@ const SendUserData = ({
+
+
+ {t("LoginPage.sent_token_to")}: {PhoneNumber}
+
+ }
+ variant="outlined"
+ sx={{ whiteSpace: "nowrap", my: { xs: 1, sm: 0 } }}
+ onClick={() => setOtpToken(false)}
+ >
+ {t("LoginPage.change_phone_number")}
+
+
+
+
+
+
}
+ endIcon={}
disabled={props.isSubmitting ? true : false}
>
- {t("RegisterPage.button_request_verification")}
+ {t("RegisterPage.button_submit")}
@@ -184,21 +215,8 @@ const SendUserData = ({
-
-
- {t("RegisterPage.link_routing_back_to")}{" "}
- {t("RegisterPage.link_routing_login_navy")}
-
-
);
};
-export default SendUserData;
+export default UserRegister;
diff --git a/src/components/register/navy/index.jsx b/src/components/register/navy/index.jsx
new file mode 100644
index 0000000..f3c5938
--- /dev/null
+++ b/src/components/register/navy/index.jsx
@@ -0,0 +1,37 @@
+import { useState } from "react";
+import RequestOtp from "../RequestOtp";
+import UserRegister 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/sendToken.jsx b/src/components/register/welfare-services/UserRegister.jsx
similarity index 67%
rename from src/components/register-welfare-services/sendToken.jsx
rename to src/components/register/welfare-services/UserRegister.jsx
index b1e3651..c15db81 100644
--- a/src/components/register-welfare-services/sendToken.jsx
+++ b/src/components/register/welfare-services/UserRegister.jsx
@@ -4,13 +4,14 @@ import { REGISTER } 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 ChangeCircleIcon from "@mui/icons-material/ChangeCircle";
import {
Box,
Button,
+ Chip,
Container,
+ Divider,
Paper,
Stack,
TextField,
@@ -21,35 +22,49 @@ import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import Image from "next/image";
import * as Yup from "yup";
+import ResendToken from "@/core/components/ResendToken";
+import useUser from "@/lib/app/hooks/useUser";
-const SendToken = ({ PhoneNumber, nationalId, typeId, setOtpToken }) => {
+const UserRegister = ({
+ PhoneNumber,
+ setOtpToken,
+ initialTimerValue,
+ timer,
+ setTimer,
+}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const { setToken } = useUser();
const initialValues = {
- phone_number: PhoneNumber,
- national_id: nationalId,
- type_id: typeId,
+ type_id: "2",
verification_code: "",
+ phone_number: PhoneNumber,
+ national_id: "",
};
+
const validationSchema = Yup.object().shape({
verification_code: Yup.string().required(
t("RegisterPage.error_message_required")
),
+ national_id: Yup.string().required(
+ t("RegisterPage.error_message_required")
+ ),
});
const handleSubmit = async (values, props) => {
Notifications(directionApp, t, undefined);
+ console.log(initialValues);
await axios
.post(REGISTER, {
- phone_number: values.phone_number,
- national_id: values.national_id,
type_id: values.type_id,
+ national_id: values.national_id,
+ phone_number: values.phone_number,
verification_code: values.verification_code,
})
.then(function (response) {
Notifications(directionApp, t, response);
+ setOtpToken(true);
setToken(response.data.token);
})
.catch(function (error) {
@@ -87,30 +102,32 @@ const SendToken = ({ PhoneNumber, nationalId, typeId, setOtpToken }) => {
-
- {t("RegisterPage.sent_token_to")}: {PhoneNumber}{" "}
+
+ {t("LoginPage.sent_token_to")}: {PhoneNumber}
}
variant="outlined"
onClick={() => setOtpToken(false)}
+ sx={{ whiteSpace: "nowrap", my: { xs: 1, sm: 0 } }}
>
- {t("RegisterPage.change_phone_number")}
+ {t("LoginPage.change_phone_number")}
{
: null
}
/>
+
+
+
+
+
{
);
};
-export default SendToken;
+export default UserRegister;
diff --git a/src/components/register/welfare-services/index.jsx b/src/components/register/welfare-services/index.jsx
new file mode 100644
index 0000000..f3c5938
--- /dev/null
+++ b/src/components/register/welfare-services/index.jsx
@@ -0,0 +1,37 @@
+import { useState } from "react";
+import RequestOtp from "../RequestOtp";
+import UserRegister 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/core/components/ResendToken.jsx b/src/core/components/ResendToken.jsx
new file mode 100644
index 0000000..b6430d3
--- /dev/null
+++ b/src/core/components/ResendToken.jsx
@@ -0,0 +1,80 @@
+import Notifications from "@/core/components/notifications";
+import useDirection from "@/lib/app/hooks/useDirection";
+import { Button, Typography } from "@mui/material";
+import axios from "axios";
+import { useTranslations } from "next-intl";
+import { useEffect } from "react";
+import { SEND_OTP_TOKEN } from "../data/apiRoutes";
+
+const ResendToken = ({ initialTimerValue, timer, setTimer, PhoneNumber }) => {
+ const t = useTranslations();
+ const { directionApp } = useDirection();
+
+ // Countdown Timer
+ useEffect(() => {
+ let interval;
+ if (timer > 0) {
+ interval = setInterval(() => {
+ setTimer((prevTimer) => prevTimer - 1);
+ }, 1000);
+ } else {
+ clearInterval(interval);
+ }
+
+ return () => clearInterval(interval);
+ }, [timer]);
+ // End Countdown Timer
+
+ // Handle Resend Token
+ const handleResendClick = async () => {
+ // work on it
+ if (timer != 0) return;
+ Notifications(directionApp, t, undefined);
+ await axios
+ .post(SEND_OTP_TOKEN, {
+ phone_number: PhoneNumber,
+ })
+ .then(function (response) {
+ Notifications(directionApp, t, response);
+ setTimer(initialTimerValue);
+ })
+ .catch(function (error) {
+ Notifications(directionApp, t, error.response);
+ });
+ };
+ // End Handle Resend Token
+
+ return (
+ <>
+ {timer > 0 ? (
+
+ {t("Resend_code_in")} {timer} {" "}
+ {t("seconds_later")}
+
+ ) : (
+
+ {t("resend_code")}
+
+ )}
+ >
+ );
+};
+
+export default ResendToken;
+
+//////****** usage document ******/////////
+// 1.) use component inside your page
+// 2.) list of props that you need to send is down below
+// 2.1) initialTimerValue **** Delay Time For Sending Token
+// 2.2) timer **** Timer Of Resending Token
+// 2.3) setTimer **** Set Timer Of Resend (note: every places in your components if you are requesting for getting token you should use this prop like this setTimer(initialTimerValue) )
+// 2.4) PhoneNumber **** Phone Number That Should Recive Token
diff --git a/src/core/components/notifications/index.jsx b/src/core/components/notifications/index.jsx
index e3432c5..f27d437 100644
--- a/src/core/components/notifications/index.jsx
+++ b/src/core/components/notifications/index.jsx
@@ -4,7 +4,6 @@ import SuccessNotification from "./SuccessNotification";
import WarningNotification from "./WarningNotification";
const Notifications = async (directionApp, t, response) => {
- console.log(directionApp, t, response);
const { status, data } = response != undefined ? response : ""
toast.dismiss();
switch (status) {
diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js
index 87b4390..77d4932 100644
--- a/src/core/data/apiRoutes.js
+++ b/src/core/data/apiRoutes.js
@@ -1,12 +1,13 @@
const BASE_URL = process.env.NEXT_PUBLIC_BASE_URL + "/api";
-export const LOGIN_SEND_OTP_TOKEN = BASE_URL + "/login/send_otp";
+// 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_SEND_OTP_TOKEN = BASE_URL + "/register/send_otp";
+export const SEND_OTP_TOKEN = BASE_URL + "/otp";
export const REGISTER = BASE_URL + "/register";
export const USER_INFO = BASE_URL + "/profile/info";
export const SEND_LOAN_REQUEST_NAVGAN = BASE_URL + "/navgan/store_loan";
-export const SEND_LOAN_REQUEST_WELFARE = BASE_URL + "/navgan/store_loan";
+export const SEND_LOAN_REQUEST_WELFARE = BASE_URL + "/khadamat/store_loan";
export const GET_PROVINCE_LIST = BASE_URL + "/provinces";
diff --git a/src/pages/login-welfare-services.jsx b/src/pages/login.jsx
similarity index 85%
rename from src/pages/login-welfare-services.jsx
rename to src/pages/login.jsx
index f58412f..af22c17 100644
--- a/src/pages/login-welfare-services.jsx
+++ b/src/pages/login.jsx
@@ -1,4 +1,4 @@
-import LoginComponent from "@/components/login-welfare-services";
+import LoginComponent from "@/components/login";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
@@ -10,7 +10,7 @@ export default function Login() {
const { directionApp } = useDirection();
return (
-
+
{directionApp === "rtl" ? : }
diff --git a/src/pages/login-navy.jsx b/src/pages/register/index.jsx
similarity index 81%
rename from src/pages/login-navy.jsx
rename to src/pages/register/index.jsx
index c358adf..c24f3f6 100644
--- a/src/pages/login-navy.jsx
+++ b/src/pages/register/index.jsx
@@ -1,4 +1,4 @@
-import LoginComponent from "@/components/login-navy";
+import RegisterComponent from "@/components/register";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
@@ -6,12 +6,12 @@ import "react-toastify/dist/ReactToastify.css";
import { ToastContainer } from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
-export default function LoginNavy() {
+export default function Register() {
const { directionApp } = useDirection();
return (
-
-
+
+
{directionApp === "rtl" ? : }
);
diff --git a/src/pages/register-navy.jsx b/src/pages/register/navy/index.jsx
similarity index 85%
rename from src/pages/register-navy.jsx
rename to src/pages/register/navy/index.jsx
index 7a6512f..4326d9d 100644
--- a/src/pages/register-navy.jsx
+++ b/src/pages/register/navy/index.jsx
@@ -1,4 +1,4 @@
-import RegisterNavyComponent from "@/components/register-navy";
+import NavyComponent from "@/components/register/navy";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
@@ -6,12 +6,12 @@ import "react-toastify/dist/ReactToastify.css";
import { ToastContainer } from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
-export default function RegisterNavy() {
+export default function Register() {
const { directionApp } = useDirection();
return (
-
+
{directionApp === "rtl" ? : }
);
diff --git a/src/pages/register-welfare-services.jsx b/src/pages/register/welfare-services/index.jsx
similarity index 84%
rename from src/pages/register-welfare-services.jsx
rename to src/pages/register/welfare-services/index.jsx
index bc2477f..ee6e603 100644
--- a/src/pages/register-welfare-services.jsx
+++ b/src/pages/register/welfare-services/index.jsx
@@ -1,4 +1,4 @@
-import RegisterComponent from "@/components/register-welfare-services";
+import WelfareServicesComponent from "@/components/register/welfare-services";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
@@ -6,12 +6,12 @@ import "react-toastify/dist/ReactToastify.css";
import { ToastContainer } from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
-export default function RegisterWelfareServices() {
+export default function Register() {
const { directionApp } = useDirection();
return (
-
+
{directionApp === "rtl" ? : }
);