автооткрытие модалки запроса после удачного и неудачного покупки тарифа на создание. хранение инфо об этом

This commit is contained in:
Nastya 2024-08-18 12:24:27 +03:00
parent fbd5783061
commit 5a029c01a9
5 changed files with 59 additions and 12 deletions

@ -40,6 +40,7 @@ import { getTariffs } from "@api/tariff";
import type { Discount } from "@model/discounts"; import type { Discount } from "@model/discounts";
import { Other } from "./pages/Other"; import { Other } from "./pages/Other";
import { ModalRequestCreate } from "./ModalRequestCreate"; import { ModalRequestCreate } from "./ModalRequestCreate";
import { cancelCC, useCC } from "@/stores/cc";
const StepperText: Record<string, string> = { const StepperText: Record<string, string> = {
day: "Тарифы на время", day: "Тарифы на время",
@ -64,6 +65,7 @@ function TariffPage() {
const [selectedItem, setSelectedItem] = useState<TypePages>("day"); const [selectedItem, setSelectedItem] = useState<TypePages>("day");
const { isTestServer } = useDomainDefine(); const { isTestServer } = useDomainDefine();
const [promocodeField, setPromocodeField] = useState<string>(""); const [promocodeField, setPromocodeField] = useState<string>("");
const cc = useCC(store => store.cc)
const getTariffsList = async (): Promise<Tariff[]> => { const getTariffsList = async (): Promise<Tariff[]> => {
const tariffsList: Tariff[] = []; const tariffsList: Tariff[] = [];
@ -116,6 +118,12 @@ function TariffPage() {
get(); get();
}, []); }, []);
useEffect(() => {
if (cc) {
setIsRequestCreate(true)
cancelCC()
}
}, [])
if (!user || !tariffs || !discounts) return <LoadingPage />; if (!user || !tariffs || !discounts) return <LoadingPage />;
const openModalHC = (tariffInfo: any) => setOpenModal(tariffInfo); const openModalHC = (tariffInfo: any) => setOpenModal(tariffInfo);
@ -144,6 +152,7 @@ function TariffPage() {
let cashDif = Number(payError.split(":")[1]); let cashDif = Number(payError.split(":")[1]);
var link = document.createElement("a"); var link = document.createElement("a");
link.href = `https://${isTestServer ? "s" : ""}hub.pena.digital/quizpayment?action=squizpay&dif=${cashDif}&data=${token}&userid=${userId}`; link.href = `https://${isTestServer ? "s" : ""}hub.pena.digital/quizpayment?action=squizpay&dif=${cashDif}&data=${token}&userid=${userId}`;
if (cc) link.href = link.href + "cc=true"//после покупки тарифа и возвращения будем знать что надо открыть модалку
document.body.appendChild(link); document.body.appendChild(link);
link.click(); link.click();
return; return;
@ -161,6 +170,9 @@ function TariffPage() {
Number(data.wallet.cash) / 100, Number(data.wallet.cash) / 100,
); );
//cc - пометка что мы хотим заказать квиз. Если хотели, то открываем модалку
if (cc) setIsRequestCreate(true)
cancelCC()//но в любом случае в конце перехотим
enqueueSnackbar("Тариф успешно приобретён"); enqueueSnackbar("Тариф успешно приобретён");
//Развращаем товары в корзину //Развращаем товары в корзину
@ -213,6 +225,7 @@ function TariffPage() {
setIsRequestCreate(true) setIsRequestCreate(true)
} }
return ( return (
<> <>
<Container <Container
@ -430,6 +443,7 @@ const outCart = (cart: string[]) => {
if (deleteError) { if (deleteError) {
console.error(deleteError); console.error(deleteError);
cancelCC()//мы хотели открыть модалку после покупки тарифа на создание квиза, но не вышло и модалку не откроем
return; return;
} }

@ -24,8 +24,7 @@ export const Other = ({
const theme = useTheme() const theme = useTheme()
const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const isTablet = useMediaQuery(theme.breakpoints.down(1000));
const sendRequestToCreate = userPrivilegies?.quizManual.amount > 0 ? startRequestCreate : undefined const sendRequestToCreate = userPrivilegies?.quizManual.amount > 0 ? startRequestCreate : undefined
console.log("sendRequestToCreate")
console.log(sendRequestToCreate)
switch (selectedItem) { switch (selectedItem) {
case "hide": case "hide":
const filteredBadgeTariffs = tariffs.filter((tariff) => { const filteredBadgeTariffs = tariffs.filter((tariff) => {
@ -79,7 +78,8 @@ console.log(sendRequestToCreate)
user, user,
discounts, discounts,
openModalHC, openModalHC,
sendRequestToCreate sendRequestToCreate,
true
)} )}
</Box> </Box>
default: default:

@ -4,6 +4,7 @@ import NumberIcon from "@icons/NumberIcon";
import { currencyFormatter } from "./currencyFormatter"; import { currencyFormatter } from "./currencyFormatter";
import FreeTariffCard from "./FreeTariffCard"; import FreeTariffCard from "./FreeTariffCard";
import { Typography } from "@mui/material"; import { Typography } from "@mui/material";
import { startCC } from "@/stores/cc";
export const createTariffElements = ( export const createTariffElements = (
filteredTariffs: Tariff[], filteredTariffs: Tariff[],
@ -11,7 +12,8 @@ export const createTariffElements = (
user: any, user: any,
discounts: any, discounts: any,
onclick: any, onclick: any,
sendRequestToCreate?: () => void sendRequestToCreate?: () => void,
cc?: boolean
) => { ) => {
const tariffElements = filteredTariffs const tariffElements = filteredTariffs
.filter((tariff) => tariff.privileges.length > 0) .filter((tariff) => tariff.privileges.length > 0)
@ -45,11 +47,13 @@ export const createTariffElements = (
} }
buttonProps={{ buttonProps={{
text: "Купить", text: "Купить",
onClick: () => onClick: () => {
if (cc) startCC() //пометка что это запрос на создание квиза
onclick({ onclick({
id: tariff._id, id: tariff._id,
price: Math.trunc(priceAfterDiscounts) / 100, price: Math.trunc(priceAfterDiscounts) / 100,
}), })
}
}} }}
sendRequestToCreate={sendRequestToCreate} sendRequestToCreate={sendRequestToCreate}
headerText={tariff.name} headerText={tariff.name}

25
src/stores/cc.ts Normal file

@ -0,0 +1,25 @@
import { create } from "zustand";
import { devtools } from "zustand/middleware";
interface CartStore {
cc: boolean
}
const initialState: CartStore = {
cc: false
}
//Была попытка оплатить корзину. Тут записанна недостающая сумма.
export const useCC = create<CartStore>()(
devtools(
(get, set) => initialState,
{
name: "cc",
enabled: process.env.NODE_ENV === "development",
trace: true,
actionsBlacklist: "rejected",
}
)
);
export const cancelCC = () => useCC.setState({ cc: false });
export const startCC = () => useCC.setState({ cc: true });

@ -3,8 +3,9 @@ import { useUserStore } from "@/stores/user";
import moment from "moment"; import moment from "moment";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
import { useEffect } from "react"; import { useEffect } from "react";
import { useNavigate, useSearchParams } from "react-router-dom"; import { redirect, useNavigate, useSearchParams } from "react-router-dom";
import { calcTimeOfReadyPayCart, cancelPayCartProcess, startPayCartProcess, useNotEnoughMoneyAmount } from "@/stores/notEnoughMoneyAmount"; import { calcTimeOfReadyPayCart, cancelPayCartProcess, startPayCartProcess, useNotEnoughMoneyAmount } from "@/stores/notEnoughMoneyAmount";
import { startCC } from "@/stores/cc";
export const useAfterPay = () => { export const useAfterPay = () => {
const navigate = useNavigate(); const navigate = useNavigate();
@ -15,6 +16,7 @@ export const useAfterPay = () => {
const purpose = searchParams.get("purpose"); const purpose = searchParams.get("purpose");
const paymentUserId = searchParams.get("userid"); const paymentUserId = searchParams.get("userid");
const currentCC = searchParams.get("cc");
useEffect(() => { useEffect(() => {
@ -23,17 +25,19 @@ export const useAfterPay = () => {
if (purpose === "paycart") { if (purpose === "paycart") {
setSearchParams({}, { replace: true }); setSearchParams({}, { replace: true });
if (currentCC) { startCC() }
(async () => { (async () => {
//Проверяем можем ли мы оплатить корзину здесь и сейчас //Проверяем можем ли мы оплатить корзину здесь и сейчас
const [, payCartError] = await cartApi.pay(); const [, payCartError] = await cartApi.pay();
console.log("попытка оплаты не удалась")
if (payCartError) { if (payCartError) {
console.log("попытка оплаты не удалась")
//Не получилось купить корзину. Ставим флаг, что сайт в состоянии ожидания пополнения счёта для оплаты //Не получилось купить корзину. Ставим флаг, что сайт в состоянии ожидания пополнения счёта для оплаты
startPayCartProcess(paymentUserId) startPayCartProcess(paymentUserId)
} else { } else {
enqueueSnackbar("Товары успешно приобретены") enqueueSnackbar("Товары успешно приобретены")
if (currentCC) navigate("tariffs")
cancelPayCartProcess() cancelPayCartProcess()
} }
})() })()