diff --git a/src/components/views/elements/RoomAliasField.js b/src/components/views/elements/RoomAliasField.js index 007bd07a47..0139a9596b 100644 --- a/src/components/views/elements/RoomAliasField.js +++ b/src/components/views/elements/RoomAliasField.js @@ -92,6 +92,7 @@ export default class RoomAliasField extends React.PureComponent { invalid: () => _t("Please provide a room alias"), }, { key: "taken", + skip: ({value}) => !value, test: async ({value}) => { if (!value) { return true; diff --git a/src/components/views/elements/Validation.js b/src/components/views/elements/Validation.js index 31363b87c8..3454ab3aec 100644 --- a/src/components/views/elements/Validation.js +++ b/src/components/views/elements/Validation.js @@ -51,9 +51,16 @@ export default function withValidation({ description, rules }) { if (!rule.key || !rule.test) { continue; } + + const data = { value, allowEmpty }; + + if (rule.skip && rule.skip.call(this, data)) { + continue; + } + // We're setting `this` to whichever component holds the validation // function. That allows rules to access the state of the component. - const ruleValid = await rule.test.call(this, { value, allowEmpty }); + const ruleValid = await rule.test.call(this, data); valid = valid && ruleValid; if (ruleValid && rule.valid) { // If the rule's result is valid and has text to show for