mirror of https://github.com/vector-im/riot-web
				
				
				
			Show spaces beta prompt when viewing a space without the beta
							parent
							
								
									505b200a87
								
							
						
					
					
						commit
						18a01d9271
					
				|  | @ -123,6 +123,28 @@ $SpaceRoomViewInnerWidth: 428px; | |||
|         box-sizing: border-box; | ||||
|         box-shadow: 2px 15px 30px $dialog-shadow-color; | ||||
|         border-radius: 8px; | ||||
|         position: relative; | ||||
| 
 | ||||
|         // XXX remove this when spaces leaves Beta | ||||
|         .mx_BetaCard_betaPill { | ||||
|             position: absolute; | ||||
|             right: 24px; | ||||
|             top: 32px; | ||||
|         } | ||||
|         // XXX remove this when spaces leaves Beta | ||||
|         .mx_SpaceRoomView_preview_spaceBetaPrompt { | ||||
|             font-size: $font-15px; | ||||
|             line-height: $font-24px; | ||||
|             color: $secondary-fg-color; | ||||
|             margin-top: 14px; | ||||
| 
 | ||||
|             .mx_AccessibleButton_kind_link { | ||||
|                 display: inline; | ||||
|                 padding: 0; | ||||
|                 font-size: inherit; | ||||
|                 line-height: inherit; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         .mx_SpaceRoomView_preview_inviter { | ||||
|             display: flex; | ||||
|  |  | |||
|  | @ -69,6 +69,10 @@ limitations under the License. | |||
|     color: #FFFFFF; | ||||
|     display: inline-block; | ||||
|     vertical-align: text-bottom; | ||||
| 
 | ||||
|     &.mx_BetaCard_betaPill_clickable { | ||||
|         cursor: pointer; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| $pulse-color: $accent-color-alt; | ||||
|  |  | |||
|  | @ -1910,7 +1910,7 @@ export default class RoomView extends React.Component<IProps, IState> { | |||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         if (SettingsStore.getValue("feature_spaces") && this.state.room?.isSpaceRoom()) { | ||||
|         if (this.state.room?.isSpaceRoom()) { | ||||
|             return <SpaceRoomView | ||||
|                 space={this.state.room} | ||||
|                 justCreatedOpts={this.props.justCreatedOpts} | ||||
|  |  | |||
|  | @ -51,6 +51,10 @@ import MemberAvatar from "../views/avatars/MemberAvatar"; | |||
| import {useStateToggle} from "../../hooks/useStateToggle"; | ||||
| import SpaceStore from "../../stores/SpaceStore"; | ||||
| import FacePile from "../views/elements/FacePile"; | ||||
| import {BetaPill} from "../views/beta/BetaCard"; | ||||
| import {USER_LABS_TAB} from "../views/dialogs/UserSettingsDialog"; | ||||
| import SettingsStore from "../../settings/SettingsStore"; | ||||
| import dis from "../../dispatcher/dispatcher"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     space: Room; | ||||
|  | @ -127,15 +131,40 @@ const SpaceInfo = ({ space }) => { | |||
|     </div> | ||||
| }; | ||||
| 
 | ||||
| const onBetaClick = () => { | ||||
|     defaultDispatcher.dispatch({ | ||||
|         action: Action.ViewUserSettings, | ||||
|         initialTabId: USER_LABS_TAB, | ||||
|     }); | ||||
| }; | ||||
| 
 | ||||
| const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) => { | ||||
|     const cli = useContext(MatrixClientContext); | ||||
|     const myMembership = useMyRoomMembership(space); | ||||
| 
 | ||||
|     const [busy, setBusy] = useState(false); | ||||
| 
 | ||||
|     const spacesEnabled = SettingsStore.getValue("feature_spaces"); | ||||
| 
 | ||||
|     let inviterSection; | ||||
|     let joinButtons; | ||||
|     if (myMembership === "invite") { | ||||
|     if (myMembership === "join") { | ||||
|         // XXX remove this when spaces leaves Beta
 | ||||
|         joinButtons = ( | ||||
|             <AccessibleButton | ||||
|                 kind="danger" | ||||
|                 onClick={() => { | ||||
|                     setBusy(true); | ||||
|                     dis.dispatch({ | ||||
|                         action: "leave_room", | ||||
|                         room_id: space.roomId, | ||||
|                     }); | ||||
|                 }} | ||||
|             > | ||||
|                 { _t("Leave") } | ||||
|             </AccessibleButton> | ||||
|         ); | ||||
|     } else if (myMembership === "invite") { | ||||
|         const inviteSender = space.getMember(cli.getUserId())?.events.member?.getSender(); | ||||
|         const inviter = inviteSender && space.getMember(inviteSender); | ||||
| 
 | ||||
|  | @ -171,6 +200,7 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) => | |||
|                     setBusy(true); | ||||
|                     onJoinButtonClicked(); | ||||
|                 }} | ||||
|                 disabled={!spacesEnabled} | ||||
|             > | ||||
|                 { _t("Accept") } | ||||
|             </AccessibleButton> | ||||
|  | @ -183,10 +213,11 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) => | |||
|                     setBusy(true); | ||||
|                     onJoinButtonClicked(); | ||||
|                 }} | ||||
|                 disabled={!spacesEnabled} | ||||
|             > | ||||
|                 { _t("Join") } | ||||
|             </AccessibleButton> | ||||
|         ) | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     if (busy) { | ||||
|  | @ -194,6 +225,7 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }) => | |||
|     } | ||||
| 
 | ||||
