103 lines
4.2 KiB
TypeScript
103 lines
4.2 KiB
TypeScript
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])
|
||
|
||
|
||
} |