'use client'; import type { ProfileDto } from '@impuestos/contracts'; import { formatGsAmount } from '@impuestos/i18n'; import { deadlineDay } from '@impuestos/rules'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Switch } from '@/components/ui/switch'; import { useT } from '@/i18n/t'; import { api } from '@/lib/api'; export function IdentitySection({ profile }: { profile: ProfileDto }) { const t = useT(); const queryClient = useQueryClient(); const [fullName, setFullName] = useState(profile.fullName); const [income, setIncome] = useState( profile.irpGrossEstimate === null ? '' : String(profile.irpGrossEstimate), ); const [autoConfirmDays, setAutoConfirmDays] = useState(String(profile.autoConfirmDays)); const [obligations, setObligations] = useState(profile.obligations); const save = useMutation({ mutationFn: () => api.putProfile({ ...profile, fullName: fullName.trim(), obligations, irpGrossEstimate: income === '' ? null : Number(income), autoConfirmDays: Number(autoConfirmDays || '0'), }), onSuccess: () => queryClient.invalidateQueries({ queryKey: ['me'] }), }); function toggle(code: 'iva_120' | 'irp_515') { const existing = obligations.find((obligation) => obligation.code === code); if (existing) { setObligations( obligations.map((obligation) => obligation.code === code ? { ...obligation, active: !obligation.active } : obligation, ), ); return; } setObligations([ ...obligations, { code, active: true, since: new Date().toISOString().slice(0, 10) }, ]); } const active = (code: 'iva_120' | 'irp_515') => obligations.some((obligation) => obligation.code === code && obligation.active); return (

{t('profile.identity')}

setFullName(event.target.value)} />
{/* The document is read only: it decides real filing dates, so changing it is a support conversation rather than a text field. */}

{t('vto.explainer', { digit: profile.deadlineDigit, day: deadlineDay(profile.deadlineDigit), })}

{t('profile.obligations')}
{active('irp_515') ? (
setIncome(event.target.value.replace(/\D/g, ''))} />
) : null}
setAutoConfirmDays(event.target.value.replace(/\D/g, ''))} />

{t('profile.autoConfirm.help')}

{save.isSuccess ? {t('profile.saved')} : null} {save.isError ? ( {t('common.error.generic')} ) : null}
); }