2023-11-08 12:51:40 +00:00
|
|
|
import ContactFormModal from "@ui_kit/ContactForm";
|
|
|
|
import ImageCrop from "@ui_kit/Modal/ImageCrop";
|
|
|
|
import dayjs from "dayjs";
|
|
|
|
import "dayjs/locale/ru";
|
|
|
|
import SigninDialog from "./pages/auth/Signin";
|
|
|
|
import SignupDialog from "./pages/auth/Signup";
|
2023-11-30 17:39:57 +00:00
|
|
|
import { ViewPage } from "./pages/ViewPublicationPage";
|
2023-12-14 09:40:53 +00:00
|
|
|
import { BrowserRouter, Route, Routes, useLocation, useNavigate, Navigate } from "react-router-dom";
|
2023-11-08 12:51:40 +00:00
|
|
|
import "./index.css";
|
|
|
|
import ContactFormPage from "./pages/ContactFormPage/ContactFormPage";
|
|
|
|
import InstallQuiz from "./pages/InstallQuiz/InstallQuiz";
|
|
|
|
import Landing from "./pages/Landing/Landing";
|
|
|
|
import QuestionsPage from "./pages/Questions/QuestionsPage";
|
2023-12-07 21:30:26 +00:00
|
|
|
import { Result } from "./pages/ResultPage/Result";
|
2023-12-07 22:56:31 +00:00
|
|
|
import { ResultSettings } from "./pages/ResultPage/ResultSettings";
|
2023-11-08 12:51:40 +00:00
|
|
|
import MyQuizzesFull from "./pages/createQuize/MyQuizzesFull";
|
|
|
|
import Main from "./pages/main";
|
2023-12-07 22:56:31 +00:00
|
|
|
import EditPage from "./pages/startPage/EditPage";
|
2023-11-08 12:51:40 +00:00
|
|
|
import { clearAuthToken, getMessageFromFetchError, useUserFetcher } from "@frontend/kitui";
|
|
|
|
import { clearUserData, setUser, useUserStore } from "@root/user";
|
|
|
|
import { enqueueSnackbar } from "notistack";
|
2023-12-14 16:50:02 +00:00
|
|
|
import PrivateRoute from "@ui_kit/PrivateRoute";
|
2023-11-08 12:51:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
dayjs.locale("ru");
|
|
|
|
|
|
|
|
const routeslink = [
|
|
|
|
{ path: "/list", page: <MyQuizzesFull />, header: false, sidebar: false },
|
|
|
|
{ path: "/questions/:quizId", page: <QuestionsPage />, header: true, sidebar: true, },
|
|
|
|
{ path: "/contacts", page: <ContactFormPage />, header: true, sidebar: true },
|
|
|
|
{ path: "/result", page: <Result />, header: true, sidebar: true },
|
2023-12-07 22:56:31 +00:00
|
|
|
{ path: "/settings", page: <ResultSettings />, header: true, sidebar: true },
|
2023-11-08 12:51:40 +00:00
|
|
|
{ path: "/install", page: <InstallQuiz />, header: true, sidebar: true },
|
|
|
|
] as const;
|
|
|
|
|
|
|
|
export default function App() {
|
|
|
|
const userId = useUserStore((state) => state.userId);
|
2023-12-14 17:10:10 +00:00
|
|
|
const location = useLocation();
|
|
|
|
const navigate = useNavigate();
|
2023-11-08 12:51:40 +00:00
|
|
|
|
|
|
|
useUserFetcher({
|
|
|
|
url: `https://hub.pena.digital/user/${userId}`,
|
|
|
|
userId,
|
|
|
|
onNewUser: setUser,
|
|
|
|
onError: (error) => {
|
|
|
|
const errorMessage = getMessageFromFetchError(error);
|
|
|
|
if (errorMessage) {
|
|
|
|
enqueueSnackbar(errorMessage);
|
|
|
|
clearUserData();
|
|
|
|
clearAuthToken();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
});
|
2023-12-14 17:10:10 +00:00
|
|
|
if (location.state?.redirectTo)
|
|
|
|
return <Navigate to={location.state.redirectTo} replace state={{ backgroundLocation: location }} />;
|
2023-11-08 12:51:40 +00:00
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<ContactFormModal />
|
2023-12-14 09:40:53 +00:00
|
|
|
{location.state?.backgroundLocation && (
|
2023-11-08 12:51:40 +00:00
|
|
|
<Routes>
|
|
|
|
<Route path="/signin" element={<SigninDialog />} />
|
|
|
|
<Route path="/signup" element={<SignupDialog />} />
|
|
|
|
</Routes>
|
2023-12-14 09:40:53 +00:00
|
|
|
)}
|
|
|
|
<Routes location={location.state?.backgroundLocation || location}>
|
|
|
|
<Route path="/" element={<Landing />} />
|
2023-12-14 17:10:10 +00:00
|
|
|
<Route path="/signin" element={<Navigate to="/" replace state={{ redirectTo: "/signin" }} />} />
|
|
|
|
<Route path="/signup" element={<Navigate to="/" replace state={{ redirectTo: "/signup" }} />} />
|
|
|
|
<Route element={<PrivateRoute />}>
|
2023-12-14 16:50:02 +00:00
|
|
|
{routeslink.map((e, i) => (
|
|
|
|
<Route key={i} path={e.path} element={<Main page={e.page} header={e.header} sidebar={e.sidebar} />} />
|
|
|
|
))}
|
|
|
|
<Route path="edit" element={<EditPage />} />
|
|
|
|
<Route path="crop" element={<ImageCrop />} />
|
|
|
|
<Route path="/view" element={<ViewPage />} />
|
|
|
|
</Route>
|
2023-12-14 09:40:53 +00:00
|
|
|
</Routes>
|
2023-11-08 12:51:40 +00:00
|
|
|
</>
|
|
|
|
);
|
2023-12-14 17:10:10 +00:00
|
|
|
}
|