'use client'; import { useMemo } from 'react'; import { useTranslations } from 'next-intl'; import { Link } from '@/i18n/navigation'; import { useAuth } from '@/lib/hooks/useAuth'; import { canAccessAppointmentsSection, canViewTasks, canViewTreatment, } from '@/components/shared/permissions'; import { formatApiErrorMessage } from '@/components/shared/formatApiError'; import { TodayKpiGrid } from '@/components/today/TodayKpiGrid'; import { TodayChartsSection } from '@/components/today/TodayChartsSection'; import { TodayUpcomingAppointments } from '@/components/today/TodayUpcomingAppointments'; import { TodayLoadErrorBanner } from '@/components/today/TodayLoadErrorBanner'; import { TodaySectionErrorFallback } from '@/components/today/TodaySectionErrorFallback'; import { TodayWidgetErrorBoundary } from '@/components/today/TodayWidgetErrorBoundary'; import { useTodaySummary } from '@/lib/hooks/useTodaySummary'; export default function TodayPage() { const t = useTranslations('today'); const { currentOrganization } = useAuth(); const orgId = currentOrganization?.id; const { data, loading, isInitialLoad, error, reload } = useTodaySummary(orgId); const showNoSubscriptionNotice = Boolean(currentOrganization?.isOwner) && !currentOrganization?.plan; const showUpcoming = canAccessAppointmentsSection(currentOrganization); const showCharts = (currentOrganization?.type === 'CLINIC' && canViewTreatment(currentOrganization)) || (currentOrganization?.type === 'LAB' && canViewTasks(currentOrganization)); const actionLayoutClass = useMemo(() => { if (showUpcoming && showCharts) { return 'grid grid-cols-1 xl:grid-cols-2 gap-4 items-start'; } return 'grid grid-cols-1 gap-4'; }, [showUpcoming, showCharts]); const sectionErrorMessage = t('sectionLoadError'); return (

{t('welcomeBack')}

{data?.generatedAt && !isInitialLoad ? (

{t('lastUpdated', { time: new Intl.DateTimeFormat(undefined, { hour: 'numeric', minute: '2-digit', }).format(new Date(data.generatedAt)), })}

) : null}
{showNoSubscriptionNotice && (

{t('noSubscriptionNotice')}{' '} {t('choosePlanLink')} {' '} {t('noSubscriptionCta')}

)} {error ? ( void reload()} isRetrying={loading && Boolean(data)} /> ) : null} } > {(showUpcoming || showCharts) && (!error || data) ? (
{showUpcoming ? ( } > ) : null} {showCharts ? ( } > ) : null}
) : null}
); }