diff --git a/apps/editor/components/ui/sidebar/icon-rail.tsx b/apps/editor/components/ui/sidebar/icon-rail.tsx index 0fd8a443..74bbfa30 100644 --- a/apps/editor/components/ui/sidebar/icon-rail.tsx +++ b/apps/editor/components/ui/sidebar/icon-rail.tsx @@ -1,16 +1,101 @@ "use client"; -import { Moon, Sun } from "lucide-react"; +import { ArrowLeft, Command, FolderOpen, Moon, Search, Sun } from "lucide-react"; import Link from "next/link"; import Image from "next/image"; import { useEffect, useState } from "react"; +import { useRouter } from "next/navigation"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/primitives/tooltip"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/primitives/popover"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, +} from "@/components/ui/primitives/dialog"; import { cn } from "@/lib/utils"; import { useViewer } from "@pascal-app/viewer"; +import { useProjectStore } from "@/features/community/lib/projects/store"; + +function OpenProjectModal({ + open, + onOpenChange, +}: { + open: boolean; + onOpenChange: (open: boolean) => void; +}) { + const router = useRouter(); + const projects = useProjectStore((s) => s.projects); + const activeProject = useProjectStore((s) => s.activeProject); + const fetchProjects = useProjectStore((s) => s.fetchProjects); + + useEffect(() => { + if (open && projects.length === 0) { + fetchProjects(); + } + }, [open, projects.length, fetchProjects]); + + return ( + + ); +} export type PanelId = "site" | "settings"; @@ -33,89 +118,128 @@ export function IconRail({ const theme = useViewer((state) => state.theme); const setTheme = useViewer((state) => state.setTheme); const [mounted, setMounted] = useState(false); + const [isMenuOpen, setIsMenuOpen] = useState(false); + const [isOpenProjectOpen, setIsSwitchProjectOpen] = useState(false); useEffect(() => { setMounted(true); }, []); + const handleOpenProject = () => { + setIsMenuOpen(false); + setIsSwitchProjectOpen(true); + }; + return ( -