diff --git a/src/api/price.ts b/src/api/price.ts index 0462fda..2329f16 100644 --- a/src/api/price.ts +++ b/src/api/price.ts @@ -5,36 +5,37 @@ import { parseAxiosError } from "@root/utils/parse-error"; import { enqueueSnackbar } from "notistack"; import useSWR from "swr"; - const apiUrl = process.env.REACT_APP_DOMAIN + "/price"; -export async function getDiscounts(userId:string|null) { - console.log("перед запросом я получил айдишник юзера ", userId) - if (userId === null) throw new Error(`Не авторизован.`); - try { - const discountsResponse = await makeRequest({ - url: `${apiUrl}/discount/user/${userId}`, - method: "get", - useToken: true, - }); +export async function getDiscounts(userId: string | null) { + if (userId === null) { + return; + } - return discountsResponse.Discounts; - } catch (nativeError) { - const [error] = parseAxiosError(nativeError); - - throw new Error(`Ошибка получения списка скидок. ${error}`); - } -} - -export function useDiscounts(userId:string|null) { - const { data } = useSWR("discounts", () => getDiscounts(userId), { - keepPreviousData: true, - onError: (error) => { - if (!(error instanceof Error)) return; - - enqueueSnackbar(error.message, { variant: "error" }); - } + try { + const discountsResponse = await makeRequest({ + url: `${apiUrl}/discount/user/${userId}`, + method: "get", + useToken: true, }); - return data; + return discountsResponse.Discounts; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + throw new Error(`Ошибка получения списка скидок. ${error}`); + } +} + +export function useDiscounts(userId: string | null) { + const { data } = useSWR("discounts", () => getDiscounts(userId), { + keepPreviousData: true, + onError: (error) => { + if (!(error instanceof Error)) return; + + enqueueSnackbar(error.message, { variant: "error" }); + }, + }); + + return data; } diff --git a/src/components/NavbarLanding/NavbarFull.tsx b/src/components/NavbarLanding/NavbarFull.tsx index c9536e9..cfd8216 100644 --- a/src/components/NavbarLanding/NavbarFull.tsx +++ b/src/components/NavbarLanding/NavbarFull.tsx @@ -1,6 +1,14 @@ import { useState } from "react"; 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 LogoutIcon from "../icons/LogoutIcon"; import DialogMenu from "./DialogMenu"; @@ -12,7 +20,11 @@ import Menu from "../Menu"; import { logout } from "@root/api/auth"; import { enqueueSnackbar } from "notistack"; 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 { clearCustomTariffs } from "@root/stores/customTariffs"; import { clearTickets } from "@root/stores/tickets"; @@ -31,17 +43,17 @@ export default function NavbarFull({ isLoggedIn }: Props) { const [open, setOpen] = useState(false); async function handleLogoutClick() { - const [_, logoutError] = await logout(); - - if (logoutError) { - return enqueueSnackbar(logoutError); - } - clearAuthToken(); clearUserData(); clearCustomTariffs(); clearTickets(); navigate("/"); + + const [_, logoutError] = await logout(); + + if (logoutError) { + return enqueueSnackbar(logoutError); + } } return isLoggedIn ? ( @@ -71,7 +83,10 @@ export default function NavbarFull({ isLoggedIn }: Props) { }} > - navigate("/wallet")}> + navigate("/wallet")} + > @@ -124,7 +139,12 @@ export default function NavbarFull({ isLoggedIn }: Props) { gap: "50px", }} > - + {!isTablet ? null : } @@ -151,7 +171,10 @@ export default function NavbarFull({ isLoggedIn }: Props) { )} - setOpen(!open)} sx={{ color: "white", display: !isTablet ? "block" : "none" }} /> + setOpen(!open)} + sx={{ color: "white", display: !isTablet ? "block" : "none" }} + /> setOpen(false)} /> diff --git a/src/components/NavbarSite/DialogMenu.tsx b/src/components/NavbarSite/DialogMenu.tsx index a72d261..c451495 100644 --- a/src/components/NavbarSite/DialogMenu.tsx +++ b/src/components/NavbarSite/DialogMenu.tsx @@ -1,6 +1,14 @@ import { useState } from "react"; 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 { currencyFormatter } from "@root/utils/currencyFormatter"; import { cardShadow } from "@root/utils/theme"; @@ -31,7 +39,7 @@ const arrayMenu: MenuItem[] = [ { name: "Корзина", url: "/cart" }, { name: "Поддержка", url: "/support" }, { name: "История", url: "/history" }, - {name: "Мой кошелёк", url: "/wallet"}, + { name: "Мой кошелёк", url: "/wallet" }, ]; interface DialogMenuProps { @@ -57,20 +65,23 @@ export default function DialogMenu({ handleClose }: DialogMenuProps) { }; async function handleLogoutClick() { - const [_, logoutError] = await logout(); - - if (logoutError) { - return enqueueSnackbar(logoutError); - } - clearAuthToken(); clearUserData(); clearCustomTariffs(); clearTickets(); 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 ( @@ -98,18 +109,28 @@ export default function DialogMenu({ handleClose }: DialogMenuProps) { state={{ previousUrl: location.pathname }} disableRipple variant="text" - onClick={() => (!subMenu.length ? closeDialogMenu() : handleSubMenu(index))} + onClick={() => + !subMenu.length ? closeDialogMenu() : handleSubMenu(index) + } sx={{ padding: "10px 10px 10px 20px", display: "block", fontWeight: 500, - color: location.pathname === url ? "#7E2AEA" : location.pathname === "/" ? "white" : "black", + color: + location.pathname === url + ? "#7E2AEA" + : location.pathname === "/" + ? "white" + : "black", textTransform: "none", fontSize: "16px", borderRadius: 0, "&:hover, &:active": { 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", fontWeight: 400, color: - location.pathname === url ? "#7E2AEA" : location.pathname === "/" ? "white" : "black", + location.pathname === url + ? "#7E2AEA" + : location.pathname === "/" + ? "white" + : "black", }} > {name} diff --git a/src/components/NavbarSite/NavbarFull.tsx b/src/components/NavbarSite/NavbarFull.tsx index bf26211..53281e8 100644 --- a/src/components/NavbarSite/NavbarFull.tsx +++ b/src/components/NavbarSite/NavbarFull.tsx @@ -1,94 +1,94 @@ -import { Link, useNavigate } from "react-router-dom" -import { Box, Container, Typography, useTheme } from "@mui/material" -import Drawers from "../Drawers" -import PenaLogo from "../PenaLogo" -import Menu from "../Menu" -import { logout } from "@root/api/auth" -import { enqueueSnackbar } from "notistack" -import { clearUserData, useUserStore } from "@root/stores/user" +import { Link, useNavigate } from "react-router-dom"; +import { Box, Container, Typography, useTheme } from "@mui/material"; +import Drawers from "../Drawers"; +import PenaLogo from "../PenaLogo"; +import Menu from "../Menu"; +import { logout } from "@root/api/auth"; +import { enqueueSnackbar } from "notistack"; +import { clearUserData, useUserStore } from "@root/stores/user"; import { - AvatarButton, - LogoutButton, - WalletButton, - clearAuthToken, -} from "@frontend/kitui" -import { clearCustomTariffs } from "@root/stores/customTariffs" -import { currencyFormatter } from "@root/utils/currencyFormatter" -import { clearTickets } from "@root/stores/tickets" + AvatarButton, + LogoutButton, + WalletButton, + clearAuthToken, +} from "@frontend/kitui"; +import { clearCustomTariffs } from "@root/stores/customTariffs"; +import { currencyFormatter } from "@root/utils/currencyFormatter"; +import { clearTickets } from "@root/stores/tickets"; -import type { ReactNode } from "react" +import type { ReactNode } from "react"; interface Props { children: ReactNode; } export default function NavbarFull({ children }: Props) { - const theme = useTheme() - const navigate = useNavigate() - const cash = useUserStore((state) => state.userAccount?.wallet.cash) ?? 0 - const initials = useUserStore((state) => state.initials) + const theme = useTheme(); + const navigate = useNavigate(); + const cash = useUserStore((state) => state.userAccount?.wallet.cash) ?? 0; + const initials = useUserStore((state) => state.initials); - async function handleLogoutClick() { - const [_, logoutError] = await logout() + async function handleLogoutClick() { + clearAuthToken(); + clearUserData(); + clearCustomTariffs(); + clearTickets(); + navigate("/"); - if (logoutError) { - return enqueueSnackbar(logoutError) - } + const [_, logoutError] = await logout(); - clearAuthToken() - clearUserData() - clearCustomTariffs() - clearTickets() - navigate("/") - } + if (logoutError) { + return enqueueSnackbar(logoutError); + } + } - return ( - - - - - - - - - - - + return ( + + + + + + + + + + + Мой баланс - - - {currencyFormatter.format(cash / 100)} - - - - {initials} - - - - - {children} - - ) + + + {currencyFormatter.format(cash / 100)} + + + + {initials} + + + + + {children} + + ); } diff --git a/src/components/NavbarSite/NavbarPanel.tsx b/src/components/NavbarSite/NavbarPanel.tsx index 3ebd782..d572a7c 100644 --- a/src/components/NavbarSite/NavbarPanel.tsx +++ b/src/components/NavbarSite/NavbarPanel.tsx @@ -1,5 +1,11 @@ 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 Drawers from "../Drawers"; import { logout } from "@root/api/auth"; @@ -21,17 +27,17 @@ export const NavbarPanel = () => { const initials = useUserStore((state) => state.initials); async function handleLogoutClick() { - const [_, logoutError] = await logout(); - - if (logoutError) { - return enqueueSnackbar(logoutError); - } - clearAuthToken(); clearUserData(); clearCustomTariffs(); clearTickets(); navigate("/"); + + const [_, logoutError] = await logout(); + + if (logoutError) { + return enqueueSnackbar(logoutError); + } } return ( diff --git a/src/pages/Payment/Payment.tsx b/src/pages/Payment/Payment.tsx index b0c47eb..0a11974 100644 --- a/src/pages/Payment/Payment.tsx +++ b/src/pages/Payment/Payment.tsx @@ -284,7 +284,7 @@ export default function Payment() { mb: "28px", }} > - {currencyFormatter.format(paymentValue / 100)} + {currencyFormatter.format(Math.trunc(paymentValue) / 100)} ) : (