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