import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuCheckboxItem, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu"; import useLocalSettingsStore from "@/store/localSettings"; import { ViewMode } from "@linkwarden/types/global"; import { useTranslation } from "next-i18next"; import { Button } from "@/components/ui/button"; import { useEffect } from "react"; type Props = { viewMode: ViewMode; setViewMode: React.Dispatch>; dashboard?: boolean; }; export default function ViewDropdown({ viewMode, setViewMode, dashboard, }: Props) { const { settings, updateSettings } = useLocalSettingsStore((s) => s); const { t } = useTranslation(); useEffect(() => { updateSettings({ viewMode }); }, [viewMode, updateSettings]); const onChangeViewMode = (mode: ViewMode) => { setViewMode(mode); updateSettings({ viewMode: mode }); }; const toggleShow = (key: keyof typeof settings.show) => { updateSettings({ show: { ...settings.show, [key]: !settings.show[key] }, }); }; const onColumnsChange = (e: React.ChangeEvent) => { updateSettings({ columns: Number(e.target.value) }); }; const visibleShows = ( Object.keys(settings.show) as (keyof typeof settings.show)[] ).filter((key) => { if (!dashboard && settings.viewMode === ViewMode.List) return key !== "tags" && key !== "image" && key !== "description"; if (dashboard || settings.viewMode === ViewMode.Card) return key !== "tags" && key !== "description"; return true; }); return ( {!dashboard && ( <>

{t("view")}

{[ViewMode.Card, ViewMode.Masonry, ViewMode.List].map( (mode) => { const Icon = mode === ViewMode.Card ? () => : mode === ViewMode.Masonry ? () => ( ) : () => ( ); return ( ); } )}
)}

{t("show")}

{visibleShows.map((key) => ( { e.preventDefault(); toggleShow(key); }} > {t(key)} ))} {!dashboard && settings.viewMode !== ViewMode.List && ( <>

{t("columns")}:{" "} {settings.columns === 0 ? t("default") : settings.columns}

{Array.from({ length: 9 }).map((_, i) => ( | ))}
)}
); }