|     return <div className="mx_SpaceRoomView_preview"> | ||||
|         <BetaPill onClick={onBetaClick} /> | ||||
|         { inviterSection } | ||||
|         <RoomAvatar room={space} height={80} width={80} viewAvatarOnClick={true} /> | ||||
|         <h1 className="mx_SpaceRoomView_preview_name"> | ||||
|  | @ -211,6 +243,20 @@ 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> } | ||||
|     </div>; | ||||
| }; | ||||
| 
 | ||||
|  | @ -631,7 +677,7 @@ export default class SpaceRoomView extends React.PureComponent<IProps, IState> { | |||
|     private renderBody() { | ||||
|         switch (this.state.phase) { | ||||
|             case Phase.Landing: | ||||
|                 if (this.state.myMembership === "join") { | ||||
|                 if (this.state.myMembership === "join" && SettingsStore.getValue("feature_spaces")) { | ||||
|                     return <SpaceLanding space={this.props.space} />; | ||||
|                 } else { | ||||
|                     return <SpacePreview | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ limitations under the License. | |||
| */ | ||||
| 
 | ||||
| import React from "react"; | ||||
| import classNames from "classnames"; | ||||
| 
 | ||||
| import {_t} from "../../../languageHandler"; | ||||
| import AccessibleButton from "../elements/AccessibleButton"; | ||||
|  | @ -27,7 +28,12 @@ interface IProps { | |||
| } | ||||
| 
 | ||||
| export const BetaPill = ({ onClick }: { onClick?: () => void }) => { | ||||
|     return <span className="mx_BetaCard_betaPill" onClick={onClick}> | ||||
|     return <span | ||||
|         className={classNames("mx_BetaCard_betaPill", { | ||||
|             mx_BetaCard_betaPill_clickable: !!onClick, | ||||
|         })} | ||||
|         onClick={onClick} | ||||
|     > | ||||
|         { _t("Beta") } | ||||
|     </span>; | ||||
| }; | ||||
|  |  | |||
|  | @ -2660,6 +2660,8 @@ | |||
|     "Public space": "Public space", | ||||
|     "Private space": "Private space", | ||||
|     "<inviter/> invites you": "<inviter/> invites you", | ||||
|     "To view %(spaceName)s, turn on the <a>Spaces beta</a>": "To view %(spaceName)s, turn on the <a>Spaces beta</a>", | ||||
|     "To join %(spaceName)s, turn on the <a>Spaces beta</a>": "To join %(spaceName)s, turn on the <a>Spaces beta</a>", | ||||
|     "Add existing rooms & spaces": "Add existing rooms & spaces", | ||||
|     "Welcome to <name/>": "Welcome to <name/>", | ||||
|     "Random": "Random", | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Michael Telatynski
						Michael Telatynski