import { ReactNode, useState } from 'react' import { formatDateForDisplay } from '@/utils/dates' import { useTranslation } from '@/i18n' import type { DayOverride, DayOverrideCreateRequest } from '@/types' export interface DayOverridesInputProps { overrides: DayOverride[] isLoading?: boolean onAdd: (req: DayOverrideCreateRequest) => Promise onRemove: (id: string) => Promise workspaceId: string } export function DayOverridesInput({ overrides, isLoading = false, onAdd, onRemove, workspaceId, }: DayOverridesInputProps): ReactNode { const { t, locale } = useTranslation() const [date, setDate] = useState('') const [isWorkingDay, setIsWorkingDay] = useState(true) const [note, setNote] = useState('') const [isSubmitting, setIsSubmitting] = useState(false) const handleAddOverride = async (e: React.FormEvent) => { e.preventDefault() if (!date) return try { setIsSubmitting(true) await onAdd({ workspaceId, date, isWorkingDay, note: note || null, }) setDate('') setIsWorkingDay(true) setNote('') } finally { setIsSubmitting(false) } } const handleRemove = async (id: string) => { try { await onRemove(id) } catch { // Error handling is done in parent } } const sortedOverrides = [...overrides].sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) return (
{overrides.length === 0 ? (

{t('dayOverridesInput.empty')}

) : (
    {sortedOverrides.map((override) => (
  • {formatDateForDisplay(override.date, locale)}
    {override.isWorkingDay ? t('dayOverridesInput.workingStatus') : t('dayOverridesInput.offStatus')}
    {override.note && (
    {t('dayOverridesInput.noteLabel', { note: override.note })}
    )}
  • ))}
)}

{t('dayOverridesInput.addSectionTitle')}

setDate(e.target.value)} required disabled={isSubmitting || isLoading} data-testid="override-date-input" className="field__control" />
{t('dayOverridesInput.statusLegend')}
setNote(e.target.value)} maxLength={280} disabled={isSubmitting || isLoading} data-testid="override-note-input" className="field__control" /> {t('dayOverridesInput.charCount', { count: note.length })}
) }