"use client" import { Button } from "@/components/ui/button" import CustomButton from "@/components/ui/customButton" import { Sandbox } from "@/lib/types" import { Code2, FolderDot, HelpCircle, Plus, Users } from "lucide-react" import { useRouter, useSearchParams } from "next/navigation" import { useEffect, useState } from "react" import { toast } from "sonner" import AboutModal from "./about" import NewProjectModal from "./newProject" import DashboardProjects from "./projects" import DashboardSharedWithMe from "./shared" type TScreen = "projects" | "shared" | "settings" | "search" export default function Dashboard({ sandboxes, shared, }: { sandboxes: Sandbox[] shared: { id: string name: string type: "react" | "node" author: string sharedOn: Date authorAvatarUrl?: string }[] }) { const [screen, setScreen] = useState<TScreen>("projects") const [newProjectModalOpen, setNewProjectModalOpen] = useState(false) const [aboutModalOpen, setAboutModalOpen] = useState(false) const activeScreen = (s: TScreen) => { if (screen === s) return "justify-start" else return "justify-start font-normal text-muted-foreground" } const searchParams = useSearchParams() const q = searchParams.get("q") const router = useRouter() useEffect(() => { // update the dashboard to show a new project router.refresh() }, []) return ( <> <NewProjectModal open={newProjectModalOpen} setOpen={setNewProjectModalOpen} /> <AboutModal open={aboutModalOpen} setOpen={setAboutModalOpen} /> <div className="flex grow w-full"> <div className="w-56 shrink-0 border-r border-border p-4 justify-between flex flex-col"> <div className="flex flex-col"> <CustomButton onClick={() => { if (sandboxes.length >= 8) { toast.error("You reached the maximum # of sandboxes.") return } setNewProjectModalOpen(true) }} className="mb-4" > <Plus className="w-4 h-4 mr-2" /> New Project </CustomButton> <Button variant="ghost" onClick={() => setScreen("projects")} className={activeScreen("projects")} > <FolderDot className="w-4 h-4 mr-2" /> My Projects </Button> {/* <Button variant="ghost" onClick={() => setScreen("shared")} className={activeScreen("shared")} > <Users className="w-4 h-4 mr-2" /> Shared With Me </Button> */} {/* <Button variant="ghost" onClick={() => setScreen("settings")} className={activeScreen("settings")} > <Settings className="w-4 h-4 mr-2" /> Settings </Button> */} </div> <div className="flex flex-col"> <a target="_blank" href="https://github.com/jamesmurdza/sandbox"> <Button variant="ghost" className="justify-start w-full font-normal text-muted-foreground" > <Code2 className="w-4 h-4 mr-2" /> GitHub Repository </Button> </a> <Button onClick={() => setAboutModalOpen(true)} variant="ghost" className="justify-start font-normal text-muted-foreground" > <HelpCircle className="w-4 h-4 mr-2" /> Help </Button> </div> </div> {screen === "projects" ? ( <> {sandboxes ? ( <DashboardProjects sandboxes={sandboxes} q={q} /> ) : null} </> ) : screen === "shared" ? ( <DashboardSharedWithMe shared={shared.map((item) => ({ ...item, authorAvatarUrl: item.authorAvatarUrl || "", }))} /> ) : screen === "settings" ? null : null} </div> </> ) }