109 lines
6.3 KiB
TypeScript
109 lines
6.3 KiB
TypeScript
import React, { useEffect, useState, useRef } from "react";
|
|
import { useNavigate, useSearchParams } from "react-router-dom";
|
|
import { cancelPayCartProcess, setNotEnoughMoneyAmount, startPayCartProcess } from "@root/stores/allTypesOfPurchases";
|
|
import { useUserStore } from "@root/stores/user";
|
|
import { setAction, setBackWay, setFromDomain, setAdditionalinformation } from "@root/stores/allTypesOfPurchases";
|
|
import { Action, FromDomain } from "@root/model/autoPay";
|
|
|
|
export const useAutoPay = (): [string, React.Dispatch<React.SetStateAction<string>>] => {
|
|
const navigate = useNavigate();
|
|
const [searchParams] = useSearchParams();
|
|
const hasProcessed = useRef(false);
|
|
|
|
const userId = useUserStore(store => store.userId)
|
|
const [paymentValueField, setPaymentValueField] = useState<string>("0");
|
|
|
|
useEffect(() => {
|
|
// Если уже обработали, не выполняем повторно
|
|
if (hasProcessed.current) {
|
|
console.log("useAutoPay - уже обработано, пропускаем");
|
|
return;
|
|
}
|
|
|
|
console.log("useAutoPay - useEffect запущен");
|
|
|
|
// Сначала извлекаем все параметры
|
|
let URLfromDomain = searchParams.get("fromdomain");//домен откуда произошёл запрос на финансовые работы
|
|
let URLaction = searchParams.get("action");//что мы, собсна, хотим: оплатить, пополнить, купить и создать квиз
|
|
let URLuserId = searchParams.get("userid");//тот кто начал всё это действо
|
|
const URLwayBack = searchParams.get("wayback") ?? "";//путь по которому нужно будет пройти после того как закончим манипуляции (без домена)
|
|
let URLmoneyDifferent = Number(searchParams.get("dif"));//сколько нужно деняк (в копейках)
|
|
const URLadditionalinformation = searchParams.get("additionalinformation") ?? "";//дополнительная информация
|
|
|
|
console.log("useAutoPay - извлеченные параметры:");
|
|
console.log("URLfromDomain:", URLfromDomain);
|
|
console.log("URLaction:", URLaction);
|
|
console.log("URLuserId:", URLuserId);
|
|
console.log("URLwayBack:", URLwayBack);
|
|
console.log("URLmoneyDifferent (копейки):", URLmoneyDifferent);
|
|
console.log("URLadditionalinformation:", URLadditionalinformation);
|
|
console.log("userId:", userId);
|
|
|
|
// Если нет URL параметров, но мы уже на странице /payment, не делаем ничего
|
|
if (!URLfromDomain && !URLaction && !URLuserId && URLmoneyDifferent === 0) {
|
|
console.log("useAutoPay - нет URL параметров, но мы уже на /payment, пропускаем");
|
|
hasProcessed.current = true;
|
|
return;
|
|
}
|
|
|
|
//Анализ нужно ли вообще вмешательство этого хука
|
|
const condition1 = URLuserId !== null && URLuserId && URLuserId === userId;
|
|
const condition2 = URLfromDomain === "quiz" || URLfromDomain === "squiz" || URLfromDomain === "hub" || URLfromDomain === "shub" || URLfromDomain === "localhost:3000";
|
|
const condition3 = URLaction === "topupwallet" || URLaction === "createquizcc" || URLaction === "buy";
|
|
const condition4 = !Number.isNaN(URLmoneyDifferent);
|
|
|
|
console.log("useAutoPay - проверка условий:");
|
|
console.log("condition1 (userId совпадает):", condition1);
|
|
console.log("condition2 (fromDomain валидный):", condition2);
|
|
console.log("condition3 (action валидный):", condition3);
|
|
console.log("condition4 (moneyDifferent валидный):", condition4);
|
|
|
|
if (condition1 && condition2 && condition3 && condition4) {
|
|
console.log("useAutoPay - условия выполнены, устанавливаем значения");
|
|
|
|
// Ставим флаг, что сайт в состоянии ожидания пополнения счёта для оплаты
|
|
startPayCartProcess(URLuserId);
|
|
|
|
console.log("useAutoPay - устанавливаем fromDomain:", URLfromDomain);
|
|
setFromDomain(URLfromDomain as FromDomain);
|
|
|
|
const processedBackWay = URLwayBack.startsWith('/') ? URLwayBack.slice(1) : URLwayBack;
|
|
console.log("useAutoPay - устанавливаем backWay:", processedBackWay);
|
|
setBackWay(processedBackWay);
|
|
|
|
console.log("useAutoPay - устанавливаем action:", URLaction);
|
|
setAction(URLaction as Action);
|
|
|
|
console.log("useAutoPay - устанавливаем additionalinformation:", URLadditionalinformation);
|
|
setAdditionalinformation(URLadditionalinformation);
|
|
|
|
// URLmoneyDifferent в копейках, конвертируем в рубли для отображения
|
|
const rubles = URLmoneyDifferent / 100;
|
|
setPaymentValueField(rubles.toString());
|
|
setNotEnoughMoneyAmount(URLmoneyDifferent);
|
|
|
|
console.log("useAutoPay - установлено paymentValueField (рубли):", rubles.toString());
|
|
console.log("useAutoPay - установлено backWay:", processedBackWay);
|
|
console.log("useAutoPay - установлено additionalinformation:", URLadditionalinformation);
|
|
|
|
// Только после установки всех значений делаем навигацию
|
|
navigate("/payment", { replace: true });
|
|
} else {
|
|
console.log("useAutoPay - условия не выполнены, отменяем процесс");
|
|
console.log("Причины:");
|
|
if (!condition1) console.log("- userId не совпадает");
|
|
if (!condition2) console.log("- fromDomain не валидный:", URLfromDomain);
|
|
if (!condition3) console.log("- action не валидный:", URLaction);
|
|
if (!condition4) console.log("- moneyDifferent не валидный:", URLmoneyDifferent);
|
|
cancelPayCartProcess();
|
|
}
|
|
|
|
// Отмечаем, что обработали
|
|
hasProcessed.current = true;
|
|
|
|
// Убираем cleanup функцию, так как она вызывается слишком рано
|
|
// Cleanup будет в Payment компоненте при размонтировании
|
|
}, [searchParams, userId, navigate])
|
|
|
|
return [paymentValueField, setPaymentValueField];
|
|
} |