revite/src/pages/settings/ServerSettings.tsx

168 lines
6.1 KiB
TypeScript
Raw Normal View History

import { ListUl } from "@styled-icons/boxicons-regular";
import {
InfoCircle,
Group,
FlagAlt,
Envelope,
UserX,
Trash,
2022-07-07 17:33:33 +01:00
HappyBeaming,
} from "@styled-icons/boxicons-solid";
import { observer } from "mobx-react-lite";
2021-08-05 14:47:00 +01:00
import { Route, Switch, useHistory, useParams } from "react-router-dom";
2021-07-05 11:23:23 +01:00
import styles from "./Settings.module.scss";
2021-07-05 11:23:23 +01:00
import { Text } from "preact-i18n";
import { LineDivider } from "@revoltchat/ui";
import { state } from "../../mobx/State";
import ButtonItem from "../../components/navigation/items/ButtonItem";
import { useClient } from "../../controllers/client/ClientController";
import RequiresOnline from "../../controllers/client/jsx/RequiresOnline";
import { modalController } from "../../controllers/modals/ModalController";
2021-07-05 11:23:23 +01:00
import { GenericSettings } from "./GenericSettings";
2021-06-19 22:37:12 +01:00
import { Bans } from "./server/Bans";
2021-07-24 19:39:41 +01:00
import { Categories } from "./server/Categories";
2022-07-07 17:33:33 +01:00
import { Emojis } from "./server/Emojis";
2021-07-05 11:23:23 +01:00
import { Invites } from "./server/Invites";
import { Members } from "./server/Members";
import { Overview } from "./server/Overview";
2021-06-30 21:28:56 +01:00
import { Roles } from "./server/Roles";
2021-06-19 22:37:12 +01:00
export default observer(() => {
2021-07-05 11:25:20 +01:00
const { server: sid } = useParams<{ server: string }>();
const client = useClient();
const server = client.servers.get(sid);
2021-07-05 11:25:20 +01:00
if (!server) return null;
2021-06-19 22:37:12 +01:00
const owner = server.owner === client.user?._id;
2021-07-05 11:25:20 +01:00
const history = useHistory();
function switchPage(to?: string) {
if (to) {
history.replace(`/server/${sid}/settings/${to}`);
} else {
history.replace(`/server/${sid}/settings`);
}
}
2021-06-19 22:37:12 +01:00
2021-07-05 11:25:20 +01:00
return (
<GenericSettings
pages={[
{
category: <div>{server.name}</div>,
2021-07-05 11:25:20 +01:00
id: "overview",
icon: <InfoCircle size={20} />,
2021-07-05 11:25:20 +01:00
title: (
<Text id="app.settings.server_pages.overview.title" />
),
},
2021-07-24 19:39:41 +01:00
{
id: "categories",
icon: <ListUl size={20} />,
2021-07-24 19:39:41 +01:00
title: (
<Text id="app.settings.server_pages.categories.title" />
),
hideTitle: true,
2021-07-24 19:39:41 +01:00
},
2021-07-05 11:25:20 +01:00
{
id: "roles",
icon: <FlagAlt size={20} />,
title: <Text id="app.settings.server_pages.roles.title" />,
hideTitle: true,
},
2022-07-07 17:33:33 +01:00
{
category: (
<Text id="app.settings.server_pages.customisation.title" />
),
id: "emojis",
icon: <HappyBeaming size={20} />,
title: <Text id="app.settings.server_pages.emojis.title" />,
hidden: !state.experiments.isEnabled("picker"),
2022-07-07 17:33:33 +01:00
},
{
category: (
<Text id="app.settings.server_pages.management.title" />
),
2021-07-05 11:25:20 +01:00
id: "members",
icon: <Group size={20} />,
title: (
<Text id="app.settings.server_pages.members.title" />
),
},
{
id: "invites",
icon: <Envelope size={20} />,
2021-07-05 11:25:20 +01:00
title: (
<Text id="app.settings.server_pages.invites.title" />
),
},
{
id: "bans",
icon: <UserX size={20} />,
2021-07-05 11:25:20 +01:00
title: <Text id="app.settings.server_pages.bans.title" />,
},
]}
2021-08-05 14:47:00 +01:00
children={
<Switch>
<Route path="/server/:server/settings/categories">
<Categories server={server} />
</Route>
<Route path="/server/:server/settings/members">
<RequiresOnline>
<Members server={server} />
</RequiresOnline>
</Route>
<Route path="/server/:server/settings/invites">
<RequiresOnline>
<Invites server={server} />
</RequiresOnline>
</Route>
<Route path="/server/:server/settings/bans">
<RequiresOnline>
<Bans server={server} />
</RequiresOnline>
</Route>
<Route path="/server/:server/settings/roles">
<RequiresOnline>
<Roles server={server} />
</RequiresOnline>
</Route>
2022-07-07 17:33:33 +01:00
<Route path="/server/:server/settings/emojis">
<RequiresOnline>
<Emojis server={server} />
</RequiresOnline>
</Route>
2021-08-05 14:47:00 +01:00
<Route>
<Overview server={server} />
</Route>
</Switch>
}
2021-07-05 11:25:20 +01:00
category="server_pages"
switchPage={switchPage}
defaultPage="overview"
custom={
owner ? (
<>
<LineDivider />
<ButtonItem
onClick={() =>
modalController.push({
type: "delete_server",
target: server,
})
}
className={styles.deleteServer}
compact>
<Trash size={20} />
<Text id="app.context_menu.delete_server" />
</ButtonItem>
</>
) : undefined
}
2021-07-05 11:25:20 +01:00
showExitButton
/>
);
});