Merge branch 'fix-account-logout-data-cleanup' into dev

This commit is contained in:
Nastya 2024-04-04 02:42:41 +03:00
commit ffda341e4b
7 changed files with 38 additions and 49 deletions

@ -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 { lazily } from "react-lazily";
import ContactFormModal from "@ui_kit/ContactForm"; import ContactFormModal from "@ui_kit/ContactForm";
import dayjs from "dayjs"; import dayjs from "dayjs";
@ -6,29 +7,30 @@ import "dayjs/locale/ru";
import SigninDialog from "./pages/auth/Signin"; import SigninDialog from "./pages/auth/Signin";
import SignupDialog from "./pages/auth/Signup"; import SignupDialog from "./pages/auth/Signup";
import { import {
Navigate,
Route, Route,
Routes, Routes,
useLocation, useLocation,
useNavigate, useNavigate,
Navigate,
} from "react-router-dom"; } from "react-router-dom";
import "./index.css"; import "./index.css";
import Landing from "./pages/Landing/Landing"; import Landing from "./pages/Landing/Landing";
import Main from "./pages/main"; import Main from "./pages/main";
import { import {
clearAuthToken, clearAuthToken,
getMessageFromFetchError,
useUserFetcher,
UserAccount,
makeRequest,
devlog,
createUserAccount, createUserAccount,
devlog,
getMessageFromFetchError,
makeRequest,
UserAccount,
useUserFetcher,
} from "@frontend/kitui"; } from "@frontend/kitui";
import type { OriginalUserAccount } from "@root/user";
import { import {
clearUserData, clearUserData,
setCustomerAccount,
setUser, setUser,
setUserAccount, setUserAccount,
setCustomerAccount,
useUserStore, useUserStore,
} from "@root/user"; } from "@root/user";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
@ -38,15 +40,10 @@ import FloatingSupportChat from "@ui_kit/FloatingSupportChat";
import { Restore } from "./pages/auth/Restore"; import { Restore } from "./pages/auth/Restore";
import { isAxiosError } from "axios"; import { isAxiosError } from "axios";
import { useEffect, useLayoutEffect, useRef } from "react";
import RecoverPassword from "./pages/auth/RecoverPassword"; import RecoverPassword from "./pages/auth/RecoverPassword";
import OutdatedLink from "./pages/auth/OutdatedLink"; import OutdatedLink from "./pages/auth/OutdatedLink";
import { useAfterpay } from "@utils/hooks/useAfterpay"; import { useAfterpay } from "@utils/hooks/useAfterpay";
import type { OriginalUserAccount } from "@root/user";
import type { SuspenseProps } from "react";
const MyQuizzesFull = lazy(() => import("./pages/createQuize/MyQuizzesFull")); const MyQuizzesFull = lazy(() => import("./pages/createQuize/MyQuizzesFull"));
const ViewPage = lazy(() => import("./pages/ViewPublicationPage")); const ViewPage = lazy(() => import("./pages/ViewPublicationPage"));
const Analytics = lazy(() => import("./pages/Analytics/Analytics")); const Analytics = lazy(() => import("./pages/Analytics/Analytics"));

