From 07b856700ded1bc805196e4c85a7542c61a6b6c2 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 21 Feb 2019 16:23:11 +1100 Subject: [PATCH] REFACTOR: remove disallowEmails option from user-selector Negative option was leading to a fair amount of confusion, going forward if we want to allow selection of emails from user selector it must be supplied with `allowEmails=true` This corrects a regression in 1f4ace4f which broke invite by emails and start PM to email --- .../discourse/components/user-selector.js.es6 | 4 ++-- .../javascripts/discourse/lib/user-search.js.es6 | 12 ++++++++---- .../templates/components/composer-user-selector.hbs | 1 + .../discourse/templates/components/invite-panel.hbs | 1 + .../discourse/templates/modal/group-add-members.hbs | 3 +-- test/javascripts/lib/user-search-test.js.es6 | 12 ++++++++++-- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/discourse/components/user-selector.js.es6 b/app/assets/javascripts/discourse/components/user-selector.js.es6 index a25b3f65e9..1ad76ba6ab 100644 --- a/app/assets/javascripts/discourse/components/user-selector.js.es6 +++ b/app/assets/javascripts/discourse/components/user-selector.js.es6 @@ -34,7 +34,7 @@ export default TextField.extend({ single = bool("single"), allowAny = bool("allowAny"), disabled = bool("disabled"), - disallowEmails = bool("disallowEmails"), + allowEmails = bool("allowEmails"), fullWidthWrap = bool("fullWidthWrap"); function excludedUsernames() { @@ -67,7 +67,7 @@ export default TextField.extend({ includeMentionableGroups, includeMessageableGroups, group: self.get("group"), - disallowEmails + allowEmails }); return results; }, diff --git a/app/assets/javascripts/discourse/lib/user-search.js.es6 b/app/assets/javascripts/discourse/lib/user-search.js.es6 index c64ec385de..43359845e7 100644 --- a/app/assets/javascripts/discourse/lib/user-search.js.es6 +++ b/app/assets/javascripts/discourse/lib/user-search.js.es6 @@ -85,7 +85,7 @@ function organizeResults(r, options) { }); } - if (!options.disallowEmails && emailValid(options.term)) { + if (options.allowEmails && emailValid(options.term)) { let e = { username: options.term }; emails = [e]; results.push(e); @@ -118,9 +118,13 @@ function organizeResults(r, options) { // will not find me, which is a reasonable compromise // // we also ignore if we notice a double space or a string that is only a space -const ignoreRegex = /([\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-\/:;<=>?@\[\]^_`{|}~])|\s\s|^\s$/; +const ignoreRegex = /([\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-\/:;<=>?\[\]^_`{|}~])|\s\s|^\s$/; + +function skipSearch(term, allowEmails) { + if (term.indexOf("@") > -1 && !allowEmails) { + return true; + } -function skipSearch(term) { return !!term.match(ignoreRegex); } @@ -155,7 +159,7 @@ export default function userSearch(options) { resolve(CANCELLED_STATUS); }, 5000); - if (skipSearch(term)) { + if (skipSearch(term, options.allowEmails)) { resolve([]); return; } diff --git a/app/assets/javascripts/discourse/templates/components/composer-user-selector.hbs b/app/assets/javascripts/discourse/templates/components/composer-user-selector.hbs index 7ee33ef939..9a9b1cfcf8 100644 --- a/app/assets/javascripts/discourse/templates/components/composer-user-selector.hbs +++ b/app/assets/javascripts/discourse/templates/components/composer-user-selector.hbs @@ -7,6 +7,7 @@ tabindex="1" usernames=usernames hasGroups=hasGroups + allowEmails='true' autocomplete="discourse"}} {{else}}
diff --git a/app/assets/javascripts/discourse/templates/components/invite-panel.hbs b/app/assets/javascripts/discourse/templates/components/invite-panel.hbs index 10275ebf97..5887a3231e 100644 --- a/app/assets/javascripts/discourse/templates/components/invite-panel.hbs +++ b/app/assets/javascripts/discourse/templates/components/invite-panel.hbs @@ -29,6 +29,7 @@ hasGroups=hasGroups usernames=emailOrUsername placeholderKey=placeholderKey + allowEmails=true class="invite-user-input" autocomplete="discourse"}} {{else}} diff --git a/app/assets/javascripts/discourse/templates/modal/group-add-members.hbs b/app/assets/javascripts/discourse/templates/modal/group-add-members.hbs index c07c81a1d7..ae13193ea1 100644 --- a/app/assets/javascripts/discourse/templates/modal/group-add-members.hbs +++ b/app/assets/javascripts/discourse/templates/modal/group-add-members.hbs @@ -9,8 +9,7 @@ class="input-xxlarge" usernames=model.usernames placeholderKey="groups.selector_placeholder" - id="group-add-members-user-selector" - disallowEmails=true}} + id="group-add-members-user-selector"}}
{{#if currentUser.admin}} diff --git a/test/javascripts/lib/user-search-test.js.es6 b/test/javascripts/lib/user-search-test.js.es6 index 28e3da7d3c..fc676db348 100644 --- a/test/javascripts/lib/user-search-test.js.es6 +++ b/test/javascripts/lib/user-search-test.js.es6 @@ -73,6 +73,7 @@ QUnit.test("it strips @ from the beginning", async assert => { }); QUnit.test("it skips a search depending on punctuations", async assert => { + let results; let skippedTerms = [ "@sam s", // double space is not allowed "@sam;", @@ -81,7 +82,7 @@ QUnit.test("it skips a search depending on punctuations", async assert => { ]; for (let term of skippedTerms) { - let results = await userSearch({ term }); + results = await userSearch({ term }); assert.equal(results.length, 0); } @@ -94,7 +95,14 @@ QUnit.test("it skips a search depending on punctuations", async assert => { let topicId = 100; for (let term of allowedTerms) { - let results = await userSearch({ term, topicId }); + results = await userSearch({ term, topicId }); assert.equal(results.length, 6); } + + results = await userSearch({ term: "sam@sam.com", allowEmails: true }); + // 6 + email + assert.equal(results.length, 7); + + results = await userSearch({ term: "sam@sam.com" }); + assert.equal(results.length, 0); });