обнуление нехватки средств при любых действиях с корзиной и логауте, удалены фастдинки

This commit is contained in:
Tamara 2024-04-15 03:21:16 +03:00
parent c57023b9c6
commit e36247254e
8 changed files with 21 additions and 102 deletions

@ -1,96 +0,0 @@
import { useLayoutEffect, useState } from "react"
import { useUserStore } from "@root/stores/user";
import { Box, Button, Modal, Typography } from "@mui/material";
import { useDiscounts } from "@root/api/price";
import { activatePromocode } from "@root/api/promocode";
import { mutate } from "swr";
import { enqueueSnackbar } from "notistack";
export function CheckFastlink() {
const userId = useUserStore((state) => state.userId);
const discounts = useDiscounts(userId);
const [askToChange, setAskToChange] = useState(false)
const [promocode, setPromocode] = useState("")
const fetchPromocode = () => {
if (promocode.length > 0) {
activatePromocode(promocode).then(response => {
enqueueSnackbar(response);
localStorage.setItem("fl", "")
mutate("discounts");
}).catch(error => {
enqueueSnackbar(error.message);
localStorage.setItem("fl", "")
});
}
}
useLayoutEffect(() => {
//Промокод может быть или в урл адресе или в ЛС
const params = new URLSearchParams(window.location.search);
const flURL = params.get("fl");
if (flURL !== null) {
localStorage.setItem("fl", flURL)
var url = new URL(window.location.href);
url.searchParams.delete('fl');
history.pushState(null, document.title, url);
}
const flLS = localStorage.getItem("fl");
if (flLS !== null && flLS.length > 0) {
setPromocode(flLS)
if (userId !== null) {
//У нас есть промокод и юзер авторизован. Проверяем есть ли у него применённый промокод
if (discounts?.find(e => e.Condition.User === userId)) {
//есть
setAskToChange(true)
} else {
//нет
fetchPromocode()
}
}
}
}, [userId, discounts])
return (
<Modal
open={askToChange}
onClose={() => setAskToChange(false)}
aria-labelledby="modal-modal-title"
aria-describedby="modal-modal-description"
>
<Box sx={{
position: 'absolute' as 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
bgcolor: 'background.paper',
p: 4,
borderRadius: 2
}}>
<Typography textAlign="center" variant="h6" component="h2">
Заменить текущий промокод?
</Typography>
<Box
sx={{
display: "flex",
mt: "20px",
flexWrap: "wrap",
justifyContent: "space-evenly"
}}
>
<Button sx={{ margin: "5px", minWidth: " auto" }} variant="pena-contained-dark" onClick={fetchPromocode}>Да</Button>
<Button sx={{ margin: "5px", minWidth: " auto" }} variant="pena-contained-dark" onClick={() => {
setAskToChange(false)
localStorage.setItem("fl", "")
}}>Нет</Button>
</Box>
</Box>
</Modal>
);
}

