remove labels and add join/view & preview button instead in directory
This commit is contained in:
parent
62ddc1e544
commit
7754e08d84
2 changed files with 93 additions and 68 deletions
|
@ -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>
|
<div className="mx_RoomDirectory_name">{ name }</div>
|
||||||
{ 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} />
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in a new issue