FIX: Results count not always properly shown (#21)
There was a weird case where when filtering topics by solved status did not properly show the count of filtered topics. I took this opportunity to lightly refactor the backend. There was a duplicate size operation when we searched and when calculating pagination. I've eliminated the second size call and refactored the front end to be a little bit simpler while solving the bug.
This commit is contained in:
parent
0e610cf504
commit
63a8181fa4
|
@ -1,5 +1,7 @@
|
|||
import Controller from "@ember/controller";
|
||||
import { inject } from "@ember/controller";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
import { alias, readOnly, equal } from "@ember/object/computed";
|
||||
import { on } from "discourse-common/utils/decorators";
|
||||
import KnowledgeExplorer from "discourse/plugins/discourse-knowledge-explorer/discourse/models/knowledge-explorer";
|
||||
import { getOwner } from "@ember/application";
|
||||
|
@ -14,14 +16,14 @@ export default Controller.extend({
|
|||
searchTerm: "search",
|
||||
selectedTopic: "topic",
|
||||
},
|
||||
application: Ember.inject.controller(),
|
||||
application: inject(),
|
||||
isLoading: false,
|
||||
isLoadingMore: false,
|
||||
loadMoreUrl: Ember.computed.alias("model.topics.load_more_url"),
|
||||
loadMoreUrl: alias("model.topics.load_more_url"),
|
||||
isTopicLoading: false,
|
||||
categories: Ember.computed.readOnly("model.categories"),
|
||||
topics: Ember.computed.alias("model.topics.topic_list.topics"),
|
||||
tags: Ember.computed.readOnly("model.tags"),
|
||||
categories: readOnly("model.categories"),
|
||||
topics: alias("model.topics.topic_list.topics"),
|
||||
tags: readOnly("model.tags"),
|
||||
filterTags: null,
|
||||
filterCategories: null,
|
||||
filterSolved: false,
|
||||
|
@ -31,6 +33,7 @@ export default Controller.extend({
|
|||
expandedFilters: false,
|
||||
ascending: null,
|
||||
orderColumn: null,
|
||||
topicCount: alias("model.topic_count"),
|
||||
|
||||
@on("init")
|
||||
_setupFilters() {
|
||||
|
@ -42,7 +45,7 @@ export default Controller.extend({
|
|||
@discourseComputed("topics", "isSearching", "filterSolved")
|
||||
emptyTopics(topics, isSearching, filterSolved) {
|
||||
const filtered = isSearching || filterSolved;
|
||||
return topics.length === 0 && !filtered;
|
||||
return this.topicCount === 0 && !filtered;
|
||||
},
|
||||
|
||||
@discourseComputed("loadMoreUrl")
|
||||
|
@ -60,24 +63,7 @@ export default Controller.extend({
|
|||
return isSearching || filterSolved;
|
||||
},
|
||||
|
||||
@discourseComputed("isSearching", "model")
|
||||
searchCount(isSearching, model) {
|
||||
if (isSearching) {
|
||||
return model.search_count;
|
||||
}
|
||||
},
|
||||
|
||||
emptySearchResults: Ember.computed.equal("searchCount", 0),
|
||||
|
||||
@discourseComputed("topics")
|
||||
emptyFilteredResults(topics) {
|
||||
return topics.length === 0;
|
||||
},
|
||||
|
||||
@discourseComputed("emptySearchResults", "emptyFilteredResults")
|
||||
emptyResults(emptySearch, emptyFiltered) {
|
||||
return emptySearch || emptyFiltered;
|
||||
},
|
||||
emptyResults: equal("topicCount", 0),
|
||||
|
||||
@discourseComputed
|
||||
canFilterSolved() {
|
||||
|
@ -134,6 +120,7 @@ export default Controller.extend({
|
|||
selectedTopic: null,
|
||||
});
|
||||
},
|
||||
|
||||
performSearch(term) {
|
||||
if (term === "") {
|
||||
this.set("searchTerm", null);
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import Controller from "@ember/controller";
|
||||
import { inject } from "@ember/controller";
|
||||
|
||||
export default Controller.extend({
|
||||
indexController: Ember.inject.controller("knowledgeExplorer.index"),
|
||||
indexController: inject("knowledgeExplorer.index"),
|
||||
actions: {
|
||||
updateSelectedCategories(category) {
|
||||
this.indexController.send("updateSelectedCategories", category);
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
{{else}}
|
||||
<div class="result-count">
|
||||
{{i18n 'knowledge_explorer.search.results'
|
||||
count=searchCount
|
||||
count=topicCount
|
||||
}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
|
|
@ -74,7 +74,6 @@ module KnowledgeExplorer
|
|||
pd.search_data @@ #{escaped_ts_query}
|
||||
)
|
||||
SQL
|
||||
search_count = results.size
|
||||
end
|
||||
|
||||
if @filters[:order] == "title"
|
||||
|
@ -126,7 +125,7 @@ module KnowledgeExplorer
|
|||
topic_list['load_more_url'] = nil
|
||||
end
|
||||
|
||||
{ tags: tags, categories: categories, topics: topic_list, search_count: search_count }
|
||||
{ tags: tags, categories: categories, topics: topic_list, topic_count: results_length }
|
||||
end
|
||||
|
||||
def create_tags_object(tags)
|
||||
|
|
|
@ -29,6 +29,15 @@ describe KnowledgeExplorer::KnowledgeExplorerController do
|
|||
expect(tags.size).to eq(1)
|
||||
expect(topics.size).to eq(2)
|
||||
end
|
||||
|
||||
it 'should return a topic count' do
|
||||
get '/docs.json'
|
||||
|
||||
json = response.parsed_body
|
||||
topic_count = json['topic_count']
|
||||
|
||||
expect(topic_count).to eq(2)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when some knowledge explorer topics are private' do
|
||||
|
|
Loading…
Reference in New Issue