'use client'; import { useState } from 'react'; import Link from 'next/link'; import { useParams } from 'next/navigation'; import { X, Sparkles, ChevronRight } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { usePermissions } from '@/hooks/use-permissions'; import { useOnboardingStatus } from '@/hooks/use-onboarding-status'; import { cn } from '@/lib/utils'; const DISMISS_STORAGE_KEY = 'pn-crm.onboarding-banner-dismissed'; function getInitialDismissed(): boolean { if (typeof window === 'undefined') return false; return sessionStorage.getItem(DISMISS_STORAGE_KEY) === '1'; } /** * Topbar banner nudging super_admins to finish onboarding while the * checklist is incomplete. Renders nothing for non-super-admin roles and * disappears for everyone once the checklist hits 100%. * * Dismissible per browser session — flag stored in sessionStorage so it * comes back on next sign-in (we want it visible until they actually * finish, not just clicked-away forever). */ export function OnboardingBanner() { const params = useParams<{ portSlug: string }>(); const portSlug = params?.portSlug ?? ''; const { isSuperAdmin } = usePermissions(); const { data, isLoading } = useOnboardingStatus({ enabled: isSuperAdmin }); const [dismissed, setDismissed] = useState(getInitialDismissed); if (!isSuperAdmin || isLoading || !data) return null; if (data.isComplete) return null; if (dismissed) return null; if (!portSlug) return null; const next = data.nextStep; return (
Setup is {data.percent}% complete. {data.completed} of {data.total} steps done.{' '} {next ? ( <> Next:{' '} {next.label} ) : null}
); }