diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js
index e13eab8eb3a..a7211f6f462 100644
--- a/src/components/structures/RoomDirectory.js
+++ b/src/components/structures/RoomDirectory.js
@@ -26,14 +26,17 @@ const dis = require('../../dispatcher');
import { linkifyAndSanitizeHtml } from '../../HtmlUtils';
import Promise from 'bluebird';
-
import { _t } from '../../languageHandler';
-
-import {instanceForInstanceId, protocolNameForInstanceId} from '../../utils/DirectoryUtils';
+import { instanceForInstanceId, protocolNameForInstanceId } from '../../utils/DirectoryUtils';
+import Analytics from '../../Analytics';
const MAX_NAME_LENGTH = 80;
const MAX_TOPIC_LENGTH = 160;
+function track(action) {
+ Analytics.trackEvent('RoomDirectory', action);
+}
+
module.exports = React.createClass({
displayName: 'RoomDirectory',
@@ -53,6 +56,7 @@ module.exports = React.createClass({
publicRooms: [],
loading: true,
protocolsLoading: true,
+ error: null,
instanceId: null,
includeAll: false,
roomServer: null,
@@ -95,10 +99,12 @@ module.exports = React.createClass({
// thing you see when loading the client!
return;
}
- const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
- Modal.createTrackedDialog('Failed to get protocol list from homeserver', '', ErrorDialog, {
- title: _t('Failed to get protocol list from homeserver'),
- description: _t('The homeserver may be too old to support third party networks'),
+ track('Failed to get protocol list from homeserver');
+ this.setState({
+ error: _t(
+ 'Riot failed to get the protocol list from the homeserver. ' +
+ 'The homeserver may be too old to support third party networks.',
+ ),
});
});
@@ -187,12 +193,14 @@ module.exports = React.createClass({
return;
}
- this.setState({ loading: false });
console.error("Failed to get publicRooms: %s", JSON.stringify(err));
- const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
- Modal.createTrackedDialog('Failed to get public room list', '', ErrorDialog, {
- title: _t('Failed to get public room list'),
- description: ((err && err.message) ? err.message : _t('The server may be unavailable or overloaded')),
+ track('Failed to get public room list');
+ this.setState({
+ loading: false,
+ error:
+ `${_t('Riot failed to get the public room list.')} ` +
+ `${(err && err.message) ? err.message : _t('The homeserver may be unavailable or overloaded.')}`
+ ,
});
});
},
@@ -511,25 +519,15 @@ module.exports = React.createClass({
},
render: function() {
- const SimpleRoomHeader = sdk.getComponent('rooms.SimpleRoomHeader');
const Loader = sdk.getComponent("elements.Spinner");
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
- // TODO: clean this up
- if (this.state.protocolsLoading) {
- return (
-
-
-
- );
- }
-
let content;
- if (this.state.loading) {
- content =
-
-
;
+ if (this.state.error) {
+ content = this.state.error;
+ } else if (this.state.protocolsLoading || this.state.loading) {
+ content = ;
} else {
const rows = this.getRows();
// we still show the scrollpanel, at least for now, because
@@ -557,33 +555,48 @@ module.exports = React.createClass({
;
}
- const protocolName = protocolNameForInstanceId(this.protocols, this.state.instanceId);
- let instance_expected_field_type;
- if (
- protocolName &&
- this.protocols &&
- this.protocols[protocolName] &&
- this.protocols[protocolName].location_fields.length > 0 &&
- this.protocols[protocolName].field_types
- ) {
- const last_field = this.protocols[protocolName].location_fields.slice(-1)[0];
- instance_expected_field_type = this.protocols[protocolName].field_types[last_field];
- }
+ let listHeader;
+ if (!this.state.protocolsLoading) {
+ const NetworkDropdown = sdk.getComponent('directory.NetworkDropdown');
+ const DirectorySearchBox = sdk.getComponent('elements.DirectorySearchBox');
+ const protocolName = protocolNameForInstanceId(this.protocols, this.state.instanceId);
+ let instance_expected_field_type;
+ if (
+ protocolName &&
+ this.protocols &&
+ this.protocols[protocolName] &&
+ this.protocols[protocolName].location_fields.length > 0 &&
+ this.protocols[protocolName].field_types
+ ) {
+ const last_field = this.protocols[protocolName].location_fields.slice(-1)[0];
+ instance_expected_field_type = this.protocols[protocolName].field_types[last_field];
+ }
- let placeholder = _t('Search for a room');
- if (!this.state.instanceId) {
- placeholder = _t('Search for a room like #example') + ':' + this.state.roomServer;
- } else if (instance_expected_field_type) {
- placeholder = instance_expected_field_type.placeholder;
- }
- let showJoinButton = this._stringLooksLikeId(this.state.filterString, instance_expected_field_type);
- if (protocolName) {
- const instance = instanceForInstanceId(this.protocols, this.state.instanceId);
- if (this._getFieldsForThirdPartyLocation(this.state.filterString, this.protocols[protocolName], instance) === null) {
- showJoinButton = false;
+ let placeholder = _t('Search for a room');
+ if (!this.state.instanceId) {
+ placeholder = _t('Search for a room like #example') + ':' + this.state.roomServer;
+ } else if (instance_expected_field_type) {
+ placeholder = instance_expected_field_type.placeholder;
}
+
+ let showJoinButton = this._stringLooksLikeId(this.state.filterString, instance_expected_field_type);
+ if (protocolName) {
+ const instance = instanceForInstanceId(this.protocols, this.state.instanceId);
+ if (this._getFieldsForThirdPartyLocation(this.state.filterString, this.protocols[protocolName], instance) === null) {
+ showJoinButton = false;
+ }
+ }
+
+ listHeader =
+
+
+
;
}
const createRoomButton = ({_t("Create new room")});
- const NetworkDropdown = sdk.getComponent('directory.NetworkDropdown');
- const DirectorySearchBox = sdk.getComponent('elements.DirectorySearchBox');
return (
-
-
-
-
+ {listHeader}
{content}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index e85537ba038..94d524d767c 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -1379,15 +1379,15 @@
"Create a new community": "Create a new community",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.",
"You have no visible notifications": "You have no visible notifications",
- "Failed to get protocol list from homeserver": "Failed to get protocol list from homeserver",
- "The homeserver may be too old to support third party networks": "The homeserver may be too old to support third party networks",
- "Failed to get public room list": "Failed to get public room list",
- "The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
+ "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.",
+ "Riot failed to get the public room list.": "Riot failed to get the public room list.",
+ "The homeserver may be unavailable or overloaded.": "The homeserver may be unavailable or overloaded.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
"Remove from Directory": "Remove from Directory",
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
"delete the alias.": "delete the alias.",
+ "The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
"Unable to join network": "Unable to join network",
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
"Room not found": "Room not found",