'use client'; import type { DeadlineDto } from '@impuestos/contracts'; import { formatDateLong, type Locale } from '@impuestos/i18n'; import { deadlineDay } from '@impuestos/rules'; import { useQuery } from '@tanstack/react-query'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { useT } from '@/i18n/t'; import { api } from '@/lib/api'; import { cn } from '@/lib/utils'; /** Flow E2: a vertical timeline of everything coming, with the day rule explained. */ export function DeadlinesScreen({ locale }: { locale: string }) { const t = useT(); const profile = useQuery({ queryKey: ['me'], queryFn: ({ signal }) => api.getProfile(signal) }); const deadlines = useQuery({ queryKey: ['deadlines'], queryFn: ({ signal }) => api.getUpcomingDeadlines(12, signal), }); return (
{t('vto.explainer', { digit: profile.data.deadlineDigit, day: deadlineDay(profile.data.deadlineDigit), })}
{t('common.error.generic')}
{t('vto.empty')}
{t(`obligation.${deadline.obligation}` as const)}
{deadline.period}
{formatDateLong(locale, deadline.dueDate)}
{days === 0 ? t('vto.today') : days > 0 ? t('vto.daysLeft', { days }) : t('vto.daysLate', { days: Math.abs(days) })}
) : null}