import React, { useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useParams } from "react-router-dom"; import { useSubscription } from "../../hooks/useAuth"; import { formatFigure, frequencyLabel } from "../../utils/appUtils"; import { setSelfTenant } from "../../slices/localVariablesSlice"; import { error } from "pdf-lib"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { CouponDiscount } from "../../pages/Home/HomeSchema"; import SelectedPlanSkeleton from "./SelectedPlaneSkeleton"; const SelectPlan = ({ currentStep, setStepStatus, onNext }) => { const { frequency, planId } = useParams(); const [selectedFrequency, setSelectedFrequency] = useState( parseInt(frequency) ); const dispatch = useDispatch(); const client = useSelector( (store) => store.localVariables.selfTenant.details ); const [selectedPlan, setSelectedPlan] = useState(planId); const [currentPlan, setCurrentPlan] = useState(null); const [failPayment, setFailPayment] = useState(null); const { data: plans, isError, isLoading, error, refetch, isRefetching, } = useSubscription(selectedFrequency); const handleChange = (e) => { setSelectedPlan(e.target.value); }; useEffect(() => { if (!plans || plans.length === 0) return; // Prefer route param if exists, else default to first plan const matchingPlan = plans.find((p) => p.planId === planId) || plans[0]; setSelectedPlan(matchingPlan.id); setCurrentPlan(matchingPlan); // Dispatch correct plan + frequency only once data is ready dispatch( setSelfTenant({ planId: matchingPlan.id, frequency: selectedFrequency, }) ); }, [plans, selectedFrequency, planId, dispatch]); const handleNextStep = () => { if (!selectedPlan) { toast.warning("Please select a plan before continuing."); return; } dispatch( setSelfTenant({ planId: selectedPlan, frequency: selectedFrequency, }) ); setStepStatus((prev) => ({ ...prev, 2: "success" })); onNext(); }; const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(CouponDiscount) }); return (
Select a plan that fits your team’s needs and unlock the features that drive productivity.
{error?.message}
{error?.name} {isRefetching ? ( <> {" "} Retrying... > ) : ( "Try to refetch" )}