'use client'; import { useMemo } from 'react'; import { useTranslations } from 'next-intl'; import { Link } from '@/i18n/navigation'; import { useAuth } from '@/lib/hooks/useAuth'; import { formatApiErrorMessage } from '@/components/shared/formatApiError'; import { TodayDashboard } from '@/components/today/TodayDashboard'; 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 = useMemo( () => Boolean(currentOrganization?.isOwner) && !currentOrganization?.plan, [currentOrganization], ); 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} } >
); }