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> | |
| </> | |
| ); | |
| } | |