diff --git a/backend/app/schemas/project.py b/backend/app/schemas/project.py index d307f8c..2b2f39e 100644 --- a/backend/app/schemas/project.py +++ b/backend/app/schemas/project.py @@ -48,5 +48,3 @@ class TrackedTaskResponse(BaseModel): project_name: str project_id: int parent_task_title: Optional[str] = None - - model_config = ConfigDict(from_attributes=True) diff --git a/frontend/src/components/dashboard/TrackedProjectsWidget.tsx b/frontend/src/components/dashboard/TrackedProjectsWidget.tsx index 533da58..9778ba3 100644 --- a/frontend/src/components/dashboard/TrackedProjectsWidget.tsx +++ b/frontend/src/components/dashboard/TrackedProjectsWidget.tsx @@ -43,6 +43,7 @@ export default function TrackedProjectsWidget() { const { data } = await api.get(`/projects/tracked-tasks?days=${days}`); return data; }, + enabled: !!settings, }); if (!tasks || tasks.length === 0) return null; diff --git a/frontend/src/components/layout/Sidebar.tsx b/frontend/src/components/layout/Sidebar.tsx index ecd8301..9589d67 100644 --- a/frontend/src/components/layout/Sidebar.tsx +++ b/frontend/src/components/layout/Sidebar.tsx @@ -50,6 +50,8 @@ export default function Sidebar({ collapsed, onToggle, mobileOpen, onMobileClose const { data } = await api.get('/projects?tracked=true'); return data; }, + staleTime: 60_000, + select: (data) => data.map(({ id, name }) => ({ id, name })), }); const handleLogout = async () => { diff --git a/frontend/src/components/projects/ProjectCard.tsx b/frontend/src/components/projects/ProjectCard.tsx index 40d53bf..c922961 100644 --- a/frontend/src/components/projects/ProjectCard.tsx +++ b/frontend/src/components/projects/ProjectCard.tsx @@ -7,30 +7,13 @@ import api from '@/lib/api'; import type { Project } from '@/types'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; +import { statusColors, statusLabels } from './constants'; interface ProjectCardProps { project: Project; onEdit: (project: Project) => void; } -const statusColors: Record = { - not_started: 'bg-gray-500/10 text-gray-400 border-gray-500/20', - in_progress: 'bg-purple-500/10 text-purple-400 border-purple-500/20', - completed: 'bg-green-500/10 text-green-400 border-green-500/20', - blocked: 'bg-red-500/10 text-red-400 border-red-500/20', - review: 'bg-yellow-500/10 text-yellow-400 border-yellow-500/20', - on_hold: 'bg-orange-500/10 text-orange-400 border-orange-500/20', -}; - -const statusLabels: Record = { - not_started: 'Not Started', - in_progress: 'In Progress', - completed: 'Completed', - blocked: 'Blocked', - review: 'Review', - on_hold: 'On Hold', -}; - export default function ProjectCard({ project }: ProjectCardProps) { const navigate = useNavigate(); const queryClient = useQueryClient(); diff --git a/frontend/src/components/projects/ProjectDetail.tsx b/frontend/src/components/projects/ProjectDetail.tsx index 14c75e0..b5d312a 100644 --- a/frontend/src/components/projects/ProjectDetail.tsx +++ b/frontend/src/components/projects/ProjectDetail.tsx @@ -37,24 +37,7 @@ import TaskDetailPanel from './TaskDetailPanel'; import KanbanBoard from './KanbanBoard'; import TaskForm from './TaskForm'; import ProjectForm from './ProjectForm'; - -const statusColors: Record = { - not_started: 'bg-gray-500/10 text-gray-400 border-gray-500/20', - in_progress: 'bg-purple-500/10 text-purple-400 border-purple-500/20', - completed: 'bg-green-500/10 text-green-400 border-green-500/20', - blocked: 'bg-red-500/10 text-red-400 border-red-500/20', - review: 'bg-yellow-500/10 text-yellow-400 border-yellow-500/20', - on_hold: 'bg-orange-500/10 text-orange-400 border-orange-500/20', -}; - -const statusLabels: Record = { - not_started: 'Not Started', - in_progress: 'In Progress', - completed: 'Completed', - blocked: 'Blocked', - review: 'Review', - on_hold: 'On Hold', -}; +import { statusColors, statusLabels } from './constants'; type SortMode = 'manual' | 'priority' | 'due_date'; type ViewMode = 'list' | 'kanban'; diff --git a/frontend/src/components/projects/constants.ts b/frontend/src/components/projects/constants.ts new file mode 100644 index 0000000..54e74d2 --- /dev/null +++ b/frontend/src/components/projects/constants.ts @@ -0,0 +1,17 @@ +export const statusColors: Record = { + not_started: 'bg-gray-500/10 text-gray-400 border-gray-500/20', + in_progress: 'bg-purple-500/10 text-purple-400 border-purple-500/20', + completed: 'bg-green-500/10 text-green-400 border-green-500/20', + blocked: 'bg-red-500/10 text-red-400 border-red-500/20', + review: 'bg-yellow-500/10 text-yellow-400 border-yellow-500/20', + on_hold: 'bg-orange-500/10 text-orange-400 border-orange-500/20', +}; + +export const statusLabels: Record = { + not_started: 'Not Started', + in_progress: 'In Progress', + completed: 'Completed', + blocked: 'Blocked', + review: 'Review', + on_hold: 'On Hold', +};