revite/src/pages/settings/ServerSettings.tsx

113 lines
4.1 KiB
TypeScript
Raw Normal View History

2021-07-24 14:39:41 -04:00
import { ListUl, ListCheck, ListMinus } from "@styled-icons/boxicons-regular";
2021-07-05 18:06:03 -04:00
import { XSquare, Share, Group } from "@styled-icons/boxicons-solid";
2021-07-05 06:23:23 -04:00
import { Route, useHistory, useParams } from "react-router-dom";
import { Text } from "preact-i18n";
2021-06-19 17:37:12 -04:00
import RequiresOnline from "../../context/revoltjs/RequiresOnline";
2021-07-05 06:23:23 -04:00
import { useServer } from "../../context/revoltjs/hooks";
2021-06-19 17:37:12 -04:00
2021-07-05 06:23:23 -04:00
import Category from "../../components/ui/Category";
import { GenericSettings } from "./GenericSettings";
2021-06-19 17:37:12 -04:00
import { Bans } from "./server/Bans";
2021-07-24 14:39:41 -04:00
import { Categories } from "./server/Categories";
2021-07-05 06:23:23 -04:00
import { Invites } from "./server/Invites";
import { Members } from "./server/Members";
import { Overview } from "./server/Overview";
2021-06-30 16:28:56 -04:00
import { Roles } from "./server/Roles";
2021-06-19 17:37:12 -04:00
export default function ServerSettings() {
2021-07-05 06:25:20 -04:00
const { server: sid } = useParams<{ server: string }>();
const server = useServer(sid);
if (!server) return null;
2021-06-19 17:37:12 -04:00
2021-07-05 06:25:20 -04: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 17:37:12 -04:00
2021-07-05 06:25:20 -04:00
return (
<GenericSettings
pages={[
{
category: <Category variant="uniform" text={server.name} />, //TOFIX: Just add the server.name as a string, otherwise it makes a duplicate category
id: "overview",
icon: <ListUl size={20} />,
title: (
<Text id="app.settings.server_pages.overview.title" />
),
},
2021-07-24 14:39:41 -04:00
{
id: "categories",
icon: <ListMinus size={20} />,
title: (
<Text id="app.settings.server_pages.categories.title" />
),
},
2021-07-05 06:25:20 -04:00
{
id: "members",
icon: <Group size={20} />,
title: (
<Text id="app.settings.server_pages.members.title" />
),
},
{
id: "invites",
icon: <Share size={20} />,
title: (
<Text id="app.settings.server_pages.invites.title" />
),
},
{
id: "bans",
icon: <XSquare size={20} />,
title: <Text id="app.settings.server_pages.bans.title" />,
},
{
id: "roles",
icon: <ListCheck size={20} />,
title: <Text id="app.settings.server_pages.roles.title" />,
hideTitle: true,
},
]}
children={[
2021-07-24 14:39:41 -04:00
<Route path="/server/:server/settings/categories">
<Categories server={server} />
</Route>,
2021-07-05 06:25:20 -04:00
<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>,
<Route path="/">
<Overview server={server} />
</Route>,
]}
category="server_pages"
switchPage={switchPage}
defaultPage="overview"
showExitButton
/>
);
2021-06-19 17:37:12 -04:00
}