import React, { useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { Button } from "./components/ui/button"; import { Input } from "./components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "./components/ui/select"; import { Switch } from "./components/ui/switch"; import Logo from "./Logo"; import Spinner from "./Spinner"; import usePluginSettings, { DEFAULT_BADGE_CACHE_EXPIRE_MS, } from "./utils/settings"; import { useTheme } from "./utils/ThemeProvider"; import { api } from "./utils/trpc"; export default function OptionsPage() { const navigate = useNavigate(); const { settings, setSettings } = usePluginSettings(); const { setTheme, theme } = useTheme(); const { data: whoami, error: whoAmIError } = api.users.whoami.useQuery( undefined, { enabled: settings.address != "", }, ); const { mutate: deleteKey } = api.apiKeys.revoke.useMutation(); const invalidateWhoami = api.useUtils().users.whoami.refetch; useEffect(() => { invalidateWhoami(); }, [settings, invalidateWhoami]); let loggedInMessage: React.ReactNode; if (whoAmIError) { if (whoAmIError.data?.code == "UNAUTHORIZED") { loggedInMessage = Not logged in; } else { loggedInMessage = ( Something went wrong: {whoAmIError.message} ); } } else if (whoami) { loggedInMessage = {whoami.email}; } else { loggedInMessage = ; } const onLogout = () => { if (settings.apiKeyId) { deleteKey({ id: settings.apiKeyId }); } setSettings((s) => ({ ...s, apiKey: "", apiKeyId: undefined })); invalidateWhoami(); navigate("/notconfigured"); }; return (
Settings
Show count badge setSettings((s) => ({ ...s, showCountBadge: checked })) } />
{settings.showCountBadge && ( <>
Use badge cache setSettings((s) => ({ ...s, useBadgeCache: checked })) } />
{settings.useBadgeCache && ( <>
Badge cache expire time (second) setSettings((s) => ({ ...s, badgeCacheExpireMs: parseInt(e.target.value) * 1000 || DEFAULT_BADGE_CACHE_EXPIRE_MS, })) } className="w-32" />
)} )}
Server Address: {settings.address}
Logged in as: {loggedInMessage}
Theme:
); }