import { useEffect, useRef, useState } from 'react'; import { ChevronDown, Columns, FileText, Filter, Grid, HelpCircle, List, Plus, Search, } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { cn } from '../../../lib/utils'; import type { PrdFile, TaskBoardSortField, TaskBoardSortOrder, TaskBoardView } from '../types'; import TaskFiltersPanel from './shared/TaskFiltersPanel'; import TaskQuickSortBar from './shared/TaskQuickSortBar'; type TaskBoardToolbarProps = { hasProject: boolean; hasTaskMasterConfigured: boolean; totalTaskCount: number; filteredTaskCount: number; searchTerm: string; onSearchTermChange: (value: string) => void; viewMode: TaskBoardView; onViewModeChange: (viewMode: TaskBoardView) => void; showFilters: boolean; onToggleFilters: () => void; statusFilter: string; onStatusFilterChange: (status: string) => void; priorityFilter: string; onPriorityFilterChange: (priority: string) => void; sortField: TaskBoardSortField; sortOrder: TaskBoardSortOrder; onSortChange: (field: TaskBoardSortField) => void; onSortConfigChange: (field: TaskBoardSortField, order: TaskBoardSortOrder) => void; statuses: string[]; priorities: string[]; onClearFilters: () => void; existingPrds: PrdFile[]; onCreatePrd: () => void; onOpenPrd: (prd: PrdFile) => void; onOpenHelp: () => void; onOpenCreateTask: () => void; }; export default function TaskBoardToolbar({ hasProject, hasTaskMasterConfigured, totalTaskCount, filteredTaskCount, searchTerm, onSearchTermChange, viewMode, onViewModeChange, showFilters, onToggleFilters, statusFilter, onStatusFilterChange, priorityFilter, onPriorityFilterChange, sortField, sortOrder, onSortChange, onSortConfigChange, statuses, priorities, onClearFilters, existingPrds, onCreatePrd, onOpenPrd, onOpenHelp, onOpenCreateTask, }: TaskBoardToolbarProps) { const { t } = useTranslation('tasks'); const [isPrdDropdownOpen, setIsPrdDropdownOpen] = useState(false); const dropdownRef = useRef(null); useEffect(() => { const handleMouseDown = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsPrdDropdownOpen(false); } }; document.addEventListener('mousedown', handleMouseDown); return () => document.removeEventListener('mousedown', handleMouseDown); }, []); return ( <>
onSearchTermChange(event.target.value)} placeholder={t('search.placeholder')} className="w-full rounded-lg border border-gray-300 bg-white py-2 pl-10 pr-4 text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-white" />
{hasProject && ( <>
{existingPrds.length > 0 ? ( <> {isPrdDropdownOpen && (
{existingPrds.map((prd) => ( ))}
)} ) : ( )}
{(hasTaskMasterConfigured || totalTaskCount > 0) && ( )} )}
); }