import React from 'react'; import { Task } from '../types'; import { Calendar, ChevronLeft, ChevronRight, Filter } from 'lucide-react'; interface GanttChartProps { tasks: Task[]; } const GanttChart: React.FC = ({ tasks }) => { const [viewMode, setViewMode] = React.useState<'WEEK' | 'MONTH'>('MONTH'); // Simple Gantt Logic const sortedTasks = [...tasks].sort((a, b) => new Date(a.startDate || a.createdAt).getTime() - new Date(b.startDate || b.createdAt).getTime()); const getTaskDuration = (task: Task) => { const start = new Date(task.startDate || task.createdAt); const end = new Date(task.dueDate); const diffTime = Math.abs(end.getTime() - start.getTime()); return Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1; }; return (

Project Timeline

Visual schedule of all construction activities

{/* Timeline Header */}
Activity / Task
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
{/* Task Bars */}
{sortedTasks.map((task, idx) => { const start = new Date(task.startDate || task.createdAt); const startMonth = start.getMonth(); const duration = getTaskDuration(task); const widthPercent = Math.min(100, (duration / 365) * 100 * 12); // Rough estimation const leftPercent = (startMonth / 12) * 100; return (

{task.title}

{new Date(task.startDate || task.createdAt).toLocaleDateString()} - {new Date(task.dueDate).toLocaleDateString()}
{task.status}
); })}
Completed
In Progress
Pending
Blocked
); }; export default GanttChart;