import { Link } from 'react-router-dom' import { Check, ChevronRight } from 'lucide-react' import { cn } from '@/lib/utils' import type { OnboardingStatus } from '@/api/onboarding' import { useTrialBanner } from '@/hooks/useTrialBanner' import type { TrialBannerStage } from '@/hooks/useTrialBanner' import { useOnboardingStatus } from '@/hooks/useOnboardingStatus' /** * Unified setup checklist — single list (no SOLO/TEAM bifurcation). * * Replaces the old `OnboardingChecklist` widget. Items match `NextStepCard`'s * priority order. The "Pick a plan" item is gated on the trial stage. * * Surfaced behind a "Show all setup steps" toggle on the dashboard so the * always-visible surface is just the single next-step card. */ interface ChecklistItem { key: string label: string path: string done: boolean } const PLAN_GATE_STAGES: ReadonlyArray = [ 'warning', 'urgent', 'expired', ] // eslint-disable-next-line react-refresh/only-export-components -- pure helper exported for focused unit tests export function buildChecklistItems( status: OnboardingStatus, trialStage: TrialBannerStage | null, ): ChecklistItem[] { const items: ChecklistItem[] = [ { key: 'verify_email', label: 'Verify your email', path: '/verify-email', done: status.email_verified, }, { key: 'shop_setup', label: 'Set up your shop', path: '/welcome/step-1', done: status.shop_setup_done, }, { key: 'ran_session', label: 'Run your first FlowPilot session', path: '/', done: status.ran_session, }, { key: 'connected_psa', label: 'Connect your PSA', path: '/account/integrations', done: status.connected_psa, }, { key: 'invited_teammate', label: 'Invite a teammate', path: '/account', done: status.invited_teammate, }, ] if (trialStage && PLAN_GATE_STAGES.includes(trialStage)) { items.push({ key: 'pick_plan', label: 'Pick a plan', path: '/account/billing/select-plan', done: false, }) } return items } export function SetupChecklist() { const status = useOnboardingStatus() const { stage } = useTrialBanner() if (!status || status.dismissed) return null const items = buildChecklistItems(status, stage) const completedCount = items.filter((i) => i.done).length const totalCount = items.length return (

Setup steps · {completedCount} of {totalCount}

) } export default SetupChecklist