import { Github } from "@styled-icons/boxicons-logos"; import { Sync as SyncIcon, Globe, LogOut, Desktop, ListUl, } from "@styled-icons/boxicons-regular"; import { Bell, Palette, Coffee, IdCard, CheckShield, Flask, User, Megaphone, Speaker, Plug, Bot, Trash, } from "@styled-icons/boxicons-solid"; import { observer } from "mobx-react-lite"; import { Route, Switch, useHistory } from "react-router-dom"; import { LIBRARY_VERSION } from "revolt.js"; import styled from "styled-components/macro"; import styles from "./Settings.module.scss"; import { openContextMenu } from "preact-context-menu"; import { Text } from "preact-i18n"; import { LineDivider } from "@revoltchat/ui"; import { useApplicationState } from "../../mobx/State"; import UserIcon from "../../components/common/user/UserIcon"; import { Username } from "../../components/common/user/UserShort"; import UserStatus from "../../components/common/user/UserStatus"; import ButtonItem from "../../components/navigation/items/ButtonItem"; import { useClient, clientController, } from "../../controllers/client/ClientController"; import RequiresOnline from "../../controllers/client/jsx/RequiresOnline"; import { modalController } from "../../controllers/modals/ModalController"; import { GIT_BRANCH, GIT_REVISION, REPO_URL } from "../../revision"; import { APP_VERSION } from "../../version"; import { GenericSettings } from "./GenericSettings"; import { Account } from "./panes/Account"; import { Appearance } from "./panes/Appearance"; import { Audio } from "./panes/Audio"; import { ExperimentsPage } from "./panes/Experiments"; import { Feedback } from "./panes/Feedback"; import { Languages } from "./panes/Languages"; import { MyBots } from "./panes/MyBots"; import { Native } from "./panes/Native"; import { Notifications } from "./panes/Notifications"; import { PluginsPage } from "./panes/Plugins"; import { Profile } from "./panes/Profile"; import { Sessions } from "./panes/Sessions"; import { Sync } from "./panes/Sync"; const AccountHeader = styled.div` display: flex; flex-direction: column; border-radius: var(--border-radius); overflow: hidden; margin-bottom: 10px; .account { padding: 20px; gap: 10px; align-items: center; display: flex; background: var(--secondary-background); .details { display: flex; flex-direction: column; font-size: 12px; gap: 2px; > span { font-size: 20px; font-weight: 600; } } } .statusChanger { display: flex; align-items: center; background: var(--tertiary-background); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; .status { padding-inline-start: 12px; height: 48px; display: flex; align-items: center; color: var(--secondary-foreground); flex-grow: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } svg { width: 48px; flex-shrink: 0; } } `; export default observer(() => { const history = useHistory(); const client = useClient(); const experiments = useApplicationState().experiments; function switchPage(to?: string) { if (to) { history.replace(`/settings/${to}`); } else { history.replace(`/settings`); } } return ( ), id: "account", icon: , title: , }, { id: "profile", icon: , title: , }, { id: "sessions", icon: , title: , }, { category: ( ), id: "appearance", icon: , title: , }, { id: "audio", icon: , title: , }, { id: "plugins", icon: , title: , hidden: !experiments.isEnabled("plugins"), }, { id: "notifications", icon: , title: , }, { id: "language", icon: , title: , }, { id: "sync", icon: , title: , }, { id: "native", hidden: !window.isNative, icon: , title: , }, { id: "experiments", icon: , title: , }, { divider: true, category: "revolt", id: "bots", icon: , title: , }, { id: "feedback", icon: , title: , }, ]} children={ } defaultPage="account" switchPage={switchPage} category="pages" custom={ <> modalController.push({ type: "changelog" }) }>
{GIT_REVISION.substr(0, 7)} {` `} ({GIT_BRANCH}) {GIT_BRANCH === "production" ? "Stable" : "Nightly"}{" "} {APP_VERSION} {window.isNative && ( Native: {window.nativeVersion} )} API: {client.configuration?.revolt ?? "N/A"} revolt.js: {LIBRARY_VERSION}
} indexHeader={
openContextMenu("Status")} />
modalController.push({ type: "custom_status", }) }> Change your status... {client.user!.status?.text && ( client.users.edit({ remove: ["StatusText"], }) } /> )}
} /> ); });