"use client"; import CustomButton from "@/components/ui/customButton"; import { Button } from "@/components/ui/button"; import { Code2, FolderDot, HelpCircle, Plus, Settings, Users, } from "lucide-react"; import { useState } from "react"; import { Sandbox } from "@/lib/types"; import DashboardProjects from "./projects"; import DashboardSharedWithMe from "./shared"; import NewProjectModal from "./newProject"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import AboutModal from "./about"; import { toast } from "sonner"; 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; }[]; }) { 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"); 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/ishaan1013/sandbox"> <Button variant="ghost" className="justify-start 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" /> About </Button> </div> </div> {screen === "projects" ? ( <> {sandboxes ? ( <DashboardProjects sandboxes={sandboxes} q={q} /> ) : null} </> ) : screen === "shared" ? ( <DashboardSharedWithMe shared={shared} /> ) : screen === "settings" ? null : null} </div> </> ); }