'use client'; import Link from 'next/link'; import { useQuery } from '@tanstack/react-query'; import { apiFetch, type Briefing } from '../../lib/api'; import { useSession } from '../../components/session-provider'; import { countByStatus, visibleSections, type Role } from '../../lib/navigation'; export const dynamic = 'force-dynamic'; export default function ExecutiveDashboardPage() { const { activeTenant } = useSession(); const tenantId = activeTenant?.tenantId ?? ''; const role: Role = activeTenant?.role ?? 'member'; const progress = countByStatus(role); const { data: briefing } = useQuery({ queryKey: ['briefing', tenantId], queryFn: () => apiFetch('/v1/briefing/today', { tenantId }), enabled: Boolean(tenantId), }); const readyItems = visibleSections(role).flatMap((section) => section.children .filter((item) => item.status === 'ready' && item.route !== '/dashboard') .map((item) => ({ ...item, section: section.label })), ); const overdueCount = briefing?.overdueTasks.length ?? 0; return (

Bine ai revenit{activeTenant ? `, ${activeTenant.tenantName}` : ''}

Executive Dashboard

Restante

0 ? 'text-signal-danger' : 'text-ink' }`} > {overdueCount}

Companii noi (7z)

{briefing?.weekInReview.newOrganizations ?? 0}

Segmente noi

{briefing?.weekInReview.newSegments ?? 0}

Research nou

{briefing?.weekInReview.newResearchBriefs ?? 0}

{briefing?.aiExplanation && (

Sinteza zilei

{briefing.aiExplanation}

Vezi briefingul complet →
)}

Secțiuni active

{readyItems.map((item) => (

{item.section}

{item.label}

))}

{progress.ready} din {progress.total} pagini sunt active. Restul apar în meniu cu un cerc gol și explică exact ce lipsește pentru fiecare.

); }