MCPcopy Create free account
hub / github.com/GreatStackDev/project-management / ProjectOverview

Function ProjectOverview

src/components/ProjectOverview.jsx:8–106  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

6import CreateProjectDialog from "./CreateProjectDialog";
7
8const ProjectOverview = () => {
9 const statusColors = {
10 PLANNING: "bg-zinc-200 text-zinc-800 dark:bg-zinc-600 dark:text-zinc-200",
11 ACTIVE: "bg-emerald-200 text-emerald-800 dark:bg-emerald-500 dark:text-emerald-900",
12 ON_HOLD: "bg-amber-200 text-amber-800 dark:bg-amber-500 dark:text-amber-900",
13 COMPLETED: "bg-blue-200 text-blue-800 dark:bg-blue-500 dark:text-blue-900",
14 CANCELLED: "bg-red-200 text-red-800 dark:bg-red-500 dark:text-red-900"
15 };
16
17 const priorityColors = {
18 LOW: "border-zinc-300 text-zinc-600 dark:border-zinc-600 dark:text-zinc-400",
19 MEDIUM: "border-amber-300 text-amber-700 dark:border-amber-500 dark:text-amber-400",
20 HIGH: "border-green-300 text-green-700 dark:border-green-500 dark:text-green-400",
21 };
22
23 const currentWorkspace = useSelector((state) => state?.workspace?.currentWorkspace || null);
24 const [isDialogOpen, setIsDialogOpen] = useState(false);
25 const [projects, setProjects] = useState([]);
26
27 useEffect(() => {
28 setProjects(currentWorkspace?.projects || []);
29 }, [currentWorkspace]);
30
31 return currentWorkspace && (
32 <div className="bg-white dark:bg-zinc-950 dark:bg-gradient-to-br dark:from-zinc-800/70 dark:to-zinc-900/50 border border-zinc-200 dark:border-zinc-800 hover:border-zinc-300 dark:hover:border-zinc-700 transition-all duration-200 rounded-lg overflow-hidden">
33 <div className="border-b border-zinc-200 dark:border-zinc-800 p-4 flex items-center justify-between">
34 <h2 className="text-md text-zinc-800 dark:text-zinc-300">Project Overview</h2>
35 <Link to={'/projects'} className="text-sm text-zinc-600 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-300 flex items-center">
36 View all <ArrowRight className="w-4 h-4 ml-2" />
37 </Link>
38 </div>
39
40 <div className="p-0">
41 {projects.length === 0 ? (
42 <div className="p-12 text-center">
43 <div className="w-16 h-16 mx-auto mb-4 bg-zinc-200 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-500 rounded-full flex items-center justify-center">
44 <FolderOpen size={32} />
45 </div>
46 <p className="text-zinc-600 dark:text-zinc-400">No projects yet</p>
47 <button onClick={() => setIsDialogOpen(true)} className="mt-4 px-4 py-2 text-sm bg-gradient-to-br from-blue-500 to-blue-600 text-white dark:text-zinc-200 rounded hover:opacity-90 transition">
48 Create your First Project
49 </button>
50 <CreateProjectDialog isDialogOpen={isDialogOpen} setIsDialogOpen={setIsDialogOpen} />
51 </div>
52 ) : (
53 <div className="divide-y divide-zinc-200 dark:divide-zinc-800">
54 {projects.slice(0, 5).map((project) => (
55 <Link key={project.id} to={`/projectsDetail?id=${project.id}&tab=tasks`} className="block p-6 hover:bg-zinc-50 dark:hover:bg-zinc-900/50 transition-colors">
56 <div className="flex items-start justify-between mb-3">
57 <div className="flex-1">
58 <h3 className="font-semibold text-zinc-800 dark:text-zinc-300 mb-1">
59 {project.name}
60 </h3>
61 <p className="text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2">
62 {project.description || 'No description'}
63 </p>
64 </div>
65 <div className="flex items-center gap-2 ml-4">

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected