// components/pages/private/TaskFormPage/index.jsx import { useEffect } from 'react'; import { useParams } from 'react-router-dom'; import { Page, Block, Form, Input, Textarea, Select, Calendar, Button, Spinner } from '@cap-rel/smartcommon'; import { useApi, useStates, useNavigation, useForm } from '@cap-rel/smartcommon'; import { z } from 'zod'; const schema = z.object({ label: z.string().min(1, 'Titre requis'), description: z.string().optional(), priority: z.number().optional(), date_start: z.string().optional(), date_end: z.string().optional() }); export const TaskFormPage = () => { const { id } = useParams(); const isEdit = !!id; const api = useApi(); const navigate = useNavigation(); const form = useForm({ schema }); const st = useStates({ initialStates: { loading: isEdit, submitting: false } }); useEffect(() => { if (isEdit) { loadTask(); } }, [id]); const loadTask = async () => { try { const data = await api.private.get(`tasks/${id}`).json(); form.reset({ label: data.label, description: data.description || '', priority: data.priority || 0, date_start: data.date_start || '', date_end: data.date_end || '' }); } catch (err) { alert('Erreur: ' + err.message); navigate('/'); } finally { st.set('loading', false); } }; const handleSubmit = async (values) => { st.set('submitting', true); try { if (isEdit) { await api.private.put(`tasks/${id}`, { json: values }); } else { await api.private.post('tasks', { json: values }); } navigate('/'); } catch (err) { alert('Erreur: ' + err.message); } finally { st.set('submitting', false); } }; if (st.get('loading')) { return ; } return (