From 5e756f57dadfd9a16dbdfb4e9dd95462de93ed06 Mon Sep 17 00:00:00 2001 From: Kris Date: Fri, 8 Nov 2019 16:07:08 -0500 Subject: [PATCH] FEATURE: Collapsable filters on mobile --- .../knowledge-explorer-topic.js.es6 | 16 +++++- .../controllers/knowledge-explorer.js.es6 | 17 +++++++ .../components/knowledge-explorer-search.hbs | 2 +- .../templates/knowledge-explorer.hbs | 51 +++++++++++-------- .../common/knowledge-explorer.scss | 2 +- .../mobile/knowledge-explorer.scss | 29 +++++++++++ config/locales/client.en.yml | 1 + 7 files changed, 93 insertions(+), 25 deletions(-) diff --git a/assets/javascripts/discourse/components/knowledge-explorer-topic.js.es6 b/assets/javascripts/discourse/components/knowledge-explorer-topic.js.es6 index 48665d0..2492f68 100644 --- a/assets/javascripts/discourse/components/knowledge-explorer-topic.js.es6 +++ b/assets/javascripts/discourse/components/knowledge-explorer-topic.js.es6 @@ -3,5 +3,19 @@ export default Ember.Component.extend({ originalPostContent: Ember.computed.readOnly( "topic.post_stream.posts.firstObject.cooked" - ) + ), + + didInsertElement() { + this._super(...arguments); + document + .querySelector("body") + .classList.add("archetype-knowledge-explorer-topic"); + }, + + willDestroyElement() { + this._super(...arguments); + document + .querySelector("body") + .classList.remove("archetype-knowledge-explorer-topic"); + } }); diff --git a/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 b/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 index 9a09e29..1f362e1 100644 --- a/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 +++ b/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 @@ -1,4 +1,5 @@ import { default as computed } from "ember-addons/ember-computed-decorators"; +import { on } from "discourse-common/utils/decorators"; import KnowledgeExplorer from "discourse/plugins/discourse-knowledge-explorer/discourse/models/knowledge-explorer"; function mergeCategories(results) { @@ -33,6 +34,14 @@ export default Ember.Controller.extend({ searchTerm: null, selectedTopic: null, topic: null, + expandedFilters: false, + + @on("init") + _setupFilters() { + if (!this.site.mobileView) { + this.set("expandedFilters", true); + } + }, @computed("loadMoreUrl") canLoadMore(loadMoreUrl) { @@ -167,6 +176,14 @@ export default Ember.Controller.extend({ isLoading: false }); }); + }, + + toggleFilters() { + if (!this.expandedFilters) { + this.set("expandedFilters", true); + } else { + this.set("expandedFilters", false); + } } } }); diff --git a/assets/javascripts/discourse/templates/components/knowledge-explorer-search.hbs b/assets/javascripts/discourse/templates/components/knowledge-explorer-search.hbs index 3d99459..ee37103 100644 --- a/assets/javascripts/discourse/templates/components/knowledge-explorer-search.hbs +++ b/assets/javascripts/discourse/templates/components/knowledge-explorer-search.hbs @@ -1,4 +1,4 @@ - + {{input type="text" value=(readonly searchTerm) diff --git a/assets/javascripts/discourse/templates/knowledge-explorer.hbs b/assets/javascripts/discourse/templates/knowledge-explorer.hbs index e7ddff2..0bf10bf 100644 --- a/assets/javascripts/discourse/templates/knowledge-explorer.hbs +++ b/assets/javascripts/discourse/templates/knowledge-explorer.hbs @@ -5,29 +5,36 @@ }} {{#conditional-loading-spinner condition=isLoading}}
+ {{#if site.mobileView}} + {{#unless selectedTopic}} + {{d-button class="knowledge-explorer-expander" icon=(if expandedFilters "angle-up" "angle-down") action=(action "toggleFilters") label="knowledge_explorer.filter_button"}} + {{/unless}} + {{/if}}
- {{#if categories}} -
-

{{i18n 'knowledge_explorer.categories'}}

- {{#each categories as |category|}} - {{knowledge-explorer-category - category=category - selectCategory=(action "updateSelectedCategories" - tagName="") - }} - {{/each}} -
- {{/if}} - {{#if tags}} -
-

{{i18n 'knowledge_explorer.tags'}}

- {{#each tags as |tag|}} - {{knowledge-explorer-tag - tag=tag - selectTag=(action "updateSelectedTags") - }} - {{/each}} -
+ {{#if expandedFilters}} + {{#if categories}} +
+

{{i18n 'knowledge_explorer.categories'}}

+ {{#each categories as |category|}} + {{knowledge-explorer-category + category=category + selectCategory=(action "updateSelectedCategories" + tagName="") + }} + {{/each}} +
+ {{/if}} + {{#if tags}} +
+

{{i18n 'knowledge_explorer.tags'}}

+ {{#each tags as |tag|}} + {{knowledge-explorer-tag + tag=tag + selectTag=(action "updateSelectedTags") + }} + {{/each}} +
+ {{/if}} {{/if}}
{{#if selectedTopic}} diff --git a/assets/stylesheets/common/knowledge-explorer.scss b/assets/stylesheets/common/knowledge-explorer.scss index 7f53a78..72cbbfc 100644 --- a/assets/stylesheets/common/knowledge-explorer.scss +++ b/assets/stylesheets/common/knowledge-explorer.scss @@ -1,4 +1,4 @@ -.knowledge-base-search-wrapper { +.knowledge-explorer-search-wrapper { position: relative; width: 500px; .d-icon { diff --git a/assets/stylesheets/mobile/knowledge-explorer.scss b/assets/stylesheets/mobile/knowledge-explorer.scss index 2c8f72a..0254c15 100644 --- a/assets/stylesheets/mobile/knowledge-explorer.scss +++ b/assets/stylesheets/mobile/knowledge-explorer.scss @@ -4,6 +4,12 @@ width: calc(100vw - 0.75em); margin: 0.625em 0; } + + .knowledge-explorer-search-wrapper { + display: flex; + justify-content: center; + } + .knowledge-explorer-search { font-size: $font-up-2; padding: 0.5em 0; @@ -25,4 +31,27 @@ } } } + + .knowledge-explorer-filters { + margin-top: 0; + background: $primary-very-low; + padding: 0 0.5em; + .knowledge-explorer-items:first-of-type { + margin-top: 1em; + } + + .knowledge-explorer-results { + margin-top: 2em; + } + } + + .archetype-knowledge-explorer-topic { + .knowledge-explorer-filters { + display: none; + } + } + + .knowledge-explorer-expander { + margin: 1em 0 0 0; + width: 100%; + } } diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index d07fb18..f5bad96 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -12,3 +12,4 @@ en: topic: back: "Go back" navigate_to_topic: "View the discussion on this topic" + filter_button: "Filters"