@ -1,39 +1,35 @@
import { Link, useLocation, useNavigate } from "react-router-dom"; import { Link, useLocation, useNavigate } from "react-router-dom";
import { makeRequest, useToken } from "@frontend/kitui"; import type { Tariff } from "@frontend/kitui";
import { clearAuthToken, makeRequest, useToken } from "@frontend/kitui";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import type { GetTariffsResponse } from "@model/tariff"; import type { GetTariffsResponse } from "@model/tariff";
import { clearAuthToken } from "@frontend/kitui";
import { logout } from "@api/auth"; import { logout } from "@api/auth";
import ArrowDown from "../../assets/icons/ArrowDownIcon";
import { import {
Box, Box,
Button, Button,
Container, Container,
IconButton,
Modal, Modal,
Paper, Paper,
Typography, Typography,
useMediaQuery, useMediaQuery,
useTheme, useTheme,
IconButton,
} from "@mui/material"; } from "@mui/material";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
import { getMessageFromFetchError } from "@frontend/kitui";
import { withErrorBoundary } from "react-error-boundary"; import { withErrorBoundary } from "react-error-boundary";
import { createTariffElements } from "./tariffsUtils/createTariffElements"; import { createTariffElements } from "./tariffsUtils/createTariffElements";
import HeaderFull from "@ui_kit/Header/HeaderFull";
import Logotip from "../../pages/Landing/images/icons/QuizLogo"; import Logotip from "../../pages/Landing/images/icons/QuizLogo";
import { LogoutButton } from "@ui_kit/LogoutButton"; import { LogoutButton } from "@ui_kit/LogoutButton";
import { clearUserData, useUserStore } from "@root/user"; import { clearUserData, useUserStore } from "@root/user";
import ArrowLeft from "@icons/questionsPage/arrowLeft"; import ArrowLeft from "@icons/questionsPage/arrowLeft";
import { currencyFormatter } from "./tariffsUtils/currencyFormatter"; import { currencyFormatter } from "./tariffsUtils/currencyFormatter";
import type { Tariff } from "@frontend/kitui";
import { Tabs } from "./Tabs"; import { Tabs } from "./Tabs";
import { cleanAuthTicketData } from "@root/ticket"; import { cleanAuthTicketData } from "@root/ticket";
import { useDomainDefine } from "@utils/hooks/useDomainDefine"; import { useDomainDefine } from "@utils/hooks/useDomainDefine";
import CollapsiblePromocodeField from "./CollapsiblePromocodeField"; import CollapsiblePromocodeField from "./CollapsiblePromocodeField";
import { activatePromocode } from "@api/promocode"; import { activatePromocode } from "@api/promocode";
import { clearQuizData } from "@root/quizes/store";
const StepperText: Record<string, string> = { const StepperText: Record<string, string> = {
count: "Тарифы на объём", count: "Тарифы на объём",
@ -179,6 +175,7 @@ function TariffPage() {
cleanAuthTicketData(); cleanAuthTicketData();
clearAuthToken(); clearAuthToken();
clearUserData(); clearUserData();
clearQuizData();
navigate("/"); navigate("/");
} }

@ -31,7 +31,7 @@ export default function MyQuizzesFull({
outerContainerSx: sx, outerContainerSx: sx,
children, children,
}: Props) { }: Props) {
const { quizes } = useQuizes(); const { quizes, isValidating } = useQuizes();
const navigate = useNavigate(); const navigate = useNavigate();
const theme = useTheme(); const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down(500)); const isMobile = useMediaQuery(theme.breakpoints.down(500));
@ -40,6 +40,10 @@ export default function MyQuizzesFull({
copyQuiz(value); copyQuiz(value);
}; };
if (isValidating) {
return <HeaderFull isRequest={false} />;
}
return ( return (
<> <>
<HeaderFull isRequest={false} /> <HeaderFull isRequest={false} />
@ -100,10 +104,12 @@ export default function MyQuizzesFull({
applicationCount={quiz.passed_count} applicationCount={quiz.passed_count}
conversionPercent={ conversionPercent={
quiz.session_count quiz.session_count
? ( ? parseFloat(
(quiz.passed_count / quiz.session_count) * (
100 (quiz.passed_count / quiz.session_count) *
).toFixed(1) 100
).toFixed(1),
)
: 0 : 0
} }
onClickCopy={onClickCopy} onClickCopy={onClickCopy}

@ -30,3 +30,5 @@ export const useQuizStore = create<QuizStore>()(
}, },
), ),
); );
export const clearQuizData = () => useQuizStore.setState({ ...initialState });

