Spaces:
Running
Running
"use client"; | |
import { Plus } from "lucide-react"; | |
import Link from "next/link"; | |
import { useState } from "react"; | |
import { useUser } from "@/hooks/useUser"; | |
import { Project } from "@/types"; | |
import { redirect } from "next/navigation"; | |
import { ProjectCard } from "./project-card"; | |
import { LoadProject } from "./load-project"; | |
export function MyProjects({ | |
projects: initialProjects, | |
}: { | |
projects: Project[]; | |
}) { | |
const { user } = useUser(); | |
if (!user) { | |
redirect("/"); | |
} | |
const [projects, setProjects] = useState<Project[]>(initialProjects || []); | |
return ( | |
<> | |
<section className="max-w-[86rem] py-12 px-4 mx-auto"> | |
<header className="flex items-center justify-between max-lg:flex-col gap-4"> | |
<div className="text-left"> | |
<h1 className="text-3xl font-bold text-white"> | |
<span className="capitalize">{user.fullname}</span>'s | |
DeepSite Projects | |
</h1> | |
<p className="text-muted-foreground text-base mt-1 max-w-xl"> | |
Create, manage, and explore your DeepSite projects. | |
</p> | |
</div> | |
<LoadProject | |
fullXsBtn | |
onSuccess={(project: Project) => { | |
setProjects((prev) => [...prev, project]); | |
}} | |
/> | |
</header> | |
<div className="mt-8 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8"> | |
<Link | |
href="/projects/new" | |
className="bg-neutral-900 rounded-xl h-44 flex items-center justify-center text-neutral-300 border border-neutral-800 hover:brightness-110 transition-all duration-200" | |
> | |
<Plus className="size-5 mr-1.5" /> | |
Create Project | |
</Link> | |
{projects.map((project: Project) => ( | |
<ProjectCard key={project._id} project={project} /> | |
))} | |
</div> | |
</section> | |
</> | |
); | |
} | |