"use client" import { useState, useEffect } from "react" import { DashboardLayout } from "@/components/layout/sidebar" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { SprintBoard } from "@/components/gantt/SprintBoard" import { BacklogView } from "@/components/gantt/BacklogView" import { useTaskStore } from "@/stores/useTaskStore" import { Plus, LayoutGrid, ListTodo, Calendar, FolderKanban, Target, CheckCircle2, Clock } from "lucide-react" import Link from "next/link" export default function ProjectsPage() { const [activeTab, setActiveTab] = useState("board") const [mounted, setMounted] = useState(false) const { tasks, sprints, projects, selectedProjectId, selectedSprintId, currentUser, syncFromServer, isLoading } = useTaskStore() useEffect(() => { setMounted(true) syncFromServer() }, [syncFromServer]) // Calculate stats const activeSprint = sprints.find(s => s.status === "active") const activeSprintTasks = activeSprint ? tasks.filter(t => t.sprintId === activeSprint.id) : [] const completedTasks = activeSprintTasks.filter(t => t.status === "done").length const totalTasks = activeSprintTasks.length const completionRate = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0 if (!mounted) { return (
) } return (
{/* Header */}

Projects

Sprint planning and project management

{/* Stats Cards */}
Active Sprint
{activeSprint?.name || "No Active Sprint"}

{activeSprint ? `${new Date(activeSprint.startDate).toLocaleDateString()} - ${new Date(activeSprint.endDate).toLocaleDateString()}` : "Create a sprint to get started" }

Sprint Progress
{completionRate}%

{completedTasks} of {totalTasks} tasks completed

Total Projects
{projects.length}

{tasks.length} total tasks across all projects

Sprints
{sprints.length}

{sprints.filter(s => s.status === "active").length} active, {sprints.filter(s => s.status === "planning").length} planning

{/* Main Content Tabs */} Sprint Board Board Backlog & Sprints Backlog {isLoading ? (
) : ( )} {isLoading ? (
) : ( )} {/* Quick Links */} Quick Links
) }