diff --git a/src/components/views/auth/RegistrationForm.js b/src/components/views/auth/RegistrationForm.js index 76b4cdb621..acde4d03fe 100644 --- a/src/components/views/auth/RegistrationForm.js +++ b/src/components/views/auth/RegistrationForm.js @@ -270,11 +270,27 @@ module.exports = React.createClass({ this.validateField(FIELD_USERNAME, ev.type); }, + /** + * A step is required if all flows include that step. + * + * @param {string} step A stage name to check + * @returns {boolean} Whether it is required + */ _authStepIsRequired(step) { - // A step is required if no flow exists which does not include that step - // (Notwithstanding setups like either email or msisdn being required) - return !this.props.flows.some((flow) => { - return !flow.stages.includes(step); + return this.props.flows.every((flow) => { + return flow.stages.includes(step); + }); + }, + + /** + * A step is used if any flows include that step. + * + * @param {string} step A stage name to check + * @returns {boolean} Whether it is used + */ + _authStepIsUsed(step) { + return this.props.flows.some((flow) => { + return flow.stages.includes(step); }); }, @@ -298,24 +314,28 @@ module.exports = React.createClass({ ; } - const emailPlaceholder = this._authStepIsRequired('m.login.email.identity') ? - _t("Email") : - _t("Email (optional)"); + let emailSection; + if (this._authStepIsUsed('m.login.email.identity')) { + const emailPlaceholder = this._authStepIsRequired('m.login.email.identity') ? + _t("Email") : + _t("Email (optional)"); - const emailSection = ( -
- -
- ); + emailSection = ( +
+ +
+ ); + } + const threePidLogin = !SdkConfig.get().disable_3pid_login; const CountryDropdown = sdk.getComponent('views.auth.CountryDropdown'); let phoneSection; - if (!SdkConfig.get().disable_3pid_login) { + if (threePidLogin && this._authStepIsUsed('m.login.msisdn')) { const phonePlaceholder = this._authStepIsRequired('m.login.msisdn') ? _t("Phone") : _t("Phone (optional)");