import { useState } from 'react'; import { SEED_TASKS, USERS } from './data'; import type { Task, User, Status } from './data'; import { LoginPage } from './Login'; import { Sidebar } from './Sidebar'; import { TopNavbar, BottomToggleBar } from './NavBars'; import { CalendarView, QuickAddPanel } from './Calendar'; import { KanbanBoard } from './Kanban'; import { ListView } from './ListView'; import { TaskDrawer, AddTaskModal } from './TaskDrawer'; import { DashboardPage } from './Dashboard'; import { TeamTasksPage, MembersPage } from './Pages'; import { ReportsPage } from './Reports'; import './index.css'; const PAGE_TITLES: Record = { dashboard: 'Dashboard', calendar: 'Calendar', kanban: 'Kanban Board', mytasks: 'My Tasks', teamtasks: 'Team Tasks', reports: 'Reports', members: 'Members', list: 'List View', }; const VIEW_PAGES = ['calendar', 'kanban', 'list']; export default function App() { const now = new Date(); const [currentUser, setCurrentUser] = useState(null); const [tasks, setTasks] = useState(SEED_TASKS); const [managedUsers, setManagedUsers] = useState(() => USERS.map(u => ({ ...u, active: true, joinedDate: '2025-12-01' })) ); const [activePage, setActivePage] = useState('calendar'); const [activeView, setActiveView] = useState('calendar'); const [activeTask, setActiveTask] = useState(null); const [showAddModal, setShowAddModal] = useState(false); const [addModalDefaults, setAddModalDefaults] = useState<{ date?: string; status?: Status }>({}); const [calMonth, setCalMonth] = useState({ year: now.getFullYear(), month: now.getMonth() }); const [calView, setCalView] = useState('month'); const [filterUser, setFilterUser] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const [quickAddDay, setQuickAddDay] = useState<{ date: string; rect: { top: number; left: number } } | null>(null); if (!currentUser) return { setCurrentUser(u); setActivePage('calendar'); setActiveView('calendar'); }} />; const handleNavigate = (page: string) => { setActivePage(page); if (VIEW_PAGES.includes(page)) setActiveView(page); }; const handleViewChange = (view: string) => { setActiveView(view); if (VIEW_PAGES.includes(view)) setActivePage(view); }; const handleTaskClick = (t: Task) => setActiveTask(t); const handleDayClick = (date: string, el: HTMLElement) => { const rect = el.getBoundingClientRect(); setQuickAddDay({ date, rect: { top: rect.bottom, left: rect.left } }); }; const handleQuickAdd = (partial: Partial) => { const task: Task = { id: `t${Date.now()}`, title: partial.title || '', description: partial.description || '', status: (partial.status || 'todo') as Status, priority: partial.priority || 'medium', assignee: partial.assignee || 'u1', reporter: currentUser.id, dueDate: partial.dueDate || '', tags: partial.tags || [], subtasks: partial.subtasks || [], comments: partial.comments || [], activity: [{ id: `a${Date.now()}`, text: '📝 Task created', timestamp: new Date().toISOString() }], }; setTasks(prev => [...prev, task]); setQuickAddDay(null); }; const handleAddTask = (task: Task) => setTasks(prev => [...prev, { ...task, reporter: currentUser.id }]); const handleUpdateTask = (updated: Task) => { setTasks(prev => prev.map(t => t.id === updated.id ? updated : t)); setActiveTask(updated); }; const handleNewTask = () => { setAddModalDefaults({}); setShowAddModal(true); }; const handleKanbanAdd = (status: Status) => { setAddModalDefaults({ status }); setShowAddModal(true); }; const handleToggleDone = (taskId: string) => { setTasks(prev => prev.map(t => t.id === taskId ? { ...t, status: t.status === 'done' ? 'todo' : 'done' as Status } : t)); }; const displayPage = VIEW_PAGES.includes(activePage) ? activeView : activePage; const filteredMyTasks = tasks.filter(t => t.assignee === currentUser.id); const pageTitle = PAGE_TITLES[displayPage] || 'Calendar'; return (
{ setCurrentUser(null); setActivePage('calendar'); setActiveView('calendar'); }} />
{displayPage === 'calendar' && ( )} {displayPage === 'kanban' && ( )} {displayPage === 'list' && ( )} {displayPage === 'dashboard' && } {displayPage === 'mytasks' && ( )} {displayPage === 'teamtasks' && } {displayPage === 'reports' && } {displayPage === 'members' && }
{VIEW_PAGES.includes(activePage) && ( )} {activeTask && setActiveTask(null)} onUpdate={handleUpdateTask} />} {showAddModal && setShowAddModal(false)} onAdd={handleAddTask} defaultDate={addModalDefaults.date} defaultStatus={addModalDefaults.status} />} {quickAddDay && (
setQuickAddDay(null)}>
e.stopPropagation()}> { setAddModalDefaults({ date: quickAddDay.date }); setShowAddModal(true); setQuickAddDay(null); }} onClose={() => setQuickAddDay(null)} />
)}
); }