From 4b9d4ad1e33b98def996b82045eb0e65cc1940ef Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 9 Jul 2021 17:04:37 +0100 Subject: [PATCH 1/6] Centralise display alias getters --- src/Rooms.ts | 10 +++++++++- src/components/structures/RoomDirectory.tsx | 3 ++- src/components/structures/SpaceRoomDirectory.tsx | 3 ++- src/components/views/rooms/RoomDetailRow.js | 5 +++-- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Rooms.ts b/src/Rooms.ts index 4d1682660b..f2f10e756d 100644 --- a/src/Rooms.ts +++ b/src/Rooms.ts @@ -28,7 +28,15 @@ import { MatrixClientPeg } from './MatrixClientPeg'; * @returns {string} A display alias for the given room */ export function getDisplayAliasForRoom(room: Room): string { - return room.getCanonicalAlias() || room.getAltAliases()[0]; + return getDisplayAliasForAliasSet( + room.getCanonicalAlias(), room.getAltAliases(), + ); +} + +// The various display alias getters all feed through this one path so there's a +// single place to change the logic. +export function getDisplayAliasForAliasSet(canonicalAlias: string, altAliases: string[]): string { + return canonicalAlias || altAliases?.[0]; } export function looksLikeDirectMessageRoom(room: Room, myUserId: string): boolean { diff --git a/src/components/structures/RoomDirectory.tsx b/src/components/structures/RoomDirectory.tsx index bd25a764a0..b1974d6c0a 100644 --- a/src/components/structures/RoomDirectory.tsx +++ b/src/components/structures/RoomDirectory.tsx @@ -44,6 +44,7 @@ import NetworkDropdown from "../views/directory/NetworkDropdown"; import ScrollPanel from "./ScrollPanel"; import Spinner from "../views/elements/Spinner"; import { ActionPayload } from "../../dispatcher/payloads"; +import { getDisplayAliasForAliasSet } from "../../Rooms"; const MAX_NAME_LENGTH = 80; const MAX_TOPIC_LENGTH = 800; @@ -854,5 +855,5 @@ export default class RoomDirectory extends React.Component { // Similar to matrix-react-sdk's MatrixTools.getDisplayAliasForRoom // but works with the objects we get from the public room list function getDisplayAliasForRoom(room: IRoom) { - return room.canonical_alias || room.aliases?.[0] || ""; + return getDisplayAliasForAliasSet(room.canonical_alias, room.aliases); } diff --git a/src/components/structures/SpaceRoomDirectory.tsx b/src/components/structures/SpaceRoomDirectory.tsx index 2ee0327420..a08fbb5098 100644 --- a/src/components/structures/SpaceRoomDirectory.tsx +++ b/src/components/structures/SpaceRoomDirectory.tsx @@ -42,6 +42,7 @@ import { useStateToggle } from "../../hooks/useStateToggle"; import { getChildOrder } from "../../stores/SpaceStore"; import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton"; import { linkifyElement } from "../../HtmlUtils"; +import { getDisplayAliasForAliasSet } from "../../Rooms"; interface IHierarchyProps { space: Room; @@ -666,5 +667,5 @@ export default SpaceRoomDirectory; // Similar to matrix-react-sdk's MatrixTools.getDisplayAliasForRoom // but works with the objects we get from the public room list function getDisplayAliasForRoom(room: ISpaceSummaryRoom) { - return room.canonical_alias || (room.aliases ? room.aliases[0] : ""); + return getDisplayAliasForAliasSet(room.canonical_alias, room.aliases); } diff --git a/src/components/views/rooms/RoomDetailRow.js b/src/components/views/rooms/RoomDetailRow.js index 6cee691dfa..25fff09c10 100644 --- a/src/components/views/rooms/RoomDetailRow.js +++ b/src/components/views/rooms/RoomDetailRow.js @@ -1,5 +1,5 @@ /* -Copyright 2017 New Vector Ltd. +Copyright 2017-2021 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,9 +21,10 @@ import { linkifyElement } from '../../../HtmlUtils'; import PropTypes from 'prop-types'; import { replaceableComponent } from "../../../utils/replaceableComponent"; import { mediaFromMxc } from "../../../customisations/Media"; +import { getDisplayAliasForAliasSet } from '../../../Rooms'; export function getDisplayAliasForRoom(room) { - return room.canonicalAlias || (room.aliases ? room.aliases[0] : ""); + return getDisplayAliasForAliasSet(room.canonicalAlias, room.aliases); } export const roomShape = PropTypes.shape({ From 8177dbfb56770a0287984256b1b785658334ad72 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 9 Jul 2021 17:11:17 +0100 Subject: [PATCH 2/6] Add display alias customisation point This will allow environments such as P2P to tweak the preferred display alias if needed. --- src/Rooms.ts | 4 ++++ src/customisations/Alias.ts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/customisations/Alias.ts diff --git a/src/Rooms.ts b/src/Rooms.ts index f2f10e756d..efaca97985 100644 --- a/src/Rooms.ts +++ b/src/Rooms.ts @@ -17,6 +17,7 @@ limitations under the License. import { Room } from "matrix-js-sdk/src/models/room"; import { MatrixClientPeg } from './MatrixClientPeg'; +import AliasCustomisations from './customisations/Alias'; /** * Given a room object, return the alias we should use for it, @@ -36,6 +37,9 @@ export function getDisplayAliasForRoom(room: Room): string { // The various display alias getters all feed through this one path so there's a // single place to change the logic. export function getDisplayAliasForAliasSet(canonicalAlias: string, altAliases: string[]): string { + if (AliasCustomisations.getDisplayAliasForAliasSet) { + return AliasCustomisations.getDisplayAliasForAliasSet(canonicalAlias, altAliases); + } return canonicalAlias || altAliases?.[0]; } diff --git a/src/customisations/Alias.ts b/src/customisations/Alias.ts new file mode 100644 index 0000000000..fcf6742193 --- /dev/null +++ b/src/customisations/Alias.ts @@ -0,0 +1,31 @@ +/* +Copyright 2021 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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. +*/ + +function getDisplayAliasForAliasSet(canonicalAlias: string, altAliases: string[]): string { + // E.g. prefer one of the aliases over another + return null; +} + +// This interface summarises all available customisation points and also marks +// them all as optional. This allows customisers to only define and export the +// customisations they need while still maintaining type safety. +export interface IAliasCustomisations { + getDisplayAliasForAliasSet?: typeof getDisplayAliasForAliasSet; +} + +// A real customisation module will define and export one or more of the +// customisation points that make up `IAliasCustomisations`. +export default {} as IAliasCustomisations; From ff7f3f47becf89df454638760be68a5f28cf02ea Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 9 Jul 2021 17:51:18 +0100 Subject: [PATCH 3/6] Add directory publish customisation point This will help certain environments, such as P2P, where directory publishing can be allowed freely. --- .../room_settings/RoomPublishSetting.tsx | 8 ++++- src/customisations/Directory.ts | 31 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/customisations/Directory.ts diff --git a/src/components/views/room_settings/RoomPublishSetting.tsx b/src/components/views/room_settings/RoomPublishSetting.tsx index bc1d6f9e2c..5b6858abf5 100644 --- a/src/components/views/room_settings/RoomPublishSetting.tsx +++ b/src/components/views/room_settings/RoomPublishSetting.tsx @@ -20,6 +20,7 @@ import LabelledToggleSwitch from "../elements/LabelledToggleSwitch"; import { _t } from "../../../languageHandler"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import { replaceableComponent } from "../../../utils/replaceableComponent"; +import DirectoryCustomisations from '../../../customisations/Directory'; interface IProps { roomId: string; @@ -66,10 +67,15 @@ export default class RoomPublishSetting extends React.PureComponent Date: Fri, 9 Jul 2021 17:56:16 +0100 Subject: [PATCH 4/6] Only show pointer cursor for enabled switches --- res/css/views/elements/_ToggleSwitch.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/res/css/views/elements/_ToggleSwitch.scss b/res/css/views/elements/_ToggleSwitch.scss index 62669889ee..5fe3cae5db 100644 --- a/res/css/views/elements/_ToggleSwitch.scss +++ b/res/css/views/elements/_ToggleSwitch.scss @@ -24,6 +24,8 @@ limitations under the License. background-color: $togglesw-off-color; opacity: 0.5; + + cursor: unset; } .mx_ToggleSwitch_enabled { From d584e7066218b65de286ebd7477df6e8941e1bb7 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 12 Jul 2021 11:56:06 +0100 Subject: [PATCH 5/6] Revert ToggleSwitch cursor changes --- res/css/views/elements/_ToggleSwitch.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/res/css/views/elements/_ToggleSwitch.scss b/res/css/views/elements/_ToggleSwitch.scss index 5fe3cae5db..62669889ee 100644 --- a/res/css/views/elements/_ToggleSwitch.scss +++ b/res/css/views/elements/_ToggleSwitch.scss @@ -24,8 +24,6 @@ limitations under the License. background-color: $togglesw-off-color; opacity: 0.5; - - cursor: unset; } .mx_ToggleSwitch_enabled { From 38cbbfb99eddfabc61067169ff731d04840db19a Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Mon, 12 Jul 2021 11:56:47 +0100 Subject: [PATCH 6/6] Add time to comment --- src/Rooms.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rooms.ts b/src/Rooms.ts index efaca97985..b27d00e804 100644 --- a/src/Rooms.ts +++ b/src/Rooms.ts @@ -34,8 +34,8 @@ export function getDisplayAliasForRoom(room: Room): string { ); } -// The various display alias getters all feed through this one path so there's a -// single place to change the logic. +// The various display alias getters should all feed through this one path so +// there's a single place to change the logic. export function getDisplayAliasForAliasSet(canonicalAlias: string, altAliases: string[]): string { if (AliasCustomisations.getDisplayAliasForAliasSet) { return AliasCustomisations.getDisplayAliasForAliasSet(canonicalAlias, altAliases);