You've already forked matrix-react-sdk
							
							
				mirror of
				https://github.com/matrix-org/matrix-react-sdk.git
				synced 2025-11-04 11:51:45 +03:00 
			
		
		
		
	Fix space preview for when user cannot join the space
This commit is contained in:
		@@ -14,58 +14,60 @@ See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
import React, {RefObject, useContext, useRef, useState} from "react";
 | 
			
		||||
import {EventType} from "matrix-js-sdk/src/@types/event";
 | 
			
		||||
import {Room} from "matrix-js-sdk/src/models/room";
 | 
			
		||||
import {EventSubscription} from "fbemitter";
 | 
			
		||||
import React, { RefObject, useContext, useRef, useState } from "react";
 | 
			
		||||
import { EventType } from "matrix-js-sdk/src/@types/event";
 | 
			
		||||
import { Preset } from "matrix-js-sdk/src/@types/partials";
 | 
			
		||||
import { Room } from "matrix-js-sdk/src/models/room";
 | 
			
		||||
import { EventSubscription } from "fbemitter";
 | 
			
		||||
 | 
			
		||||
import MatrixClientContext from "../../contexts/MatrixClientContext";
 | 
			
		||||
import RoomAvatar from "../views/avatars/RoomAvatar";
 | 
			
		||||
import {_t} from "../../languageHandler";
 | 
			
		||||
import { _t } from "../../languageHandler";
 | 
			
		||||
import AccessibleButton from "../views/elements/AccessibleButton";
 | 
			
		||||
import RoomName from "../views/elements/RoomName";
 | 
			
		||||
import RoomTopic from "../views/elements/RoomTopic";
 | 
			
		||||
import InlineSpinner from "../views/elements/InlineSpinner";
 | 
			
		||||
import {inviteMultipleToRoom, showRoomInviteDialog} from "../../RoomInvite";
 | 
			
		||||
import {useRoomMembers} from "../../hooks/useRoomMembers";
 | 
			
		||||
import createRoom, {IOpts} from "../../createRoom";
 | 
			
		||||
import { inviteMultipleToRoom, showRoomInviteDialog } from "../../RoomInvite";
 | 
			
		||||
import { useRoomMembers } from "../../hooks/useRoomMembers";
 | 
			
		||||
import createRoom, { IOpts } from "../../createRoom";
 | 
			
		||||
import Field from "../views/elements/Field";
 | 
			
		||||
import {useEventEmitter} from "../../hooks/useEventEmitter";
 | 
			
		||||
import { useEventEmitter } from "../../hooks/useEventEmitter";
 | 
			
		||||
import withValidation from "../views/elements/Validation";
 | 
			
		||||
import * as Email from "../../email";
 | 
			
		||||
import defaultDispatcher from "../../dispatcher/dispatcher";
 | 
			
		||||
import {Action} from "../../dispatcher/actions";
 | 
			
		||||
import dis from "../../dispatcher/dispatcher";
 | 
			
		||||
import { Action } from "../../dispatcher/actions";
 | 
			
		||||
import ResizeNotifier from "../../utils/ResizeNotifier"
 | 
			
		||||
import MainSplit from './MainSplit';
 | 
			
		||||
import ErrorBoundary from "../views/elements/ErrorBoundary";
 | 
			
		||||
import {ActionPayload} from "../../dispatcher/payloads";
 | 
			
		||||
import { ActionPayload } from "../../dispatcher/payloads";
 | 
			
		||||
import RightPanel from "./RightPanel";
 | 
			
		||||
import RightPanelStore from "../../stores/RightPanelStore";
 | 
			
		||||
import {RightPanelPhases} from "../../stores/RightPanelStorePhases";
 | 
			
		||||
import {SetRightPanelPhasePayload} from "../../dispatcher/payloads/SetRightPanelPhasePayload";
 | 
			
		||||
import {useStateArray} from "../../hooks/useStateArray";
 | 
			
		||||
import { RightPanelPhases } from "../../stores/RightPanelStorePhases";
 | 
			
		||||
import { SetRightPanelPhasePayload } from "../../dispatcher/payloads/SetRightPanelPhasePayload";
 | 
			
		||||
import { useStateArray } from "../../hooks/useStateArray";
 | 
			
		||||
import SpacePublicShare from "../views/spaces/SpacePublicShare";
 | 
			
		||||
import {showAddExistingRooms, showCreateNewRoom, shouldShowSpaceSettings, showSpaceSettings} from "../../utils/space";
 | 
			
		||||
import {showRoom, SpaceHierarchy} from "./SpaceRoomDirectory";
 | 
			
		||||
import { shouldShowSpaceSettings, showAddExistingRooms, showCreateNewRoom, showSpaceSettings } from "../../utils/space";
 | 
			
		||||
import { showRoom, SpaceHierarchy } from "./SpaceRoomDirectory";
 | 
			
		||||
import MemberAvatar from "../views/avatars/MemberAvatar";
 | 
			
		||||
import {useStateToggle} from "../../hooks/useStateToggle";
 | 
			
		||||
import { useStateToggle } from "../../hooks/useStateToggle";
 | 
			
		||||
import SpaceStore from "../../stores/SpaceStore";
 | 
			
		||||
import FacePile from "../views/elements/FacePile";
 | 
			
		||||
import {AddExistingToSpace} from "../views/dialogs/AddExistingToSpaceDialog";
 | 
			
		||||
import {ChevronFace, ContextMenuButton, useContextMenu} from "./ContextMenu";
 | 
			
		||||
import { AddExistingToSpace } from "../views/dialogs/AddExistingToSpaceDialog";
 | 
			
		||||
