применение промокода из fastlink

This commit is contained in:
Nastya 2024-03-27 22:27:15 +03:00
parent 9c65e6fc0f
commit e19e234c1c
5 changed files with 2966 additions and 0 deletions

15
reportWebVitals.ts Normal file

@ -0,0 +1,15 @@
import { ReportHandler } from "web-vitals"
const reportWebVitals = (onPerfEntry?: ReportHandler) => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry)
getFID(onPerfEntry)
getFCP(onPerfEntry)
getLCP(onPerfEntry)
getTTFB(onPerfEntry)
})
}
}
export default reportWebVitals

1
setupTests.ts Normal file

@ -0,0 +1 @@
import "@testing-library/jest-dom"

@ -0,0 +1,96 @@
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();
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>
);
}

@ -54,6 +54,7 @@ import OutdatedLink from "@root/pages/auth/OutdatedLink";
import { verify } from "./pages/AccountSettings/helper";
import AfterPay from "./pages/AfterPay";
import { PageNotFound } from "./pages/PageNotFound";
import { CheckFastlink } from "./components/CheckFastlink";
pdfjs.GlobalWorkerOptions.workerSrc = new URL(
"pdfjs-dist/build/pdf.worker.min.js",
@ -206,6 +207,7 @@ root.render(
<CssBaseline />
<SnackbarProvider />
<App />
<CheckFastlink/>
</BrowserRouter>
</ThemeProvider>
// </React.StrictMode>

File diff suppressed because it is too large Load Diff