import { useEffect, useRef, useState } from "react"; import { MediaFilter, ZoomPreset, useGalleryStore } from "../store"; type MenuKey = "library" | "view" | "filter"; function MenuButton({ label, active, onClick, }: { label: string; active: boolean; onClick: () => void; }) { return ( ); } function MenuPanel({ children }: { children: React.ReactNode }) { return (
{children}
); } function MenuItem({ label, hint, active = false, onClick, }: { label: string; hint?: string; active?: boolean; onClick: () => void; }) { return ( ); } const ZOOM_OPTIONS: { value: ZoomPreset; label: string }[] = [ { value: "compact", label: "Compact Grid" }, { value: "comfortable", label: "Comfortable Grid" }, { value: "detail", label: "Detail Grid" }, ]; const FILTER_OPTIONS: { value: MediaFilter; label: string }[] = [ { value: "all", label: "All Media" }, { value: "image", label: "Images" }, { value: "video", label: "Videos" }, ]; export function MenuBar() { const [openMenu, setOpenMenu] = useState(null); const rootRef = useRef(null); const setFolderPickerOpen = useGalleryStore((state) => state.setFolderPickerOpen); const reindexFolder = useGalleryStore((state) => state.reindexFolder); const selectedFolderId = useGalleryStore((state) => state.selectedFolderId); const zoomPreset = useGalleryStore((state) => state.zoomPreset); const setZoomPreset = useGalleryStore((state) => state.setZoomPreset); const mediaFilter = useGalleryStore((state) => state.mediaFilter); const setMediaFilter = useGalleryStore((state) => state.setMediaFilter); const favoritesOnly = useGalleryStore((state) => state.favoritesOnly); const setFavoritesOnly = useGalleryStore((state) => state.setFavoritesOnly); useEffect(() => { const handlePointerDown = (event: MouseEvent) => { if (!rootRef.current?.contains(event.target as Node)) { setOpenMenu(null); } }; window.addEventListener("pointerdown", handlePointerDown); return () => window.removeEventListener("pointerdown", handlePointerDown); }, []); const handleAddFolder = () => { setFolderPickerOpen(true); setOpenMenu(null); }; const handleReindex = async () => { if (selectedFolderId !== null) { await reindexFolder(selectedFolderId); } setOpenMenu(null); }; return (
setOpenMenu((current) => (current === "library" ? null : "library"))} /> {openMenu === "library" ? ( ) : null}
setOpenMenu((current) => (current === "view" ? null : "view"))} /> {openMenu === "view" ? ( {ZOOM_OPTIONS.map((option) => ( { setZoomPreset(option.value); setOpenMenu(null); }} /> ))} ) : null}
setOpenMenu((current) => (current === "filter" ? null : "filter"))} /> {openMenu === "filter" ? ( {FILTER_OPTIONS.map((option) => ( { setMediaFilter(option.value); setOpenMenu(null); }} /> ))}
{ setFavoritesOnly(!favoritesOnly); setOpenMenu(null); }} /> ) : null}
); }