diff --git a/src/assets/Icons/404.tsx b/src/assets/Icons/404.tsx
new file mode 100644
index 0000000..d9c8578
--- /dev/null
+++ b/src/assets/Icons/404.tsx
@@ -0,0 +1,149 @@
+import { Box } from "@mui/material";
+
+interface NotFoundIconProps {
+ size?: number;
+}
+
+export const NotFoundIcon = ({ size = 390 }: NotFoundIconProps) => {
+ return (
+
+
+
+ );
+};
diff --git a/src/index.tsx b/src/index.tsx
index 026dbcf..08b91f8 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,149 +1,217 @@
-import React from "react"
-import ReactDOM from "react-dom/client"
-import { BrowserRouter, Navigate, Route, Routes, useLocation, useNavigate } from "react-router-dom"
-import { CssBaseline, ThemeProvider } from "@mui/material"
-import Faq from "./pages/Faq/Faq"
-import Wallet from "./pages/Wallet"
-import Payment from "./pages/Payment/Payment"
-import QuizPayment from "./pages/QuizPayment/QuizPayment"
-import Support from "./pages/Support/Support"
-import ChatImageNewWindow from "./pages/Support/ChatImageNewWindow"
-import AccountSettings from "./pages/AccountSettings/AccountSettings"
-import Landing from "./pages/Landing/Landing"
-import Tariffs from "./pages/Tariffs/Tariffs"
-import SigninDialog from "./pages/auth/Signin"
-import SignupDialog from "./pages/auth/Signup"
-import RecoverDialog from "./pages/auth/Recover"
-import History from "./pages/History"
-import Cart from "./pages/Cart/Cart"
-import TariffPage from "./pages/Tariffs/TariffsPage"
-import SavedTariffs from "./pages/SavedTariffs"
-import PrivateRoute from "@root/utils/routes/ProtectedRoute"
-import reportWebVitals from "./reportWebVitals"
-import { SnackbarProvider, enqueueSnackbar } from "notistack"
-import "./index.css"
-import ProtectedLayout from "./components/ProtectedLayout"
-import { clearUserData, setUser, setUserAccount, useUserStore } from "./stores/user"
-import TariffConstructor from "./pages/TariffConstructor/TariffConstructor"
-import { clearAuthToken, getMessageFromFetchError, useUserAccountFetcher, useUserFetcher } from "@frontend/kitui"
-import { pdfjs } from "react-pdf"
-import { theme } from "./utils/theme"
-import PPofData from "@root/docs/PPofData"
-import Docs from "@root/docs/docs"
-import Oferta from "@root/docs/content/oferta"
-import PrivacyPolicy from "@root/docs/content/PrivacyPolicy"
-import RecoverPassword from "@root/pages/auth/RecoverPassword"
-import OutdatedLink from "@root/pages/auth/OutdatedLink"
-import { verify } from "./pages/AccountSettings/helper"
-import AfterPay from "./pages/AfterPay"
+import React from "react";
+import ReactDOM from "react-dom/client";
+import {
+ BrowserRouter,
+ Navigate,
+ Route,
+ Routes,
+ useLocation,
+ useNavigate,
+} from "react-router-dom";
+import { CssBaseline, ThemeProvider } from "@mui/material";
+import Faq from "./pages/Faq/Faq";
+import Wallet from "./pages/Wallet";
+import Payment from "./pages/Payment/Payment";
+import QuizPayment from "./pages/QuizPayment/QuizPayment";
+import Support from "./pages/Support/Support";
+import ChatImageNewWindow from "./pages/Support/ChatImageNewWindow";
+import AccountSettings from "./pages/AccountSettings/AccountSettings";
+import Landing from "./pages/Landing/Landing";
+import Tariffs from "./pages/Tariffs/Tariffs";
+import SigninDialog from "./pages/auth/Signin";
+import SignupDialog from "./pages/auth/Signup";
+import RecoverDialog from "./pages/auth/Recover";
+import History from "./pages/History";
+import Cart from "./pages/Cart/Cart";
+import TariffPage from "./pages/Tariffs/TariffsPage";
+import SavedTariffs from "./pages/SavedTariffs";
+import PrivateRoute from "@root/utils/routes/ProtectedRoute";
+import reportWebVitals from "./reportWebVitals";
+import { SnackbarProvider, enqueueSnackbar } from "notistack";
+import "./index.css";
+import ProtectedLayout from "./components/ProtectedLayout";
+import {
+ clearUserData,
+ setUser,
+ setUserAccount,
+ useUserStore,
+} from "./stores/user";
+import TariffConstructor from "./pages/TariffConstructor/TariffConstructor";
+import {
+ clearAuthToken,
+ getMessageFromFetchError,
+ useUserAccountFetcher,
+ useUserFetcher,
+} from "@frontend/kitui";
+import { pdfjs } from "react-pdf";
+import { theme } from "./utils/theme";
+import PPofData from "@root/docs/PPofData";
+import Docs from "@root/docs/docs";
+import Oferta from "@root/docs/content/oferta";
+import PrivacyPolicy from "@root/docs/content/PrivacyPolicy";
+import RecoverPassword from "@root/pages/auth/RecoverPassword";
+import OutdatedLink from "@root/pages/auth/OutdatedLink";
+import { verify } from "./pages/AccountSettings/helper";
+import AfterPay from "./pages/AfterPay";
+import { PageNotFound } from "./pages/PageNotFound";
-pdfjs.GlobalWorkerOptions.workerSrc = new URL("pdfjs-dist/build/pdf.worker.min.js", import.meta.url).toString()
+pdfjs.GlobalWorkerOptions.workerSrc = new URL(
+ "pdfjs-dist/build/pdf.worker.min.js",
+ import.meta.url
+).toString();
const App = () => {
- console.log("render app")
- const location = useLocation()
- const userId = useUserStore((state) => state.userId)
- const navigate = useNavigate()
+ console.log("render app");
+ const location = useLocation();
+ const userId = useUserStore((state) => state.userId);
+ const navigate = useNavigate();
- console.log(userId)
- useUserFetcher({
- url: process.env.REACT_APP_DOMAIN + `/user/${userId}`,
- userId,
- onNewUser: setUser,
- onError: (error) => {
- const errorMessage = getMessageFromFetchError(error)
- if (errorMessage) {
- enqueueSnackbar(errorMessage)
- clearUserData()
- clearAuthToken()
- }
- },
- })
+ console.log(userId);
+ useUserFetcher({
+ url: process.env.REACT_APP_DOMAIN + `/user/${userId}`,
+ userId,
+ onNewUser: setUser,
+ onError: (error) => {
+ const errorMessage = getMessageFromFetchError(error);
+ if (errorMessage) {
+ enqueueSnackbar(errorMessage);
+ clearUserData();
+ clearAuthToken();
+ }
+ },
+ });
- useUserAccountFetcher({
- url: process.env.REACT_APP_DOMAIN + "/customer/account",
- userId,
- onNewUserAccount: setUserAccount,
- onError: (error) => {
- const errorMessage = getMessageFromFetchError(error)
- if (errorMessage) {
- enqueueSnackbar(errorMessage)
- clearUserData()
- clearAuthToken()
- navigate("/signin")
- }
- },
- })
+ useUserAccountFetcher({
+ url: process.env.REACT_APP_DOMAIN + "/customer/account",
+ userId,
+ onNewUserAccount: setUserAccount,
+ onError: (error) => {
+ const errorMessage = getMessageFromFetchError(error);
+ if (errorMessage) {
+ enqueueSnackbar(errorMessage);
+ clearUserData();
+ clearAuthToken();
+ navigate("/signin");
+ }
+ },
+ });
- verify(userId)
+ verify(userId);
- console.log(location)
- if (location.state?.redirectTo)
- return
+ console.log(location);
+ if (location.state?.redirectTo)
+ return (
+
+ );
- return (
- <>
- {location.state?.backgroundLocation && (
-
- } />
- } />
- } />
- } />
- } />
-
- )}
-
- } />
- } />
- } />
- } />
- } />
- } />
+ return (
+ <>
+ {location.state?.backgroundLocation && (
+
+ } />
+ } />
+ } />
+ } />
+ } />
+
+ )}
+
+ } />
+
+ }
+ />
+
+ }
+ />
+
+ }
+ />
+
+ }
+ />
+
+ }
+ />
- } />
- }>
- }>
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
-
-
- } />
- } />
- }>
- } />
- } />
-
- } />
-
- >
- )
-}
+ } />
+ }>
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ }
+ />
+
+
+ } />
+ } />
+ }>
+ } />
+ } />
+
+ } />
+ } />
+
+ >
+ );
+};
-const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement)
+const root = ReactDOM.createRoot(
+ document.getElementById("root") as HTMLElement
+);
root.render(
- //
-
-
-
-
-
-
-
- //
-)
+ //
+
+
+
+
+
+
+
+ //
+);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
-reportWebVitals()
+reportWebVitals();
diff --git a/src/pages/PageNotFound.tsx b/src/pages/PageNotFound.tsx
new file mode 100644
index 0000000..e784d90
--- /dev/null
+++ b/src/pages/PageNotFound.tsx
@@ -0,0 +1,56 @@
+import {
+ Box,
+ Typography,
+ Button,
+ useTheme,
+ useMediaQuery,
+} from "@mui/material";
+import { Link } from "react-router-dom";
+
+import { NotFoundIcon } from "@root/assets/Icons/404";
+
+export const PageNotFound = () => {
+ const theme = useTheme();
+ const isMobile = useMediaQuery(theme.breakpoints.down(800));
+
+ return (
+
+
+
+ Страница не найдена
+
+
+ Посетите главную страницу, возможно вы найдете ее
+
+
+
+
+
+ );
+};