"use client"; import React from "react"; import { ButtonWithTooltip } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Slider } from "@/components/ui/slider"; import { useBookmarkLayout, useGridColumns, } from "@/lib/userLocalSettings/bookmarksLayout"; import { updateBookmarksLayout, updateGridColumns, } from "@/lib/userLocalSettings/userLocalSettings"; import { Check, LayoutDashboard, LayoutGrid, LayoutList, List, LucideIcon, Settings, } from "lucide-react"; type LayoutType = "masonry" | "grid" | "list" | "compact"; const iconMap: Record = { masonry: LayoutDashboard, grid: LayoutGrid, list: LayoutList, compact: List, }; const layoutNames: Record = { masonry: "Masonry", grid: "Grid", list: "List", compact: "Compact", }; export default function ViewOptions() { const layout = useBookmarkLayout(); const gridColumns = useGridColumns(); const [tempColumns, setTempColumns] = React.useState(gridColumns); const showColumnSlider = layout === "grid" || layout === "masonry"; // Update temp value when actual value changes React.useEffect(() => { setTempColumns(gridColumns); }, [gridColumns]); return (
Layout
{(Object.keys(iconMap) as LayoutType[]).map((key) => ( await updateBookmarksLayout(key as LayoutType)} >
{React.createElement(iconMap[key as LayoutType], { size: 18 })} {layoutNames[key]}
{layout === key && }
))} {showColumnSlider && ( <>
Columns {tempColumns}
setTempColumns(value)} onValueCommit={([value]) => updateGridColumns(value)} min={1} max={6} step={1} className="w-full" />
1 6
)}
); }