import { ChevronFace, ContextMenuButton, useContextMenu } from "./ContextMenu";
 | 
			
		||||
import IconizedContextMenu, {
 | 
			
		||||
    IconizedContextMenuOption,
 | 
			
		||||
    IconizedContextMenuOptionList,
 | 
			
		||||
} from "../views/context_menus/IconizedContextMenu";
 | 
			
		||||
import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton";
 | 
			
		||||
import {BetaPill} from "../views/beta/BetaCard";
 | 
			
		||||
import { BetaPill } from "../views/beta/BetaCard";
 | 
			
		||||
import { UserTab } from "../views/dialogs/UserSettingsDialog";
 | 
			
		||||
import SettingsStore from "../../settings/SettingsStore";
 | 
			
		||||
import dis from "../../dispatcher/dispatcher";
 | 
			
		||||
import Modal from "../../Modal";
 | 
			
		||||
import BetaFeedbackDialog from "../views/dialogs/BetaFeedbackDialog";
 | 
			
		||||
import SdkConfig from "../../SdkConfig";
 | 
			
		||||
import { Preset } from "matrix-js-sdk/src/@types/partials";
 | 
			
		||||
import { EffectiveMembership, getEffectiveMembership } from "../../utils/membership";
 | 
			
		||||
import { JoinRule } from "../views/settings/tabs/room/SecurityRoomSettingsTab";
 | 
			
		||||
 | 
			
		||||
interface IProps {
 | 
			
		||||
    space: Room;
 | 
			
		||||
@@ -178,6 +180,9 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) =>
 | 
			
		||||
 | 
			
		||||
    const spacesEnabled = SettingsStore.getValue("feature_spaces");
 | 
			
		||||
 | 
			
		||||
    const cannotJoin = getEffectiveMembership(myMembership) === EffectiveMembership.Leave
 | 
			
		||||
        && space.getJoinRule() !== JoinRule.Public;
 | 
			
		||||
 | 
			
		||||
    let inviterSection;
 | 
			
		||||
    let joinButtons;
 | 
			
		||||
    if (myMembership === "join") {
 | 
			
		||||
@@ -244,7 +249,7 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) =>
 | 
			
		||||
                    setBusy(true);
 | 
			
		||||
                    onJoinButtonClicked();
 | 
			
		||||
                }}
 | 
			
		||||
                disabled={!spacesEnabled}
 | 
			
		||||
                disabled={!spacesEnabled || cannotJoin}
 | 
			
		||||
            >
 | 
			
		||||
                { _t("Join") }
 | 
			
		||||
            </AccessibleButton>
 | 
			
		||||
@@ -255,6 +260,30 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) =>
 | 
			
		||||
        joinButtons = <InlineSpinner />;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let footer;
 | 
			
		||||
    if (!spacesEnabled) {
 | 
			
		||||
        footer = <div className="mx_SpaceRoomView_preview_spaceBetaPrompt">
 | 
			
		||||
            { myMembership === "join"
 | 
			
		||||
                ? _t("To view %(spaceName)s, turn on the <a>Spaces beta</a>", {
 | 
			
		||||
                    spaceName: space.name,
 | 
			
		||||
                }, {
 | 
			
		||||
                    a: sub => <AccessibleButton onClick={onBetaClick} kind="link">{ sub }</AccessibleButton>,
 | 
			
		||||
                })
 | 
			
		||||
                : _t("To join %(spaceName)s, turn on the <a>Spaces beta</a>", {
 | 
			
		||||
                    spaceName: space.name,
 | 
			
		||||
                }, {
 | 
			
		||||
                    a: sub => <AccessibleButton onClick={onBetaClick} kind="link">{ sub }</AccessibleButton>,
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
        </div>;
 | 
			
		||||
    } else if (cannotJoin) {
 | 
			
		||||
        footer = <div className="mx_SpaceRoomView_preview_spaceBetaPrompt">
 | 
			
		||||
            { _t("To view %(spaceName)s, you need an invite", {
 | 
			
		||||
                spaceName: space.name,
 | 
			
		||||
            }) }
 | 
			
		||||
        </div>;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return <div className="mx_SpaceRoomView_preview">
 | 
			
		||||
        <BetaPill onClick={onBetaClick} />
 | 
			
		||||
        { inviterSection }
 | 
			
		||||
@@ -274,20 +303,7 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) =>
 | 
			
		||||
        <div className="mx_SpaceRoomView_preview_joinButtons">
 | 
			
		||||
            { joinButtons }
 | 
			
		||||
        </div>
 | 
			
		||||
        { !spacesEnabled && <div className="mx_SpaceRoomView_preview_spaceBetaPrompt">
 | 
			
		||||
            { myMembership === "join"
 | 
			
		||||
                ? _t("To view %(spaceName)s, turn on the <a>Spaces beta</a>", {
 | 
			
		||||
                    spaceName: space.name,
 | 
			
		||||
                }, {
 | 
			
		||||
                    a: sub => <AccessibleButton onClick={onBetaClick} kind="link">{ sub }</AccessibleButton>,
 | 
			
		||||
                })
 | 
			
		||||
                : _t("To join %(spaceName)s, turn on the <a>Spaces beta</a>", {
 | 
			
		||||
                    spaceName: space.name,
 | 
			
		||||
                }, {
 | 
			
		||||
                    a: sub => <AccessibleButton onClick={onBetaClick} kind="link">{ sub }</AccessibleButton>,
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
        </div> }
 | 
			
		||||
        { footer }
 | 
			
		||||
    </div>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user