import { BiSolidEnvelope, BiSolidFlagAlt, BiSolidGroup, BiSolidHappyBeaming, BiSolidInfoCircle, BiSolidTrash, BiSolidUserX, } from "solid-icons/bi"; import { Trans, useLingui } from "@lingui-solid/solid/macro"; import { Server } from "stoat.js"; import { useUser } from "@revolt/client"; import { TextWithEmoji } from "@revolt/markdown"; import { useModals } from "@revolt/modal"; import { ColouredText } from "@revolt/ui"; import { SettingsConfiguration } from "."; import { ChannelPermissionsEditor } from "./channel/permissions/ChannelPermissionsEditor"; import Overview from "./server/Overview"; import { ListServerBans } from "./server/bans/ListBans"; import { EmojiList } from "./server/emojis/EmojiList"; import { ListServerInvites } from "./server/invites/ListServerInvites"; import { ServerRoleEditor } from "./server/roles/ServerRoleEditor"; import { ServerRoleOverview } from "./server/roles/ServerRoleOverview"; const Config: SettingsConfiguration = { /** * Page titles * @param key */ title(ctx, key) { const { t } = useLingui(); if (key.startsWith("roles/")) { if (key === "roles/default") return t`Default Permissions`; return ctx.context.roles.get(key.substring(6))?.name ?? ""; } return ctx.entries .flatMap((category) => category.entries) .find((entry) => entry.id === key)?.title as string; }, /** * Render the current server settings page */ // we take care of the reactivity ourselves /* eslint-disable solid/components-return-once */ render(props, server) { const id = props.page(); if (!server.$exists) { useModals().pop(); return null; } if (id?.startsWith("roles/")) { if (id === "roles/default") { return ( ); } return ; } switch (id) { case "overview": return ; case "emojis": return ; case "roles": return ; case "invites": return ; case "bans": return ; default: return null; } }, /* eslint-enable solid/components-return-once */ /** * Generate list of categories / entries for server settings * @returns List */ list(server) { const user = useUser(); const { openModal } = useModals(); return { context: server, entries: [ { title: , entries: [ { id: "overview", icon: , title: Overview, }, ], }, { hidden: !server.havePermission("ManageCustomisation"), title: Customisation, entries: [ { id: "emojis", icon: , title: Emojis, }, ], }, { hidden: !server.havePermission("ManageServer") && !server.havePermission("BanMembers"), title: User Management, entries: [ { hidden: true, id: "members", icon: , title: Members, }, { hidden: !( server.havePermission("ManageRole") || server.havePermission("ManagePermissions") ), id: "roles", icon: , title: Roles, }, { hidden: !server.havePermission("ManageServer"), id: "invites", icon: , title: Invites, }, { hidden: !server.havePermission("BanMembers"), id: "bans", icon: , title: Bans, }, ], }, { hidden: !(server.ownerId === user()?.id), entries: [ { icon: ( ), title: ( Delete Server ), /** * Handle server deletion request */ onClick() { openModal({ type: "delete_server", server, }); }, }, ], }, ], }; }, }; export default Config; export type ServerSettingsProps = { /** * Server */ server: Server; };