frontPanel/src/utils/hooks/useAutoPay.ts
Nastya 84f1011de0
Some checks are pending
Deploy / CreateImage (push) Waiting to run
Deploy / DeployService (push) Blocked by required conditions
чистка логов
2025-08-07 01:24:00 +03:00

103 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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])
}