'use client'; import { useState, useTransition } from 'react'; import TemplatePicker, { type Template } from '@/app/admin/components/TemplatePicker'; import { countDays } from '@/lib/schedule/vacations'; import { createVacation, deleteVacation, translateVacationLabel } from './actions'; export type VacationRow = { id: string; startDate: string; endDate: string; labelFr: string; labelEn: string | null; isCurrent: boolean; }; export default function VacationManager({ canEdit, periods, templates, }: { canEdit: boolean; periods: VacationRow[]; templates: Template[]; }) { const [startDate, setStartDate] = useState(''); const [endDate, setEndDate] = useState(''); const [labelFr, setLabelFr] = useState(''); const [pending, startTransition] = useTransition(); const [message, setMessage] = useState<{ kind: 'ok' | 'error'; text: string } | null>(null); function run(work: () => Promise<{ ok: true } | { ok: false; error: string }>, success: string) { setMessage(null); startTransition(async () => { const result = await work(); if (result.ok) { setMessage({ kind: 'ok', text: success }); setStartDate(''); setEndDate(''); setLabelFr(''); } else { setMessage({ kind: 'error', text: result.error }); } }); } return (
{message.text}
) : null} {canEdit ? ({countDays({ startDate, endDate })} jour {countDays({ startDate, endDate }) > 1 ? 's' : ''} de fermeture.
) : null}Aucune fermeture prévue.
) : (