diff --git a/public/images/403.svg b/public/images/403.svg new file mode 100644 index 0000000..d5ab3a5 --- /dev/null +++ b/public/images/403.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/404.svg b/public/images/404.svg new file mode 100644 index 0000000..2383041 --- /dev/null +++ b/public/images/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/500.svg b/public/images/500.svg new file mode 100644 index 0000000..c7629f3 --- /dev/null +++ b/public/images/500.svg @@ -0,0 +1 @@ +server_cluster \ No newline at end of file diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 59c93f7..9da4be5 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -20,7 +20,10 @@ }, "Titles": { "title_login_page": "صفحه ورود", - "title_login_expert_page": "ورود کارشناس" + "title_login_expert_page": "ورود کارشناس", + "title_custom_404": "صفحه یافت نشد", + "title_custom_403": "عدم دسترسی", + "title_custom_500": "خطای سرور" }, "sidebar": { "dashboard": "داشبورد", @@ -58,6 +61,14 @@ "link_routing_main_page": "صفحه اصلی", "error_message_required": "اجباری!" }, + "ErrorPage": { + "custom_404": "صفحه مورد نظر یافت نشد | 404", + "custom_500": "دسترسی به سامانه امکانپذیر نمی باشد دقایقی دیگر تلاش نمائید | 500", + "custom_403": "شما دسترسی به این بخش را ندارید | 403", + "link_routing_back_to": "بازگشت به", + "link_routing_previuos_page": "صفحه قبل", + "link_routing_main_page": "صفحه اصلی" + }, "Dashboard": { "dashboard_page": "داشبورد", "passenger_boss_page": "رئیس مسافر", diff --git a/src/components/errors/403.jsx b/src/components/errors/403.jsx new file mode 100644 index 0000000..cf46e41 --- /dev/null +++ b/src/components/errors/403.jsx @@ -0,0 +1,48 @@ +import CenterLayout from "@/layouts/CenterLayout"; +import FullPageLayout from "@/layouts/FullPageLayout"; +import {Box, Button, Container, Stack, Typography} from "@mui/material"; +import {NextLinkComposed} from "@/core/components/LinkRouting"; +import {useTranslations} from "next-intl"; +import Image from "next/image"; +import TitlePage from "@/core/components/TitlePage"; + +const UnAuthorizedComponent = () => { + const t = useTranslations(); + + return ( + <> + + + + + + + {t("app_name")} + + + {t("ErrorPage.custom_403")} + + + + + + + + ); +}; + +export default UnAuthorizedComponent; diff --git a/src/components/errors/404.jsx b/src/components/errors/404.jsx new file mode 100644 index 0000000..e0888b3 --- /dev/null +++ b/src/components/errors/404.jsx @@ -0,0 +1,48 @@ +import CenterLayout from "@/layouts/CenterLayout"; +import FullPageLayout from "@/layouts/FullPageLayout"; +import {Box, Button, Container, Stack, Typography} from "@mui/material"; +import {NextLinkComposed} from "@/core/components/LinkRouting"; +import {useTranslations} from "next-intl"; +import Image from "next/image"; +import TitlePage from "@/core/components/TitlePage"; + +const NotFoundComponent = () => { + const t = useTranslations(); + + return ( + <> + + + + + + + {t("app_name")} + + + {t("ErrorPage.custom_404")} + + + + + + + + ); +}; + +export default NotFoundComponent; diff --git a/src/components/errors/500.jsx b/src/components/errors/500.jsx new file mode 100644 index 0000000..10e9d12 --- /dev/null +++ b/src/components/errors/500.jsx @@ -0,0 +1,48 @@ +import CenterLayout from "@/layouts/CenterLayout"; +import FullPageLayout from "@/layouts/FullPageLayout"; +import {Box, Button, Container, Stack, Typography} from "@mui/material"; +import {NextLinkComposed} from "@/core/components/LinkRouting"; +import {useTranslations} from "next-intl"; +import Image from "next/image"; +import TitlePage from "@/core/components/TitlePage"; + +const ServerErrorComponent = () => { + const t = useTranslations(); + + return ( + <> + + + + + + + {t("app_name")} + + + {t("ErrorPage.custom_500")} + + + + + + + + ); +}; + +export default ServerErrorComponent; diff --git a/src/pages/403.jsx b/src/pages/403.jsx new file mode 100644 index 0000000..15ba915 --- /dev/null +++ b/src/pages/403.jsx @@ -0,0 +1,24 @@ +import {useEffect, useState} from "react"; +import {useRouter} from "next/router"; +import {NextIntlProvider} from "next-intl"; +import UnAuthorizedComponent from "@/components/errors/403"; + +export default function Custom404() { + const router = useRouter() + const [messages, setMessages] = useState(null) + useEffect(() => { + const fetch = async () => { + const tempMessages = (await import(`&/locales/${router.locale}/app.json`)).default + setMessages(tempMessages) + } + fetch() + }, []); + + if (!messages) return + + return ( + + + + ); +} diff --git a/src/pages/404.jsx b/src/pages/404.jsx new file mode 100644 index 0000000..26de038 --- /dev/null +++ b/src/pages/404.jsx @@ -0,0 +1,25 @@ +import {useEffect, useState} from "react"; +import {useRouter} from "next/router"; +import {NextIntlProvider} from "next-intl"; +import NotFoundComponent from "@/components/errors/404"; + +export default function Custom404() { + const router = useRouter() + const [messages, setMessages] = useState(null) + useEffect(() => { + + const fetch = async () => { + const tempMessages = (await import(`&/locales/${router.locale}/app.json`)).default + setMessages(tempMessages) + } + fetch() + }, []); + + if (!messages) return + + return ( + + + + ); +} diff --git a/src/pages/500.jsx b/src/pages/500.jsx new file mode 100644 index 0000000..4b85bc2 --- /dev/null +++ b/src/pages/500.jsx @@ -0,0 +1,24 @@ +import {useEffect, useState} from "react"; +import {useRouter} from "next/router"; +import {NextIntlProvider} from "next-intl"; +import ServerErrorComponent from "@/components/errors/500"; + +export default function Custom500() { + const router = useRouter() + const [messages, setMessages] = useState(null) + useEffect(() => { + const fetch = async () => { + const tempMessages = (await import(`&/locales/${router.locale}/app.json`)).default + setMessages(tempMessages) + } + fetch() + }, []); + + if (!messages) return + + return ( + + + + ); +} diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index 85b03cd..20615ba 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -13,9 +13,9 @@ const App = ({Component, pageProps}) => { <> - + - + {pageProps.message ? : ''}