FEATURE: Filter by solved

This commit is contained in:
Justin DiRose 2020-06-15 14:16:57 -05:00
parent 895fd41f39
commit 6eb3c7574d
No known key found for this signature in database
GPG Key ID: D8FDAB7887969D0F
6 changed files with 39 additions and 0 deletions

View File

@ -8,6 +8,7 @@ module KnowledgeExplorer
filters = {
tags: params[:tags],
category: params[:category],
solved: params[:solved],
search_term: params[:search],
ascending: params[:ascending],
order: params[:order],

View File

@ -22,6 +22,7 @@ export default Ember.Controller.extend({
ascending: "ascending",
filterCategories: "category",
filterTags: "tags",
filterSolved: "solved",
orderColumn: "order",
searchTerm: "search",
selectedTopic: "topic"
@ -35,6 +36,7 @@ export default Ember.Controller.extend({
tags: Ember.computed.readOnly("model.tags"),
filterTags: null,
filterCategories: null,
filterSolved: false,
searchTerm: null,
selectedTopic: null,
topic: null,
@ -74,6 +76,11 @@ export default Ember.Controller.extend({
emptySearchResults: Ember.computed.equal("searchCount", 0),
@discourseComputed
canFilterSolved() {
return this.siteSettings.solved_enabled;
},
@discourseComputed("filterTags")
filtered(filterTags) {
return !!filterTags;
@ -94,6 +101,11 @@ export default Ember.Controller.extend({
});
},
onChangeFilterSolved(solvedFilter) {
this.set("filterSolved", solvedFilter);
this.send("refreshModel");
},
updateSelectedTags(tag) {
let filter = this.filterTags;
if (filter && filter.includes(tag.id)) {
@ -192,6 +204,7 @@ export default Ember.Controller.extend({
const params = this.getProperties(
"filterCategories",
"filterTags",
"filterSolved",
"searchTerm",
"ascending",
"orderColumn"

View File

@ -11,6 +11,7 @@ export default {
if (params.filterCategories)
filters.push(`category=${params.filterCategories}`);
if (params.filterTags) filters.push(`tags=${params.filterTags}`);
if (params.filterSolved) filters.push(`solved=${params.filterSolved}`);
if (params.searchTerm) filters.push(`search=${params.searchTerm}`);
if (params.ascending) filters.push("ascending=true");
if (params.orderColumn) filters.push(`order=${params.orderColumn}`);

View File

@ -15,6 +15,19 @@
{{/if}}
<div class="knowledge-explorer-filters">
{{#if expandedFilters}}
{{#if canFilterSolved}}
<div class="knowledge-explorer-items knowledge-explorer-solved">
<label class="checkbox-label knowledge-explorer-item">
{{input
type="checkbox"
checked=(readonly filterSolved)
change=(action "onChangeFilterSolved" value="target.checked")
}}
{{i18n "knowledge_explorer.filter_solved"}}
</label>
</div>
{{/if}}
{{#if categories}}
<div class="knowledge-explorer-items knowledge-explorer-categories">
<h3>{{i18n 'knowledge_explorer.categories'}}</h3>

View File

@ -17,3 +17,4 @@ en:
back: "Go back"
navigate_to_topic: "View the discussion on this topic"
filter_button: "Filters"
filter_solved: "Topic Solved?"

View File

@ -45,6 +45,15 @@ module KnowledgeExplorer
end
end
if @filters[:solved].present?
results = results.where("topics.id IN (
SELECT tc.topic_id
FROM topic_custom_fields tc
WHERE tc.name = 'accepted_answer_post_id' AND
tc.value IS NOT NULL
)")
end
# filter results by search term
if @filters[:search_term].present?
term = Search.prepare_data(@filters[:search_term])
@ -153,6 +162,7 @@ module KnowledgeExplorer
filters.push("tags=#{@filters[:tags]}") if @filters[:tags].present?
filters.push("category=#{@filters[:category]}") if @filters[:category].present?
filters.push("solved=#{@filters[:solved]}") if @filters[:solved].present?
filters.push("search=#{@filters[:search_term]}") if @filters[:search_term].present?
filters.push("sort=#{@filters[:sort]}") if @filters[:sort].present?