import { Box, Button, Card, CardContent, Chip, CircularProgress, FormControl, Grid, InputLabel, MenuItem, Pagination, Select, SelectChangeEvent, Typography } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { juniorsApi, tasksApi } from '../../api/client'; import { Junior, PaginatedResponse } from '../../types/junior'; import { Task, TaskStatus } from '../../types/task'; const statusColors = { PENDING: 'warning', IN_PROGRESS: 'info', COMPLETED: 'success' } as const; export const TasksList = () => { const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [tasks, setTasks] = useState([]); const [juniors, setJuniors] = useState([]); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const [status, setStatus] = useState('PENDING'); const [selectedJuniorId, setSelectedJuniorId] = useState(''); const navigate = useNavigate(); const fetchJuniors = async () => { try { const response = await juniorsApi.getJuniors(1, 50); const data = response.data as PaginatedResponse; setJuniors(data.data); } catch (err) { console.error('Failed to load juniors:', err); } }; const fetchTasks = async (pageNum: number) => { try { setLoading(true); const response = await tasksApi.getTasks(status, pageNum, 10, selectedJuniorId || undefined); const data = response.data as PaginatedResponse; setTasks(data.data); setTotalPages(data.meta.pageCount); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load tasks'); } finally { setLoading(false); } }; useEffect(() => { fetchJuniors(); }, []); useEffect(() => { fetchTasks(page); }, [page, status, selectedJuniorId]); const handlePageChange = (event: React.ChangeEvent, value: number) => { setPage(value); }; const handleStatusChange = (event: SelectChangeEvent) => { setStatus(event.target.value as TaskStatus); setPage(1); }; const handleJuniorChange = (event: SelectChangeEvent) => { setSelectedJuniorId(event.target.value); setPage(1); }; if (loading && page === 1) { return ( ); } if (error) { return ( {error} ); } return ( Tasks Status Junior {tasks.map((task) => ( {task.title} Due: {new Date(task.dueDate).toLocaleDateString()} {task.description} Reward: ${task.rewardAmount} Assigned to: {task.junior.fullName} ))} {totalPages > 1 && ( )} ); };