diff --git a/src/components/funnel/FunnelRuntime.tsx b/src/components/funnel/FunnelRuntime.tsx index 6640939..defad4c 100644 --- a/src/components/funnel/FunnelRuntime.tsx +++ b/src/components/funnel/FunnelRuntime.tsx @@ -285,23 +285,48 @@ export function FunnelRuntime({ funnel, initialScreenId }: FunnelRuntimeProps) { const backTarget: string | undefined = currentScreen.navigation?.onBackScreenId; if (!backTarget) return; + // Флаг для предотвращения множественных срабатываний + let isRedirecting = false; + const pushTrap = () => { try { - window.history.pushState({ __trap: true }, "", window.location.href); + window.history.pushState( + { __trap: true, __screenId: currentScreen.id }, + "", + window.location.href + ); } catch {} }; + // Добавляем trap state в историю pushTrap(); - function isTrapState(state: unknown): state is { __trap?: boolean } { - return typeof state === "object" && state !== null && "__trap" in (state as Record); - } + const handlePopState = () => { + // Проверяем наличие backTarget на момент события + const currentBackTarget = currentScreen.navigation?.onBackScreenId; + if (!currentBackTarget || isRedirecting) return; - const handlePopState = (e: PopStateEvent) => { - if (isTrapState(e.state) && e.state.__trap) { - pushTrap(); - router.replace(`/${funnel.meta.id}/${backTarget}`); - } + isRedirecting = true; + + // Перемещаемся вперед на 1 шаг чтобы отменить переход назад + window.history.go(1); + + // Небольшая задержка для завершения history.go + setTimeout(() => { + try { + // Выполняем редирект на целевой экран + router.replace(`/${funnel.meta.id}/${currentBackTarget}`); + + // Сбрасываем флаг + setTimeout(() => { + isRedirecting = false; + }, 100); + } catch (error) { + // Fallback: если router.replace не сработал, используем нативную навигацию + console.error('Router replace failed, using fallback navigation:', error); + window.location.href = `/${funnel.meta.id}/${currentBackTarget}`; + } + }, 10); }; window.addEventListener("popstate", handlePopState); diff --git a/src/components/funnel/templates/SpecialOffer/SpecialOffer.tsx b/src/components/funnel/templates/SpecialOffer/SpecialOffer.tsx index 5e3fa29..ab5c1aa 100644 --- a/src/components/funnel/templates/SpecialOffer/SpecialOffer.tsx +++ b/src/components/funnel/templates/SpecialOffer/SpecialOffer.tsx @@ -50,7 +50,6 @@ export function SpecialOfferTemplate({ const paywallId = placement?.paywallId || ""; const trialPrice = variant?.trialPrice || 0; const price = variant?.price || 0; - const oldPrice = variant?.price || 0; const oldTrialPeriod = "DAY"; // TODO: from main product const oldTrialInterval = 7; // TODO: from main product const oldTrialPrice = 100; // TODO: from main product