import { cartApi } from "@api/cart"; import { useUserStore } from "@/stores/user"; import { enqueueSnackbar } from "notistack"; import { useEffect } from "react"; import { useNavigate, useSearchParams } from "react-router-dom"; import { calcTimeOfReadyPayCart, cancelPayCartProcess, startPayCartProcess, useNotEnoughMoneyAmount } from "@/stores/notEnoughMoneyAmount"; import { startCC } from "@/stores/cc"; import { setEditQuizId, setCurrentStep } from "@root/quizes/actions"; /* Есть три пути по которому мы ходили из квиза в хаб. Нам нехватило денег при: 1)Покупке обычного тарифа 2)Покупке тарифа-заказ-квиза 3)Покупке тарифа в настройке квиза в вкладке ИИ */ export const useAfterPay = () => { const navigate = useNavigate(); const [searchParams, setSearchParams] = useSearchParams(); const userId = useUserStore(store => store.userId) const userAccount = useUserStore(state => state.userAccount); const userWithWallet = useUserStore((state) => state.customerAccount); //c wallet const siteReadyPayCart = useNotEnoughMoneyAmount(state => state.siteReadyPayCart); let URLaction = searchParams.get("action");//что мы, собсна, хотим: оплатить, пополнить, заказать квиз let URLuserId = searchParams.get("userid");//тот кто начал всё это действо let URLadditionalinformation = searchParams.get("additionalinformation");//его токен useEffect(() => { setSearchParams({}, { replace: true }); if (userId && URLuserId && userId === URLuserId) { if (URLaction === "buy") startPayCartProcess(URLuserId); if (URLaction === "createquizcc") { startCC(); (async () => { //Проверяем можем ли мы оплатить корзину здесь и сейчас const [, payCartError] = await cartApi.pay(); if (payCartError) { //Не получилось купить корзину. Ставим флаг, что сайт в состоянии ожидания пополнения счёта для оплаты startPayCartProcess(URLuserId); } else { navigate("/tariffs"); cancelPayCartProcess(); } })() } //Покупка ИИ тарифа из настройки квиза ИИ вкладки if (URLaction === "buy" && URLadditionalinformation) { const quizId = Number(URLadditionalinformation); if (quizId) { setEditQuizId(Number(quizId)); //Выбираем квиз setCurrentStep(17); // Шаг для персонализации AI // Проверяем wayback параметр для определения куда переходить const wayback = searchParams.get("wayback"); if (wayback === "edit") { // Сначала переходим на /edit, затем на /personalization-ai navigate("/edit"); // Используем setTimeout чтобы дать время для загрузки /edit setTimeout(() => { navigate("/personalization-ai"); }, 100); } else { // Прямой переход на /personalization-ai navigate("/personalization-ai"); } } } } }, []); //Обработка необходимости купить после пополнения useEffect(() => { if (userId !== null && siteReadyPayCart !== null && siteReadyPayCart[userId] !== undefined) { const deadline = siteReadyPayCart[userId]; if (calcTimeOfReadyPayCart(deadline)) { //Время ещё не вышло. У нас стоит флаг покупать корзину если время не вышло. (async () => { const [, payCartError] = await cartApi.pay(); if (!payCartError) { enqueueSnackbar("Товары успешно приобретены"); cancelPayCartProcess(); } })() } } }, [userAccount, userId, siteReadyPayCart, userWithWallet]) }