Browse Source

Different way of getting fields for 3p location

Try to match protocol insance from 'domain' field and use its
fields for all but the last field. Assume the last takes the user
input.
pull/2379/head
David Baker 6 years ago
parent
commit
776fe2ad70
  1. 65
      src/components/structures/RoomDirectory.js

65
src/components/structures/RoomDirectory.js

@ -485,34 +485,49 @@ module.exports = React.createClass({
},
_getFieldsForThirdPartyLocation: function(user_input, network) {
const getfields_funcs = {
irc: (user_input, network) => {
if (!this.protocols.irc) return;
const domain = this.props.config.networks[network].domain;
// search through to make sure this is a domain actually
// recognised by the HS
for (const inst of this.protocols.irc.instances) {
if (inst.fields && inst.fields.domain == domain) {
return {
domain: domain,
channel: user_input,
}
}
}
return null;
},
gitter: (user_input, network) => {
if (!this.protocols.gitter) return;
return {
room: user_input,
if (!this.props.config.networks || !this.props.config.networks[network]) return null;
const network_info = this.props.config.networks[network];
if (!network_info.protocol) return null;
if (!this.protocols) return null;
let instance;
// Try to find which instance in the 'protocols' response
// matches this network. We look for a matching protocol
// and the existence of a 'domain' field and if present,
// its value.
if (this.protocols[network_info.protocol].instances.length == 1) {
const the_instance = this.protocols[network_info.protocol].instances[0];
// If there's only one instance in this protocol, use it
// as long as it has no domain (which we assume to mean it's
// there is only one possible instance).
if (the_instance.fields.domain === undefined && network_info.domain === undefined) {
instance = this.protocols[network_info.protocol].instances[0];
}
} else if (network_info.domain) {
// otherwise, we look for one with a matching domain.
for (const this_instance of this.protocols[network_info.protocol].instances) {
if (this_instance.fields.domain == network_info.domain) {
instance = this_instance;
}
},
};
}
}
const protocol = this._protocolForThirdPartyNetwork(network);
if (getfields_funcs[protocol]) {
return getfields_funcs[protocol](user_input, network);
if (instance === undefined) return null;
// now 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 = this.protocols[network_info.protocol].location_fields;
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];
}
fields[required_fields[required_fields.length - 1]] = user_input;
return fields;
},
render: function() {

Loading…
Cancel
Save