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;