remove labels and add join/view & preview button instead in directory

This commit is contained in:
Bruno Windels 2019-09-10 16:07:01 +02:00
parent 62ddc1e544
commit 7754e08d84
2 changed files with 93 additions and 68 deletions

View file

@ -321,7 +321,7 @@ module.exports = createReactClass({
} }
}, },
onJoinClick: function(alias) { onJoinFromSearchClick: function(alias) {
// If we don't have a particular instance id selected, just show that rooms alias // If we don't have a particular instance id selected, just show that rooms alias
if (!this.state.instanceId) { if (!this.state.instanceId) {
// If the user specified an alias without a domain, add on whichever server is selected // If the user specified an alias without a domain, add on whichever server is selected
@ -363,6 +363,34 @@ module.exports = createReactClass({
} }
}, },
onPreviewClick: function(room) {
this.props.onFinished();
dis.dispatch({
action: 'view_room',
room_id: room.room_id,
should_peek: true,
});
},
onViewClick: function(room) {
this.props.onFinished();
dis.dispatch({
action: 'view_room',
room_id: room.room_id,
should_peek: false,
});
},
onJoinClick: function(room) {
this.props.onFinished();
MatrixClientPeg.get().joinRoom(room.room_id);
dis.dispatch({
action: 'view_room',
room_id: room.room_id,
joining: true,
});
},
showRoomAlias: function(alias, autoJoin=false) { showRoomAlias: function(alias, autoJoin=false) {
this.showRoom(null, alias, autoJoin); this.showRoom(null, alias, autoJoin);
}, },
@ -407,49 +435,45 @@ module.exports = createReactClass({
dis.dispatch(payload); dis.dispatch(payload);
}, },
getRows: function() { getRow(room) {
const client = MatrixClientPeg.get();
const clientRoom = client.getRoom(room.room_id);
const hasJoinedRoom = clientRoom && clientRoom.getMyMembership() === "join";
const isGuest = client.isGuest();
const BaseAvatar = sdk.getComponent('avatars.BaseAvatar'); const BaseAvatar = sdk.getComponent('avatars.BaseAvatar');
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
let previewButton;
let joinOrViewButton;
if (!this.state.publicRooms) return []; if (room.world_readable && !hasJoinedRoom) {
previewButton = (
const rooms = this.state.publicRooms; <AccessibleButton kind="secondary" onClick={() => this.onPreviewClick(room)}>{_t("Preview")}</AccessibleButton>
const rows = [];
const self = this;
let guestRead; let guestJoin; let perms;
for (let i = 0; i < rooms.length; i++) {
guestRead = null;
guestJoin = null;
if (rooms[i].world_readable) {
guestRead = (
<div className="mx_RoomDirectory_perm">{ _t('World readable') }</div>
); );
} }
if (rooms[i].guest_can_join) { if (hasJoinedRoom) {
guestJoin = ( joinOrViewButton = (
<div className="mx_RoomDirectory_perm">{ _t('Guests can join') }</div> <AccessibleButton kind="secondary" onClick={() => this.onViewClick(room)}>{_t("View")}</AccessibleButton>
);
} else if (!isGuest || room.guest_can_join) {
joinOrViewButton = (
<AccessibleButton kind="primary" onClick={() => this.onJoinClick(room)}>{_t("Join")}</AccessibleButton>
); );
} }
perms = null; let name = room.name || get_display_alias_for_room(room) || _t('Unnamed room');
if (guestRead || guestJoin) {
perms = <div className="mx_RoomDirectory_perms">{guestRead}{guestJoin}</div>;
}
let name = rooms[i].name || get_display_alias_for_room(rooms[i]) || _t('Unnamed room');
if (name.length > MAX_NAME_LENGTH) { if (name.length > MAX_NAME_LENGTH) {
name = `${name.substring(0, MAX_NAME_LENGTH)}...`; name = `${name.substring(0, MAX_NAME_LENGTH)}...`;
} }
let topic = rooms[i].topic || ''; let topic = room.topic || '';
if (topic.length > MAX_TOPIC_LENGTH) { if (topic.length > MAX_TOPIC_LENGTH) {
topic = `${topic.substring(0, MAX_TOPIC_LENGTH)}...`; topic = `${topic.substring(0, MAX_TOPIC_LENGTH)}...`;
} }
topic = linkifyAndSanitizeHtml(topic); topic = linkifyAndSanitizeHtml(topic);
rows.push( return (
<tr key={ rooms[i].room_id } <tr key={ room.room_id }
onClick={self.onRoomClicked.bind(self, rooms[i])} onClick={() => this.onRoomClicked(room)}
// cancel onMouseDown otherwise shift-clicking highlights text // cancel onMouseDown otherwise shift-clicking highlights text
onMouseDown={(ev) => {ev.preventDefault();}} onMouseDown={(ev) => {ev.preventDefault();}}
> >
@ -458,23 +482,22 @@ module.exports = createReactClass({
name={ name } idName={ name } name={ name } idName={ name }
url={ ContentRepo.getHttpUriForMxc( url={ ContentRepo.getHttpUriForMxc(
MatrixClientPeg.get().getHomeserverUrl(), MatrixClientPeg.get().getHomeserverUrl(),
rooms[i].avatar_url, 24, 24, "crop") } /> room.avatar_url, 24, 24, "crop") } />
</td> </td>
<td className="mx_RoomDirectory_roomDescription"> <td className="mx_RoomDirectory_roomDescription">
<div className="mx_RoomDirectory_name">{ name }</div>&nbsp; <div className="mx_RoomDirectory_name">{ name }</div>&nbsp;
{ perms }
<div className="mx_RoomDirectory_topic" <div className="mx_RoomDirectory_topic"
onClick={ function(e) { e.stopPropagation(); } } onClick={ function(e) { e.stopPropagation(); } }
dangerouslySetInnerHTML={{ __html: topic }} /> dangerouslySetInnerHTML={{ __html: topic }} />
<div className="mx_RoomDirectory_alias">{ get_display_alias_for_room(rooms[i]) }</div> <div className="mx_RoomDirectory_alias">{ get_display_alias_for_room(room) }</div>
</td> </td>
<td className="mx_RoomDirectory_roomMemberCount"> <td className="mx_RoomDirectory_roomMemberCount">
{ rooms[i].num_joined_members } { room.num_joined_members }
</td> </td>
</tr>, <td className="mx_RoomDirectory_preview">{previewButton}</td>
<td className="mx_RoomDirectory_join">{joinOrViewButton}</td>
</tr>
); );
}
return rows;
}, },
collectScrollPanel: function(element) { collectScrollPanel: function(element) {
@ -528,7 +551,7 @@ module.exports = createReactClass({
} else if (this.state.protocolsLoading || this.state.loading) { } else if (this.state.protocolsLoading || this.state.loading) {
content = <Loader />; content = <Loader />;
} else { } else {
const rows = this.getRows(); const rows = (this.state.publicRooms || []).map(room => this.getRow(room));
// we still show the scrollpanel, at least for now, because // we still show the scrollpanel, at least for now, because
// otherwise we don't fetch more because we don't get a fill // otherwise we don't fetch more because we don't get a fill
// request from the scrollpanel because there isn't one // request from the scrollpanel because there isn't one
@ -538,7 +561,7 @@ module.exports = createReactClass({
} else { } else {
scrollpanel_content = <table ref="directory_table" className="mx_RoomDirectory_table"> scrollpanel_content = <table ref="directory_table" className="mx_RoomDirectory_table">
<tbody> <tbody>
{ this.getRows() } { rows }
</tbody> </tbody>
</table>; </table>;
} }
@ -590,7 +613,7 @@ module.exports = createReactClass({
listHeader = <div className="mx_RoomDirectory_listheader"> listHeader = <div className="mx_RoomDirectory_listheader">
<DirectorySearchBox <DirectorySearchBox
className="mx_RoomDirectory_searchbox" className="mx_RoomDirectory_searchbox"
onChange={this.onFilterChange} onClear={this.onFilterClear} onJoinClick={this.onJoinClick} onChange={this.onFilterChange} onClear={this.onFilterClear} onJoinClick={this.onJoinFromSearchClick}
placeholder={placeholder} showJoinButton={showJoinButton} placeholder={placeholder} showJoinButton={showJoinButton}
/> />
<NetworkDropdown config={this.props.config} protocols={this.protocols} onOptionChange={this.onOptionChange} /> <NetworkDropdown config={this.props.config} protocols={this.protocols} onOptionChange={this.onOptionChange} />

View file

@ -1598,6 +1598,8 @@
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room", "Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
"Fetching third party location failed": "Fetching third party location failed", "Fetching third party location failed": "Fetching third party location failed",
"Unable to look up room ID from server": "Unable to look up room ID from server", "Unable to look up room ID from server": "Unable to look up room ID from server",
"Preview": "Preview",
"View": "View",
"Search for a room": "Search for a room", "Search for a room": "Search for a room",
"Search for a room like #example": "Search for a room like #example", "Search for a room like #example": "Search for a room like #example",
"Message not sent due to unknown devices being present": "Message not sent due to unknown devices being present", "Message not sent due to unknown devices being present": "Message not sent due to unknown devices being present",