import { useState, useEffect } from 'react'; import { Calendar, List, Plus, CheckCircle2, Clock, RefreshCw, User, MapPin, Filter, MoreHorizontal, Search, AlertCircle, LayoutGrid, CheckSquare, ClipboardList, ArrowRight } from 'lucide-react'; import { tasksApi, Task } from '../lib/tasksApi'; import { useAuth } from '../context/AuthContext'; import { useToast } from '../context/ToastContext'; import CreateTaskModal from '../components/tasks/CreateTaskModal'; import CompleteTaskModal from '../components/tasks/CompleteTaskModal'; import { Card } from '../components/ui/card'; import { cn } from '../lib/utils'; import { motion, AnimatePresence } from 'framer-motion'; export default function TasksPage() { const { user } = useAuth(); const { addToast } = useToast(); const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [isCreateOpen, setIsCreateOpen] = useState(false); const [completionTask, setCompletionTask] = useState(null); const [filter, setFilter] = useState<'all' | 'mine'>('mine'); const [searchQuery, setSearchQuery] = useState(''); useEffect(() => { loadTasks(); }, [filter]); const loadTasks = async () => { setLoading(true); try { const data = await tasksApi.getAll({ assigneeId: filter === 'mine' ? user?.id : undefined }); setTasks(data); } catch (e) { console.error(e); addToast('Failed to load tasks', 'error'); } finally { setLoading(false); } }; const handleTaskCompleted = () => { loadTasks(); setCompletionTask(null); addToast('Task finalized and logged', 'success'); }; // Filter tasks by search const filteredTasks = tasks.filter(t => t.title.toLowerCase().includes(searchQuery.toLowerCase()) || t.room?.name.toLowerCase().includes(searchQuery.toLowerCase()) ); const pendingTasks = filteredTasks.filter(t => t.status !== 'COMPLETED'); const completedTasks = filteredTasks.filter(t => t.status === 'COMPLETED'); return (
{/* Page Header */}

Operational Tasks

{pendingTasks.length} Pending
Real-time workflow management
setSearchQuery(e.target.value)} className="pl-10 pr-4 py-2 bg-[var(--color-bg-tertiary)] border border-[var(--color-border-subtle)] rounded-lg text-sm transition-all focus:border-emerald-500/50 focus:ring-1 focus:ring-emerald-500/50 w-64" />
{/* Metrics Row */}
t.assigneeId === user?.id).length} icon={User} color="text-[var(--color-primary)]" /> t.status !== 'COMPLETED').length} icon={Clock} color="text-[var(--color-warning)]" />
{/* Left Column: Filters & View Switching */}

Focus

setFilter('mine')} label="My Work" icon={CheckSquare} count={tasks.filter(t => t.assigneeId === user?.id).length} /> setFilter('all')} label="Facility All" icon={LayoutGrid} count={tasks.length} />

Category

{ }} label="Irrigation" icon={Droplets} /> { }} label="IPM & Health" icon={Bug} /> { }} label="Compliance" icon={ClipboardList} />

System Note:

Urgent maintenance scheduled for Flower A irrigation pump. All related tasks prioritized.

{/* Right Column: Task Board */}
{/* Active Tasks Section */}

Active Board

{pendingTasks.length} ITEMS
{pendingTasks.map((task, idx) => ( setCompletionTask(task)} /> ))} {pendingTasks.length === 0 && (

All Actions Complete

)}
{/* Recently Completed Section */} {completedTasks.length > 0 && (

Archive / Verification

{completedTasks.slice(0, 3).map(task => (

{task.title}

{task.room?.name} • Finalized by {task.assignee?.name}

))}
)}
setIsCreateOpen(false)} onSuccess={() => loadTasks()} /> {completionTask && ( setCompletionTask(null)} onSuccess={handleTaskCompleted} /> )}
); } function MetricCard({ label, value, icon: Icon, color }: any) { return (

{label}

{value}
); } function SidebarFilterButton({ active, label, icon: Icon, count, onClick }: any) { return ( ); } function TaskRow({ task, onComplete }: any) { return (

{task.title}

{task.priority === 'URGENT' && ( Priority: High )}
{task.room?.name || 'GEN-01'}
{task.assignee?.name || 'Unassigned'}
Due {new Date(task.dueDate).toLocaleDateString()}
); } function Droplets({ size, className }: any) { return ; } function Bug({ size, className }: any) { return ; }