import routes, { compatibilityV4Prefix } from "@/routes"; import { Route, Routes, useNavigate } from "react-router-dom"; import Layout from "./Layout"; import FindHappiness from "@/components/CompatibilityV4/pages/FindHappiness"; import StepperLayout from "./StepperLayout"; import Birthdate from "@/components/CompatibilityV4/pages/Birthdate"; import PalmsInformation from "@/components/CompatibilityV4/pages/PalmsInformation"; import NotFoundPage from "@/components/NotFoundPage"; import WhatAspects from "@/components/CompatibilityV4/pages/WhatAspects"; import RelationshipStatus from "@/components/CompatibilityV4/pages/RelationshipStatus"; import ElementResonates from "@/components/CompatibilityV4/pages/ElementResonates"; import FavoriteColor from "@/components/CompatibilityV4/pages/FavoriteColor"; import HeadOrHeart from "@/components/CompatibilityV4/pages/HeadOrHeart"; import HeadOrHeartResult from "@/components/CompatibilityV4/pages/HeadOrHeartResult"; import RelateFollowing from "@/components/CompatibilityV4/pages/RelateFollowing"; import LetScan from "@/components/CompatibilityV4/pages/LetScan"; import ScanInstruction from "@/components/CompatibilityV4/pages/ScanInstruction"; import Camera from "@/components/CompatibilityV4/pages/Camera"; import ScannedPhoto from "@/components/CompatibilityV4/pages/ScannedPhoto"; import Email from "@/components/CompatibilityV4/pages/Email"; import TrialChoice from "@/components/CompatibilityV4/pages/TrialChoice"; import TrialPayment from "@/components/CompatibilityV4/pages/TrialPayment"; import Payment from "@/components/CompatibilityV4/pages/Payment"; import { useEffect, useMemo } from "react"; import { useDispatch } from "react-redux"; import { actions } from "@/store"; import Gender from "@/components/CompatibilityV4/pages/Gender"; import CheckSubscriptionOutlet from "./CheckSubscriptionOutlet"; import TrialChoiceVideo from "@/components/CompatibilityV4/pages/TrialChoiceVideo"; import LayoutPersonalVideo from "./LayoutPersonalVideo"; import OnboardingPage from "@/components/pages/ABDesign/v1/pages/Onboarding"; import SaveOff from "@/components/CompatibilityV4/pages/SaveOff"; import SecretDiscount from "@/components/CompatibilityV4/pages/SecretDiscount"; import GenderPartner from "@/components/CompatibilityV4/pages/GenderPartner"; import BirthdatePartner from "@/components/CompatibilityV4/pages/BirthdatePartner"; import PalmsInformationPartner from "@/components/CompatibilityV4/pages/PalmsInformationPartner"; import DateEvent from "@/components/CompatibilityV4/pages/DateEvent"; import RomanticGestures from "@/components/CompatibilityV4/pages/RomanticGestures"; import CheckingPhone from "@/components/CompatibilityV4/pages/CheckingPhone"; import { PrivateOutlet } from "@/components/App"; import AdditionalPurchasesPalmistry from "@/components/palmistry/AdditionalPurchases"; import SkipTrial from "@/components/palmistry/AdditionalPurchases/pages/SkipTrial"; import AddConsultant from "@/components/palmistry/AdditionalPurchases/pages/AddConsultant"; import AddGuides from "@/components/palmistry/AdditionalPurchases/pages/AddGuides"; import PaymentPage from "@/components/Payment/nmi/PaymentPage"; import TryApp from "@/components/CompatibilityV4/pages/TryApp"; import ChoosePlace from "@/components/CompatibilityV4/pages/ChoosePlace"; import CodeInstruction from "@/components/CompatibilityV4/pages/CodeInstruction"; import RelationshipStatusResult from "@/components/CompatibilityV4/pages/RelationshipStatusResult"; import CalculateInAdvance from "@/components/CompatibilityV4/pages/CalculateInAdvance"; import CalculateInAdvanceResult from "@/components/CompatibilityV4/pages/CalculateInAdvanceResult"; import Birthplace from "@/components/CompatibilityV4/pages/Birthplace"; import Birthtime from "@/components/CompatibilityV4/pages/Birthtime"; import YourAnalysis from "@/components/CompatibilityV4/pages/YourAnalysis"; import ResultAnalysis from "@/components/CompatibilityV4/pages/ResultAnalysis"; import ResultAnalysisResult from "@/components/CompatibilityV4/pages/ResultAnalysisResult"; import ReviewPage from "@/components/CompatibilityV4/pages/Review"; import PartnerSimilarity from "@/components/CompatibilityV4/pages/PartnerSimilarity"; import BirthplacePartner from "@/components/CompatibilityV4/pages/BirthplacePartner"; import PartnerAnalysis from "@/components/CompatibilityV4/pages/PartnerAnalysis"; import AlmostThere from "@/components/CompatibilityV4/pages/AlmostThere"; import ComplexRelationshipAspect from "@/components/CompatibilityV4/pages/ComplexRelationshipAspect"; import StressResponse from "@/components/CompatibilityV4/pages/StressResponse"; import StressResponseResult from "@/components/CompatibilityV4/pages/StressResponseResult"; import WhatAddToAnalysis from "@/components/CompatibilityV4/pages/WhatAddToAnalysis"; import Loading from "@/components/CompatibilityV4/pages/Loading"; import PartnerPassword from "@/components/CompatibilityV4/pages/PartnerPassword"; import YourFear from "@/components/CompatibilityV4/pages/YourFear"; import YourInclination from "@/components/CompatibilityV4/pages/YourInclination"; import PotentialPartnerName from "@/components/CompatibilityV4/pages/PotentialPartnerName"; import PotentialPartnerBirthdate from "@/components/CompatibilityV4/pages/PotentialPartnerBirthdate"; import FormerPartnerName from "@/components/CompatibilityV4/pages/FormerPartnerName"; import FormerPartnerBirthdate from "@/components/CompatibilityV4/pages/FormerPartnerBirthdate"; import { useFunnel } from "@/hooks/funnel/useFunnel"; import { ELocalesPlacement } from "@/locales"; const removePrefix = (path: string) => path.replace(compatibilityV4Prefix, ""); function CompatibilityV4Routes() { const navigate = useNavigate(); const dispatch = useDispatch(); const { funnelData } = useFunnel({ funnel: ELocalesPlacement.CompatibilityV4, paymentPlacement: "", }); const availablePaths = useMemo(() => { if (!funnelData) return {}; return { main: "main" in funnelData.payment, main_secret_discount: "main_secret_discount" in funnelData.payment, add_consultant: "add_consultant" in funnelData.payment, add_guides: "add_guides" in funnelData.payment, skip_trial: "skip_trial" in funnelData.payment, }; }, [funnelData]); const paymentSuccessNavigatePath = useMemo(() => { if (availablePaths.skip_trial) { return routes.client.compatibilityV4SkipTrial(); } if (availablePaths.add_consultant) { return routes.client.compatibilityV4AddConsultant(); } if (availablePaths.add_guides) { return routes.client.compatibilityV4AddGuides(); } return `${routes.client.getInformationPartner()}?path=back`; }, [availablePaths]); useEffect(() => { dispatch(actions.compatibilityV4.update({ fromRedesign: true })); }, [dispatch]); function onPaymentError(error?: string | null): void { if (error === "Product not found") { return navigate(routes.client.compatibilityV4TrialChoice()); } } function onPaymentSuccess(): void { setTimeout(() => { return navigate(paymentSuccessNavigatePath); }, 1500); } function onBack(): void { if (!availablePaths.main_secret_discount) return; navigate(routes.client.compatibilityV4SaveOff()); } function onPopState(): void { if (!availablePaths.main_secret_discount) return; if ( document.location.toString() === `${window.location.origin}${routes.client.compatibilityV4Payment()}` || document.location.toString() === `${ window.location.origin }${routes.client.compatibilityV4TrialPayment()}` ) { navigate(routes.client.compatibilityV4SaveOff()); } } function onPaymentErrorDiscount(error?: string | null): void { if (error === "Product not found") { return navigate(routes.client.compatibilityV4SecretDiscount()); } } function onPaymentSuccessDiscount(): void { setTimeout(() => { navigate(paymentSuccessNavigatePath); }, 1500); } return ( }> }> } /> } /> } /> } > } /> } /> } /> } /> }> } > } /> } /> } /> } /> }> } > } /> } > } /> } /> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } export default CompatibilityV4Routes;