import routes, { compatibilityV2Prefix } from "@/routes"; import { Route, Routes, useNavigate } from "react-router-dom"; import Layout from "./Layout"; import FindHappiness from "@/components/CompatibilityV2/pages/FindHappiness"; import StepperLayout from "./StepperLayout"; import Birthdate from "@/components/CompatibilityV2/pages/Birthdate"; import PalmsInformation from "@/components/CompatibilityV2/pages/PalmsInformation"; import NotFoundPage from "@/components/NotFoundPage"; import WhatAspects from "@/components/CompatibilityV2/pages/WhatAspects"; import RelationshipStatus from "@/components/CompatibilityV2/pages/RelationshipStatus"; import ElementResonates from "@/components/CompatibilityV2/pages/ElementResonates"; import FavoriteColor from "@/components/CompatibilityV2/pages/FavoriteColor"; import HeadOrHeart from "@/components/CompatibilityV2/pages/HeadOrHeart"; import HeadOrHeartResult from "@/components/CompatibilityV2/pages/HeadOrHeartResult"; import RelateFollowing from "@/components/CompatibilityV2/pages/RelateFollowing"; import LetScan from "@/components/CompatibilityV2/pages/LetScan"; import ScanInstruction from "@/components/CompatibilityV2/pages/ScanInstruction"; import Camera from "@/components/CompatibilityV2/pages/Camera"; import ScannedPhoto from "@/components/CompatibilityV2/pages/ScannedPhoto"; import Email from "@/components/CompatibilityV2/pages/Email"; import TrialChoice from "@/components/CompatibilityV2/pages/TrialChoice"; import TrialPayment from "@/components/CompatibilityV2/pages/TrialPayment"; import Payment from "@/components/CompatibilityV2/pages/Payment"; import { useEffect, useMemo } from "react"; import { useDispatch } from "react-redux"; import { actions } from "@/store"; import Gender from "@/components/CompatibilityV2/pages/Gender"; import CheckSubscriptionOutlet from "./CheckSubscriptionOutlet"; import TrialChoiceVideo from "@/components/CompatibilityV2/pages/TrialChoiceVideo"; import LayoutPersonalVideo from "./LayoutPersonalVideo"; import OnboardingPage from "@/components/pages/ABDesign/v1/pages/Onboarding"; import SaveOff from "@/components/CompatibilityV2/pages/SaveOff"; import SecretDiscount from "@/components/CompatibilityV2/pages/SecretDiscount"; import GenderPartner from "@/components/CompatibilityV2/pages/GenderPartner"; import BirthdatePartner from "@/components/CompatibilityV2/pages/BirthdatePartner"; import PalmsInformationPartner from "@/components/CompatibilityV2/pages/PalmsInformationPartner"; import DateEvent from "@/components/CompatibilityV2/pages/DateEvent"; import RomanticGestures from "@/components/CompatibilityV2/pages/RomanticGestures"; import CheckingPhone from "@/components/CompatibilityV2/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/CompatibilityV2/pages/TryApp"; import { useTheme } from "@/hooks/theme/useTheme"; import ScanHand from "@/components/CompatibilityV2/pages/ScanHand"; import { ELocalesPlacement } from "@/locales"; import { useFunnel } from "@/hooks/funnel/useFunnel"; import Review from "@/components/CompatibilityV2/pages/Review"; import { getSystemColorScheme, subscribeToSystemThemeChange, } from "@/utils/Theme"; import CompatibilityTestPage from "@/components/CompatibilityV2/pages/CompatibilityTest"; import RelationshipStatusResult from "@/components/CompatibilityV2/pages/RelationshipStatusResult"; import FearInRelationship from "@/components/CompatibilityV2/pages/FearInRelationship"; import ImportantStep from "@/components/CompatibilityV2/pages/ImportantStep"; import WhoMatter from "@/components/CompatibilityV2/pages/WhoMatter"; import YourPriority from "@/components/CompatibilityV2/pages/YourPriority"; import PersonalizedRelationshipAnalysis from "@/components/CompatibilityV2/pages/PersonalizedRelationshipAnalysis"; const removePrefix = (path: string) => path.replace(compatibilityV2Prefix, ""); function CompatibilityV2Routes() { const navigate = useNavigate(); const dispatch = useDispatch(); const { setTheme } = useTheme(); const { funnelData } = useFunnel({ funnel: ELocalesPlacement.CompatibilityV2, 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.compatibilityV2SkipTrial(); } if (availablePaths.add_consultant) { return routes.client.compatibilityV2AddConsultant(); } if (availablePaths.add_guides) { return routes.client.compatibilityV2AddGuides(); } return `${routes.client.getInformationPartner()}?path=back`; }, [availablePaths]); useEffect(() => { dispatch(actions.compatibilityV2.update({ fromRedesign: true })); }, [dispatch]); function onPaymentError(error?: string | null): void { if (error === "Product not found") { return navigate(routes.client.compatibilityV2TrialChoice()); } } function onPaymentSuccess(): void { setTimeout(() => { return navigate(paymentSuccessNavigatePath); }, 1500); } function onBack(): void { if (!availablePaths.main_secret_discount) return; navigate(routes.client.compatibilityV2SaveOff()); } function onPopState(): void { if (!availablePaths.main_secret_discount) return; if ( document.location.toString() === `${window.location.origin}${routes.client.compatibilityV2Payment()}` || document.location.toString() === `${ window.location.origin }${routes.client.compatibilityV2TrialPayment()}` ) { navigate(routes.client.compatibilityV2SaveOff()); } } function onPaymentErrorDiscount(error?: string | null): void { if (error === "Product not found") { return navigate(routes.client.compatibilityV2SecretDiscount()); } } function onPaymentSuccessDiscount(): void { setTimeout(() => { navigate(paymentSuccessNavigatePath); }, 1500); } useEffect(() => { const systemColorScheme = getSystemColorScheme(); setTheme(systemColorScheme); const unsubscribe = subscribeToSystemThemeChange((theme) => { setTheme(theme); }); return () => { unsubscribe?.(); }; }, [setTheme]); return ( }> }> } /> } /> } /> } > } /> } /> } /> } /> } /> } /> }> } > }> } > } /> } /> } /> } > } /> } /> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } export default CompatibilityV2Routes;