// components/pages/private/TaskDetailPage/index.jsx import { useEffect } from 'react'; import { useParams } from 'react-router-dom'; import { Page, Block, Button, Spinner, Tag, Popup } from '@cap-rel/smartcommon'; import { useApi, useStates, useNavigation } from '@cap-rel/smartcommon'; import { FiEdit, FiTrash2, FiCheck } from 'react-icons/fi'; export const TaskDetailPage = () => { const { id } = useParams(); const api = useApi(); const navigate = useNavigation(); const st = useStates({ initialStates: { task: null, loading: true, error: null, showDeletePopup: false } }); useEffect(() => { loadTask(); }, [id]); const loadTask = async () => { try { const data = await api.private.get(`tasks/${id}`).json(); st.set('task', data); } catch (err) { st.set('error', err.message); } finally { st.set('loading', false); } }; const toggleComplete = async () => { const task = st.get('task'); const newStatus = task.status === 'done' ? 1 : 2; try { await api.private.put(`tasks/${id}`, { json: { status: newStatus } }); loadTask(); } catch (err) { alert('Erreur: ' + err.message); } }; const handleDelete = async () => { try { await api.private.delete(`tasks/${id}`); navigate('/'); } catch (err) { alert('Erreur: ' + err.message); } }; if (st.get('loading')) { return ; } if (st.get('error')) { return ( Erreur: {st.get('error')} ); } const task = st.get('task'); return ( {/* Statut */} {task.status === 'done' ? 'Terminée' : 'À faire'} Ref: {task.ref} {/* Description */} {task.description && ( {task.description} )} {/* Dates */} {task.date_start && ( Début: {task.date_start} )} {task.date_end && ( Fin: {task.date_end} )} {/* Actions */} {task.status === 'done' ? 'Réouvrir' : 'Terminer'} navigate(`/tasks/${id}/edit`)} > Modifier st.set('showDeletePopup', true)} > {/* Popup suppression */} st.set('showDeletePopup', false)} title="Confirmer la suppression" > Supprimer cette tâche ? st.set('showDeletePopup', false)}> Annuler Supprimer ); };
{task.description}
Début: {task.date_start}
Fin: {task.date_end}
Supprimer cette tâche ?