diff --git a/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb b/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb index 0ac17c9..01632fb 100644 --- a/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb +++ b/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module KnowledgeExplorer class KnowledgeExplorerController < ApplicationController requires_plugin 'knowledge-explorer' diff --git a/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 b/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 index 55f442a..d4d9765 100644 --- a/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 +++ b/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 @@ -1,29 +1,10 @@ -import knowledgeExplorer from "discourse/plugins/discourse-knowledge-explorer/discourse/models/knowledge-explorer"; - export default Ember.Component.extend({ classNames: "knowledge-explorer-search", - performSearch(term) { - if (term.length < this.siteSettings.min_search_term_length) { - this.set("searchResults", null); - return; - } - - // query the search api - const tags = this.get("filterTags") || null; - if (tags && tags.includes(" ")) { - tags.join(" "); - } - knowledgeExplorer.search(tags, term).then(result => { - this.set("searchResults", result.topics || []); - }); - }, - actions: { - onSearchTermChange(e) { - const term = e.target.value; - this.set("searchTerm", term); - Ember.run.debounce(this, this.performSearch, term, 250); + onSearchTermChange(event) { + const term = event.target.value; + Ember.run.debounce(this, this.onSearch, term, 250); } } }); diff --git a/assets/javascripts/discourse/components/knowledge-explorer-tag-list.js.es6 b/assets/javascripts/discourse/components/knowledge-explorer-tag-list.js.es6 deleted file mode 100644 index dd4e771..0000000 --- a/assets/javascripts/discourse/components/knowledge-explorer-tag-list.js.es6 +++ /dev/null @@ -1,3 +0,0 @@ -export default Ember.Component.extend({ - classNames: "knowledge-explorer-tags" -}); diff --git a/assets/javascripts/discourse/components/knowledge-explorer-tag.js.es6 b/assets/javascripts/discourse/components/knowledge-explorer-tag.js.es6 index 4ca65d8..e741d64 100644 --- a/assets/javascripts/discourse/components/knowledge-explorer-tag.js.es6 +++ b/assets/javascripts/discourse/components/knowledge-explorer-tag.js.es6 @@ -1,17 +1,6 @@ export default Ember.Component.extend({ click() { - const tag = this.get("tag"); - let filter = this.get("filterTags"); - if (filter && filter.includes(tag.id)) { - filter = filter.replace(tag.id, ""); - filter = filter.replace(" ", " "); - filter = filter.replace(/^\s+|\s+$/g, ""); - } else if (filter) { - filter = `${filter} ${tag.id}`; - } else { - filter = tag.id; - } - - this.set("filterTags", filter); + this.selectTag(this.tag); + return false; } }); diff --git a/assets/javascripts/discourse/components/knowledge-explorer-topic-link.js.es6 b/assets/javascripts/discourse/components/knowledge-explorer-topic-link.js.es6 index 13e489c..cc00a52 100644 --- a/assets/javascripts/discourse/components/knowledge-explorer-topic-link.js.es6 +++ b/assets/javascripts/discourse/components/knowledge-explorer-topic-link.js.es6 @@ -1,5 +1,6 @@ export default Ember.Component.extend({ click() { - this.set("selectedTopic", this.topic.id); + this.selectTopic(this.topic.id); + return false; } }); diff --git a/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 b/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 index 11eb492..dcfe8f9 100644 --- a/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 +++ b/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 @@ -2,6 +2,7 @@ import { default as computed, observes } from "ember-addons/ember-computed-decorators"; +import knowledgeExplorer from "discourse/plugins/discourse-knowledge-explorer/discourse/models/knowledge-explorer"; export default Ember.Controller.extend({ application: Ember.inject.controller(), @@ -18,23 +19,48 @@ export default Ember.Controller.extend({ selectedTopic: null, + searchCount: Ember.computed.readOnly("searchResults.length"), + emptySearchResults: Ember.computed.equal("searchCount", 0), + @computed("searchResults") hasSearchResults(results) { return !!results; }, - @computed("searchResults") - emptySearchResults(results) { - return results.length === 0; - }, - - @computed("searchResults") - searchCount(results) { - return results.length; - }, - @computed("filterTags") filtered(filterTags) { return !!filterTags; + }, + + actions: { + setSelectedTopic(topicID) { + this.set("selectedTopic", topicID); + }, + updateSelectedTags(tag) { + let filter = this.filterTags; + if (filter && filter.includes(tag.id)) { + filter = filter.replace(tag.id, ""); + filter = filter.replace("++", "+"); + filter = filter.replace(/^\++|\++$/g, ""); + } else if (filter) { + filter = `${filter}+${tag.id}`; + } else { + filter = tag.id; + } + + this.set("filterTags", filter); + }, + performSearch(term) { + if (term.length < this.siteSettings.min_search_term_length) { + this.set("searchResults", null); + return false; + } + + const tags = this.get("filterTags") || null; + + knowledgeExplorer.search(term, tags).then(result => { + this.set("searchResults", result.topics || []); + }); + } } }); diff --git a/assets/javascripts/discourse/models/knowledge-explorer.js.es6 b/assets/javascripts/discourse/models/knowledge-explorer.js.es6 index 3f722b3..02178d7 100644 --- a/assets/javascripts/discourse/models/knowledge-explorer.js.es6 +++ b/assets/javascripts/discourse/models/knowledge-explorer.js.es6 @@ -1,13 +1,12 @@ import { ajax } from "discourse/lib/ajax"; export default { - search(tags, filter) { - if (tags) { - return ajax( - `/search.json?q=in:kb tags:${tags.replace(/ /g, "+")} ${filter}` - ); - } else { - return ajax(`/search.json?q=in:kb ${filter}`); - } + //write as one liner + //use + instead of space for query param + search(filter, tags) { + let params = [filter]; + if (tags) params.push(`tags:${tags}`); + const endpoint = `/search.json?q=in:kb ${params.join(" ")}`; + return ajax(endpoint); } }; diff --git a/assets/javascripts/discourse/templates/components/knowledge-explorer-tag-list.hbs b/assets/javascripts/discourse/templates/components/knowledge-explorer-tag-list.hbs deleted file mode 100644 index bac6e6a..0000000 --- a/assets/javascripts/discourse/templates/components/knowledge-explorer-tag-list.hbs +++ /dev/null @@ -1,6 +0,0 @@ -{{#each tags as |tag|}} - {{knowledge-explorer-tag - tag=tag - filterTags=filterTags - }} -{{/each}} diff --git a/assets/javascripts/discourse/templates/components/knowledge-explorer-topic-list.hbs b/assets/javascripts/discourse/templates/components/knowledge-explorer-topic-list.hbs index 40cb789..f0b55fa 100644 --- a/assets/javascripts/discourse/templates/components/knowledge-explorer-topic-list.hbs +++ b/assets/javascripts/discourse/templates/components/knowledge-explorer-topic-list.hbs @@ -8,7 +8,7 @@