diff --git a/res/css/structures/_RoomDirectory.scss b/res/css/structures/_RoomDirectory.scss
index 29e6fecd349..89cb21b7a69 100644
--- a/res/css/structures/_RoomDirectory.scss
+++ b/res/css/structures/_RoomDirectory.scss
@@ -64,28 +64,23 @@ limitations under the License.
}
.mx_RoomDirectory_table {
- font-size: $font-12px;
color: $primary-fg-color;
- width: 100%;
+ display: grid;
+ font-size: $font-12px;
+ grid-template-columns: max-content auto max-content max-content max-content;
+ row-gap: 24px;
text-align: left;
- table-layout: fixed;
+ width: 100%;
}
.mx_RoomDirectory_roomAvatar {
- width: 32px;
- padding-right: 14px;
- vertical-align: top;
-}
-
-.mx_RoomDirectory_roomDescription {
- padding-bottom: 16px;
+ padding: 2px 14px 0 0;
}
.mx_RoomDirectory_roomMemberCount {
+ align-self: center;
color: $light-fg-color;
- width: 60px;
- padding: 0 10px;
- text-align: center;
+ padding: 3px 10px 0;
&::before {
background-color: $light-fg-color;
@@ -105,8 +100,7 @@ limitations under the License.
}
.mx_RoomDirectory_join, .mx_RoomDirectory_preview {
- width: 80px;
- text-align: center;
+ align-self: center;
white-space: nowrap;
}
diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js
index 9ddacaf8297..7387e1aac02 100644
--- a/src/components/structures/RoomDirectory.js
+++ b/src/components/structures/RoomDirectory.js
@@ -477,7 +477,7 @@ export default class RoomDirectory extends React.Component {
dis.dispatch(payload);
}
- getRow(room) {
+ createRoomCells(room) {
const client = MatrixClientPeg.get();
const clientRoom = client.getRoom(room.room_id);
const hasJoinedRoom = clientRoom && clientRoom.getMyMembership() === "join";
@@ -523,31 +523,56 @@ export default class RoomDirectory extends React.Component {
MatrixClientPeg.get().getHomeserverUrl(),
room.avatar_url, 32, 32, "crop",
);
- return (
-
this.onRoomClicked(room, ev)}
+ // cancel onMouseDown otherwise shift-clicking highlights text
+ onMouseDown={(ev) => {ev.preventDefault();}}
+ className="mx_RoomDirectory_roomDescription"
+ >
+
{ name }
+
{ ev.stopPropagation(); } }
+ dangerouslySetInnerHTML={{ __html: topic }}
+ />
+
{ get_display_alias_for_room(room) }
+
,
+
this.onRoomClicked(room, ev)}
+ // cancel onMouseDown otherwise shift-clicking highlights text
+ onMouseDown={(ev) => {ev.preventDefault();}}
+ className="mx_RoomDirectory_roomMemberCount"
+ >
+ { room.num_joined_members }
+
,
+
this.onRoomClicked(room, ev)}
+ // cancel onMouseDown otherwise shift-clicking highlights text
+ onMouseDown={(ev) => {ev.preventDefault();}}
+ className="mx_RoomDirectory_preview"
+ >
+ {previewButton}
+
,
+
this.onRoomClicked(room, ev)}
+ // cancel onMouseDown otherwise shift-clicking highlights text
+ onMouseDown={(ev) => {ev.preventDefault();}}
+ className="mx_RoomDirectory_join"
+ >
+ {joinOrViewButton}
+
,
+ ];
}
collectScrollPanel = (element) => {
@@ -606,7 +631,8 @@ export default class RoomDirectory extends React.Component {
} else if (this.state.protocolsLoading) {
content =
;
} else {
- const rows = (this.state.publicRooms || []).map(room => this.getRow(room));
+ const cells = (this.state.publicRooms || [])
+ .reduce((cells, room) => cells.concat(this.createRoomCells(room)), [],);
// we still show the scrollpanel, at least for now, because
// otherwise we don't fetch more because we don't get a fill
// request from the scrollpanel because there isn't one
@@ -617,14 +643,12 @@ export default class RoomDirectory extends React.Component {
}
let scrollpanel_content;
- if (rows.length === 0 && !this.state.loading) {
+ if (cells.length === 0 && !this.state.loading) {
scrollpanel_content =
{ _t('No rooms to show') };
} else {
- scrollpanel_content =
;
+ scrollpanel_content =
+ { cells }
+
;
}
const ScrollPanel = sdk.getComponent("structures.ScrollPanel");
content =