fix routing

This commit is contained in:
nflnkr 2023-11-14 17:22:10 +03:00
parent ac0104620c
commit 7520000f5b
4 changed files with 20 additions and 7 deletions

@ -56,7 +56,7 @@ export default function App() {
{routeslink.map((e, i) => ( {routeslink.map((e, i) => (
<Route key={i} path={e.path} element={<Main page={e.page} header={e.header} sidebar={e.sidebar} />} /> <Route key={i} path={e.path} element={<Main page={e.page} header={e.header} sidebar={e.sidebar} />} />
))} ))}
<Route path="settings" element={<StartPage />} /> <Route path="edit" element={<StartPage />} />
<Route path="crop" element={<ImageCrop />} /> <Route path="crop" element={<ImageCrop />} />
<Route path="/" element={<Landing />} /> <Route path="/" element={<Landing />} />
<Route path="/signin" element={<SigninDialog />} /> <Route path="/signin" element={<SigninDialog />} />

@ -34,7 +34,7 @@ export default function QuizCard({
function handleEditClick() { function handleEditClick() {
setEditQuizId(quiz.id); setEditQuizId(quiz.id);
navigate("/settings"); navigate("/edit");
} }
return ( return (

@ -14,7 +14,7 @@ import {
useMediaQuery, useMediaQuery,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import { decrementCurrentStep, setQuizes } from "@root/quizes/actions"; import { decrementCurrentStep, resetEditConfig, setQuizes } from "@root/quizes/actions";
import { useCurrentQuiz } from "@root/quizes/hooks"; import { useCurrentQuiz } from "@root/quizes/hooks";
import { useQuizStore } from "@root/quizes/store"; import { useQuizStore } from "@root/quizes/store";
import CustomAvatar from "@ui_kit/Header/Avatar"; import CustomAvatar from "@ui_kit/Header/Avatar";
@ -25,8 +25,8 @@ import Stepper from "@ui_kit/Stepper";
import SwitchStepPages from "@ui_kit/switchStepPages"; import SwitchStepPages from "@ui_kit/switchStepPages";
import { isAxiosError } from "axios"; import { isAxiosError } from "axios";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
import { useState } from "react"; import { useEffect, useState } from "react";
import { Link } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
import useSWR from "swr"; import useSWR from "swr";
import { SidebarMobile } from "./Sidebar/SidebarMobile"; import { SidebarMobile } from "./Sidebar/SidebarMobile";
@ -42,6 +42,8 @@ export default function StartPage() {
}, },
}); });
const theme = useTheme(); const theme = useTheme();
const navigate = useNavigate();
const quizId = useQuizStore(state => state.editQuizId);
const { quiz } = useCurrentQuiz(); const { quiz } = useCurrentQuiz();
const currentStep = useQuizStore(state => state.currentStep); const currentStep = useQuizStore(state => state.currentStep);
const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const isTablet = useMediaQuery(theme.breakpoints.down(1000));
@ -50,6 +52,12 @@ export default function StartPage() {
const quizConfig = quiz?.config; const quizConfig = quiz?.config;
useEffect(() => {
if (quizId === null) navigate("/list");
}, [navigate, quizId]);
useEffect(() => () => resetEditConfig(), []);
return ( return (
<> <>
{/*хедер*/} {/*хедер*/}

@ -14,6 +14,11 @@ export const setEditQuizId = (quizId: number | null) => setProducedState(state =
state.editQuizId = quizId; state.editQuizId = quizId;
}); });
export const resetEditConfig = () => setProducedState(state => {
state.editQuizId = null;
state.currentStep = 1;
});
export const setQuizes = (quizes: RawQuiz[] | null) => setProducedState(state => { export const setQuizes = (quizes: RawQuiz[] | null) => setProducedState(state => {
state.quizById = {}; state.quizById = {};
if (quizes === null) return; if (quizes === null) return;
@ -103,7 +108,7 @@ export const createQuiz = async (navigate: NavigateFunction) => {
setQuiz(rawQuizToQuiz(quiz)); setQuiz(rawQuizToQuiz(quiz));
setEditQuizId(quiz.id); setEditQuizId(quiz.id);
navigate("/settings"); navigate("/edit");
} catch (error) { } catch (error) {
devlog("Error creating quiz", error); devlog("Error creating quiz", error);
@ -173,9 +178,9 @@ export const updateQuizWithFnOptimistic = async (
setQuiz(currentUpdatedQuiz); setQuiz(currentUpdatedQuiz);
try { try {
const { updated: newId } = await quizApi.edit(quizToEditQuizRequest(currentUpdatedQuiz), controller.signal); const { updated: newId } = await quizApi.edit(quizToEditQuizRequest(currentUpdatedQuiz), controller.signal);
// await new Promise((resolve, reject) => setTimeout(reject, 2000, new Error("Api rejected")));
setQuizField(quiz.id, "id", newId); setQuizField(quiz.id, "id", newId);
setEditQuizId(newId);
controller = null; controller = null;
savedOriginalQuiz = null; savedOriginalQuiz = null;