import { useMemo, useState } from 'react'; import { TaskRow } from './TaskRow'; import type { TeamTaskWithKanban } from '@shared/types'; interface TaskListProps { tasks: TeamTaskWithKanban[]; } export const TaskList = ({ tasks }: TaskListProps): React.JSX.Element => { const [ownerFilter, setOwnerFilter] = useState('all'); const [statusFilter, setStatusFilter] = useState('all'); const ownerOptions = useMemo(() => { return Array.from( new Set(tasks.map((task) => task.owner).filter((owner): owner is string => !!owner)) ); }, [tasks]); const filteredTasks = useMemo(() => { return tasks.filter((task) => { const ownerOk = ownerFilter === 'all' || task.owner === ownerFilter; const statusOk = statusFilter === 'all' || task.status === statusFilter; return ownerOk && statusOk; }); }, [tasks, ownerFilter, statusFilter]); const showStatusFilter = useMemo(() => { const counts = new Map(); for (const task of tasks) { counts.set(task.status, (counts.get(task.status) ?? 0) + 1); } return Array.from(counts.values()).some((count) => count > 10); }, [tasks]); if (tasks.length === 0) { return (
No tasks in this team
); } return (
{showStatusFilter ? ( ) : null} {ownerFilter !== 'all' || statusFilter !== 'all' ? (

Showing {filteredTasks.length} of {tasks.length}

) : null}
{filteredTasks.map((task) => ( ))}
ID Subject Owner Status Blocked By Blocks
); };