@ -7,17 +7,13 @@ import {
Container, Container,
FormControl, FormControl,
IconButton, IconButton,
TextField,
useMediaQuery, useMediaQuery,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import { updateQuiz } from "@root/quizes/actions"; import { updateQuiz } from "@root/quizes/actions";
import { useCurrentQuiz } from "@root/quizes/hooks"; import { useCurrentQuiz } from "@root/quizes/hooks";
import CustomAvatar from "@ui_kit/Header/Avatar";
import NavMenuItem from "@ui_kit/Header/NavMenuItem";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
import { useState } from "react";
import { Link, useNavigate } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
import Logotip from "../../pages/Landing/images/icons/QuizLogo"; import Logotip from "../../pages/Landing/images/icons/QuizLogo";
@ -27,6 +23,7 @@ import { logout } from "@api/auth";
import { ToTariffsButton } from "@ui_kit/Toolbars/ToTariffsButton"; import { ToTariffsButton } from "@ui_kit/Toolbars/ToTariffsButton";
import CustomTextField from "@ui_kit/CustomTextField"; import CustomTextField from "@ui_kit/CustomTextField";
import { cleanAuthTicketData } from "@root/ticket"; import { cleanAuthTicketData } from "@root/ticket";
import { clearQuizData } from "@root/quizes/store";
type HeaderProps = { type HeaderProps = {
setMobileSidebar: (callback: (visible: boolean) => boolean) => void; setMobileSidebar: (callback: (visible: boolean) => boolean) => void;
@ -50,6 +47,7 @@ export const Header = ({ setMobileSidebar, scrollDown }: HeaderProps) => {
cleanAuthTicketData(); cleanAuthTicketData();
clearAuthToken(); clearAuthToken();
clearUserData(); clearUserData();
clearQuizData();
navigate("/"); navigate("/");
} }

@ -2,17 +2,12 @@ import {
Box, Box,
Container, Container,
IconButton, IconButton,
Typography,
useTheme,
useMediaQuery,
SxProps, SxProps,
Theme, Theme,
useMediaQuery,
useTheme,
} from "@mui/material"; } from "@mui/material";
import NavMenuItem from "./NavMenuItem";
import Logotip from "../../pages/Landing/images/icons/QuizLogo"; import Logotip from "../../pages/Landing/images/icons/QuizLogo";
import WalletIcon from "@icons/WalletIcon";
import CustomAvatar from "./Avatar";
import { Burger } from "@icons/Burger";
import { clearAuthToken } from "@frontend/kitui"; import { clearAuthToken } from "@frontend/kitui";
import { logout } from "@api/auth"; import { logout } from "@api/auth";
import { Link, useNavigate } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
@ -22,6 +17,7 @@ import { LogoutButton } from "@ui_kit/LogoutButton";
import { ToTariffsButton } from "@ui_kit/Toolbars/ToTariffsButton"; import { ToTariffsButton } from "@ui_kit/Toolbars/ToTariffsButton";
import ArrowLeft from "@icons/questionsPage/arrowLeft"; import ArrowLeft from "@icons/questionsPage/arrowLeft";
import { cleanAuthTicketData } from "@root/ticket"; import { cleanAuthTicketData } from "@root/ticket";
import { clearQuizData } from "@root/quizes/store";
interface HeaderFullProps { interface HeaderFullProps {
isRequest: boolean; isRequest: boolean;
@ -44,6 +40,7 @@ export default function HeaderFull({ isRequest = false, sx }: HeaderFullProps) {
cleanAuthTicketData(); cleanAuthTicketData();
clearAuthToken(); clearAuthToken();
clearUserData(); clearUserData();
clearQuizData();
navigate("/"); navigate("/");
} }

@ -1,48 +1,39 @@
import { FC, useEffect, useRef, useState } from "react"; import React, { FC, useEffect, useRef, useState } from "react";
import { import {
Box, Box,
FormControl, FormControl,
IconButton, IconButton,
List,
Popper,
TextField, TextField,
Typography, Typography,
useMediaQuery, useMediaQuery,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import { People } from "@mui/icons-material";
import { SidebarModal } from "./SidebarModal"; import { SidebarModal } from "./SidebarModal";
import BackArrowIcon from "@icons/BackArrowIcon"; import BackArrowIcon from "@icons/BackArrowIcon";
import { ChartLineUp } from "./icons/ChartLineUp";
import { ReturnTime } from "./icons/ReturnTime";
import { Question } from "./icons/Question";
import { Settings } from "./icons/Settings"; import { Settings } from "./icons/Settings";
import { Pencil } from "./icons/Pencil"; import { Pencil } from "./icons/Pencil";
import { ArrowDown } from "./icons/ArrowDown"; import { ArrowDown } from "./icons/ArrowDown";
import Sidebar from "@ui_kit/Sidebar/Sidebar";
import { Link, useLocation, useNavigate } from "react-router-dom"; import { Link, useLocation, useNavigate } from "react-router-dom";
import { setCurrentStep, updateQuiz } from "@root/quizes/actions"; import { setCurrentStep, updateQuiz } from "@root/quizes/actions";
import { useCurrentQuiz } from "@root/quizes/hooks"; import { useCurrentQuiz } from "@root/quizes/hooks";
import { LogoutButton } from "@ui_kit/LogoutButton"; import { LogoutButton } from "@ui_kit/LogoutButton";
import { ToTariffsButton } from "@ui_kit/Toolbars/ToTariffsButton";
import { logout } from "@api/auth"; import { logout } from "@api/auth";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
import { clearAuthToken } from "@frontend/kitui"; import { clearAuthToken } from "@frontend/kitui";
import { clearUserData } from "@root/user"; import { clearUserData } from "@root/user";
import CustomTextField from "@ui_kit/CustomTextField";
import PencilCircleIcon from "@icons/PencilCircleIcon"; import PencilCircleIcon from "@icons/PencilCircleIcon";
import { quizSetupSteps } from "@model/quizSettings"; import { quizSetupSteps } from "@model/quizSettings";
import React from "react";
import { updateNextStep } from "@root/uiTools/actions"; import { updateNextStep } from "@root/uiTools/actions";
import { cleanAuthTicketData } from "@root/ticket";
import { clearQuizData } from "@root/quizes/store";
interface SidebarIconProps { interface SidebarIconProps {
height: string; height: string;
width: string; width: string;
color: string; color: string;
} }
import { cleanAuthTicketData } from "@root/ticket";
interface Iprops { interface Iprops {
open: boolean; open: boolean;
@ -93,6 +84,7 @@ export const SidebarMobile: FC<Iprops> = ({
cleanAuthTicketData(); cleanAuthTicketData();
clearAuthToken(); clearAuthToken();
clearUserData(); clearUserData();
clearQuizData();
navigate("/"); navigate("/");
} }