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 ( + + + + Страница не найдена + + + Посетите главную страницу, возможно вы найдете ее + + + + + + ); +};