diff --git a/src/controllers/modals/ModalController.tsx b/src/controllers/modals/ModalController.tsx index feebb85e..cbb0dbb9 100644 --- a/src/controllers/modals/ModalController.tsx +++ b/src/controllers/modals/ModalController.tsx @@ -21,6 +21,7 @@ import Changelog from "./components/Changelog"; import ChannelInfo from "./components/ChannelInfo"; import Clipboard from "./components/Clipboard"; import Confirmation from "./components/Confirmation"; +import CreateChannel from "./components/CreateChannel"; import CreateGroup from "./components/CreateGroup"; import CreateInvite from "./components/CreateInvite"; import CreateRole from "./components/CreateRole"; @@ -250,6 +251,7 @@ export const modalController = new ModalControllerExtended({ delete_bot: Confirmation, block_user: Confirmation, unfriend_user: Confirmation, + create_channel: CreateChannel, create_group: CreateGroup, create_invite: CreateInvite, create_role: CreateRole, diff --git a/src/controllers/modals/components/CreateChannel.tsx b/src/controllers/modals/components/CreateChannel.tsx new file mode 100644 index 00000000..14d2e696 --- /dev/null +++ b/src/controllers/modals/components/CreateChannel.tsx @@ -0,0 +1,69 @@ +import { useHistory } from "react-router-dom"; + +import { Text } from "preact-i18n"; + +import { ModalForm } from "@revoltchat/ui"; + +import { ModalProps } from "../types"; + +/** + * Channel creation modal + */ +export default function CreateChannel({ + cb, + target, + ...props +}: ModalProps<"create_channel">) { + const history = useHistory(); + + return ( + } + schema={{ + name: "text", + type: "radio", + }} + data={{ + name: { + field: ( + + ) as React.ReactChild, + }, + type: { + field: ( + + ) as React.ReactChild, + choices: [ + { + name: ( + + ) as React.ReactChild, + value: "Text", + }, + { + name: ( + + ) as React.ReactChild, + value: "Voice", + }, + ], + }, + }} + callback={async ({ name, type }) => { + const channel = await target.createChannel({ + type: type as "Text" | "Voice", + name, + }); + + if (cb) { + cb(channel as any); + } else { + history.push( + `/server/${target._id}/channel/${channel._id}`, + ); + } + }} + /> + ); +} diff --git a/src/controllers/modals/types.ts b/src/controllers/modals/types.ts index 37b5e513..1bad3bb2 100644 --- a/src/controllers/modals/types.ts +++ b/src/controllers/modals/types.ts @@ -170,11 +170,7 @@ export type Modal = { | { type: "create_channel"; target: Server; - cb?: ( - channel: Channel & { - channel_type: "TextChannel" | "VoiceChannel"; - }, - ) => void; + cb?: (channel: Channel) => void; } | { type: "create_category";