From 6057e054c4ab2bf439b1ae7c171ca82facd9db45 Mon Sep 17 00:00:00 2001 From: Justin DiRose Date: Tue, 10 Sep 2019 13:36:02 -0500 Subject: [PATCH] REFACTOR: Complete filtering on back end for complexity purposes --- .../knowledge_explorer_controller.rb | 20 ++++-- .../knowledge-explorer-search.js.es6 | 6 +- .../controllers/knowledge-explorer.js.es6 | 72 +------------------ .../routes/knowledge-explorer.js.es6 | 17 +++-- .../templates/knowledge-explorer.hbs | 25 ++----- 5 files changed, 40 insertions(+), 100 deletions(-) diff --git a/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb b/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb index 13b4efc..0ac17c9 100644 --- a/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb +++ b/app/controllers/knowledge_explorer/knowledge_explorer_controller.rb @@ -16,11 +16,7 @@ module KnowledgeExplorer category_topic_lists = get_topics_from_categories(knowledge_explorer_categories) end - if filters[:tags] - tag_topic_lists = get_topics_from_tags(tags_by_filter(filters[:tags])) - else - tag_topic_lists = get_topics_from_tags(knowledge_explorer_tags) - end + tag_topic_lists = get_topics_from_tags(knowledge_explorer_tags) # Deduplicate results @@ -43,6 +39,11 @@ module KnowledgeExplorer end end + if filters[:tags] + tag_filter = filters[:tags].split(' ') + topics = topics.select { |topic| (topic[:tags] & tag_filter).size >= 1} + end + topics = count_tags(topics) render json: topics @@ -77,8 +78,11 @@ module KnowledgeExplorer topics.each do |topic| topic[:tags].each do |tag| + if params[:tags] + active = params[:tags].include?(tag) + end if tags.none? { |item| item[:id].to_s == tag } - tags << { id: tag, count: 1 } + tags << { id: tag, count: 1 , active: active || false } else tag_index = tags.index(tags.find { |item| item[:id].to_s == tag }) tags[tag_index][:count] += 1 @@ -123,7 +127,9 @@ module KnowledgeExplorer def tags_by_filter(tags) selected_tags = tags.split(' ') - Tag.where('name IN (?)', selected_tags) + if (selected_tags) + return Tag.where('name IN (?)', selected_tags) + end end end end diff --git a/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 b/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 index 6d46a3c..55f442a 100644 --- a/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 +++ b/assets/javascripts/discourse/components/knowledge-explorer-search.js.es6 @@ -10,7 +10,11 @@ export default Ember.Component.extend({ } // query the search api - knowledgeExplorer.search(this.get("filteredTags"), term).then(result => { + const tags = this.get("filterTags") || null; + if (tags && tags.includes(" ")) { + tags.join(" "); + } + knowledgeExplorer.search(tags, term).then(result => { this.set("searchResults", result.topics || []); }); }, diff --git a/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 b/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 index 77be35c..ffb46e9 100644 --- a/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 +++ b/assets/javascripts/discourse/controllers/knowledge-explorer.js.es6 @@ -3,26 +3,15 @@ import { observes } from "ember-addons/ember-computed-decorators"; -function arrayContainsArray(superset, subset) { - if (0 === subset.length) { - return false; - } - return subset.every(v => superset.indexOf(v) >= 0); -} - export default Ember.Controller.extend({ application: Ember.inject.controller(), queryParams: { filterCategory: "category", filterTags: "tags" }, - filtered: false, filterTags: null, filterCategory: null, - filteredTags: null, - filteredTopics: null, - searchTerm: null, searchResults: null, @@ -41,63 +30,8 @@ export default Ember.Controller.extend({ return results.length; }, - @observes("filterTags") - filterByTags() { - const filterTags = this.get("filterTags"); - if (filterTags != null) { - const filter = filterTags.split(" "); - const topics = this.get("topics"); - const tags = this.get("tags"); - - if (filter != "") { - const filteredTopics = topics.filter(topic => - arrayContainsArray(topic.tags, filter) - ); - - const filteredTags = []; - - // add active tags - filter.forEach(tag => { - let t = { - id: tag, - count: 0, - active: true - }; - - filteredTags.push(t); - }); - - filteredTopics.forEach(topic => { - let topicTags = topic.tags; - topicTags.forEach(tag => { - if (filterTags.includes(tag)) { - //increment count for active tags - let index = filteredTags.findIndex(t => t.id === tag); - filteredTags[index].count++; - } else if (filteredTags.findIndex(t => t.id === tag) != -1) { - //increment count for seen subtags - let index = filteredTags.findIndex(t => t.id === tag); - filteredTags[index].count++; - } else { - //add entry for unseen subtag - let t = { - id: tag, - count: 1 - }; - filteredTags.push(t); - } - }); - }); - - this.set("filteredTags", filteredTags); - this.set("filteredTopics", filteredTopics); - this.set("filtered", true); - } else { - this.set("filteredTags", null); - this.set("filteredTopics", null); - this.set("filterTags", null); - this.set("filtered", false); - } - } + @computed("filterTags") + filtered(filterTags) { + return !!filterTags; } }); diff --git a/assets/javascripts/discourse/routes/knowledge-explorer.js.es6 b/assets/javascripts/discourse/routes/knowledge-explorer.js.es6 index 9203b85..58a5eb5 100644 --- a/assets/javascripts/discourse/routes/knowledge-explorer.js.es6 +++ b/assets/javascripts/discourse/routes/knowledge-explorer.js.es6 @@ -1,8 +1,18 @@ import { ajax } from "discourse/lib/ajax"; export default Ember.Route.extend({ - model() { - return ajax("/knowledge-explorer.json"); + queryParams: { + filterTags: { + refreshModel: true + } + }, + model(params) { + if (params.filterTags) { + const tags = params.filterTags; + return ajax(`/knowledge-explorer.json?tags=${tags}`); + } else { + return ajax("/knowledge-explorer.json"); + } }, setupController(controller, model) { @@ -10,6 +20,5 @@ export default Ember.Route.extend({ tags: model.tags, topics: model.topics }); - }, - + } }); diff --git a/assets/javascripts/discourse/templates/knowledge-explorer.hbs b/assets/javascripts/discourse/templates/knowledge-explorer.hbs index aa0a466..fb8a7f7 100644 --- a/assets/javascripts/discourse/templates/knowledge-explorer.hbs +++ b/assets/javascripts/discourse/templates/knowledge-explorer.hbs @@ -1,26 +1,13 @@
- {{knowledge-explorer-search searchResults=searchResults searchTerm=searchTerm filteredTags=filteredTags}} + {{knowledge-explorer-search searchResults=searchResults searchTerm=searchTerm filterTags=filterTags}}
- {{#if filteredTags}} - {{knowledge-explorer-tag-list - tags=filteredTags - filterTags=filterTags - }} - {{else}} - {{knowledge-explorer-tag-list - tags=tags - filterTags=filterTags - }} - {{/if}} - {{#if filtered}} - {{#if filteredTopics}} - {{knowledge-explorer-topic-list topics=filteredTopics}} - {{else}} -
No results match the current filter
- {{/if}} - {{else if hasSearchResults}} + {{knowledge-explorer-tag-list + tags=tags + filterTags=filterTags + }} + {{#if hasSearchResults}} {{#if emptySearchResults}}
{{i18n 'search.no_results'}}
{{else}}