81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
|
|
/**
|
||
|
|
* GetStartedView - Main view for the get-started flow
|
||
|
|
*
|
||
|
|
* Supports handoff from eligibility check flow:
|
||
|
|
* - URL params: ?email=xxx&verified=true
|
||
|
|
* - SessionStorage: get-started-email, get-started-verified
|
||
|
|
*/
|
||
|
|
|
||
|
|
"use client";
|
||
|
|
|
||
|
|
import { useState, useCallback, useEffect } from "react";
|
||
|
|
import { useSearchParams } from "next/navigation";
|
||
|
|
import { AuthLayout } from "@/components/templates/AuthLayout";
|
||
|
|
import { GetStartedForm } from "../components";
|
||
|
|
import { useGetStartedStore, type GetStartedStep } from "../stores/get-started.store";
|
||
|
|
|
||
|
|
export function GetStartedView() {
|
||
|
|
const searchParams = useSearchParams();
|
||
|
|
const { updateFormData, goToStep, setAccountStatus, setPrefill, setSessionToken } =
|
||
|
|
useGetStartedStore();
|
||
|
|
const [meta, setMeta] = useState({
|
||
|
|
title: "Get Started",
|
||
|
|
subtitle: "Enter your email to begin",
|
||
|
|
});
|
||
|
|
const [initialized, setInitialized] = useState(false);
|
||
|
|
|
||
|
|
// Check for handoff from eligibility check on mount
|
||
|
|
useEffect(() => {
|
||
|
|
if (initialized) return;
|
||
|
|
|
||
|
|
// Get params from URL or sessionStorage
|
||
|
|
const emailParam = searchParams.get("email");
|
||
|
|
const verifiedParam = searchParams.get("verified");
|
||
|
|
|
||
|
|
const storedEmail = sessionStorage.getItem("get-started-email");
|
||
|
|
const storedVerified = sessionStorage.getItem("get-started-verified");
|
||
|
|
|
||
|
|
// Clear sessionStorage after reading
|
||
|
|
sessionStorage.removeItem("get-started-email");
|
||
|
|
sessionStorage.removeItem("get-started-verified");
|
||
|
|
|
||
|
|
const email = emailParam || storedEmail;
|
||
|
|
const isVerified = verifiedParam === "true" || storedVerified === "true";
|
||
|
|
|
||
|
|
if (email && isVerified) {
|
||
|
|
// User came from eligibility check - they have a verified email and SF Account
|
||
|
|
updateFormData({ email });
|
||
|
|
// The email is verified, but we still need to check account status
|
||
|
|
// SF Account was already created during eligibility check, so status should be sf_unmapped
|
||
|
|
setAccountStatus("sf_unmapped");
|
||
|
|
// Go directly to complete-account step
|
||
|
|
goToStep("complete-account");
|
||
|
|
}
|
||
|
|
|
||
|
|
setInitialized(true);
|
||
|
|
}, [
|
||
|
|
initialized,
|
||
|
|
searchParams,
|
||
|
|
updateFormData,
|
||
|
|
goToStep,
|
||
|
|
setAccountStatus,
|
||
|
|
setPrefill,
|
||
|
|
setSessionToken,
|
||
|
|
]);
|
||
|
|
|
||
|
|
const handleStepChange = useCallback(
|
||
|
|
(_step: GetStartedStep, stepMeta: { title: string; subtitle: string }) => {
|
||
|
|
setMeta(stepMeta);
|
||
|
|
},
|
||
|
|
[]
|
||
|
|
);
|
||
|
|
|
||
|
|
return (
|
||
|
|
<AuthLayout title={meta.title} subtitle={meta.subtitle} wide>
|
||
|
|
<GetStartedForm onStepChange={handleStepChange} />
|
||
|
|
</AuthLayout>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
export default GetStartedView;
|