// components/pages/private/TasksPage/index.jsx import { useEffect } from 'react'; import { Page, Block, List, ListItem, Button, Spinner, Tag } from '@cap-rel/smartcommon'; import { useApi, useStates, useNavigation } from '@cap-rel/smartcommon'; import { FiPlus, FiCheck, FiClock } from 'react-icons/fi'; export const TasksPage = () => { const api = useApi(); const navigate = useNavigation(); const st = useStates({ initialStates: { tasks: [], loading: true, error: null, filter: 'all' // all, todo, done } }); useEffect(() => { loadTasks(); }, [st.get('filter')]); const loadTasks = async () => { st.set('loading', true); try { const params = {}; if (st.get('filter') === 'todo') params.status = 1; if (st.get('filter') === 'done') params.status = 2; const data = await api.private.get('tasks', { searchParams: params }).json(); st.set('tasks', data.tasks); } catch (err) { st.set('error', err.message); } finally { st.set('loading', false); } }; const toggleStatus = async (task) => { const newStatus = task.status === 'done' ? 1 : 2; try { await api.private.put(`tasks/${task.id}`, { json: { status: newStatus } }); loadTasks(); } catch (err) { alert('Erreur: ' + err.message); } }; const getStatusColor = (status) => { switch (status) { case 'done': return 'green'; case 'todo': return 'blue'; default: return 'gray'; } }; if (st.get('loading') && st.get('tasks').length === 0) { return ; } return ( {/* Filtres */}
{['all', 'todo', 'done'].map(f => ( ))}
{/* Liste */} {st.get('tasks').length === 0 ? (

Aucune tâche

) : ( {st.get('tasks').map(task => ( navigate(`/tasks/${task.id}`)} icon={task.status === 'done' ? FiCheck : FiClock} chevron actions={ {task.status} } /> ))} )}
{/* Bouton ajout */}
); };