import { NostrQuery } from "@lume/system"; import type { Settings } from "@lume/types"; import * as Switch from "@radix-ui/react-switch"; import { createFileRoute } from "@tanstack/react-router"; import { requestPermission } from "@tauri-apps/plugin-notification"; import { useEffect, useState } from "react"; import { useDebouncedCallback } from "use-debounce"; export const Route = createFileRoute("/settings/general")({ beforeLoad: async () => { const settings = await NostrQuery.getSettings(); return { settings }; }, component: Screen, }); function Screen() { const { settings } = Route.useRouteContext(); const [newSettings, setNewSettings] = useState(settings); const toggleNofitication = async () => { await requestPermission(); setNewSettings((prev) => ({ ...prev, notification: !newSettings.notification, })); }; const toggleGossip = async () => { setNewSettings((prev) => ({ ...prev, gossip: !newSettings.gossip, })); }; const toggleAutoUpdate = () => { setNewSettings((prev) => ({ ...prev, autoUpdate: !newSettings.autoUpdate, })); }; const toggleEnhancedPrivacy = () => { setNewSettings((prev) => ({ ...prev, enhancedPrivacy: !newSettings.enhancedPrivacy, })); }; const toggleZap = () => { setNewSettings((prev) => ({ ...prev, zap: !newSettings.zap, })); }; const toggleNsfw = () => { setNewSettings((prev) => ({ ...prev, nsfw: !newSettings.nsfw, })); }; const updateSettings = useDebouncedCallback(() => { NostrQuery.setSettings(newSettings); }, 200); useEffect(() => { updateSettings(); }, [newSettings]); return (

General

Notification

By turning on push notifications, you'll start getting notifications from Lume directly.

toggleNofitication()} className="relative h-7 w-12 shrink-0 cursor-default rounded-full bg-black/10 outline-none data-[state=checked]:bg-blue-500 dark:bg-white/10" >

Relay Hint

Automatically connect to the necessary relay suggested by Relay Hint when fetching a new event.

toggleGossip()} className="relative h-7 w-12 shrink-0 cursor-default rounded-full bg-black/10 outline-none data-[state=checked]:bg-blue-500 dark:bg-white/10" >

Enhanced Privacy

Lume presents external resources like images, videos, or link previews in plain text.

toggleEnhancedPrivacy()} className="relative h-7 w-12 shrink-0 cursor-default rounded-full bg-black/10 outline-none data-[state=checked]:bg-blue-500 dark:bg-white/10" >

Auto Update

Automatically download and install new version.

toggleAutoUpdate()} className="relative h-7 w-12 shrink-0 cursor-default rounded-full bg-black/10 outline-none data-[state=checked]:bg-blue-500 dark:bg-white/10" >

Filter sensitive content

By default, Lume will display all content which have Content Warning tag, it's may include NSFW content.

toggleNsfw()} className="relative h-7 w-12 shrink-0 cursor-default rounded-full bg-black/10 outline-none data-[state=checked]:bg-blue-500 dark:bg-white/10" >

Interface

Zap

Show the Zap button in each note and user's profile screen, use for send bitcoin tip to other users.

toggleZap()} className="relative h-7 w-12 shrink-0 cursor-default rounded-full bg-black/10 outline-none data-[state=checked]:bg-blue-500 dark:bg-white/10" >
); }