From ddcbbfd75db314476435677350cbe7879eeece90 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 27 Apr 2022 11:17:47 -0400 Subject: [PATCH 01/20] Remove blank header from video room view frame --- res/css/structures/_VideoRoomView.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/res/css/structures/_VideoRoomView.scss b/res/css/structures/_VideoRoomView.scss index d99b3f5894b..3577e7b73e1 100644 --- a/res/css/structures/_VideoRoomView.scss +++ b/res/css/structures/_VideoRoomView.scss @@ -24,8 +24,7 @@ limitations under the License. margin-right: calc($container-gap-width / 2); background-color: $header-panel-bg-color; - padding-top: 33px; // to match the right panel chat heading - border: 8px solid $header-panel-bg-color; + padding: 8px; border-radius: 8px; .mx_AppTile { From bd066a62086acafef56104e8a401be682e04f5e3 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 27 Apr 2022 11:36:56 -0400 Subject: [PATCH 02/20] Add a beta card for video rooms --- res/img/betas/video_rooms.png | Bin 0 -> 221952 bytes src/i18n/strings/en_EN.json | 10 +++++++-- src/settings/Settings.tsx | 37 +++++++++++++++++++++++++--------- 3 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 res/img/betas/video_rooms.png diff --git a/res/img/betas/video_rooms.png b/res/img/betas/video_rooms.png new file mode 100644 index 0000000000000000000000000000000000000000..02a9e8c86b70bce7458ab423ad7b94979b996396 GIT binary patch literal 221952 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Бbhh2^hgZSHUC}i)IMYB$O|iLr_i(kwMYJ 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
Ib)L85?Gy|#{44QX$_TSM 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
3Lolxbr$+S+l}{y>-kUJ%+v0 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 literal 0 HcmV?d00001 diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 7223ad37922..98c1cd94dcb 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -868,6 +868,14 @@ "Encryption": "Encryption", "Experimental": "Experimental", "Developer": "Developer", + "Video rooms": "Video rooms", + "A new way to chat over voice and video in Element.": "A new way to chat over voice and video in Element.", + "Video rooms are always-on VoIP channels embedded within a room in Element.": "Video rooms are always-on VoIP channels embedded within a room in Element.", + "How can I create a video room?": "How can I create a video room?", + "Use the “+” button in the room section of the left panel.": "Use the “+” button in the room section of the left panel.", + "Can I use text chat alongside the video call?": "Can I use text chat alongside the video call?", + "Yes, the chat timeline is displayed alongside the video.": "Yes, the chat timeline is displayed alongside the video.", + "Thank you for trying the beta, please go into as much detail as you can so we can improve it.": "Thank you for trying the beta, please go into as much detail as you can so we can improve it.", "Let moderators hide messages pending moderation.": "Let moderators hide messages pending moderation.", "Report to moderators prototype. In rooms that support moderation, the `report` button will let you report abuse to room moderators": "Report to moderators prototype. In rooms that support moderation, the `report` button will let you report abuse to room moderators", "Show options to enable 'Do not disturb' mode": "Show options to enable 'Do not disturb' mode", @@ -882,9 +890,7 @@ "How can I leave the beta?": "How can I leave the beta?", "To leave, return to this page and use the “%(leaveTheBeta)s” button.": "To leave, return to this page and use the “%(leaveTheBeta)s” button.", "Leave the beta": "Leave the beta", - "Thank you for trying the beta, please go into as much detail as you can so we can improve it.": "Thank you for trying the beta, please go into as much detail as you can so we can improve it.", "Custom user status messages": "Custom user status messages", - "Video rooms (under active development)": "Video rooms (under active development)", "Render simple counters in room header": "Render simple counters in room header", "Multiple integration managers (requires manual setup)": "Multiple integration managers (requires manual setup)", "Try out new ways to ignore people (experimental)": "Try out new ways to ignore people (experimental)", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index e4247908ddf..25c53f463dd 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -184,6 +184,34 @@ export interface IFeature extends Omit, "isFeature"> { export type ISetting = IBaseSetting | IFeature; export const SETTINGS: {[setting: string]: ISetting} = { + "feature_video_rooms": { + isFeature: true, + labsGroup: LabGroup.Rooms, + displayName: _td("Video rooms"), + supportedLevels: LEVELS_FEATURE, + default: false, + // Reload to ensure that the left panel etc. get remounted + controller: new ReloadOnChangeController(), + betaInfo: { + title: _td("Video rooms"), + caption: () => <> +

{ _t("A new way to chat over voice and video in Element.") }

+

{ _t("Video rooms are always-on VoIP channels embedded within a room in Element.") }

+ , + disclaimer: () => + SdkConfig.get().bug_report_endpoint_url && <> +

{ _t("How can I create a video room?") }

+

{ _t("Use the “+” button in the room section of the left panel.") }

+

{ _t("Can I use text chat alongside the video call?") }

+

{ _t("Yes, the chat timeline is displayed alongside the video.") }

+ , + feedbackLabel: "video-room-feedback", + feedbackSubheading: _td("Thank you for trying the beta, " + + "please go into as much detail as you can so we can improve it."), + image: require("../../res/img/betas/video_rooms.png"), + requiresRefresh: true, + }, + }, "feature_msc3531_hide_messages_pending_moderation": { isFeature: true, labsGroup: LabGroup.Moderation, @@ -270,15 +298,6 @@ export const SETTINGS: {[setting: string]: ISetting} = { default: false, controller: new CustomStatusController(), }, - "feature_video_rooms": { - isFeature: true, - labsGroup: LabGroup.Rooms, - displayName: _td("Video rooms (under active development)"), - supportedLevels: LEVELS_FEATURE, - default: false, - // Reload to ensure that the left panel etc. get remounted - controller: new ReloadOnChangeController(), - }, "feature_state_counters": { isFeature: true, labsGroup: LabGroup.Rooms, From 7b0771674a87effeebe49c662c2b2b2094f3400e Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 27 Apr 2022 11:43:00 -0400 Subject: [PATCH 03/20] Rename the 'disclaimer' on beta cards to 'FAQ' Because that's what the section actually gets used as --- res/css/views/beta/_BetaCard.scss | 2 +- src/components/views/beta/BetaCard.tsx | 6 +++--- src/settings/Settings.tsx | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/res/css/views/beta/_BetaCard.scss b/res/css/views/beta/_BetaCard.scss index 658e43f051b..524b929795c 100644 --- a/res/css/views/beta/_BetaCard.scss +++ b/res/css/views/beta/_BetaCard.scss @@ -66,7 +66,7 @@ limitations under the License. } } - .mx_BetaCard_disclaimer { + .mx_BetaCard_faq { font-size: $font-12px; line-height: $font-15px; color: $secondary-content; diff --git a/src/components/views/beta/BetaCard.tsx b/src/components/views/beta/BetaCard.tsx index 4639886b701..7285a0e0902 100644 --- a/src/components/views/beta/BetaCard.tsx +++ b/src/components/views/beta/BetaCard.tsx @@ -80,7 +80,7 @@ const BetaCard = ({ title: titleOverride, featureId }: IProps) => { const { title, caption, - disclaimer, + faq, image, feedbackLabel, feedbackSubheading, @@ -138,8 +138,8 @@ const BetaCard = ({ title: titleOverride, featureId }: IProps) => { { content } - { disclaimer &&
- { disclaimer(value) } + { faq &&
+ { faq(value) }
}
diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 25c53f463dd..a22a2ff37b0 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -165,7 +165,7 @@ export interface IBaseSetting { betaInfo?: { title: string; // _td caption: () => ReactNode; - disclaimer?: (enabled: boolean) => ReactNode; + faq?: (enabled: boolean) => ReactNode; image?: string; // require(...) feedbackSubheading?: string; feedbackLabel?: string; @@ -198,7 +198,7 @@ export const SETTINGS: {[setting: string]: ISetting} = {

{ _t("A new way to chat over voice and video in Element.") }

{ _t("Video rooms are always-on VoIP channels embedded within a room in Element.") }

, - disclaimer: () => + faq: () => SdkConfig.get().bug_report_endpoint_url && <>

{ _t("How can I create a video room?") }

{ _t("Use the “+” button in the room section of the left panel.") }

@@ -267,7 +267,7 @@ export const SETTINGS: {[setting: string]: ISetting} = {
, }) }

, - disclaimer: () => + faq: () => SdkConfig.get().bug_report_endpoint_url && <>

{ _t("How can I start a thread?") }

@@ -402,7 +402,7 @@ export const SETTINGS: {[setting: string]: ISetting} = {

{ _t("A new, quick way to search spaces and rooms you're in.") }

{ _t("This feature is a work in progress, we'd love to hear your feedback.") }

, - disclaimer: () => <> + faq: () => <> { SdkConfig.get().bug_report_endpoint_url && <>

{ _t("How can I give feedback?") }

{ _t("To feedback, join the beta, start a search and click on feedback.") }

From fb7b486f2c79519a5264935422e06902404ec8c3 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 27 Apr 2022 13:40:39 -0400 Subject: [PATCH 04/20] Add beta pills to video room creation buttons --- src/components/structures/SpaceRoomView.tsx | 30 +++++---- .../views/context_menus/SpaceContextMenu.tsx | 21 ++++++- src/components/views/rooms/RoomList.tsx | 61 +++++++++++-------- src/components/views/rooms/RoomListHeader.tsx | 54 +++++++++------- src/i18n/strings/en_EN.json | 1 + 5 files changed, 104 insertions(+), 63 deletions(-) diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index 1e9d5caa0cf..8e09f7ecaae 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -339,19 +339,23 @@ const SpaceLandingAddButton = ({ space }) => { } }} /> - { videoRoomsEnabled && { - e.preventDefault(); - e.stopPropagation(); - closeMenu(); - - if (await showCreateNewRoom(space, RoomType.ElementVideo)) { - defaultDispatcher.fire(Action.UpdateSpaceHierarchy); - } - }} - /> } + { videoRoomsEnabled && ( + { + e.preventDefault(); + e.stopPropagation(); + closeMenu(); + + if (await showCreateNewRoom(space, RoomType.ElementVideo)) { + defaultDispatcher.fire(Action.UpdateSpaceHierarchy); + } + }} + > + + + ) } } { + ev.preventDefault(); + ev.stopPropagation(); + + showCreateNewRoom(space, RoomType.ElementVideo); + onFinished(); + }; + const onNewSubspaceClick = (ev: ButtonEvent) => { ev.preventDefault(); ev.stopPropagation(); @@ -169,6 +178,16 @@ const SpaceContextMenu = ({ space, hideHeader, onFinished, ...props }: IProps) = onClick={onNewRoomClick} /> } + { canAddVideoRooms && + + + + } { canAddSubSpaces && { tooltip={canAddRooms ? undefined : _t("You do not have permissions to create new rooms in this space")} /> - { SettingsStore.getValue("feature_video_rooms") && { - e.preventDefault(); - e.stopPropagation(); - closeMenu(); - showCreateNewRoom(activeSpace, RoomType.ElementVideo); - }} - disabled={!canAddRooms} - tooltip={canAddRooms ? undefined - : _t("You do not have permissions to create new rooms in this space")} - /> } + { SettingsStore.getValue("feature_video_rooms") && ( + { + e.preventDefault(); + e.stopPropagation(); + closeMenu(); + showCreateNewRoom(activeSpace, RoomType.ElementVideo); + }} + disabled={!canAddRooms} + tooltip={canAddRooms ? undefined + : _t("You do not have permissions to create new rooms in this space")} + > + + + ) } { PosthogTrackers.trackInteraction("WebRoomListRoomsSublistPlusMenuCreateRoomItem", e); }} /> - { SettingsStore.getValue("feature_video_rooms") && { - e.preventDefault(); - e.stopPropagation(); - closeMenu(); - defaultDispatcher.dispatch({ - action: "view_create_room", - type: RoomType.ElementVideo, - }); - }} - /> } + { SettingsStore.getValue("feature_video_rooms") && ( + { + e.preventDefault(); + e.stopPropagation(); + closeMenu(); + defaultDispatcher.dispatch({ + action: "view_create_room", + type: RoomType.ElementVideo, + }); + }} + > + + + ) } } { closePlusMenu(); }} /> - { videoRoomsEnabled && { - e.preventDefault(); - e.stopPropagation(); - showCreateNewRoom(activeSpace, RoomType.ElementVideo); - closePlusMenu(); - }} - /> } + { videoRoomsEnabled && ( + { + e.preventDefault(); + e.stopPropagation(); + showCreateNewRoom(activeSpace, RoomType.ElementVideo); + closePlusMenu(); + }} + > + + + ) } ; } @@ -312,19 +316,23 @@ const RoomListHeader = ({ onVisibilityChange }: IProps) => { closePlusMenu(); }} /> - { videoRoomsEnabled && { - e.preventDefault(); - e.stopPropagation(); - defaultDispatcher.dispatch({ - action: "view_create_room", - type: RoomType.ElementVideo, - }); - closePlusMenu(); - }} - /> } + { videoRoomsEnabled && ( + { + e.preventDefault(); + e.stopPropagation(); + defaultDispatcher.dispatch({ + action: "view_create_room", + type: RoomType.ElementVideo, + }); + closePlusMenu(); + }} + > + + + ) } ; } if (canExploreRooms) { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 98c1cd94dcb..cfee1989782 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2923,6 +2923,7 @@ "Forget": "Forget", "Mentions only": "Mentions only", "See room timeline (devtools)": "See room timeline (devtools)", + "Video room": "Video room", "Space": "Space", "Space home": "Space home", "Manage & explore rooms": "Manage & explore rooms", From c99792d42ca77c49ca5cb472583968296c66188c Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 27 Apr 2022 13:53:47 -0400 Subject: [PATCH 05/20] Remove duplicate tooltips from face piles --- src/components/views/elements/FacePile.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/views/elements/FacePile.tsx b/src/components/views/elements/FacePile.tsx index 566eddbe07e..c9b9f634d2f 100644 --- a/src/components/views/elements/FacePile.tsx +++ b/src/components/views/elements/FacePile.tsx @@ -31,10 +31,16 @@ interface IProps extends HTMLAttributes { const FacePile: FC = ({ members, faceSize, overflow, tooltip, children, ...props }) => { const faces = members.map( - tooltip ? - m => : - m => - + tooltip + ? m => + : m => + , ); From 50bd2cd5456258db60b3ac954b738ad96bd92702 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 2 May 2022 10:47:12 -0400 Subject: [PATCH 06/20] Add beta pill to headers of video rooms --- res/css/views/rooms/_RoomHeader.scss | 4 ++++ src/components/views/rooms/RoomHeader.tsx | 14 ++++++++++++++ src/i18n/strings/en_EN.json | 1 + 3 files changed, 19 insertions(+) diff --git a/res/css/views/rooms/_RoomHeader.scss b/res/css/views/rooms/_RoomHeader.scss index 85c139402be..e1456e6662b 100644 --- a/res/css/views/rooms/_RoomHeader.scss +++ b/res/css/views/rooms/_RoomHeader.scss @@ -44,6 +44,10 @@ limitations under the License. .mx_InviteOnlyIcon_large { margin: 0; } + + .mx_BetaCard_betaPill { + margin-right: $spacing-8; + } } .mx_RoomHeader_spinner { diff --git a/src/components/views/rooms/RoomHeader.tsx b/src/components/views/rooms/RoomHeader.tsx index 9983b6f39c3..ecfaafca156 100644 --- a/src/components/views/rooms/RoomHeader.tsx +++ b/src/components/views/rooms/RoomHeader.tsx @@ -23,6 +23,9 @@ import { CallType } from "matrix-js-sdk/src/webrtc/call"; import { _t } from '../../../languageHandler'; import { MatrixClientPeg } from '../../../MatrixClientPeg'; +import defaultDispatcher from "../../../dispatcher/dispatcher"; +import { Action } from "../../../dispatcher/actions"; +import { UserTab } from "../dialogs/UserTab"; import SettingsStore from "../../../settings/SettingsStore"; import RoomHeaderButtons from '../right_panel/RoomHeaderButtons'; import E2EIcon from './E2EIcon'; @@ -41,6 +44,7 @@ import { RightPanelPhases } from '../../../stores/right-panel/RightPanelStorePha import { NotificationStateEvents } from '../../../stores/notifications/NotificationState'; import RoomContext from "../../../contexts/RoomContext"; import RoomLiveShareWarning from '../beacon/RoomLiveShareWarning'; +import { BetaPill } from "../beta/BetaCard"; export interface ISearchInfo { searchTerm: string; @@ -273,6 +277,15 @@ export default class RoomHeader extends React.Component { const e2eIcon = this.props.e2eStatus ? : undefined; + const isVideoRoom = SettingsStore.getValue("feature_video_rooms") && this.props.room.isElementVideoRoom(); + const viewLabs = () => defaultDispatcher.dispatch({ + action: Action.ViewUserSettings, + initialTabId: UserTab.Labs, + }); + const betaPill = isVideoRoom ? ( + + ) : null; + return (
@@ -281,6 +294,7 @@ export default class RoomHeader extends React.Component { { name } { searchStatus } { topicElement } + { betaPill } { rightRow }
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 180222e9773..5b4ef096c0c 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1790,6 +1790,7 @@ "Show Widgets": "Show Widgets", "Search": "Search", "Invite": "Invite", + "Video rooms are a beta feature": "Video rooms are a beta feature", "Start new chat": "Start new chat", "Invite to space": "Invite to space", "You do not have permissions to invite people to this space": "You do not have permissions to invite people to this space", From 59703c0656d86530a2464d5950ee14ccbde1cb52 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 2 May 2022 13:14:08 -0400 Subject: [PATCH 07/20] Factor RoomInfoLine out of SpaceRoomView --- res/css/_components.scss | 1 + res/css/structures/_SpaceRoomView.scss | 51 ------------ res/css/views/rooms/_RoomInfoLine.scss | 58 ++++++++++++++ src/components/structures/SpaceRoomView.tsx | 77 +----------------- src/components/views/rooms/RoomInfoLine.tsx | 86 +++++++++++++++++++++ src/hooks/useRoomMembers.ts | 15 +++- src/i18n/strings/en_EN.json | 13 ++-- 7 files changed, 168 insertions(+), 133 deletions(-) create mode 100644 res/css/views/rooms/_RoomInfoLine.scss create mode 100644 src/components/views/rooms/RoomInfoLine.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index 3f371478d12..26cf6ed80bc 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -255,6 +255,7 @@ @import "./views/rooms/_ReplyTile.scss"; @import "./views/rooms/_RoomBreadcrumbs.scss"; @import "./views/rooms/_RoomHeader.scss"; +@import "./views/rooms/_RoomInfoLine.scss"; @import "./views/rooms/_RoomList.scss"; @import "./views/rooms/_RoomListHeader.scss"; @import "./views/rooms/_RoomPreviewBar.scss"; diff --git a/res/css/structures/_SpaceRoomView.scss b/res/css/structures/_SpaceRoomView.scss index eed3d8830f6..dfb8f5f789f 100644 --- a/res/css/structures/_SpaceRoomView.scss +++ b/res/css/structures/_SpaceRoomView.scss @@ -137,23 +137,6 @@ $SpaceRoomViewInnerWidth: 428px; } } - .mx_SpaceRoomView_preview, - .mx_SpaceRoomView_landing { - .mx_SpaceRoomView_info_memberCount { - color: inherit; - position: relative; - padding: 0 0 0 16px; - font-size: $font-15px; - display: inline; // cancel inline-flex - - &::before { - content: "·"; // visual separator - position: absolute; - left: 6px; - } - } - } - .mx_SpaceRoomView_preview { padding: 32px 24px !important; // override default padding from above margin: auto; @@ -314,40 +297,6 @@ $SpaceRoomViewInnerWidth: 428px; flex-wrap: wrap; line-height: $font-24px; - .mx_SpaceRoomView_info { - color: $secondary-content; - font-size: $font-15px; - display: inline-block; - - .mx_SpaceRoomView_info_public, - .mx_SpaceRoomView_info_private { - padding-left: 20px; - position: relative; - - &::before { - position: absolute; - content: ""; - width: 20px; - height: 20px; - top: 0; - left: -2px; - mask-position: center; - mask-repeat: no-repeat; - background-color: $tertiary-content; - } - } - - .mx_SpaceRoomView_info_public::before { - mask-size: 12px; - mask-image: url("$(res)/img/globe.svg"); - } - - .mx_SpaceRoomView_info_private::before { - mask-size: 14px; - mask-image: url("$(res)/img/element-icons/lock.svg"); - } - } - .mx_SpaceRoomView_landing_infoBar_interactive { display: flex; flex-wrap: wrap; diff --git a/res/css/views/rooms/_RoomInfoLine.scss b/res/css/views/rooms/_RoomInfoLine.scss new file mode 100644 index 00000000000..5c0aea7c0bd --- /dev/null +++ b/res/css/views/rooms/_RoomInfoLine.scss @@ -0,0 +1,58 @@ +/* +Copyright 2022 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.mx_RoomInfoLine { + color: $secondary-content; + display: inline-block; + + &::before { + content: ""; + display: inline-block; + height: 1.2em; + mask-position-y: center; + mask-repeat: no-repeat; + background-color: $tertiary-content; + vertical-align: text-bottom; + margin-right: 6px; + } + + &.mx_RoomInfoLine_public::before { + width: 12px; + mask-size: 12px; + mask-image: url("$(res)/img/globe.svg"); + } + + &.mx_RoomInfoLine_private::before { + width: 14px; + mask-size: 14px; + mask-image: url("$(res)/img/element-icons/lock.svg"); + } + + &.mx_RoomInfoLine_video::before { + width: 16px; + mask-size: 16px; + mask-image: url("$(res)/img/element-icons/call/video-call.svg"); + } + + .mx_RoomInfoLine_members { + color: inherit; + + &::before { + content: "·"; // visual separator + margin: 0 6px; + } + } +} diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index 8e09f7ecaae..61a8c6e43b0 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -28,11 +28,9 @@ 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 { useFeatureEnabled } from "../../hooks/useSettings"; import createRoom, { IOpts } from "../../createRoom"; import Field from "../views/elements/Field"; -import { useTypedEventEmitter } from "../../hooks/useEventEmitter"; import withValidation from "../views/elements/Validation"; import * as Email from "../../email"; import defaultDispatcher from "../../dispatcher/dispatcher"; @@ -73,8 +71,9 @@ import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton"; import { BetaPill } from "../views/beta/BetaCard"; import { EffectiveMembership, getEffectiveMembership } from "../../utils/membership"; import { SpaceFeedbackPrompt } from "../views/spaces/SpaceCreateMenu"; -import { useAsyncMemo } from "../../hooks/useAsyncMemo"; +import RoomInfoLine from "../views/rooms/RoomInfoLine"; import { useDispatcher } from "../../hooks/useDispatcher"; +import { useMyRoomMembership } from "../../hooks/useRoomMembers"; import { useRoomState } from "../../hooks/useRoomState"; import { shouldShowComponent } from "../../customisations/helpers/UIComponents"; import { UIComponent } from "../../settings/UIFeature"; @@ -107,74 +106,6 @@ enum Phase { PrivateExistingRooms, } -const RoomMemberCount = ({ room, children }) => { - const members = useRoomMembers(room); - const count = members.length; - - if (children) return children(count); - return count; -}; - -const useMyRoomMembership = (room: Room) => { - const [membership, setMembership] = useState(room.getMyMembership()); - useTypedEventEmitter(room, RoomEvent.MyMembership, () => { - setMembership(room.getMyMembership()); - }); - return membership; -}; - -const SpaceInfo = ({ space }: { space: Room }) => { - // summary will begin as undefined whilst loading and go null if it fails to load or we are not invited. - const summary = useAsyncMemo(async () => { - if (space.getMyMembership() !== "invite") return null; - try { - return space.client.getRoomSummary(space.roomId); - } catch (e) { - return null; - } - }, [space]); - const joinRule = useRoomState(space, state => state.getJoinRule()); - const membership = useMyRoomMembership(space); - - let visibilitySection; - if (joinRule === JoinRule.Public) { - visibilitySection = - { _t("Public space") } - ; - } else { - visibilitySection = - { _t("Private space") } - ; - } - - let memberSection; - if (membership === "invite" && summary) { - // Don't trust local state and instead use the summary API - memberSection = - { _t("%(count)s members", { count: summary.num_joined_members }) } - ; - } else if (summary !== undefined) { // summary is not still loading - memberSection = - { (count) => count > 0 ? ( - { - RightPanelStore.instance.setCard({ phase: RightPanelPhases.SpaceMemberList }); - }} - > - { _t("%(count)s members", { count }) } - - ) : null } - ; - } - - return
- { visibilitySection } - { memberSection } -
; -}; - interface ISpacePreviewProps { space: Room; onJoinButtonClicked(): void; @@ -290,7 +221,7 @@ const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }: ISp

- + { (topic, ref) =>
@@ -456,7 +387,7 @@ const SpaceLanding = ({ space }: { space: Room }) => {
- +
{ inviteButton } diff --git a/src/components/views/rooms/RoomInfoLine.tsx b/src/components/views/rooms/RoomInfoLine.tsx new file mode 100644 index 00000000000..143df8a133d --- /dev/null +++ b/src/components/views/rooms/RoomInfoLine.tsx @@ -0,0 +1,86 @@ +/* +Copyright 2022 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React, { FC } from "react"; +import { Room } from "matrix-js-sdk/src/models/room"; +import { JoinRule } from "matrix-js-sdk/src/@types/partials"; + +import { _t } from "../../../languageHandler"; +import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; +import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases"; +import { useAsyncMemo } from "../../../hooks/useAsyncMemo"; +import { useRoomState } from "../../../hooks/useRoomState"; +import { useRoomMemberCount, useMyRoomMembership } from "../../../hooks/useRoomMembers"; +import AccessibleButton from "../elements/AccessibleButton"; + +interface IProps { + room: Room; +} + +const RoomInfoLine: FC = ({ room }) => { + // summary will begin as undefined whilst loading and go null if it fails to load or we are not invited. + const summary = useAsyncMemo(async () => { + if (room.getMyMembership() !== "invite") return null; + try { + return room.client.getRoomSummary(room.roomId); + } catch (e) { + return null; + } + }, [room]); + const joinRule = useRoomState(room, state => state.getJoinRule()); + const membership = useMyRoomMembership(room); + const memberCount = useRoomMemberCount(room); + + let iconClass; + let roomType; + if (room.isElementVideoRoom()) { + iconClass = "mx_RoomInfoLine_video"; + roomType = _t("Video room"); + } else if (joinRule === JoinRule.Public) { + iconClass = "mx_RoomInfoLine_public"; + roomType = room.isSpaceRoom() ? _t("Public space") : _t("Public room"); + } else { + iconClass = "mx_RoomInfoLine_private"; + roomType = room.isSpaceRoom() ? _t("Private space") : _t("Private room"); + } + + let members; + if (membership === "invite" && summary) { + // Don't trust local state and instead use the summary API + members = + { _t("%(count)s members", { count: summary.num_joined_members }) } + ; + } else if (memberCount && summary !== undefined) { // summary is not still loading + const viewMembers = () => RightPanelStore.instance.setCard({ + phase: room.isSpaceRoom() ? RightPanelPhases.SpaceMemberList : RightPanelPhases.RoomMemberList, + }); + + members = + { _t("%(count)s members", { count: memberCount }) } + ; + } + + return
+ { roomType } + { members } +
; +}; + +export default RoomInfoLine; diff --git a/src/hooks/useRoomMembers.ts b/src/hooks/useRoomMembers.ts index a2d4e0a2c8f..52dc3853b8f 100644 --- a/src/hooks/useRoomMembers.ts +++ b/src/hooks/useRoomMembers.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { useState } from "react"; -import { Room } from "matrix-js-sdk/src/models/room"; +import { Room, RoomEvent } from "matrix-js-sdk/src/models/room"; import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state"; import { throttle } from "lodash"; @@ -23,7 +23,7 @@ import { throttle } from "lodash"; import { useTypedEventEmitter } from "./useEventEmitter"; // Hook to simplify watching Matrix Room joined members -export const useRoomMembers = (room: Room, throttleWait = 250) => { +export const useRoomMembers = (room: Room, throttleWait = 250): RoomMember[] => { const [members, setMembers] = useState(room.getJoinedMembers()); useTypedEventEmitter(room.currentState, RoomStateEvent.Update, throttle(() => { setMembers(room.getJoinedMembers()); @@ -32,10 +32,19 @@ export const useRoomMembers = (room: Room, throttleWait = 250) => { }; // Hook to simplify watching Matrix Room joined member count -export const useRoomMemberCount = (room: Room, throttleWait = 250) => { +export const useRoomMemberCount = (room: Room, throttleWait = 250): number => { const [count, setCount] = useState(room.getJoinedMemberCount()); useTypedEventEmitter(room.currentState, RoomStateEvent.Update, throttle(() => { setCount(room.getJoinedMemberCount()); }, throttleWait, { leading: true, trailing: true })); return count; }; + +// Hook to simplify watching the local user's membership in a room +export const useMyRoomMembership = (room: Room): string => { + const [membership, setMembership] = useState(room.getMyMembership()); + useTypedEventEmitter(room, RoomEvent.MyMembership, () => { + setMembership(room.getMyMembership()); + }); + return membership; +}; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 5b4ef096c0c..6a49b52664d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1791,6 +1791,13 @@ "Search": "Search", "Invite": "Invite", "Video rooms are a beta feature": "Video rooms are a beta feature", + "Video room": "Video room", + "Public space": "Public space", + "Public room": "Public room", + "Private space": "Private space", + "Private room": "Private room", + "%(count)s members|other": "%(count)s members", + "%(count)s members|one": "%(count)s member", "Start new chat": "Start new chat", "Invite to space": "Invite to space", "You do not have permissions to invite people to this space": "You do not have permissions to invite people to this space", @@ -2478,7 +2485,6 @@ "Topic (optional)": "Topic (optional)", "Room visibility": "Room visibility", "Private room (invite only)": "Private room (invite only)", - "Public room": "Public room", "Visible to space members": "Visible to space members", "Block anyone not part of %(serverName)s from ever joining this room.": "Block anyone not part of %(serverName)s from ever joining this room.", "Create video room": "Create video room", @@ -2489,7 +2495,6 @@ "Add a space to a space you manage.": "Add a space to a space you manage.", "Space visibility": "Space visibility", "Private space (invite only)": "Private space (invite only)", - "Public space": "Public space", "Want to add an existing space instead?": "Want to add an existing space instead?", "Adding...": "Adding...", "Sign out": "Sign out", @@ -2657,8 +2662,6 @@ "Manually export keys": "Manually export keys", "You'll lose access to your encrypted messages": "You'll lose access to your encrypted messages", "Are you sure you want to sign out?": "Are you sure you want to sign out?", - "%(count)s members|other": "%(count)s members", - "%(count)s members|one": "%(count)s member", "%(count)s rooms|other": "%(count)s rooms", "%(count)s rooms|one": "%(count)s room", "You're removing all spaces. Access will default to invite only": "You're removing all spaces. Access will default to invite only", @@ -2929,7 +2932,6 @@ "Forget": "Forget", "Mentions only": "Mentions only", "See room timeline (devtools)": "See room timeline (devtools)", - "Video room": "Video room", "Space": "Space", "Space home": "Space home", "Manage & explore rooms": "Manage & explore rooms", @@ -3120,7 +3122,6 @@ "Results": "Results", "Rooms and spaces": "Rooms and spaces", "Search names and descriptions": "Search names and descriptions", - "Private space": "Private space", " invites you": " invites you", "To view %(spaceName)s, you need an invite": "To view %(spaceName)s, you need an invite", "Welcome to ": "Welcome to ", From 08db72609b273db859db20b158354e09a2e0eaeb Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 2 May 2022 14:31:02 -0400 Subject: [PATCH 08/20] Factor RoomPreviewCard out of SpaceRoomView --- res/css/_components.scss | 1 + res/css/structures/_SpaceRoomView.scss | 101 ----------- res/css/views/elements/_FacePile.scss | 3 + res/css/views/rooms/_RoomPreviewCard.scss | 116 ++++++++++++ src/components/structures/SpaceRoomView.tsx | 142 +-------------- .../views/rooms/RoomPreviewCard.tsx | 168 ++++++++++++++++++ src/i18n/strings/en_EN.json | 6 +- 7 files changed, 294 insertions(+), 243 deletions(-) create mode 100644 res/css/views/rooms/_RoomPreviewCard.scss create mode 100644 src/components/views/rooms/RoomPreviewCard.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index 26cf6ed80bc..6ceb4ef5a5a 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -259,6 +259,7 @@ @import "./views/rooms/_RoomList.scss"; @import "./views/rooms/_RoomListHeader.scss"; @import "./views/rooms/_RoomPreviewBar.scss"; +@import "./views/rooms/_RoomPreviewCard.scss"; @import "./views/rooms/_RoomSublist.scss"; @import "./views/rooms/_RoomTile.scss"; @import "./views/rooms/_RoomUpgradeWarningBar.scss"; diff --git a/res/css/structures/_SpaceRoomView.scss b/res/css/structures/_SpaceRoomView.scss index dfb8f5f789f..f4d37e0e246 100644 --- a/res/css/structures/_SpaceRoomView.scss +++ b/res/css/structures/_SpaceRoomView.scss @@ -137,107 +137,6 @@ $SpaceRoomViewInnerWidth: 428px; } } - .mx_SpaceRoomView_preview { - padding: 32px 24px !important; // override default padding from above - margin: auto; - max-width: 480px; - 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-weight: $font-semi-bold; - font-size: $font-14px; - line-height: $font-24px; - color: $primary-content; - margin-top: 24px; - position: relative; - padding-left: 24px; - - .mx_AccessibleButton_kind_link { - display: inline; - padding: 0; - font-size: inherit; - line-height: inherit; - } - - &::before { - content: ""; - position: absolute; - height: $font-24px; - width: 20px; - left: 0; - mask-repeat: no-repeat; - mask-position: center; - mask-size: contain; - mask-image: url('$(res)/img/element-icons/room/room-summary.svg'); - background-color: $secondary-content; - } - } - - .mx_SpaceRoomView_preview_inviter { - display: flex; - align-items: center; - margin-bottom: 20px; - font-size: $font-15px; - - > div { - margin-left: 8px; - - .mx_SpaceRoomView_preview_inviter_name { - line-height: $font-18px; - } - - .mx_SpaceRoomView_preview_inviter_mxid { - line-height: $font-24px; - color: $secondary-content; - } - } - } - - > .mx_RoomAvatar_isSpaceRoom { - &.mx_BaseAvatar_image, .mx_BaseAvatar_image { - border-radius: 12px; - } - } - - h1.mx_SpaceRoomView_preview_name { - margin: 20px 0 !important; // override default margin from above - } - - .mx_SpaceRoomView_preview_topic { - font-size: $font-14px; - line-height: $font-22px; - color: $secondary-content; - margin: 20px 0; - max-height: 160px; - overflow-y: auto; - } - - .mx_SpaceRoomView_preview_joinButtons { - margin-top: 20px; - - .mx_AccessibleButton { - width: 200px; - box-sizing: border-box; - padding: 14px 0; - - & + .mx_AccessibleButton { - margin-left: 20px; - } - } - } - } - .mx_SpaceRoomView_landing { display: flex; flex-direction: column; diff --git a/res/css/views/elements/_FacePile.scss b/res/css/views/elements/_FacePile.scss index 90f1c590a14..e40695fcf14 100644 --- a/res/css/views/elements/_FacePile.scss +++ b/res/css/views/elements/_FacePile.scss @@ -15,6 +15,9 @@ limitations under the License. */ .mx_FacePile { + display: flex; + align-items: center; + .mx_FacePile_faces { display: inline-flex; flex-direction: row-reverse; diff --git a/res/css/views/rooms/_RoomPreviewCard.scss b/res/css/views/rooms/_RoomPreviewCard.scss new file mode 100644 index 00000000000..4691df9aa47 --- /dev/null +++ b/res/css/views/rooms/_RoomPreviewCard.scss @@ -0,0 +1,116 @@ +/* +Copyright 2022 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.mx_RoomPreviewCard { + padding: 32px 24px !important; // override default padding from above + margin: auto; + max-width: 480px; + box-sizing: border-box; + background-color: $system; + border-radius: 8px; + position: relative; + font-size: $font-14px; + + // XXX Remove this when video rooms leave beta + .mx_BetaCard_betaPill { + position: absolute; + right: 24px; + top: 32px; + } + + .mx_RoomPreviewCard_cannotJoin { + font-weight: $font-semi-bold; + line-height: $font-24px; + color: $primary-content; + margin-top: 24px; + position: relative; + padding-left: 24px; + + .mx_AccessibleButton_kind_link { + display: inline; + padding: 0; + font-size: inherit; + line-height: inherit; + } + + &::before { + content: ""; + position: absolute; + height: $font-24px; + width: 20px; + left: 0; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + mask-image: url('$(res)/img/element-icons/room/room-summary.svg'); + background-color: $secondary-content; + } + } + + .mx_RoomPreviewCard_inviter { + display: flex; + align-items: center; + margin-bottom: 20px; + font-size: $font-15px; + + > div { + margin-left: 8px; + + .mx_RoomPreviewCard_inviter_name { + line-height: $font-18px; + } + + .mx_RoomPreviewCard_inviter_mxid { + color: $secondary-content; + } + } + } + + > .mx_RoomAvatar_isSpaceRoom { + &.mx_BaseAvatar_image, .mx_BaseAvatar_image { + border-radius: 12px; + } + } + + h1.mx_RoomPreviewCard_name { + margin: $spacing-16 0 !important; // override default margin from above + } + + .mx_RoomPreviewCard_topic { + line-height: $font-22px; + margin-top: $spacing-16; + max-height: 160px; + overflow-y: auto; + } + + .mx_FacePile { + margin-top: $spacing-20; + } + + .mx_RoomPreviewCard_joinButtons { + margin-top: $spacing-20; + display: flex; + + .mx_AccessibleButton { + padding: 14px 0; + flex-grow: 1; + + & + .mx_AccessibleButton { + margin-left: 20px; + } + } + } +} diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index 61a8c6e43b0..b604822ea14 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -26,7 +26,6 @@ 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 { useFeatureEnabled } from "../../hooks/useSettings"; import createRoom, { IOpts } from "../../createRoom"; @@ -34,7 +33,6 @@ import Field from "../views/elements/Field"; import withValidation from "../views/elements/Validation"; import * as Email from "../../email"; import defaultDispatcher from "../../dispatcher/dispatcher"; -import dis from "../../dispatcher/dispatcher"; import { Action } from "../../dispatcher/actions"; import ResizeNotifier from "../../utils/ResizeNotifier"; import MainSplit from './MainSplit'; @@ -55,7 +53,6 @@ import { showSpaceSettings, } from "../../utils/space"; import SpaceHierarchy, { showRoom } from "./SpaceHierarchy"; -import MemberAvatar from "../views/avatars/MemberAvatar"; import RoomFacePile from "../views/elements/RoomFacePile"; import { AddExistingToSpace, @@ -69,12 +66,10 @@ import IconizedContextMenu, { } from "../views/context_menus/IconizedContextMenu"; import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton"; import { BetaPill } from "../views/beta/BetaCard"; -import { EffectiveMembership, getEffectiveMembership } from "../../utils/membership"; import { SpaceFeedbackPrompt } from "../views/spaces/SpaceCreateMenu"; import RoomInfoLine from "../views/rooms/RoomInfoLine"; -import { useDispatcher } from "../../hooks/useDispatcher"; +import RoomPreviewCard from "../views/rooms/RoomPreviewCard"; import { useMyRoomMembership } from "../../hooks/useRoomMembers"; -import { useRoomState } from "../../hooks/useRoomState"; import { shouldShowComponent } from "../../customisations/helpers/UIComponents"; import { UIComponent } from "../../settings/UIFeature"; import { UPDATE_EVENT } from "../../stores/AsyncStore"; @@ -106,137 +101,6 @@ enum Phase { PrivateExistingRooms, } -interface ISpacePreviewProps { - space: Room; - onJoinButtonClicked(): void; - onRejectButtonClicked(): void; -} - -const SpacePreview = ({ space, onJoinButtonClicked, onRejectButtonClicked }: ISpacePreviewProps) => { - const cli = useContext(MatrixClientContext); - const myMembership = useMyRoomMembership(space); - useDispatcher(defaultDispatcher, payload => { - if (payload.action === Action.JoinRoomError && payload.roomId === space.roomId) { - setBusy(false); // stop the spinner, join failed - } - }); - - const [busy, setBusy] = useState(false); - - const joinRule = useRoomState(space, state => state.getJoinRule()); - const cannotJoin = getEffectiveMembership(myMembership) === EffectiveMembership.Leave - && joinRule !== JoinRule.Public; - - let inviterSection; - let joinButtons; - if (myMembership === "join") { - // XXX remove this when spaces leaves Beta - joinButtons = ( - { - dis.dispatch({ - action: "leave_room", - room_id: space.roomId, - }); - }} - > - { _t("Leave") } - - ); - } else if (myMembership === "invite") { - const inviteSender = space.getMember(cli.getUserId())?.events.member?.getSender(); - const inviter = inviteSender && space.getMember(inviteSender); - - if (inviteSender) { - inviterSection =
- -
-
- { _t(" invites you", {}, { - inviter: () => { inviter?.name || inviteSender }, - }) } -
- { inviter ?
- { inviteSender } -
: null } -
-
; - } - - joinButtons = <> - { - setBusy(true); - onRejectButtonClicked(); - }} - > - { _t("Reject") } - - { - setBusy(true); - onJoinButtonClicked(); - }} - > - { _t("Accept") } - - ; - } else { - joinButtons = ( - { - onJoinButtonClicked(); - if (!cli.isGuest()) { - // user will be shown a modal that won't fire a room join error - setBusy(true); - } - }} - disabled={cannotJoin} - > - { _t("Join") } - - ); - } - - if (busy) { - joinButtons = ; - } - - let footer; - if (cannotJoin) { - footer =
- { _t("To view %(spaceName)s, you need an invite", { - spaceName: space.name, - }) } -
; - } - - return
- { inviterSection } - -

- -

- - - { (topic, ref) => -
- { topic } -
- } -
- { space.getJoinRule() === "public" && } -
- { joinButtons } -
- { footer } -
; -}; - const SpaceLandingAddButton = ({ space }) => { const [menuDisplayed, handle, openMenu, closeMenu] = useContextMenu(); const canCreateRoom = shouldShowComponent(UIComponent.CreateRooms); @@ -782,8 +646,8 @@ export default class SpaceRoomView extends React.PureComponent { if (this.state.myMembership === "join") { return ; } else { - return ; diff --git a/src/components/views/rooms/RoomPreviewCard.tsx b/src/components/views/rooms/RoomPreviewCard.tsx new file mode 100644 index 00000000000..9cf7c74d47a --- /dev/null +++ b/src/components/views/rooms/RoomPreviewCard.tsx @@ -0,0 +1,168 @@ +/* +Copyright 2022 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React, { FC, useContext, useState } from "react"; +import { Room } from "matrix-js-sdk/src/models/room"; +import { JoinRule } from "matrix-js-sdk/src/@types/partials"; + +import { _t } from "../../../languageHandler"; +import defaultDispatcher from "../../../dispatcher/dispatcher"; +import { Action } from "../../../dispatcher/actions"; +import { EffectiveMembership, getEffectiveMembership } from "../../../utils/membership"; +import MatrixClientContext from "../../../contexts/MatrixClientContext"; +import { useDispatcher } from "../../../hooks/useDispatcher"; +import { useRoomState } from "../../../hooks/useRoomState"; +import { useMyRoomMembership } from "../../../hooks/useRoomMembers"; +import AccessibleButton from "../elements/AccessibleButton"; +import InlineSpinner from "../elements/InlineSpinner"; +import RoomName from "../elements/RoomName"; +import RoomTopic from "../elements/RoomTopic"; +import RoomFacePile from "../elements/RoomFacePile"; +import RoomAvatar from "../avatars/RoomAvatar"; +import MemberAvatar from "../avatars/MemberAvatar"; +import RoomInfoLine from "./RoomInfoLine"; + +interface IProps { + room: Room; + onJoinButtonClicked: () => void; + onRejectButtonClicked: () => void; +} + +const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButtonClicked }) => { + const cli = useContext(MatrixClientContext); + const myMembership = useMyRoomMembership(room); + useDispatcher(defaultDispatcher, payload => { + if (payload.action === Action.JoinRoomError && payload.roomId === room.roomId) { + setBusy(false); // stop the spinner, join failed + } + }); + + const [busy, setBusy] = useState(false); + + const joinRule = useRoomState(room, state => state.getJoinRule()); + const cannotJoin = getEffectiveMembership(myMembership) === EffectiveMembership.Leave + && joinRule !== JoinRule.Public; + + let inviterSection; + let joinButtons; + if (myMembership === "join") { + joinButtons = ( + { + defaultDispatcher.dispatch({ + action: "leave_room", + room_id: room.roomId, + }); + }} + > + { _t("Leave") } + + ); + } else if (myMembership === "invite") { + const inviteSender = room.getMember(cli.getUserId())?.events.member?.getSender(); + const inviter = inviteSender && room.getMember(inviteSender); + + if (inviteSender) { + inviterSection =
+ +
+
+ { _t(" invites you", {}, { + inviter: () => { inviter?.name || inviteSender }, + }) } +
+ { inviter ?
+ { inviteSender } +
: null } +
+
; + } + + joinButtons = <> + { + setBusy(true); + onRejectButtonClicked(); + }} + > + { _t("Reject") } + + { + setBusy(true); + onJoinButtonClicked(); + }} + > + { _t("Accept") } + + ; + } else { + joinButtons = ( + { + onJoinButtonClicked(); + if (!cli.isGuest()) { + // user will be shown a modal that won't fire a room join error + setBusy(true); + } + }} + disabled={cannotJoin} + > + { _t("Join") } + + ); + } + + if (busy) { + joinButtons = ; + } + + let footer; + if (cannotJoin) { + footer =
+ { _t("To view %(roomName)s, you need an invite", { + roomName: room.name, + }) } +
; + } + + return
+ { inviterSection } + +

+ +

+ + + { (topic, ref) => + topic ?
+ { topic } +
: null + } +
+ { room.getJoinRule() === "public" && } +
+ { joinButtons } +
+ { footer } +
; +}; + +export default RoomPreviewCard; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 6a49b52664d..ef50f42585e 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1879,6 +1879,9 @@ "This room or space is not accessible at this time.": "This room or space is not accessible at this time.", "Try again later, or ask a room or space admin to check if you have access.": "Try again later, or ask a room or space admin to check if you have access.", "%(errcode)s was returned while trying to access the room or space. If you think you're seeing this message in error, please submit a bug report.": "%(errcode)s was returned while trying to access the room or space. If you think you're seeing this message in error, please submit a bug report.", + "Leave": "Leave", + " invites you": " invites you", + "To view %(roomName)s, you need an invite": "To view %(roomName)s, you need an invite", "Appearance": "Appearance", "Show rooms with unread messages first": "Show rooms with unread messages first", "Show previews of messages": "Show previews of messages", @@ -1897,7 +1900,6 @@ "Favourite": "Favourite", "Low Priority": "Low Priority", "Copy room link": "Copy room link", - "Leave": "Leave", "Video": "Video", "Connecting...": "Connecting...", "Connected": "Connected", @@ -3122,8 +3124,6 @@ "Results": "Results", "Rooms and spaces": "Rooms and spaces", "Search names and descriptions": "Search names and descriptions", - " invites you": " invites you", - "To view %(spaceName)s, you need an invite": "To view %(spaceName)s, you need an invite", "Welcome to ": "Welcome to ", "Random": "Random", "Support": "Support", From c3079e1a91035e626a358ae4e2f46035d766ec6b Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 2 May 2022 17:35:08 -0400 Subject: [PATCH 09/20] Adapt RoomPreviewCard for video rooms --- res/css/views/rooms/_RoomPreviewCard.scss | 67 +++++++++++++------ src/components/structures/RoomView.tsx | 16 +++++ .../views/rooms/RoomPreviewCard.tsx | 52 +++++++++++--- src/i18n/strings/en_EN.json | 3 + 4 files changed, 108 insertions(+), 30 deletions(-) diff --git a/res/css/views/rooms/_RoomPreviewCard.scss b/res/css/views/rooms/_RoomPreviewCard.scss index 4691df9aa47..f898633645a 100644 --- a/res/css/views/rooms/_RoomPreviewCard.scss +++ b/res/css/views/rooms/_RoomPreviewCard.scss @@ -15,8 +15,9 @@ limitations under the License. */ .mx_RoomPreviewCard { - padding: 32px 24px !important; // override default padding from above + padding: $spacing-32 $spacing-24 !important; // override default padding from above margin: auto; + flex-grow: 1; max-width: 480px; box-sizing: border-box; background-color: $system; @@ -24,20 +25,13 @@ limitations under the License. position: relative; font-size: $font-14px; - // XXX Remove this when video rooms leave beta - .mx_BetaCard_betaPill { - position: absolute; - right: 24px; - top: 32px; - } - - .mx_RoomPreviewCard_cannotJoin { + .mx_RoomPreviewCard_notice { font-weight: $font-semi-bold; line-height: $font-24px; color: $primary-content; - margin-top: 24px; + margin-top: $spacing-24; position: relative; - padding-left: 24px; + padding-left: calc(20px + $spacing-8); .mx_AccessibleButton_kind_link { display: inline; @@ -63,11 +57,11 @@ limitations under the License. .mx_RoomPreviewCard_inviter { display: flex; align-items: center; - margin-bottom: 20px; + margin-bottom: $spacing-20; font-size: $font-15px; > div { - margin-left: 8px; + margin-left: $spacing-8; .mx_RoomPreviewCard_inviter_name { line-height: $font-18px; @@ -79,9 +73,44 @@ limitations under the License. } } - > .mx_RoomAvatar_isSpaceRoom { - &.mx_BaseAvatar_image, .mx_BaseAvatar_image { - border-radius: 12px; + .mx_RoomPreviewCard_avatar { + display: flex; + align-items: center; + + .mx_RoomAvatar_isSpaceRoom { + &.mx_BaseAvatar_image, .mx_BaseAvatar_image { + border-radius: 12px; + } + } + + .mx_RoomPreviewCard_video { + width: 50px; + height: 50px; + border-radius: calc((50px + 2 * 3px) / 2); + background-color: $accent; + border: 3px solid $system; + + position: relative; + left: calc(-50px / 4 - 3px); + + &::before { + content: ""; + background-color: $button-primary-fg-color; + position: absolute; + width: 50px; + height: 50px; + mask-size: 22px; + mask-position: center; + mask-repeat: no-repeat; + mask-image: url('$(res)/img/element-icons/call/video-call.svg'); + } + } + + // XXX Remove this when video rooms leave beta + .mx_BetaCard_betaPill { + position: absolute; + right: $spacing-24; + top: $spacing-32; } } @@ -103,14 +132,12 @@ limitations under the License. .mx_RoomPreviewCard_joinButtons { margin-top: $spacing-20; display: flex; + gap: $spacing-20; .mx_AccessibleButton { + max-width: 200px; padding: 14px 0; flex-grow: 1; - - & + .mx_AccessibleButton { - margin-left: 20px; - } } } } diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index 956fee0060c..7ae491aee18 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -65,6 +65,7 @@ import ScrollPanel from "./ScrollPanel"; import TimelinePanel from "./TimelinePanel"; import ErrorBoundary from "../views/elements/ErrorBoundary"; import RoomPreviewBar from "../views/rooms/RoomPreviewBar"; +import RoomPreviewCard from "../views/rooms/RoomPreviewCard"; import SearchBar, { SearchScope } from "../views/rooms/SearchBar"; import RoomUpgradeWarningBar from "../views/rooms/RoomUpgradeWarningBar"; import AuxPanel from "../views/rooms/AuxPanel"; @@ -1826,6 +1827,21 @@ export class RoomView extends React.Component { } const myMembership = this.state.room.getMyMembership(); + if ( + this.state.room.isElementVideoRoom() && + !(SettingsStore.getValue("feature_video_rooms") && myMembership === "join") + ) { + return +
+ +
; +
; + } + // SpaceRoomView handles invites itself if (myMembership === "invite" && !this.state.room.isSpaceRoom()) { if (this.state.joining || this.state.rejecting) { diff --git a/src/components/views/rooms/RoomPreviewCard.tsx b/src/components/views/rooms/RoomPreviewCard.tsx index 9cf7c74d47a..2c90410b52b 100644 --- a/src/components/views/rooms/RoomPreviewCard.tsx +++ b/src/components/views/rooms/RoomPreviewCard.tsx @@ -21,9 +21,11 @@ import { JoinRule } from "matrix-js-sdk/src/@types/partials"; import { _t } from "../../../languageHandler"; import defaultDispatcher from "../../../dispatcher/dispatcher"; import { Action } from "../../../dispatcher/actions"; +import { UserTab } from "../dialogs/UserTab"; import { EffectiveMembership, getEffectiveMembership } from "../../../utils/membership"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import { useDispatcher } from "../../../hooks/useDispatcher"; +import { useFeatureEnabled } from "../../../hooks/useSettings"; import { useRoomState } from "../../../hooks/useRoomState"; import { useMyRoomMembership } from "../../../hooks/useRoomMembers"; import AccessibleButton from "../elements/AccessibleButton"; @@ -33,6 +35,7 @@ import RoomTopic from "../elements/RoomTopic"; import RoomFacePile from "../elements/RoomFacePile"; import RoomAvatar from "../avatars/RoomAvatar"; import MemberAvatar from "../avatars/MemberAvatar"; +import { BetaPill } from "../beta/BetaCard"; import RoomInfoLine from "./RoomInfoLine"; interface IProps { @@ -43,6 +46,7 @@ interface IProps { const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButtonClicked }) => { const cli = useContext(MatrixClientContext); + const videoRoomsEnabled = useFeatureEnabled("feature_video_rooms"); const myMembership = useMyRoomMembership(room); useDispatcher(defaultDispatcher, payload => { if (payload.action === Action.JoinRoomError && payload.roomId === room.roomId) { @@ -56,8 +60,13 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton const cannotJoin = getEffectiveMembership(myMembership) === EffectiveMembership.Leave && joinRule !== JoinRule.Public; - let inviterSection; - let joinButtons; + const viewLabs = () => defaultDispatcher.dispatch({ + action: Action.ViewUserSettings, + initialTabId: UserTab.Labs, + }); + + let inviterSection: JSX.Element; + let joinButtons: JSX.Element; if (myMembership === "join") { joinButtons = ( = ({ room, onJoinButtonClicked, onRejectButton joinButtons = ; } - let footer; + let avatarRow: JSX.Element; + if (room.isElementVideoRoom()) { + avatarRow = <> + +
+ + ; + } else if (room.isSpaceRoom()) { + avatarRow = ; + } else { + avatarRow = ; + } + + let notice: string; if (cannotJoin) { - footer =
- { _t("To view %(roomName)s, you need an invite", { - roomName: room.name, - }) } -
; + notice = _t("To view %(roomName)s, you need an invite", { + roomName: room.name, + }); + } else if (room.isElementVideoRoom() && !videoRoomsEnabled) { + notice = myMembership === "join" + ? _t("To view, please enable video rooms in Labs first") + : _t("To join, please enable video rooms in Labs first"); + + joinButtons = + { _t("Show Labs settings") } + ; } return
{ inviterSection } - +
+ { avatarRow } +

@@ -158,10 +188,12 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton } { room.getJoinRule() === "public" && } + { notice ?
+ { notice } +
: null }
{ joinButtons }
- { footer }
; }; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index ef50f42585e..67ca3f96a71 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1882,6 +1882,9 @@ "Leave": "Leave", " invites you": " invites you", "To view %(roomName)s, you need an invite": "To view %(roomName)s, you need an invite", + "To view, please enable video rooms in Labs first": "To view, please enable video rooms in Labs first", + "To join, please enable video rooms in Labs first": "To join, please enable video rooms in Labs first", + "Show Labs settings": "Show Labs settings", "Appearance": "Appearance", "Show rooms with unread messages first": "Show rooms with unread messages first", "Show previews of messages": "Show previews of messages", From fe836425de7a8ca746345b5d00316b3c1a9f0b59 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 2 May 2022 17:42:24 -0400 Subject: [PATCH 10/20] =?UTF-8?q?"New=20video=20room"=20=E2=86=92=20"Video?= =?UTF-8?q?=20room"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/structures/SpaceRoomView.tsx | 2 +- src/components/views/rooms/RoomList.tsx | 4 ++-- src/components/views/rooms/RoomListHeader.tsx | 4 ++-- src/i18n/strings/en_EN.json | 1 - 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index b604822ea14..ed94886414e 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -136,7 +136,7 @@ const SpaceLandingAddButton = ({ space }) => { /> { videoRoomsEnabled && ( { e.preventDefault(); diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index 7e8dc7cfab8..e07a1051b0a 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -242,7 +242,7 @@ const UntaggedAuxButton = ({ tabIndex }: IAuxButtonProps) => { /> { SettingsStore.getValue("feature_video_rooms") && ( { e.preventDefault(); @@ -290,7 +290,7 @@ const UntaggedAuxButton = ({ tabIndex }: IAuxButtonProps) => { /> { SettingsStore.getValue("feature_video_rooms") && ( { e.preventDefault(); diff --git a/src/components/views/rooms/RoomListHeader.tsx b/src/components/views/rooms/RoomListHeader.tsx index 564893a9acd..866c261b845 100644 --- a/src/components/views/rooms/RoomListHeader.tsx +++ b/src/components/views/rooms/RoomListHeader.tsx @@ -223,7 +223,7 @@ const RoomListHeader = ({ onVisibilityChange }: IProps) => { { videoRoomsEnabled && ( { e.preventDefault(); e.stopPropagation(); @@ -318,7 +318,7 @@ const RoomListHeader = ({ onVisibilityChange }: IProps) => { /> { videoRoomsEnabled && ( { e.preventDefault(); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 67ca3f96a71..ba57b2cdff3 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1806,7 +1806,6 @@ "Explore rooms": "Explore rooms", "New room": "New room", "You do not have permissions to create new rooms in this space": "You do not have permissions to create new rooms in this space", - "New video room": "New video room", "Add existing room": "Add existing room", "You do not have permissions to add rooms to this space": "You do not have permissions to add rooms to this space", "Explore public rooms": "Explore public rooms", From 3c17f225164d2869a4e730d062b82e87eb2280dc Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Tue, 3 May 2022 11:38:38 -0400 Subject: [PATCH 11/20] Add comment about unused cases in RoomPreviewCard --- src/components/views/rooms/RoomPreviewCard.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/views/rooms/RoomPreviewCard.tsx b/src/components/views/rooms/RoomPreviewCard.tsx index 2c90410b52b..5b174b7b390 100644 --- a/src/components/views/rooms/RoomPreviewCard.tsx +++ b/src/components/views/rooms/RoomPreviewCard.tsx @@ -44,6 +44,10 @@ interface IProps { onRejectButtonClicked: () => void; } +// XXX This component is currently only used for spaces and video rooms, though +// surely we should expand its use to all rooms for consistency? This already +// handles the text room case, though we would need to add support for ignoring +// and viewing invite reasons to achieve parity with the default invite screen. const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButtonClicked }) => { const cli = useContext(MatrixClientContext); const videoRoomsEnabled = useFeatureEnabled("feature_video_rooms"); From 7db10bc13b361be4ce442ece5ba5fa9b8e84095a Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Tue, 3 May 2022 11:42:01 -0400 Subject: [PATCH 12/20] Add types --- src/components/views/rooms/RoomInfoLine.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/rooms/RoomInfoLine.tsx b/src/components/views/rooms/RoomInfoLine.tsx index 143df8a133d..09214043d63 100644 --- a/src/components/views/rooms/RoomInfoLine.tsx +++ b/src/components/views/rooms/RoomInfoLine.tsx @@ -44,8 +44,8 @@ const RoomInfoLine: FC = ({ room }) => { const membership = useMyRoomMembership(room); const memberCount = useRoomMemberCount(room); - let iconClass; - let roomType; + let iconClass: string; + let roomType: string; if (room.isElementVideoRoom()) { iconClass = "mx_RoomInfoLine_video"; roomType = _t("Video room"); @@ -57,7 +57,7 @@ const RoomInfoLine: FC = ({ room }) => { roomType = room.isSpaceRoom() ? _t("Private space") : _t("Private room"); } - let members; + let members: JSX.Element; if (membership === "invite" && summary) { // Don't trust local state and instead use the summary API members = From 6ee692cb94f0dea9db8302dc0328e1d804263197 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Tue, 3 May 2022 11:55:55 -0400 Subject: [PATCH 13/20] Clarify !important comments --- res/css/views/rooms/_RoomPreviewCard.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/css/views/rooms/_RoomPreviewCard.scss b/res/css/views/rooms/_RoomPreviewCard.scss index f898633645a..322a8c4251d 100644 --- a/res/css/views/rooms/_RoomPreviewCard.scss +++ b/res/css/views/rooms/_RoomPreviewCard.scss @@ -15,7 +15,7 @@ limitations under the License. */ .mx_RoomPreviewCard { - padding: $spacing-32 $spacing-24 !important; // override default padding from above + padding: $spacing-32 $spacing-24 !important; // Override SpaceRoomView's default padding margin: auto; flex-grow: 1; max-width: 480px; @@ -115,7 +115,7 @@ limitations under the License. } h1.mx_RoomPreviewCard_name { - margin: $spacing-16 0 !important; // override default margin from above + margin: $spacing-16 0 !important; // Override SpaceRoomView's default margins } .mx_RoomPreviewCard_topic { From c4ace54ba49b94d08a3ddf41a3f1e83bd72520b4 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Tue, 3 May 2022 12:54:56 -0400 Subject: [PATCH 14/20] Add a reload warning --- src/i18n/strings/en_EN.json | 6 ++++-- src/settings/Settings.tsx | 23 ++++++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index ba57b2cdff3..d08f0dfe477 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -869,8 +869,10 @@ "Experimental": "Experimental", "Developer": "Developer", "Video rooms": "Video rooms", - "A new way to chat over voice and video in Element.": "A new way to chat over voice and video in Element.", - "Video rooms are always-on VoIP channels embedded within a room in Element.": "Video rooms are always-on VoIP channels embedded within a room in Element.", + "A new way to chat over voice and video in %(brand)s.": "A new way to chat over voice and video in %(brand)s.", + "Video rooms are always-on VoIP channels embedded within a room in %(brand)s.": "Video rooms are always-on VoIP channels embedded within a room in %(brand)s.", + "Joining the beta will reload %(brand)s.": "Joining the beta will reload %(brand)s.", + "Leaving the beta will reload %(brand)s.": "Leaving the beta will reload %(brand)s.", "How can I create a video room?": "How can I create a video room?", "Use the “+” button in the room section of the left panel.": "Use the “+” button in the room section of the left panel.", "Can I use text chat alongside the video call?": "Can I use text chat alongside the video call?", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index a22a2ff37b0..528a0f31611 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -195,16 +195,29 @@ export const SETTINGS: {[setting: string]: ISetting} = { betaInfo: { title: _td("Video rooms"), caption: () => <> -

{ _t("A new way to chat over voice and video in Element.") }

-

{ _t("Video rooms are always-on VoIP channels embedded within a room in Element.") }

+

+ { _t("A new way to chat over voice and video in %(brand)s.", { + brand: SdkConfig.get().brand + }) }

+

+ { _t("Video rooms are always-on VoIP channels embedded within a room in %(brand)s.", { + brand: SdkConfig.get().brand + }) } +

, - faq: () => - SdkConfig.get().bug_report_endpoint_url && <> + faq: enabled => { + const reloadWarning = enabled + ? _t("Joining the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }) + : _t("Leaving the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }); + + return SdkConfig.get().bug_report_endpoint_url && <> +

{ reloadWarning }

{ _t("How can I create a video room?") }

{ _t("Use the “+” button in the room section of the left panel.") }

{ _t("Can I use text chat alongside the video call?") }

{ _t("Yes, the chat timeline is displayed alongside the video.") }

- , + ; + }, feedbackLabel: "video-room-feedback", feedbackSubheading: _td("Thank you for trying the beta, " + "please go into as much detail as you can so we can improve it."), From 78ecca01048cc9a03a955552d4aab354a6934aa2 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Tue, 3 May 2022 12:55:53 -0400 Subject: [PATCH 15/20] Fix the reload warning being the wrong way around --- src/i18n/strings/en_EN.json | 2 +- src/settings/Settings.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index d08f0dfe477..6bf79ccc45b 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -871,8 +871,8 @@ "Video rooms": "Video rooms", "A new way to chat over voice and video in %(brand)s.": "A new way to chat over voice and video in %(brand)s.", "Video rooms are always-on VoIP channels embedded within a room in %(brand)s.": "Video rooms are always-on VoIP channels embedded within a room in %(brand)s.", - "Joining the beta will reload %(brand)s.": "Joining the beta will reload %(brand)s.", "Leaving the beta will reload %(brand)s.": "Leaving the beta will reload %(brand)s.", + "Joining the beta will reload %(brand)s.": "Joining the beta will reload %(brand)s.", "How can I create a video room?": "How can I create a video room?", "Use the “+” button in the room section of the left panel.": "Use the “+” button in the room section of the left panel.", "Can I use text chat alongside the video call?": "Can I use text chat alongside the video call?", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 528a0f31611..feea8050705 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -207,8 +207,8 @@ export const SETTINGS: {[setting: string]: ISetting} = { , faq: enabled => { const reloadWarning = enabled - ? _t("Joining the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }) - : _t("Leaving the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }); + ? _t("Leaving the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }) + : _t("Joining the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }); return SdkConfig.get().bug_report_endpoint_url && <>

{ reloadWarning }

From a5476ab947858c7634dd3176473cdba3a2d64b6e Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Tue, 3 May 2022 13:00:27 -0400 Subject: [PATCH 16/20] Fix lints --- src/settings/Settings.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index feea8050705..5ab47c172a4 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -197,18 +197,19 @@ export const SETTINGS: {[setting: string]: ISetting} = { caption: () => <>

{ _t("A new way to chat over voice and video in %(brand)s.", { - brand: SdkConfig.get().brand + brand: SdkConfig.get().brand, }) }

{ _t("Video rooms are always-on VoIP channels embedded within a room in %(brand)s.", { - brand: SdkConfig.get().brand + brand: SdkConfig.get().brand, }) }

, faq: enabled => { + const brand = SdkConfig.get().brand; const reloadWarning = enabled - ? _t("Leaving the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }) - : _t("Joining the beta will reload %(brand)s.", { brand: SdkConfig.get().brand }); + ? _t("Leaving the beta will reload %(brand)s.", { brand }) + : _t("Joining the beta will reload %(brand)s.", { brand }); return SdkConfig.get().bug_report_endpoint_url && <>

{ reloadWarning }

From d294866d403b43f7e90f3e0d8a9fd8b08db472bb Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 4 May 2022 09:17:32 -0400 Subject: [PATCH 17/20] Make widgets in video rooms mutable again to de-risk future upgrades --- src/createRoom.ts | 11 ----------- test/createRoom-test.ts | 20 +++----------------- 2 files changed, 3 insertions(+), 28 deletions(-) diff --git a/src/createRoom.ts b/src/createRoom.ts index 66177d812b1..955e3a5707a 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -132,8 +132,6 @@ export default async function createRoom(opts: IOpts): Promise { events: { // Allow all users to send video member updates [VIDEO_CHANNEL_MEMBER]: 0, - // Make widgets immutable, even to admins - "im.vector.modular.widgets": 200, // Annoyingly, we have to reiterate all the defaults here [EventType.RoomName]: 50, [EventType.RoomAvatar]: 50, @@ -144,10 +142,6 @@ export default async function createRoom(opts: IOpts): Promise { [EventType.RoomServerAcl]: 100, [EventType.RoomEncryption]: 100, }, - users: { - // Temporarily give ourselves the power to set up a widget - [client.getUserId()]: 200, - }, }; } } @@ -270,11 +264,6 @@ export default async function createRoom(opts: IOpts): Promise { if (opts.roomType === RoomType.ElementVideo) { // Set up video rooms with a Jitsi widget await addVideoChannel(roomId, createOpts.name); - - // Reset our power level back to admin so that the widget becomes immutable - const room = client.getRoom(roomId); - const plEvent = room?.currentState.getStateEvents(EventType.RoomPowerLevels, ""); - await client.setPowerLevel(roomId, client.getUserId(), 100, plEvent); } }).then(function() { // NB createRoom doesn't block on the client seeing the echo that the diff --git a/test/createRoom-test.ts b/test/createRoom-test.ts index 5846823cfd0..c37edaff86a 100644 --- a/test/createRoom-test.ts +++ b/test/createRoom-test.ts @@ -37,35 +37,21 @@ describe("createRoom", () => { setupAsyncStoreWithClient(WidgetStore.instance, client); jest.spyOn(WidgetUtils, "waitForRoomWidget").mockResolvedValue(); - const userId = client.getUserId(); const roomId = await createRoom({ roomType: RoomType.ElementVideo }); - const [[{ power_level_content_override: { - users: { - [userId]: userPower, - }, - events: { - "im.vector.modular.widgets": widgetPower, - [VIDEO_CHANNEL_MEMBER]: videoMemberPower, - }, + events: { [VIDEO_CHANNEL_MEMBER]: videoMemberPower }, }, - }]] = mocked(client.createRoom).mock.calls as any; + }]] = mocked(client.createRoom).mock.calls as any; // no good type const [[widgetRoomId, widgetStateKey, , widgetId]] = mocked(client.sendStateEvent).mock.calls; - // We should have had enough power to be able to set up the Jitsi widget - expect(userPower).toBeGreaterThanOrEqual(widgetPower); - // and should have actually set it up + // We should have set up the Jitsi widget expect(widgetRoomId).toEqual(roomId); expect(widgetStateKey).toEqual("im.vector.modular.widgets"); expect(widgetId).toEqual(VIDEO_CHANNEL); // All members should be able to update their connected devices expect(videoMemberPower).toEqual(0); - // Jitsi widget should be immutable for admins - expect(widgetPower).toBeGreaterThan(100); - // and we should have been reset back to admin - expect(client.setPowerLevel).toHaveBeenCalledWith(roomId, userId, 100, undefined); }); }); From 9e914c1f6e0169617898e64b161193df3a2036ab Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 4 May 2022 10:16:22 -0400 Subject: [PATCH 18/20] Ensure that the video channel exists when mounting VideoRoomView --- src/components/structures/VideoRoomView.tsx | 37 ++++++++++++++----- .../structures/VideoRoomView-test.tsx | 29 +++++++++------ 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/components/structures/VideoRoomView.tsx b/src/components/structures/VideoRoomView.tsx index 2695dafa798..e2cd62e08d0 100644 --- a/src/components/structures/VideoRoomView.tsx +++ b/src/components/structures/VideoRoomView.tsx @@ -20,28 +20,47 @@ import { Room } from "matrix-js-sdk/src/models/room"; import MatrixClientContext from "../../contexts/MatrixClientContext"; import { useEventEmitter } from "../../hooks/useEventEmitter"; -import { getVideoChannel } from "../../utils/VideoChannelUtils"; -import WidgetStore from "../../stores/WidgetStore"; +import WidgetUtils from "../../utils/WidgetUtils"; +import { addVideoChannel, getVideoChannel } from "../../utils/VideoChannelUtils"; +import WidgetStore, { IApp } from "../../stores/WidgetStore"; import { UPDATE_EVENT } from "../../stores/AsyncStore"; import VideoChannelStore, { VideoChannelEvent } from "../../stores/VideoChannelStore"; import AppTile from "../views/elements/AppTile"; import VideoLobby from "../views/voip/VideoLobby"; -const VideoRoomView: FC<{ room: Room, resizing: boolean }> = ({ room, resizing }) => { +interface IProps { + room: Room; + resizing: boolean; +} + +const VideoRoomView: FC = ({ room, resizing }) => { const cli = useContext(MatrixClientContext); const store = VideoChannelStore.instance; // In case we mount before the WidgetStore knows about our Jitsi widget + const [widgetStoreReady, setWidgetStoreReady] = useState(Boolean(WidgetStore.instance.matrixClient)); const [widgetLoaded, setWidgetLoaded] = useState(false); useEventEmitter(WidgetStore.instance, UPDATE_EVENT, (roomId: string) => { - if (roomId === null || roomId === room.roomId) setWidgetLoaded(true); + if (roomId === null) setWidgetStoreReady(true); + if (roomId === null || roomId === room.roomId) { + setWidgetLoaded(Boolean(getVideoChannel(room.roomId))); + } }); - const app = useMemo(() => { - const app = getVideoChannel(room.roomId); - if (!app) logger.warn(`No video channel for room ${room.roomId}`); - return app; - }, [room, widgetLoaded]); // eslint-disable-line react-hooks/exhaustive-deps + const app: IApp = useMemo(() => { + if (widgetStoreReady) { + const app = getVideoChannel(room.roomId); + if (!app) { + logger.warn(`No video channel for room ${room.roomId}`); + // Since widgets in video rooms are mutable, we'll take this opportunity to + // reinstate the Jitsi widget in case another client removed it + if (WidgetUtils.canUserModifyWidgets(room.roomId)) { + addVideoChannel(room.roomId, room.name); + } + } + return app; + } + }, [room, widgetStoreReady, widgetLoaded]); // eslint-disable-line react-hooks/exhaustive-deps const [connected, setConnected] = useState(store.connected && store.roomId === room.roomId); useEventEmitter(store, VideoChannelEvent.Connect, () => setConnected(store.roomId === room.roomId)); diff --git a/test/components/structures/VideoRoomView-test.tsx b/test/components/structures/VideoRoomView-test.tsx index 11d747103d9..1b936f488a4 100644 --- a/test/components/structures/VideoRoomView-test.tsx +++ b/test/components/structures/VideoRoomView-test.tsx @@ -17,9 +17,17 @@ limitations under the License. import React from "react"; import { mount } from "enzyme"; import { act } from "react-dom/test-utils"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { Room } from "matrix-js-sdk/src/models/room"; import { MatrixWidgetType } from "matrix-widget-api"; -import { stubClient, stubVideoChannelStore, mkRoom, wrapInMatrixClientContext } from "../../test-utils"; +import { + stubClient, + stubVideoChannelStore, + StubVideoChannelStore, + mkRoom, + wrapInMatrixClientContext, +} from "../../test-utils"; import { MatrixClientPeg } from "../../../src/MatrixClientPeg"; import { VIDEO_CHANNEL } from "../../../src/utils/VideoChannelUtils"; import WidgetStore from "../../../src/stores/WidgetStore"; @@ -30,7 +38,6 @@ import AppTile from "../../../src/components/views/elements/AppTile"; const VideoRoomView = wrapInMatrixClientContext(_VideoRoomView); describe("VideoRoomView", () => { - stubClient(); jest.spyOn(WidgetStore.instance, "getApps").mockReturnValue([{ id: VIDEO_CHANNEL, eventId: "$1:example.org", @@ -45,22 +52,22 @@ describe("VideoRoomView", () => { value: { enumerateDevices: () => [] }, }); - const cli = MatrixClientPeg.get(); - const room = mkRoom(cli, "!1:example.org"); + let cli: MatrixClient; + let room: Room; + let store: StubVideoChannelStore; - let store; beforeEach(() => { + stubClient(); + cli = MatrixClientPeg.get(); + jest.spyOn(WidgetStore.instance, "matrixClient", "get").mockReturnValue(cli); store = stubVideoChannelStore(); - }); - - afterEach(() => { - jest.clearAllMocks(); + room = mkRoom(cli, "!1:example.org"); }); it("shows lobby and keeps widget loaded when disconnected", async () => { const view = mount(); // Wait for state to settle - await act(async () => Promise.resolve()); + await act(() => Promise.resolve()); expect(view.find(VideoLobby).exists()).toEqual(true); expect(view.find(AppTile).exists()).toEqual(true); @@ -70,7 +77,7 @@ describe("VideoRoomView", () => { store.connect("!1:example.org"); const view = mount(); // Wait for state to settle - await act(async () => Promise.resolve()); + await act(() => Promise.resolve()); expect(view.find(VideoLobby).exists()).toEqual(false); expect(view.find(AppTile).exists()).toEqual(true); From 4dc7c0611a30fbdf485b6288edd05a3b7067a544 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 4 May 2022 10:17:27 -0400 Subject: [PATCH 19/20] Fix lint --- src/settings/Settings.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 5ab3c356ac1..0ea0292b87e 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -198,7 +198,8 @@ export const SETTINGS: {[setting: string]: ISetting} = {

{ _t("A new way to chat over voice and video in %(brand)s.", { brand: SdkConfig.get().brand, - }) }

+ }) } +

{ _t("Video rooms are always-on VoIP channels embedded within a room in %(brand)s.", { brand: SdkConfig.get().brand, From 2190ffdb2fd53be9183e1fe08506b29e9d51709a Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Wed, 4 May 2022 11:25:38 -0400 Subject: [PATCH 20/20] Iterate beta reload warning --- res/css/views/beta/_BetaCard.scss | 15 ++++++++++----- src/components/views/beta/BetaCard.tsx | 11 +++++++++++ src/i18n/strings/en_EN.json | 4 ++-- src/settings/Settings.tsx | 13 +++---------- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/res/css/views/beta/_BetaCard.scss b/res/css/views/beta/_BetaCard.scss index 524b929795c..a1499718c99 100644 --- a/res/css/views/beta/_BetaCard.scss +++ b/res/css/views/beta/_BetaCard.scss @@ -20,6 +20,7 @@ limitations under the License. background-color: $system; border-radius: 8px; box-sizing: border-box; + color: $secondary-content; .mx_BetaCard_columns { display: flex; @@ -45,14 +46,13 @@ limitations under the License. .mx_BetaCard_caption { font-size: $font-15px; line-height: $font-20px; - color: $secondary-content; } .mx_BetaCard_buttons { display: flex; flex-wrap: wrap-reverse; - gap: 12px; - margin: 20px auto; + gap: $spacing-12; + margin: $spacing-20 auto 0; .mx_AccessibleButton { padding: 7px 40px; @@ -66,10 +66,16 @@ limitations under the License. } } + .mx_BetaCard_refreshWarning { + margin-top: $spacing-8; + font-size: $font-10px; + text-align: center; + } + .mx_BetaCard_faq { + margin-top: $spacing-20; font-size: $font-12px; line-height: $font-15px; - color: $secondary-content; > h4 { margin: 12px 0 0; @@ -105,7 +111,6 @@ limitations under the License. margin-top: 4px; font-size: $font-12px; line-height: $font-15px; - color: $secondary-content; } } } diff --git a/src/components/views/beta/BetaCard.tsx b/src/components/views/beta/BetaCard.tsx index 7285a0e0902..be8061eddfb 100644 --- a/src/components/views/beta/BetaCard.tsx +++ b/src/components/views/beta/BetaCard.tsx @@ -100,6 +100,14 @@ const BetaCard = ({ title: titleOverride, featureId }: IProps) => { ; } + let refreshWarning: string; + if (requiresRefresh) { + const brand = SdkConfig.get().brand; + refreshWarning = value + ? _t("Leaving the beta will reload %(brand)s.", { brand }) + : _t("Joining the beta will reload %(brand)s.", { brand }); + } + let content: ReactNode; if (busy) { content = ; @@ -138,6 +146,9 @@ const BetaCard = ({ title: titleOverride, featureId }: IProps) => { { content }

+ { refreshWarning &&
+ { refreshWarning } +
} { faq &&
{ faq(value) }
} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 29fb433cca4..21dbcde5782 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -871,8 +871,6 @@ "Video rooms": "Video rooms", "A new way to chat over voice and video in %(brand)s.": "A new way to chat over voice and video in %(brand)s.", "Video rooms are always-on VoIP channels embedded within a room in %(brand)s.": "Video rooms are always-on VoIP channels embedded within a room in %(brand)s.", - "Leaving the beta will reload %(brand)s.": "Leaving the beta will reload %(brand)s.", - "Joining the beta will reload %(brand)s.": "Joining the beta will reload %(brand)s.", "How can I create a video room?": "How can I create a video room?", "Use the “+” button in the room section of the left panel.": "Use the “+” button in the room section of the left panel.", "Can I use text chat alongside the video call?": "Can I use text chat alongside the video call?", @@ -2956,6 +2954,8 @@ "This is a beta feature": "This is a beta feature", "Click for more info": "Click for more info", "Beta": "Beta", + "Leaving the beta will reload %(brand)s.": "Leaving the beta will reload %(brand)s.", + "Joining the beta will reload %(brand)s.": "Joining the beta will reload %(brand)s.", "Join the beta": "Join the beta", "Updated %(humanizedUpdateTime)s": "Updated %(humanizedUpdateTime)s", "Live until %(expiryTime)s": "Live until %(expiryTime)s", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 0ea0292b87e..1c7a0e1ec74 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -206,20 +206,13 @@ export const SETTINGS: {[setting: string]: ISetting} = { }) }

, - faq: enabled => { - const brand = SdkConfig.get().brand; - const reloadWarning = enabled - ? _t("Leaving the beta will reload %(brand)s.", { brand }) - : _t("Joining the beta will reload %(brand)s.", { brand }); - - return SdkConfig.get().bug_report_endpoint_url && <> -

{ reloadWarning }

+ faq: () => + SdkConfig.get().bug_report_endpoint_url && <>

{ _t("How can I create a video room?") }

{ _t("Use the “+” button in the room section of the left panel.") }

{ _t("Can I use text chat alongside the video call?") }

{ _t("Yes, the chat timeline is displayed alongside the video.") }

- ; - }, + , feedbackLabel: "video-room-feedback", feedbackSubheading: _td("Thank you for trying the beta, " + "please go into as much detail as you can so we can improve it."),

JopVRVc?^TM0SqIEw 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�r?Z_j|oz+^#c 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%0DD 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 IJO#d$#t<n760pdEk0xpfrtFT-OZ4 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