import { useMemo, useState } from 'react'; import { useAppTranslation } from '@features/localization/renderer'; import { TaskRow } from './TaskRow'; import type { TeamTaskWithKanban } from '@shared/types'; interface TaskListProps { tasks: TeamTaskWithKanban[]; } export const TaskList = ({ tasks }: TaskListProps): React.JSX.Element => { const { t } = useAppTranslation('team'); 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 (
{t('tasks.list.empty')}
); } return (
{showStatusFilter ? ( ) : null} {ownerFilter !== 'all' || statusFilter !== 'all' ? (

{t('tasks.list.showing', { shown: filteredTasks.length, total: tasks.length })}

) : null}
{filteredTasks.map((task) => ( ))}
{t('tasks.list.columns.id')} {t('tasks.list.columns.subject')} {t('tasks.list.columns.owner')} {t('tasks.list.columns.status')} {t('tasks.list.columns.blockedBy')} {t('tasks.list.columns.blocks')}
); };