import React, { useCallback, useEffect, useState } from 'react'; import { useAuth } from '../../context/AuthContext'; import { isAdmin as checkIsAdmin } from '../../utils/roleUtils'; import { taskAPI } from '../../services/api'; import Loader from '../common/Loader'; import EmptyState from '../common/EmptyState'; import { formatDateTime, safeArray } from '../../utils/formatters'; const TaskList = ({ refreshKey = 0 }) => { const { user } = useAuth(); const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [updating, setUpdating] = useState(null); const loadTasks = useCallback(async () => { try { setLoading(true); setError(''); const response = checkIsAdmin(user) ? await taskAPI.getAllTasks() : await taskAPI.getUserTasks(); setTasks(safeArray(response?.data)); } catch (err) { const message = err?.response?.data?.message ?? 'We were unable to load your tasks.'; setError(message); setTasks([]); } finally { setLoading(false); } }, [user?.role]); useEffect(() => { if (user) { loadTasks(); } }, [loadTasks, user, refreshKey]); const handleCompleteTask = async (taskId) => { setUpdating(taskId); setError(''); try { await taskAPI.completeTask(taskId); await loadTasks(); } catch (err) { const message = err?.response?.data?.message ?? 'We could not update the task.'; setError(message); } finally { setUpdating(null); } }; if (loading) { return ; } if (error && !tasks.length) { return ; } if (!tasks.length) { return ; } return (
{error && (
{error}
)} {tasks.map((task) => { const taskId = task?.id ?? task?.taskId; const isComplete = Boolean(task?.completed); return (

{task?.title}

{task?.description}

{task?.dueDate && (
Due {formatDateTime(task?.dueDate)}
)}
); })}
); }; export default TaskList;