front-hub/src/pages/Payment/useAutoPay.ts
Nastya 291d059654
Some checks failed
Deploy / CreateImage (push) Failing after 1m0s
Deploy / DeployService (push) Has been skipped
новая система покупок
2025-07-20 13:39:47 +03:00

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