fix: logout
This commit is contained in:
parent
8f393679eb
commit
14b63921a5
@ -5,12 +5,13 @@ import { parseAxiosError } from "@root/utils/parse-error";
|
|||||||
import { enqueueSnackbar } from "notistack";
|
import { enqueueSnackbar } from "notistack";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
|
|
||||||
|
|
||||||
const apiUrl = process.env.REACT_APP_DOMAIN + "/price";
|
const apiUrl = process.env.REACT_APP_DOMAIN + "/price";
|
||||||
|
|
||||||
export async function getDiscounts(userId: string | null) {
|
export async function getDiscounts(userId: string | null) {
|
||||||
console.log("перед запросом я получил айдишник юзера ", userId)
|
if (userId === null) {
|
||||||
if (userId === null) throw new Error(`Не авторизован.`);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const discountsResponse = await makeRequest<never, GetDiscountsResponse>({
|
const discountsResponse = await makeRequest<never, GetDiscountsResponse>({
|
||||||
url: `${apiUrl}/discount/user/${userId}`,
|
url: `${apiUrl}/discount/user/${userId}`,
|
||||||
@ -33,7 +34,7 @@ export function useDiscounts(userId:string|null) {
|
|||||||
if (!(error instanceof Error)) return;
|
if (!(error instanceof Error)) return;
|
||||||
|
|
||||||
enqueueSnackbar(error.message, { variant: "error" });
|
enqueueSnackbar(error.message, { variant: "error" });
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { Link, useLocation, useNavigate } from "react-router-dom";
|
import { Link, useLocation, useNavigate } from "react-router-dom";
|
||||||
import { Box, Button, Container, IconButton, Typography, useMediaQuery, useTheme } from "@mui/material";
|
import {
|
||||||
|
Box,
|
||||||
|
Button,
|
||||||
|
Container,
|
||||||
|
IconButton,
|
||||||
|
Typography,
|
||||||
|
useMediaQuery,
|
||||||
|
useTheme,
|
||||||
|
} from "@mui/material";
|
||||||
import SectionWrapper from "../SectionWrapper";
|
import SectionWrapper from "../SectionWrapper";
|
||||||
import LogoutIcon from "../icons/LogoutIcon";
|
import LogoutIcon from "../icons/LogoutIcon";
|
||||||
import DialogMenu from "./DialogMenu";
|
import DialogMenu from "./DialogMenu";
|
||||||
@ -12,7 +20,11 @@ import Menu from "../Menu";
|
|||||||
import { logout } from "@root/api/auth";
|
import { logout } from "@root/api/auth";
|
||||||
import { enqueueSnackbar } from "notistack";
|
import { enqueueSnackbar } from "notistack";
|
||||||
import { clearUserData, useUserStore } from "@root/stores/user";
|
import { clearUserData, useUserStore } from "@root/stores/user";
|
||||||
import { BurgerButton, clearAuthToken, getMessageFromFetchError } from "@frontend/kitui";
|
import {
|
||||||
|
BurgerButton,
|
||||||
|
clearAuthToken,
|
||||||
|
getMessageFromFetchError,
|
||||||
|
} from "@frontend/kitui";
|
||||||
import { currencyFormatter } from "@root/utils/currencyFormatter";
|
import { currencyFormatter } from "@root/utils/currencyFormatter";
|
||||||
import { clearCustomTariffs } from "@root/stores/customTariffs";
|
import { clearCustomTariffs } from "@root/stores/customTariffs";
|
||||||
import { clearTickets } from "@root/stores/tickets";
|
import { clearTickets } from "@root/stores/tickets";
|
||||||
@ -31,17 +43,17 @@ export default function NavbarFull({ isLoggedIn }: Props) {
|
|||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
async function handleLogoutClick() {
|
async function handleLogoutClick() {
|
||||||
const [_, logoutError] = await logout();
|
|
||||||
|
|
||||||
if (logoutError) {
|
|
||||||
return enqueueSnackbar(logoutError);
|
|
||||||
}
|
|
||||||
|
|
||||||
clearAuthToken();
|
clearAuthToken();
|
||||||
clearUserData();
|
clearUserData();
|
||||||
clearCustomTariffs();
|
clearCustomTariffs();
|
||||||
clearTickets();
|
clearTickets();
|
||||||
navigate("/");
|
navigate("/");
|
||||||
|
|
||||||
|
const [_, logoutError] = await logout();
|
||||||
|
|
||||||
|
if (logoutError) {
|
||||||
|
return enqueueSnackbar(logoutError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return isLoggedIn ? (
|
return isLoggedIn ? (
|
||||||
@ -71,7 +83,10 @@ export default function NavbarFull({ isLoggedIn }: Props) {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Drawers />
|
<Drawers />
|
||||||
<IconButton sx={{ p: 0, ml: "8px" }} onClick={() => navigate("/wallet")}>
|
<IconButton
|
||||||
|
sx={{ p: 0, ml: "8px" }}
|
||||||
|
onClick={() => navigate("/wallet")}
|
||||||
|
>
|
||||||
<WalletIcon color={theme.palette.gray.main} bgcolor="#F2F3F7" />
|
<WalletIcon color={theme.palette.gray.main} bgcolor="#F2F3F7" />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<Box sx={{ ml: "8px", whiteSpace: "nowrap" }}>
|
<Box sx={{ ml: "8px", whiteSpace: "nowrap" }}>
|
||||||
@ -124,7 +139,12 @@ export default function NavbarFull({ isLoggedIn }: Props) {
|
|||||||
gap: "50px",
|
gap: "50px",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box width="457px" justifyContent="space-between" display="inline-flex" alignItems="center">
|
<Box
|
||||||
|
width="457px"
|
||||||
|
justifyContent="space-between"
|
||||||
|
display="inline-flex"
|
||||||
|
alignItems="center"
|
||||||
|
>
|
||||||
<PenaLogo width={150} color="white" />
|
<PenaLogo width={150} color="white" />
|
||||||
{!isTablet ? null : <Menu />}
|
{!isTablet ? null : <Menu />}
|
||||||
</Box>
|
</Box>
|
||||||
@ -151,7 +171,10 @@ export default function NavbarFull({ isLoggedIn }: Props) {
|
|||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<BurgerButton onClick={() => setOpen(!open)} sx={{ color: "white", display: !isTablet ? "block" : "none" }} />
|
<BurgerButton
|
||||||
|
onClick={() => setOpen(!open)}
|
||||||
|
sx={{ color: "white", display: !isTablet ? "block" : "none" }}
|
||||||
|
/>
|
||||||
</SectionWrapper>
|
</SectionWrapper>
|
||||||
<DialogMenu open={open} handleClose={() => setOpen(false)} />
|
<DialogMenu open={open} handleClose={() => setOpen(false)} />
|
||||||
</>
|
</>
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { Link, useLocation, useNavigate } from "react-router-dom";
|
import { Link, useLocation, useNavigate } from "react-router-dom";
|
||||||
import { Box, Button, List, ListItem, Typography, useMediaQuery, useTheme } from "@mui/material";
|
import {
|
||||||
|
Box,
|
||||||
|
Button,
|
||||||
|
List,
|
||||||
|
ListItem,
|
||||||
|
Typography,
|
||||||
|
useMediaQuery,
|
||||||
|
useTheme,
|
||||||
|
} from "@mui/material";
|
||||||
import { clearUserData, useUserStore } from "@root/stores/user";
|
import { clearUserData, useUserStore } from "@root/stores/user";
|
||||||
import { currencyFormatter } from "@root/utils/currencyFormatter";
|
import { currencyFormatter } from "@root/utils/currencyFormatter";
|
||||||
import { cardShadow } from "@root/utils/theme";
|
import { cardShadow } from "@root/utils/theme";
|
||||||
@ -57,20 +65,23 @@ export default function DialogMenu({ handleClose }: DialogMenuProps) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
async function handleLogoutClick() {
|
async function handleLogoutClick() {
|
||||||
const [_, logoutError] = await logout();
|
|
||||||
|
|
||||||
if (logoutError) {
|
|
||||||
return enqueueSnackbar(logoutError);
|
|
||||||
}
|
|
||||||
|
|
||||||
clearAuthToken();
|
clearAuthToken();
|
||||||
clearUserData();
|
clearUserData();
|
||||||
clearCustomTariffs();
|
clearCustomTariffs();
|
||||||
clearTickets();
|
clearTickets();
|
||||||
navigate("/");
|
navigate("/");
|
||||||
|
|
||||||
|
const [_, logoutError] = await logout();
|
||||||
|
|
||||||
|
if (logoutError) {
|
||||||
|
return enqueueSnackbar(logoutError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSubMenu = (index: number) => setActiveSubMenuIndex((activeIndex) => (activeIndex !== index ? index : -1));
|
const handleSubMenu = (index: number) =>
|
||||||
|
setActiveSubMenuIndex((activeIndex) =>
|
||||||
|
activeIndex !== index ? index : -1
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ height: "100%", maxHeight: "calc(100vh - 51px)" }}>
|
<Box sx={{ height: "100%", maxHeight: "calc(100vh - 51px)" }}>
|
||||||
@ -98,18 +109,28 @@ export default function DialogMenu({ handleClose }: DialogMenuProps) {
|
|||||||
state={{ previousUrl: location.pathname }}
|
state={{ previousUrl: location.pathname }}
|
||||||
disableRipple
|
disableRipple
|
||||||
variant="text"
|
variant="text"
|
||||||
onClick={() => (!subMenu.length ? closeDialogMenu() : handleSubMenu(index))}
|
onClick={() =>
|
||||||
|
!subMenu.length ? closeDialogMenu() : handleSubMenu(index)
|
||||||
|
}
|
||||||
sx={{
|
sx={{
|
||||||
padding: "10px 10px 10px 20px",
|
padding: "10px 10px 10px 20px",
|
||||||
display: "block",
|
display: "block",
|
||||||
fontWeight: 500,
|
fontWeight: 500,
|
||||||
color: location.pathname === url ? "#7E2AEA" : location.pathname === "/" ? "white" : "black",
|
color:
|
||||||
|
location.pathname === url
|
||||||
|
? "#7E2AEA"
|
||||||
|
: location.pathname === "/"
|
||||||
|
? "white"
|
||||||
|
: "black",
|
||||||
textTransform: "none",
|
textTransform: "none",
|
||||||
fontSize: "16px",
|
fontSize: "16px",
|
||||||
borderRadius: 0,
|
borderRadius: 0,
|
||||||
"&:hover, &:active": {
|
"&:hover, &:active": {
|
||||||
color: "#7E2AEA",
|
color: "#7E2AEA",
|
||||||
background: index === activeSubMenuIndex ? theme.palette.background.default : "none",
|
background:
|
||||||
|
index === activeSubMenuIndex
|
||||||
|
? theme.palette.background.default
|
||||||
|
: "none",
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -143,7 +164,11 @@ export default function DialogMenu({ handleClose }: DialogMenuProps) {
|
|||||||
whiteSpace: "nowrap",
|
whiteSpace: "nowrap",
|
||||||
fontWeight: 400,
|
fontWeight: 400,
|
||||||
color:
|
color:
|
||||||
location.pathname === url ? "#7E2AEA" : location.pathname === "/" ? "white" : "black",
|
location.pathname === url
|
||||||
|
? "#7E2AEA"
|
||||||
|
: location.pathname === "/"
|
||||||
|
? "white"
|
||||||
|
: "black",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{name}
|
{name}
|
||||||
|
@ -1,45 +1,45 @@
|
|||||||
import { Link, useNavigate } from "react-router-dom"
|
import { Link, useNavigate } from "react-router-dom";
|
||||||
import { Box, Container, Typography, useTheme } from "@mui/material"
|
import { Box, Container, Typography, useTheme } from "@mui/material";
|
||||||
import Drawers from "../Drawers"
|
import Drawers from "../Drawers";
|
||||||
import PenaLogo from "../PenaLogo"
|
import PenaLogo from "../PenaLogo";
|
||||||
import Menu from "../Menu"
|
import Menu from "../Menu";
|
||||||
import { logout } from "@root/api/auth"
|
import { logout } from "@root/api/auth";
|
||||||
import { enqueueSnackbar } from "notistack"
|
import { enqueueSnackbar } from "notistack";
|
||||||
import { clearUserData, useUserStore } from "@root/stores/user"
|
import { clearUserData, useUserStore } from "@root/stores/user";
|
||||||
import {
|
import {
|
||||||
AvatarButton,
|
AvatarButton,
|
||||||
LogoutButton,
|
LogoutButton,
|
||||||
WalletButton,
|
WalletButton,
|
||||||
clearAuthToken,
|
clearAuthToken,
|
||||||
} from "@frontend/kitui"
|
} from "@frontend/kitui";
|
||||||
import { clearCustomTariffs } from "@root/stores/customTariffs"
|
import { clearCustomTariffs } from "@root/stores/customTariffs";
|
||||||
import { currencyFormatter } from "@root/utils/currencyFormatter"
|
import { currencyFormatter } from "@root/utils/currencyFormatter";
|
||||||
import { clearTickets } from "@root/stores/tickets"
|
import { clearTickets } from "@root/stores/tickets";
|
||||||
|
|
||||||
import type { ReactNode } from "react"
|
import type { ReactNode } from "react";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function NavbarFull({ children }: Props) {
|
export default function NavbarFull({ children }: Props) {
|
||||||
const theme = useTheme()
|
const theme = useTheme();
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate();
|
||||||
const cash = useUserStore((state) => state.userAccount?.wallet.cash) ?? 0
|
const cash = useUserStore((state) => state.userAccount?.wallet.cash) ?? 0;
|
||||||
const initials = useUserStore((state) => state.initials)
|
const initials = useUserStore((state) => state.initials);
|
||||||
|
|
||||||
async function handleLogoutClick() {
|
async function handleLogoutClick() {
|
||||||
const [_, logoutError] = await logout()
|
clearAuthToken();
|
||||||
|
clearUserData();
|
||||||
|
clearCustomTariffs();
|
||||||
|
clearTickets();
|
||||||
|
navigate("/");
|
||||||
|
|
||||||
|
const [_, logoutError] = await logout();
|
||||||
|
|
||||||
if (logoutError) {
|
if (logoutError) {
|
||||||
return enqueueSnackbar(logoutError)
|
return enqueueSnackbar(logoutError);
|
||||||
}
|
}
|
||||||
|
|
||||||
clearAuthToken()
|
|
||||||
clearUserData()
|
|
||||||
clearCustomTariffs()
|
|
||||||
clearTickets()
|
|
||||||
navigate("/")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -90,5 +90,5 @@ export default function NavbarFull({ children }: Props) {
|
|||||||
</Container>
|
</Container>
|
||||||
<Box>{children}</Box>
|
<Box>{children}</Box>
|
||||||
</Box>
|
</Box>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
import { Link, useNavigate } from "react-router-dom";
|
import { Link, useNavigate } from "react-router-dom";
|
||||||
import { Box, IconButton, Typography, useTheme, useMediaQuery } from "@mui/material";
|
import {
|
||||||
|
Box,
|
||||||
|
IconButton,
|
||||||
|
Typography,
|
||||||
|
useTheme,
|
||||||
|
useMediaQuery,
|
||||||
|
} from "@mui/material";
|
||||||
import LogoutIcon from "../icons/LogoutIcon";
|
import LogoutIcon from "../icons/LogoutIcon";
|
||||||
import Drawers from "../Drawers";
|
import Drawers from "../Drawers";
|
||||||
import { logout } from "@root/api/auth";
|
import { logout } from "@root/api/auth";
|
||||||
@ -21,17 +27,17 @@ export const NavbarPanel = () => {
|
|||||||
const initials = useUserStore((state) => state.initials);
|
const initials = useUserStore((state) => state.initials);
|
||||||
|
|
||||||
async function handleLogoutClick() {
|
async function handleLogoutClick() {
|
||||||
const [_, logoutError] = await logout();
|
|
||||||
|
|
||||||
if (logoutError) {
|
|
||||||
return enqueueSnackbar(logoutError);
|
|
||||||
}
|
|
||||||
|
|
||||||
clearAuthToken();
|
clearAuthToken();
|
||||||
clearUserData();
|
clearUserData();
|
||||||
clearCustomTariffs();
|
clearCustomTariffs();
|
||||||
clearTickets();
|
clearTickets();
|
||||||
navigate("/");
|
navigate("/");
|
||||||
|
|
||||||
|
const [_, logoutError] = await logout();
|
||||||
|
|
||||||
|
if (logoutError) {
|
||||||
|
return enqueueSnackbar(logoutError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -50,7 +50,9 @@ export default function QuizPayment() {
|
|||||||
useEffect(
|
useEffect(
|
||||||
function redirectIfSignedIn() {
|
function redirectIfSignedIn() {
|
||||||
if (!first && user?._id === userId)
|
if (!first && user?._id === userId)
|
||||||
navigate(`/payment?action=${action}&dif=${dif}&user=${userId}`, { replace: true });
|
navigate(`/payment?action=${action}&dif=${dif}&user=${userId}`, {
|
||||||
|
replace: true,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
[navigate, user]
|
[navigate, user]
|
||||||
);
|
);
|
||||||
@ -71,11 +73,12 @@ export default function QuizPayment() {
|
|||||||
// const data = await refresh(token)
|
// const data = await refresh(token)
|
||||||
// console.log(token)
|
// console.log(token)
|
||||||
if (getAuthToken()) {
|
if (getAuthToken()) {
|
||||||
await logout();
|
|
||||||
clearAuthToken();
|
clearAuthToken();
|
||||||
clearUserData();
|
clearUserData();
|
||||||
clearCustomTariffs();
|
clearCustomTariffs();
|
||||||
clearTickets();
|
clearTickets();
|
||||||
|
|
||||||
|
await logout();
|
||||||
}
|
}
|
||||||
|
|
||||||
setAuthToken(token);
|
setAuthToken(token);
|
||||||
|
Loading…
Reference in New Issue
Block a user