@ -173,7 +173,10 @@ function Drawers() {
<CartIcon /> <CartIcon />
</Badge> </Badge>
</IconButton> </IconButton>
<Drawer anchor={"right"} open={isDrawerOpen} onClose={() => setIsDrawerOpen(false)} sx={{ background: "rgba(0, 0, 0, 0.55)" }}> <Drawer anchor={"right"} open={isDrawerOpen} onClose={() => {
setIsDrawerOpen(false)
setNotEnoughMoneyAmount(0)
}} sx={{ background: "rgba(0, 0, 0, 0.55)" }}>
<SectionWrapper <SectionWrapper
maxWidth="lg" maxWidth="lg"
sx={{ sx={{
@ -205,7 +208,10 @@ function Drawers() {
> >
Корзина Корзина
</Typography> </Typography>
<IconButton onClick={() => setIsDrawerOpen(false)} sx={{ p: 0 }}> <IconButton onClick={() => {
setIsDrawerOpen(false)
setNotEnoughMoneyAmount(0)
}} sx={{ p: 0 }}>
<CrossIcon /> <CrossIcon />
</IconButton> </IconButton>
</Box> </Box>

@ -28,6 +28,7 @@ import {
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";
import {setNotEnoughMoneyAmount} from "@stores/cart"
interface Props { interface Props {
isLoggedIn: boolean; isLoggedIn: boolean;
@ -47,6 +48,7 @@ export default function NavbarFull({ isLoggedIn }: Props) {
clearUserData(); clearUserData();
clearCustomTariffs(); clearCustomTariffs();
clearTickets(); clearTickets();
setNotEnoughMoneyAmount(0)
navigate("/"); navigate("/");
const [_, logoutError] = await logout(); const [_, logoutError] = await logout();

@ -17,6 +17,7 @@ import { logout } from "@root/api/auth";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
import { clearCustomTariffs } from "@root/stores/customTariffs"; import { clearCustomTariffs } from "@root/stores/customTariffs";
import { clearTickets } from "@root/stores/tickets"; import { clearTickets } from "@root/stores/tickets";
import {setNotEnoughMoneyAmount} from "@stores/cart"
type MenuItem = { type MenuItem = {
name: string; name: string;
@ -69,6 +70,7 @@ export default function DialogMenu({ handleClose }: DialogMenuProps) {
clearUserData(); clearUserData();
clearCustomTariffs(); clearCustomTariffs();
clearTickets(); clearTickets();
setNotEnoughMoneyAmount(0)
navigate("/"); navigate("/");
const [_, logoutError] = await logout(); const [_, logoutError] = await logout();

@ -17,6 +17,7 @@ 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";
import {setNotEnoughMoneyAmount} from "@stores/cart"
interface Props { interface Props {
children: ReactNode; children: ReactNode;
@ -33,6 +34,7 @@ export default function NavbarFull({ children }: Props) {
clearUserData(); clearUserData();
clearCustomTariffs(); clearCustomTariffs();
clearTickets(); clearTickets();
setNotEnoughMoneyAmount(0)
navigate("/"); navigate("/");
const [_, logoutError] = await logout(); const [_, logoutError] = await logout();

@ -18,6 +18,7 @@ import { clearTickets } from "@root/stores/tickets";
import { currencyFormatter } from "@root/utils/currencyFormatter"; import { currencyFormatter } from "@root/utils/currencyFormatter";
import walletIcon from "@root/assets/Icons/wallet_icon.svg"; import walletIcon from "@root/assets/Icons/wallet_icon.svg";
import {setNotEnoughMoneyAmount} from "@stores/cart"
export const NavbarPanel = () => { export const NavbarPanel = () => {
const navigate = useNavigate(); const navigate = useNavigate();
@ -31,6 +32,7 @@ export const NavbarPanel = () => {
clearUserData(); clearUserData();
clearCustomTariffs(); clearCustomTariffs();
clearTickets(); clearTickets();
setNotEnoughMoneyAmount(0)
navigate("/"); navigate("/");
const [_, logoutError] = await logout(); const [_, logoutError] = await logout();

@ -55,7 +55,7 @@ import OutdatedLink from "@root/pages/auth/OutdatedLink";
import { verify } from "./pages/AccountSettings/helper"; import { verify } from "./pages/AccountSettings/helper";
import AfterPay from "./pages/AfterPay"; import AfterPay from "./pages/AfterPay";
import { PageNotFound } from "./pages/PageNotFound"; import { PageNotFound } from "./pages/PageNotFound";
import { CheckFastlink } from "./components/CheckFastlink"; import {setNotEnoughMoneyAmount} from "@stores/cart"
pdfjs.GlobalWorkerOptions.workerSrc = new URL( pdfjs.GlobalWorkerOptions.workerSrc = new URL(
"pdfjs-dist/build/pdf.worker.min.js", "pdfjs-dist/build/pdf.worker.min.js",
@ -67,8 +67,9 @@ const App = () => {
const location = useLocation(); const location = useLocation();
const userId = useUserStore((state) => state.userId); const userId = useUserStore((state) => state.userId);
const navigate = useNavigate(); const navigate = useNavigate();
console.log(location.pathname === "/cart")
console.log(userId); console.log(userId);
if(location.pathname !== "/cart"){setNotEnoughMoneyAmount(0)}
useUserFetcher({ useUserFetcher({
url: process.env.REACT_APP_DOMAIN + `/user/${userId}`, url: process.env.REACT_APP_DOMAIN + `/user/${userId}`,
userId, userId,
@ -212,7 +213,6 @@ root.render(
<CssBaseline /> <CssBaseline />
<SnackbarProvider /> <SnackbarProvider />
<App /> <App />
<CheckFastlink />
</BrowserRouter> </BrowserRouter>
</ThemeProvider> </ThemeProvider>
// </React.StrictMode> // </React.StrictMode>

@ -20,6 +20,7 @@ import {
import { logout } from "@root/api/auth"; import { logout } from "@root/api/auth";
import { clearCustomTariffs } from "@root/stores/customTariffs"; import { clearCustomTariffs } from "@root/stores/customTariffs";
import { clearTickets } from "@root/stores/tickets"; import { clearTickets } from "@root/stores/tickets";
import {setNotEnoughMoneyAmount} from "@stores/cart"
function refresh(token: string) { function refresh(token: string) {
return axios<never, AxiosResponse<{ accessToken: string }>>( return axios<never, AxiosResponse<{ accessToken: string }>>(
@ -77,7 +78,7 @@ export default function QuizPayment() {
clearUserData(); clearUserData();
clearCustomTariffs(); clearCustomTariffs();
clearTickets(); clearTickets();
setNotEnoughMoneyAmount(0)
await logout(); await logout();
} }