diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js
index 372b1cda..79ae349d 100644
--- a/src/components/structures/RoomDirectory.js
+++ b/src/components/structures/RoomDirectory.js
@@ -122,7 +122,7 @@ module.exports = React.createClass({
opts.server = my_server;
}
if (this.state.instanceId) {
- opts.third_party_instanceId = this.state.instanceId;
+ opts.third_party_instance_id = this.state.instanceId;
} else if (this.state.includeAll) {
opts.include_all_networks = true;
}
@@ -282,8 +282,7 @@ module.exports = React.createClass({
},
onJoinClick: function(alias) {
- // If we're on the 'Matrix' network (or all networks),
- // just show that rooms alias
+ // If we don't have a prticular instance id selected, just show that rooms alias
if (!this.state.instanceId) {
// If the user specified an alias without a domain, add on whichever server is selected
// in the dropdown
@@ -292,11 +291,10 @@ module.exports = React.createClass({
}
this.showRoomAlias(alias);
} else {
- // This is a 3rd party protocol. Let's see if we
- // can join it
- const protocol_name = protocolNameForInstanceId(this.protocols, this.state.instanceId);
+ // This is a 3rd party protocol. Let's see if we can join it
+ const protocolName = protocolNameForInstanceId(this.protocols, this.state.instanceId);
const instance = instanceForInstanceId(this.protocols, this.state.instanceId);
- const fields = this._getFieldsForThirdPartyLocation(alias, this.protocols[protocol_name], instance);
+ const fields = protocolName ? this._getFieldsForThirdPartyLocation(alias, this.protocols[protocolName], instance) : null;
if (!fields) {
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createDialog(ErrorDialog, {
@@ -305,7 +303,7 @@ module.exports = React.createClass({
});
return;
}
- MatrixClientPeg.get().getThirdpartyLocation(protocol_name, fields).done((resp) => {
+ MatrixClientPeg.get().getThirdpartyLocation(protocolName, fields).done((resp) => {
if (resp.length > 0 && resp[0].alias) {
this.showRoomAlias(resp[0].alias);
} else {
@@ -445,19 +443,19 @@ module.exports = React.createClass({
return pat.test(s);
},
- _getFieldsForThirdPartyLocation: function(user_input, protocol, instance) {
+ _getFieldsForThirdPartyLocation: function(userInput, protocol, instance) {
// make an object with the fields specified by that protocol. We
// require that the values of all but the last field come from the
// instance. The last is the user input.
- const required_fields = protocol.location_fields;
- if (!required_fields) return null;
+ const requiredFields = protocol.location_fields;
+ if (!requiredFields) return null;
const fields = {};
- for (let i = 0; i < required_fields.length - 1; ++i) {
- const this_field = required_fields[i];
- if (instance.fields[this_field] === undefined) return null;
- fields[this_field] = instance.fields[this_field];
+ for (let i = 0; i < requiredFields.length - 1; ++i) {
+ const thisField = requiredFields[i];
+ if (instance.fields[thisField] === undefined) return null;
+ fields[thisField] = instance.fields[thisField];
}
- fields[required_fields[required_fields.length - 1]] = user_input;
+ fields[requiredFields[requiredFields.length - 1]] = userInput;
return fields;
},
@@ -506,17 +504,17 @@ module.exports = React.createClass({
;
}
- const protocol_name = protocolNameForInstanceId(this.protocols, this.state.instanceId);
+ const protocolName = protocolNameForInstanceId(this.protocols, this.state.instanceId);
let instance_expected_field_type;
if (
- protocol_name &&
+ protocolName &&
this.protocols &&
- this.protocols[protocol_name] &&
- this.protocols[protocol_name].location_fields.length > 0 &&
- this.protocols[protocol_name].field_types
+ this.protocols[protocolName] &&
+ this.protocols[protocolName].location_fields.length > 0 &&
+ this.protocols[protocolName].field_types
) {
- const last_field = this.protocols[protocol_name].location_fields.slice(-1)[0];
- instance_expected_field_type = this.protocols[protocol_name].field_types[last_field];
+ const last_field = this.protocols[protocolName].location_fields.slice(-1)[0];
+ instance_expected_field_type = this.protocols[protocolName].field_types[last_field];
}
@@ -528,9 +526,9 @@ module.exports = React.createClass({
}
let showJoinButton = this._stringLooksLikeId(this.state.filterString, instance_expected_field_type);
- if (protocol_name) {
+ if (protocolName) {
const instance = instanceForInstanceId(this.protocols, this.state.instanceId);
- if (this._getFieldsForThirdPartyLocation(this.state.filterString, this.protocols[protocol_name], instance) === null) {
+ if (this._getFieldsForThirdPartyLocation(this.state.filterString, this.protocols[protocolName], instance) === null) {
showJoinButton = false;
}
}
diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js
index 155dd01a..4ce094bc 100644
--- a/src/components/views/directory/NetworkDropdown.js
+++ b/src/components/views/directory/NetworkDropdown.js
@@ -180,7 +180,7 @@ export default class NetworkDropdown extends React.Component {
icon = ;
span_class = 'mx_NetworkDropdown_menu_network';
} else {
- key = server + '_inst_'+instance.instance_id;
+ key = server + '_inst_' + instance.instance_id;
icon = ;
name = instance.desc;
span_class = 'mx_NetworkDropdown_menu_network';
@@ -227,6 +227,7 @@ export default class NetworkDropdown extends React.Component {
NetworkDropdown.propTypes = {
onOptionChange: React.PropTypes.func.isRequired,
protocols: React.PropTypes.object,
+ // The room directory config. May have a 'servers' key that is a list of server names to include in the dropdown
config: React.PropTypes.object,
};
diff --git a/src/utils/DirectoryUtils.js b/src/utils/DirectoryUtils.js
index 9dc4d926..72e44681 100644
--- a/src/utils/DirectoryUtils.js
+++ b/src/utils/DirectoryUtils.js
@@ -3,7 +3,7 @@
export function instanceForInstanceId(protocols, instance_id) {
if (!instance_id) return null;
for (const proto of Object.keys(protocols)) {
- if (!protocols[proto].instances) continue;
+ if (!protocols[proto].instances && protocols[proto].instances instanceof Array) continue;
for (const instance of protocols[proto].instances) {
if (instance.instance_id == instance_id) return instance;
}
@@ -15,7 +15,7 @@ export function instanceForInstanceId(protocols, instance_id) {
export function protocolNameForInstanceId(protocols, instance_id) {
if (!instance_id) return null;
for (const proto of Object.keys(protocols)) {
- if (!protocols[proto].instances) continue;
+ if (!protocols[proto].instances && protocols[proto].instances instanceof Array) continue;
for (const instance of protocols[proto].instances) {
if (instance.instance_id == instance_id) return proto;
}