Merge branch 'fix-account-logout-data-cleanup' into dev
This commit is contained in:
commit
ffda341e4b
23
src/App.tsx
23
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 { 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("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user