From bd66fbef7fd6d6259bedc37295b1174f6e3771c9 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Thu, 23 Aug 2018 14:05:12 +0800 Subject: [PATCH] FIX: Post time query filter not set correctly when loaded from params. https://meta.discourse.org/t/before-and-after-are-not-implemented-right-in-search/92515 --- .../components/search-advanced-options.js.es6 | 17 +++++++++++++++-- .../acceptance/search-full-test.js.es6 | 9 +++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 b/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 index 6e3b4e16b7..408064686d 100644 --- a/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 +++ b/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 @@ -38,6 +38,7 @@ export default Em.Component.extend({ { name: I18n.t("search.advanced.filters.tracking"), value: "tracking" }, { name: I18n.t("search.advanced.filters.bookmarks"), value: "bookmarks" } ], + inOptionsForAll: [ { name: I18n.t("search.advanced.filters.first"), value: "first" }, { name: I18n.t("search.advanced.filters.pinned"), value: "pinned" }, @@ -45,6 +46,7 @@ export default Em.Component.extend({ { name: I18n.t("search.advanced.filters.wiki"), value: "wiki" }, { name: I18n.t("search.advanced.filters.images"), value: "images" } ], + statusOptions: [ { name: I18n.t("search.advanced.statuses.open"), value: "open" }, { name: I18n.t("search.advanced.statuses.closed"), value: "closed" }, @@ -55,6 +57,7 @@ export default Em.Component.extend({ value: "single_user" } ], + postTimeOptions: [ { name: I18n.t("search.advanced.post.time.before"), value: "before" }, { name: I18n.t("search.advanced.post.time.after"), value: "after" } @@ -116,29 +119,36 @@ export default Em.Component.extend({ this.setSearchedTermValueForGroup(); this.setSearchedTermValueForBadge(); this.setSearchedTermValueForTags(); + this.setSearchedTermValue( "searchedTerms.in", REGEXP_IN_PREFIX, REGEXP_IN_MATCH ); + this.setSearchedTermSpecialInValue( "searchedTerms.special.in.likes", REGEXP_SPECIAL_IN_LIKES_MATCH ); + this.setSearchedTermSpecialInValue( "searchedTerms.special.in.title", REGEXP_SPECIAL_IN_TITLE_MATCH ); + this.setSearchedTermSpecialInValue( "searchedTerms.special.in.private", REGEXP_SPECIAL_IN_PRIVATE_MATCH ); + this.setSearchedTermSpecialInValue( "searchedTerms.special.in.seen", REGEXP_SPECIAL_IN_SEEN_MATCH ); + this.setSearchedTermValue("searchedTerms.status", REGEXP_STATUS_PREFIX); this.setSearchedTermValueForPostTime(); + this.setSearchedTermValue( "searchedTerms.min_post_count", REGEXP_MIN_POST_COUNT_PREFIX @@ -304,14 +314,17 @@ export default Em.Component.extend({ const userInputWhen = match[0].match(REGEXP_POST_TIME_WHEN)[0]; const existingInputDays = this.get("searchedTerms.time.days"); const userInputDays = match[0].replace(REGEXP_POST_TIME_PREFIX, ""); + const properties = {}; if (existingInputWhen !== userInputWhen) { - this.set("searchedTerms.time.when", userInputWhen); + properties["searchedTerms.time.when"] = userInputWhen; } if (existingInputDays !== userInputDays) { - this.set("searchedTerms.time.days", userInputDays); + properties["searchedTerms.time.days"] = userInputDays; } + + this.setProperties(properties); } else { this.set("searchedTerms.time.days", ""); } diff --git a/test/javascripts/acceptance/search-full-test.js.es6 b/test/javascripts/acceptance/search-full-test.js.es6 index fc6736146c..b5bb72e033 100644 --- a/test/javascripts/acceptance/search-full-test.js.es6 +++ b/test/javascripts/acceptance/search-full-test.js.es6 @@ -354,6 +354,14 @@ QUnit.test("update status through advanced search ui", async assert => { }); QUnit.test("update post time through advanced search ui", async assert => { + await visit("/search?expanded=true&q=after:2018-08-22"); + + assert.equal( + find(".search-query").val(), + "after:2018-08-22", + "it should update the search term correctly" + ); + const postTimeSelector = selectKit( ".search-advanced-options .select-kit#postTime" ); @@ -369,6 +377,7 @@ QUnit.test("update post time through advanced search ui", async assert => { postTimeSelector.rowByName("after").exists(), 'has "after" populated' ); + assert.equal( find(".search-query").val(), "none after:2016-10-05",