From e8a3ca6e84e392e17a5889c4d09bb150c54ef234 Mon Sep 17 00:00:00 2001 From: aleksandr-raw <104529174+aleksandr-raw@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:43:41 +0400 Subject: [PATCH] Implemented data reset on account switch, fixed jumping after reload between quiz list and create new quiz, and resolved type error. --- src/App.tsx | 28 +++++++++++++------------ src/pages/createQuize/MyQuizzesFull.tsx | 16 +++++++++----- src/stores/quizes/store.ts | 2 ++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 00332eb7..18d63c21 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,5 @@ -import { Suspense, lazy } from "react"; +import type { SuspenseProps } from "react"; +import { lazy, Suspense, useEffect, useLayoutEffect, useRef } from "react"; import { lazily } from "react-lazily"; import ContactFormModal from "@ui_kit/ContactForm"; import dayjs from "dayjs"; @@ -6,29 +7,30 @@ import "dayjs/locale/ru"; import SigninDialog from "./pages/auth/Signin"; import SignupDialog from "./pages/auth/Signup"; import { + Navigate, Route, Routes, useLocation, useNavigate, - Navigate, } from "react-router-dom"; import "./index.css"; import Landing from "./pages/Landing/Landing"; import Main from "./pages/main"; import { clearAuthToken, - getMessageFromFetchError, - useUserFetcher, - UserAccount, - makeRequest, - devlog, createUserAccount, + devlog, + getMessageFromFetchError, + makeRequest, + UserAccount, + useUserFetcher, } from "@frontend/kitui"; +import type { OriginalUserAccount } from "@root/user"; import { clearUserData, + setCustomerAccount, setUser, setUserAccount, - setCustomerAccount, useUserStore, } from "@root/user"; import { enqueueSnackbar } from "notistack"; @@ -38,13 +40,9 @@ import FloatingSupportChat from "@ui_kit/FloatingSupportChat"; import { Restore } from "./pages/auth/Restore"; import { isAxiosError } from "axios"; -import { useEffect, useLayoutEffect, useRef } from "react"; import RecoverPassword from "./pages/auth/RecoverPassword"; import OutdatedLink from "./pages/auth/OutdatedLink"; - -import type { OriginalUserAccount } from "@root/user"; - -import type { SuspenseProps } from "react"; +import { clearQuizData } from "@root/quizes/store"; const MyQuizzesFull = lazy(() => import("./pages/createQuize/MyQuizzesFull")); const ViewPage = lazy(() => import("./pages/ViewPublicationPage")); @@ -139,6 +137,10 @@ export default function App() { const location = useLocation(); const navigate = useNavigate(); + useEffect(() => { + return clearQuizData(); + }, [userId]); + useUserFetcher({ url: process.env.REACT_APP_DOMAIN + `/user/${userId}`, userId, diff --git a/src/pages/createQuize/MyQuizzesFull.tsx b/src/pages/createQuize/MyQuizzesFull.tsx index cb6e9752..212a5c58 100644 --- a/src/pages/createQuize/MyQuizzesFull.tsx +++ b/src/pages/createQuize/MyQuizzesFull.tsx @@ -31,7 +31,7 @@ export default function MyQuizzesFull({ outerContainerSx: sx, children, }: Props) { - const { quizes } = useQuizes(); + const { quizes, isValidating } = useQuizes(); const navigate = useNavigate(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(500)); @@ -40,6 +40,10 @@ export default function MyQuizzesFull({ copyQuiz(value); }; + if (isValidating) { + return ; + } + return ( <> @@ -100,10 +104,12 @@ export default function MyQuizzesFull({ applicationCount={quiz.passed_count} conversionPercent={ quiz.session_count - ? ( - (quiz.passed_count / quiz.session_count) * - 100 - ).toFixed(1) + ? parseFloat( + ( + (quiz.passed_count / quiz.session_count) * + 100 + ).toFixed(1), + ) : 0 } onClickCopy={onClickCopy} diff --git a/src/stores/quizes/store.ts b/src/stores/quizes/store.ts index e3667d16..bc21ee3c 100644 --- a/src/stores/quizes/store.ts +++ b/src/stores/quizes/store.ts @@ -30,3 +30,5 @@ export const useQuizStore = create()( }, ), ); + +export const clearQuizData = () => useQuizStore.setState({ ...initialState });