diff --git a/src/components/views/rooms/NewRoomIntro.tsx b/src/components/views/rooms/NewRoomIntro.tsx index 2f248037b1..3f6054304d 100644 --- a/src/components/views/rooms/NewRoomIntro.tsx +++ b/src/components/views/rooms/NewRoomIntro.tsx @@ -1,5 +1,5 @@ /* -Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import {ViewUserPayload} from "../../../dispatcher/payloads/ViewUserPayload"; import {Action} from "../../../dispatcher/actions"; import dis from "../../../dispatcher/dispatcher"; import SpaceStore from "../../../stores/SpaceStore"; +import {showSpaceInvite} from "../../../utils/space"; const NewRoomIntro = () => { const cli = useContext(MatrixClientContext); @@ -116,7 +117,7 @@ const NewRoomIntro = () => { className="mx_NewRoomIntro_inviteButton" kind="primary" onClick={() => { - dis.dispatch({ action: "view_invite", roomId: parentSpace.roomId }); + showSpaceInvite(parentSpace); }} > {_t("Invite to %(spaceName)s", { spaceName: parentSpace.name })} diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index e83b07f71b..963e94ebbb 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -50,14 +50,10 @@ import AccessibleButton from "../elements/AccessibleButton"; import { CommunityPrototypeStore } from "../../../stores/CommunityPrototypeStore"; import CallHandler from "../../../CallHandler"; import SpaceStore, {SUGGESTED_ROOMS} from "../../../stores/SpaceStore"; -import { showAddExistingRooms, showCreateNewRoom } from "../../../utils/space"; +import {showAddExistingRooms, showCreateNewRoom, showSpaceInvite} from "../../../utils/space"; import {replaceableComponent} from "../../../utils/replaceableComponent"; import RoomAvatar from "../avatars/RoomAvatar"; import { ISpaceSummaryRoom } from "../../structures/SpaceRoomDirectory"; -import { showRoomInviteDialog } from "../../../RoomInvite"; -import Modal from "../../../Modal"; -import SpacePublicShare from "../spaces/SpacePublicShare"; -import InfoDialog from "../dialogs/InfoDialog"; interface IProps { onKeyDown: (ev: React.KeyboardEvent) => void; @@ -431,21 +427,7 @@ export default class RoomList extends React.PureComponent { private onSpaceInviteClick = () => { const initialText = RoomListStore.instance.getFirstNameFilterCondition()?.search; - if (this.props.activeSpace.getJoinRule() === "public") { - const modal = Modal.createTrackedDialog("Space Invite", "User Menu", InfoDialog, { - title: _t("Invite to %(spaceName)s", { spaceName: this.props.activeSpace.name }), - description: - { _t("Share your public space") } - modal.close()} /> - , - fixedWidth: false, - button: false, - className: "mx_SpacePanel_sharePublicSpace", - hasCloseButton: true, - }); - } else { - showRoomInviteDialog(this.props.activeSpace.roomId, initialText); - } + showSpaceInvite(this.props.activeSpace, initialText); }; private renderSuggestedRooms(): ReactComponentElement[] { diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index fd4a881941..70280185b8 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -33,7 +33,7 @@ import {toRightOf} from "../../structures/ContextMenu"; import { shouldShowSpaceSettings, showAddExistingRooms, - showCreateNewRoom, + showCreateNewRoom, showSpaceInvite, showSpaceSettings, } from "../../../utils/space"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; @@ -118,21 +118,7 @@ export class SpaceItem extends React.PureComponent { ev.preventDefault(); ev.stopPropagation(); - if (this.props.space.getJoinRule() === "public") { - const modal = Modal.createTrackedDialog("Space Invite", "User Menu", InfoDialog, { - title: _t("Invite to %(spaceName)s", { spaceName: this.props.space.name }), - description: - { _t("Share your public space") } - modal.close()} /> - , - fixedWidth: false, - button: false, - className: "mx_SpacePanel_sharePublicSpace", - hasCloseButton: true, - }); - } else { - showRoomInviteDialog(this.props.space.roomId); - } + showSpaceInvite(this.props.space); this.setState({contextMenuPosition: null}); // also close the menu }; diff --git a/src/utils/space.ts b/src/utils/space.tsx similarity index 74% rename from src/utils/space.ts rename to src/utils/space.tsx index bc31829f45..3f2b6f9bb4 100644 --- a/src/utils/space.ts +++ b/src/utils/space.tsx @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +import React from "react"; import {Room} from "matrix-js-sdk/src/models/room"; import {MatrixClient} from "matrix-js-sdk/src/client"; import {EventType} from "matrix-js-sdk/src/@types/event"; @@ -24,6 +25,10 @@ import SpaceSettingsDialog from "../components/views/dialogs/SpaceSettingsDialog import AddExistingToSpaceDialog from "../components/views/dialogs/AddExistingToSpaceDialog"; import CreateRoomDialog from "../components/views/dialogs/CreateRoomDialog"; import createRoom, {IOpts} from "../createRoom"; +import {_t} from "../languageHandler"; +import SpacePublicShare from "../components/views/spaces/SpacePublicShare"; +import InfoDialog from "../components/views/dialogs/InfoDialog"; +import { showRoomInviteDialog } from "../RoomInvite"; export const shouldShowSpaceSettings = (cli: MatrixClient, space: Room) => { const userId = cli.getUserId(); @@ -79,3 +84,21 @@ export const showCreateNewRoom = async (cli: MatrixClient, space: Room) => { await createRoom(opts); } }; + +export const showSpaceInvite = (space: Room, initialText = "") => { + if (space.getJoinRule() === "public") { + const modal = Modal.createTrackedDialog("Space Invite", "User Menu", InfoDialog, { + title: _t("Invite to %(spaceName)s", { spaceName: space.name }), + description: + { _t("Share your public space") } + modal.close()} /> + , + fixedWidth: false, + button: false, + className: "mx_SpacePanel_sharePublicSpace", + hasCloseButton: true, + }); + } else { + showRoomInviteDialog(space.roomId, initialText); + } +};