/** * Page dashboard — affichage conditionnel selon le plan utilisateur. * * Toute logique de permission passe par hasAccess() et canSimulate() * (Règles D et H — jamais de if plan === '...'). */ import { useQueryClient } from '@tanstack/react-query' import { useNavigate } from 'react-router-dom' import { Button } from '@/shared/ui/Button' import { Badge } from '@/shared/ui/Badge' import { hasAccess, canSimulate } from '@/entities/user/lib' import type { Plan } from '@/entities/user/types' import { useAuth } from '@/features/auth/hooks/useAuth' import { usePlan } from '../hooks/usePlan' import { PaywallBanner } from '../components/PaywallBanner' import { PLAN_QUERY_KEY } from '../hooks/usePlan' import { MonProfilPreparation } from '../components/MonProfilPreparation' const PLAN_LABELS: Record = { free: 'Plan Découverte', standard: 'Plan Standard', premium: 'Plan Premium', } function getDisplayName( user: { user_metadata?: { full_name?: string }; email?: string } | null, ): string { const fullName = user?.user_metadata?.full_name if (fullName) return fullName.split(' ')[0] const email = user?.email if (email) return email.split('@')[0] return 'vous' } function DashboardSkeleton() { return (
) } export function DashboardPage() { const { user } = useAuth() const { data, isLoading, isError } = usePlan() const queryClient = useQueryClient() const navigate = useNavigate() const displayName = getDisplayName(user) return (
{isLoading && } {isError && (

Impossible de charger votre tableau de bord. Réessayez dans quelques instants.

)} {data && (
{/* Salutation */}

Bonjour, {displayName}

{PLAN_LABELS[data.plan]}
{/* Bannière upgrade — plan Free uniquement */} {!hasAccess(data.plan, 'dashboard') && } {/* Métriques */}

Simulations restantes

{data.simulations_remaining === null ? 'Illimitées' : data.simulations_remaining}

Niveau NCLC estimé

{/* CTA Nouvelle simulation */} {/* Dernières simulations */}

Dernières simulations

Aucune simulation pour l'instant.

{/* Mon profil de préparation — Premium uniquement (gate via hasAccess) */}
)}
) }