import { Show } from "solid-js"; import { Trans } from "@lingui-solid/solid/macro"; import { Server } from "stoat.js"; import { css } from "styled-system/css"; import { useClient, useClientLifecycle } from "@revolt/client"; import { useUser } from "@revolt/markdown/users"; import { useModals } from "@revolt/modal"; import { ColouredText, Column, Text, iconSize } from "@revolt/ui"; import { Symbol } from "@revolt/ui/components/utils/Symbol"; import MdAccountCircle from "@material-design-icons/svg/outlined/account_circle.svg?component-solid"; import MdCoffee from "@material-design-icons/svg/outlined/coffee.svg?component-solid"; import MdLanguage from "@material-design-icons/svg/outlined/language.svg?component-solid"; import MdLogout from "@material-design-icons/svg/outlined/logout.svg?component-solid"; import MdMemory from "@material-design-icons/svg/outlined/memory.svg?component-solid"; import MdMic from "@material-design-icons/svg/outlined/mic.svg?component-solid"; import MdPalette from "@material-design-icons/svg/outlined/palette.svg?component-solid"; import MdRateReview from "@material-design-icons/svg/outlined/rate_review.svg?component-solid"; import MdScience from "@material-design-icons/svg/outlined/science.svg?component-solid"; import MdSmartToy from "@material-design-icons/svg/outlined/smart_toy.svg?component-solid"; import MdVerifiedUser from "@material-design-icons/svg/outlined/verified_user.svg?component-solid"; import MdWorkspacePremium from "@material-design-icons/svg/outlined/workspace_premium.svg?component-solid"; import pkg from "../../../../package.json"; import { SettingsConfiguration } from "."; import { MyAccount } from "./user/Account"; import AdvancedSettings from "./user/Advanced"; import { Feedback } from "./user/Feedback"; import { LanguageSettings } from "./user/Language"; import Native from "./user/Native"; import { Sessions } from "./user/Sessions"; import { AccountCard } from "./user/_AccountCard"; import { AppearanceMenu } from "./user/appearance"; import { MyBots, ViewBot } from "./user/bots"; import { EditProfile } from "./user/profile"; import { EditSubscription } from "./user/subscriptions"; import { VoiceSettings } from "./user/voice/VoiceSettings"; const Config: SettingsConfiguration<{ server: Server }> = { /** * Page titles * @param key */ title(ctx, key) { if (key.startsWith("bots/")) { const user = useUser(key.substring(5)); return user()!.username; } return ctx.entries .flatMap((category) => category.entries) .find((entry) => entry.id === key)?.title as string; }, /** * Render the current client settings page */ // we take care of the reactivity ourselves /* eslint-disable solid/reactivity */ /* eslint-disable solid/components-return-once */ render(props) { const id = props.page(); const client = useClient(); if (id?.startsWith("bots/")) { const bot = client().bots.get(id.substring("bots/".length))!; return ; } switch (id) { case "account": return ; case "appearance": return ; case "advanced": return ; case "profile": return ; case "sessions": return ; case "bots": return ; case "language": return ; case "feedback": return ; case "subscribe": return ; case "native": return ; case "voice": return ; default: return null; } }, /* eslint-enable solid/reactivity */ /* eslint-enable solid/components-return-once */ /** * Generate list of categories / entries for client settings * @returns List */ list() { const { pop } = useModals(); const { logout } = useClientLifecycle(); return { context: null!, prepend: (
), append: ( Version: {" "} {pkg.version} ({pkg["version-date"]}) Stoat for Desktop {window.native.versions.desktop()} {window.native.versions.electron()},{" "} {window.native.versions.node()},{" "} {window.native.versions.chrome()} ), entries: [ { title: User Settings, entries: [ { id: "account", icon: <>, title: <>, hidden: true, }, { id: "profile", icon: , title: Profile, }, { id: "sessions", icon: , title: Sessions, }, ], }, { title: "Stoat", entries: [ { id: "bots", icon: , title: My Bots, }, { id: "feedback", icon: , title: Feedback, }, ], }, { title: Subscriptions, hidden: import.meta.env.PROD, entries: [ { id: "subscribe", icon: , title: "[premium]", }, ], }, { title: Client Settings, entries: [ // { // id: "audio", // icon: , // title: t("app.settings.pages.audio.title"), // hidden: // !getController("state").experiments.isEnabled("voice_chat"), // }, { id: "voice", icon: , title: Voice, }, { id: "appearance", icon: , title: Appearance, }, // { // id: "accessibility", // icon: , // title: t("app.settings.pages.accessibility.title"), // }, // { // id: "plugins", // icon: , // title: t("app.settings.pages.plugins.title"), // hidden: !getController("state").experiments.isEnabled("plugins"), // }, // { // id: "notifications", // icon: , // title: t("app.settings.pages.notifications.title"), // }, // { // id: "keybinds", // icon: , // title: t("app.settings.pages.keybinds.title"), // }, { id: "language", icon: , title: Language, }, // { // id: "sync", // icon: , // title: t("app.settings.pages.sync.title"), // }, { id: "native", hidden: !window.native, icon: desktop_windows, title: Desktop, }, // { // id: "experiments", // icon: , // title: Experiments, // }, ], }, { entries: [ // { // onClick: () => // getController("modal").push({ type: "changelog", posts: [] }), // icon: , // title: t("app.special.modals.changelogs.title"), // }, { href: "https://github.com/stoatchat", icon: , title: Source Code, }, { id: "advanced", icon: , title: Advanced, }, { href: "https://ko-fi.com/stoatchat", icon: , title: Donate, }, { id: "logout", icon: ( ), title: ( Log Out ), onClick() { pop(); logout(); }, }, ], }, ], }; }, }; export default Config;