"use client"; import { useState, useEffect, useCallback } from "react"; import { useTranslations } from "next-intl"; import { SettingsSection, SettingItem, ToggleSwitch, RadioGroup } from "./settings-section"; import { loadFilesSettings, saveFilesSettings, type FilesSettings, type FolderLayout } from "@/components/files/files-settings-dialog"; export function FilesSettingsComponent() { const t = useTranslations("settings.files"); const [settings, setSettings] = useState(loadFilesSettings); // Listen for external changes (e.g. if file-browser updates settings) useEffect(() => { const handleStorage = (e: StorageEvent) => { if (e.key === "files-settings") { setSettings(loadFilesSettings()); } }; window.addEventListener("storage", handleStorage); return () => window.removeEventListener("storage", handleStorage); }, []); const update = useCallback((patch: Partial) => { setSettings(prev => { const next = { ...prev, ...patch }; saveFilesSettings(next); return next; }); }, []); return (
update({ folderLayout: v as FolderLayout })} options={[ { value: "inline", label: t("folder_layout.inline") }, { value: "sidebar", label: t("folder_layout.sidebar") }, ]} /> update({ defaultViewMode: v as "list" | "grid" })} options={[ { value: "list", label: t("default_view.list") }, { value: "grid", label: t("default_view.grid") }, ]} /> update({ defaultSortKey: v as "name" | "size" | "modified" })} options={[ { value: "name", label: t("default_sort.name") }, { value: "size", label: t("default_sort.size") }, { value: "modified", label: t("default_sort.modified") }, ]} /> update({ defaultSortDir: v as "asc" | "desc" })} options={[ { value: "asc", label: t("sort_direction.ascending") }, { value: "desc", label: t("sort_direction.descending") }, ]} /> update({ showIcons: v })} /> update({ coloredIcons: v })} disabled={!settings.showIcons} /> update({ showThumbnails: v })} /> update({ showHiddenFiles: v })} />
); }