From 1dda998a4e342ef3082e23741d15b9030308f987 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Mon, 20 Feb 2017 17:02:02 -0500 Subject: [PATCH] FEATURE: search should default scope to current category or user --- .../discourse/services/search.js.es6 | 2 +- .../discourse/widgets/header.js.es6 | 24 ++++++++++++++++++- .../discourse/widgets/search-menu.js.es6 | 1 + .../javascripts/acceptance/search-test.js.es6 | 23 ++++++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/services/search.js.es6 b/app/assets/javascripts/discourse/services/search.js.es6 index dcaa600aa6..3a2062308f 100644 --- a/app/assets/javascripts/discourse/services/search.js.es6 +++ b/app/assets/javascripts/discourse/services/search.js.es6 @@ -1,7 +1,7 @@ import { default as computed, observes } from 'ember-addons/ember-computed-decorators'; export default Ember.Object.extend({ - searchContextEnabled: false, + searchContextEnabled: false, // checkbox to scope search searchContext: null, term: null, highlightTerm: null, diff --git a/app/assets/javascripts/discourse/widgets/header.js.es6 b/app/assets/javascripts/discourse/widgets/header.js.es6 index 8dbb00349a..252baf173e 100644 --- a/app/assets/javascripts/discourse/widgets/header.js.es6 +++ b/app/assets/javascripts/discourse/widgets/header.js.es6 @@ -172,7 +172,6 @@ export default createWidget('header', { searchVisible: false, hamburgerVisible: false, userVisible: false, - contextEnabled: false, ringBackdrop: true }; @@ -192,6 +191,19 @@ export default createWidget('header', { flagCount: attrs.flagCount })]; if (state.searchVisible) { + const contextType = this.searchContextType(); + + if (state.searchContextType !== contextType) { + state.contextEnabled = undefined; + } + + state.searchContextType = contextType; + + if (state.contextEnabled === undefined) { + if (contextType === 'category' || contextType === 'user') { + state.contextEnabled = true; + } + } panels.push(this.attach('search-menu', { contextEnabled: state.contextEnabled })); } else if (state.hamburgerVisible) { panels.push(this.attach('hamburger-menu')); @@ -318,6 +330,16 @@ export default createWidget('header', { } break; } + }, + + searchContextType() { + const service = this.register.lookup('search-service:main'); + if (service) { + const ctx = service.get('searchContext'); + if (ctx) { + return Ember.get(ctx, 'type'); + } + } } }); diff --git a/app/assets/javascripts/discourse/widgets/search-menu.js.es6 b/app/assets/javascripts/discourse/widgets/search-menu.js.es6 index 2e33e54d74..843203aec1 100644 --- a/app/assets/javascripts/discourse/widgets/search-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/search-menu.js.es6 @@ -170,6 +170,7 @@ export default createWidget('search-menu', { }, searchContextChanged(enabled) { + // This indicates the checkbox has been clicked, NOT that the context has changed. searchData.typeFilter = null; this.sendWidgetAction('searchMenuContextChanged', enabled); searchData.contextEnabled = enabled; diff --git a/test/javascripts/acceptance/search-test.js.es6 b/test/javascripts/acceptance/search-test.js.es6 index 12243b05c3..69d6dad7cc 100644 --- a/test/javascripts/acceptance/search-test.js.es6 +++ b/test/javascripts/acceptance/search-test.js.es6 @@ -24,3 +24,26 @@ test("search", (assert) => { assert.ok(exists('.search-advanced-options'), 'advanced search is expanded'); }); }); + +test("search scope checkbox", () => { + visit("/c/bug"); + click('#search-button'); + andThen(() => { + ok(exists('.search-context input:checked'), 'scope to category checkbox is checked'); + }); + click('#search-button'); + + visit("/t/internationalization-localization/280"); + click('#search-button'); + andThen(() => { + not(exists('.search-context input:checked'), 'scope to topic checkbox is not checked'); + }); + click('#search-button'); + + visit("/users/eviltrout"); + click('#search-button'); + andThen(() => { + ok(exists('.search-context input:checked'), 'scope to user checkbox is checked'); + }); +}); +