import { DarkIcon, LightIcon, SystemModeIcon } from "@lume/icons"; import { useStorage } from "@lume/storage"; import { cn } from "@lume/utils"; import * as Switch from "@radix-ui/react-switch"; import { invoke } from "@tauri-apps/api/core"; import { getCurrent } from "@tauri-apps/api/window"; import { disable, enable, isEnabled } from "@tauri-apps/plugin-autostart"; import { isPermissionGranted, requestPermission, } from "@tauri-apps/plugin-notification"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; export function GeneralSettingScreen() { const storage = useStorage(); const [t] = useTranslation(); const [apiKey, setAPIKey] = useState(""); const [settings, setSettings] = useState({ ...storage.settings, notification: false, autolaunch: false, appearance: "system", }); const changeTheme = async (theme: "light" | "dark" | "auto") => { await invoke("plugin:theme|set_theme", { theme }); // update state setSettings((prev) => ({ ...prev, appearance: theme })); }; const toggleLowPower = async () => { await storage.createSetting("lowPower", String(+!settings.lowPower)); setSettings((state) => ({ ...state, lowPower: !settings.lowPower })); }; const toggleAutolaunch = async () => { if (!settings.autolaunch) { await enable(); // update state setSettings((prev) => ({ ...prev, autolaunch: true })); } else { await disable(); // update state setSettings((prev) => ({ ...prev, autolaunch: false })); } }; const toggleMedia = async () => { await storage.createSetting("media", String(+!settings.media)); storage.settings.media = !settings.media; // update state setSettings((prev) => ({ ...prev, media: !settings.media })); }; const toggleHashtag = async () => { await storage.createSetting("hashtag", String(+!settings.hashtag)); storage.settings.hashtag = !settings.hashtag; // update state setSettings((prev) => ({ ...prev, hashtag: !settings.hashtag })); }; const toggleAutoupdate = async () => { await storage.createSetting("autoupdate", String(+!settings.autoupdate)); storage.settings.autoupdate = !settings.autoupdate; // update state setSettings((prev) => ({ ...prev, autoupdate: !settings.autoupdate })); }; const toggleNofitication = async () => { if (settings.notification) return; await requestPermission(); // update state setSettings((prev) => ({ ...prev, notification: !settings.notification })); }; const toggleTranslation = async () => { await storage.createSetting("translation", String(+!settings.translation)); storage.settings.translation = !settings.translation; // update state setSettings((prev) => ({ ...prev, translation: !settings.translation })); }; const saveApi = async () => { await storage.createSetting("translateApiKey", apiKey); }; useEffect(() => { async function loadSettings() { const theme = await getCurrent().theme(); setSettings((prev) => ({ ...prev, appearance: theme })); const autostart = await isEnabled(); setSettings((prev) => ({ ...prev, autolaunch: autostart })); const permissionGranted = await isPermissionGranted(); setSettings((prev) => ({ ...prev, notification: permissionGranted })); } loadSettings(); }, []); return (
{t("settings.general.update.title")}
{t("settings.general.update.subtitle")}
toggleAutoupdate()} className="relative h-7 w-12 cursor-default rounded-full bg-neutral-200 outline-none data-[state=checked]:bg-blue-500 dark:bg-neutral-800" >
{t("settings.general.lowPower.title")}
{t("settings.general.lowPower.subtitle")}
toggleLowPower()} className="relative h-7 w-12 cursor-default rounded-full bg-neutral-200 outline-none data-[state=checked]:bg-blue-500 dark:bg-neutral-800" >
{t("settings.general.startup.title")}
{t("settings.general.startup.subtitle")}
toggleAutolaunch()} className="relative h-7 w-12 cursor-default rounded-full bg-neutral-200 outline-none data-[state=checked]:bg-blue-500 dark:bg-neutral-800" >
{t("settings.general.media.title")}
{t("settings.general.media.subtitle")}
toggleMedia()} className="relative h-7 w-12 cursor-default rounded-full bg-neutral-200 outline-none data-[state=checked]:bg-blue-500 dark:bg-neutral-800" >
{t("settings.general.hashtag.title")}
{t("settings.general.hashtag.subtitle")}
toggleHashtag()} className="relative h-7 w-12 cursor-default rounded-full bg-neutral-200 outline-none data-[state=checked]:bg-blue-500 dark:bg-neutral-800" >
{t("settings.general.notification.title")}
{t("settings.general.notification.subtitle")}
toggleNofitication()} className="relative h-7 w-12 cursor-default rounded-full bg-neutral-200 outline-none data-[state=checked]:bg-blue-500 dark:bg-neutral-800" >
{t("settings.general.translation.title")}
{t("settings.general.translation.subtitle")}
toggleTranslation()} className="relative h-7 w-12 cursor-default rounded-full bg-neutral-200 outline-none data-[state=checked]:bg-blue-500 dark:bg-neutral-800" >
{settings.translation ? (
{t("global.apiKey")}
setAPIKey(e.target.value)} className="w-full border-transparent outline-none focus:outline-none focus:ring-0 focus:border-none h-9 rounded-lg ring-0 placeholder:text-neutral-600 bg-neutral-100 dark:bg-neutral-900" />
) : null}
{t("settings.general.appearance.title")}
); }