import { useEffect } from "react" import { Separator } from "../../ui/separator" import { SidebarNav } from "./sidebar-nav.tsx" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card.tsx" import { useStore } from "@nanostores/react" import { $router } from "@/components/router.tsx" import { redirectPage } from "@nanostores/router" import { BellIcon, FileSlidersIcon, SettingsIcon } from "lucide-react" import { $userSettings, pb } from "@/lib/stores.ts" import { toast } from "@/components/ui/use-toast.ts" import { UserSettings } from "@/types.js" import General from "./general.tsx" import Notifications from "./notifications.tsx" import ConfigYaml from "./config-yaml.tsx" import { isAdmin } from "@/lib/utils.ts" import { useTranslation } from "react-i18next" export async function saveSettings(newSettings: Partial) { try { // get fresh copy of settings const req = await pb.collection("user_settings").getFirstListItem("", { fields: "id,settings", }) // update user settings const updatedSettings = await pb.collection("user_settings").update(req.id, { settings: { ...req.settings, ...newSettings, }, }) $userSettings.set(updatedSettings.settings) toast({ title: "Settings saved", description: "Your user settings have been updated.", }) } catch (e) { // console.error('update settings', e) toast({ title: "Failed to save settings", description: "Check logs for more details.", variant: "destructive", }) } } export default function SettingsLayout() { const { t } = useTranslation() const sidebarNavItems = [ { title: t("settings.general.title"), href: "/settings/general", icon: SettingsIcon, }, { title: t("settings.notifications.title"), href: "/settings/notifications", icon: BellIcon, }, ] if (isAdmin()) { sidebarNavItems.push({ title: t("settings.yaml_config.short_title"), href: "/settings/config", icon: FileSlidersIcon, }) } const page = useStore($router) useEffect(() => { document.title = "Settings / Beszel" // redirect to account page if no page is specified if (page?.path === "/settings") { redirectPage($router, "settings", { name: "general" }) } }, []) return ( {t("settings.settings")} {t("settings.subtitle")}
{/* @ts-ignore */}
) } function SettingsContent({ name }: { name: string }) { const userSettings = useStore($userSettings) switch (name) { case "general": return case "notifications": return case "config": return } }