mirror of
https://github.com/discourse/discourse.git
synced 2025-02-12 06:56:28 +08:00
FIX: Category topic list should support search filter too
This commit is contained in:
parent
7c65adfd6f
commit
f83fb49741
|
@ -14,6 +14,7 @@ export default Discourse.DiscoveryController.extend({
|
||||||
order: 'default',
|
order: 'default',
|
||||||
ascending: false,
|
ascending: false,
|
||||||
status: null,
|
status: null,
|
||||||
|
search: null,
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
|
||||||
|
|
|
@ -3,5 +3,6 @@ Discourse.DiscoverySortableController = Discourse.Controller.extend({
|
||||||
queryParams: ['order', 'ascending', 'status', 'state', 'search'],
|
queryParams: ['order', 'ascending', 'status', 'state', 'search'],
|
||||||
order: Em.computed.alias('controllers.discovery/topics.order'),
|
order: Em.computed.alias('controllers.discovery/topics.order'),
|
||||||
ascending: Em.computed.alias('controllers.discovery/topics.ascending'),
|
ascending: Em.computed.alias('controllers.discovery/topics.ascending'),
|
||||||
status: Em.computed.alias('controllers.discovery/topics.status')
|
status: Em.computed.alias('controllers.discovery/topics.status'),
|
||||||
|
search: Em.computed.alias('controllers.discovery/topics.search')
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
// A helper function to create a category route with parameters
|
// A helper function to create a category route with parameters
|
||||||
|
import { queryParams, filterQueryParams } from 'discourse/routes/build-topic-route';
|
||||||
|
|
||||||
export default function(filter, params) {
|
export default function(filter, params) {
|
||||||
return Discourse.Route.extend({
|
return Discourse.Route.extend({
|
||||||
|
queryParams: queryParams,
|
||||||
|
|
||||||
model: function(modelParams) {
|
model: function(modelParams) {
|
||||||
return Discourse.Category.findBySlug(modelParams.slug, modelParams.parentSlug);
|
return Discourse.Category.findBySlug(modelParams.slug, modelParams.parentSlug);
|
||||||
},
|
},
|
||||||
|
@ -43,17 +47,12 @@ export default function(filter, params) {
|
||||||
},
|
},
|
||||||
|
|
||||||
_retrieveTopicList: function(model, transaction) {
|
_retrieveTopicList: function(model, transaction) {
|
||||||
var queryParams = transaction.queryParams,
|
var listFilter = "category/" + Discourse.Category.slugFor(model) + "/l/" + filter,
|
||||||
listFilter = "category/" + Discourse.Category.slugFor(model) + "/l/" + filter,
|
|
||||||
self = this;
|
self = this;
|
||||||
|
|
||||||
params = params || {};
|
var findOpts = filterQueryParams(transaction.queryParams, params);
|
||||||
|
|
||||||
if (queryParams && queryParams.order) { params.order = queryParams.order; }
|
return Discourse.TopicList.list(listFilter, findOpts).then(function(list) {
|
||||||
if (queryParams && queryParams.ascending) { params.ascending = queryParams.ascending; }
|
|
||||||
if (queryParams && queryParams.status) { params.status = queryParams.status; }
|
|
||||||
|
|
||||||
return Discourse.TopicList.list(listFilter, params).then(function(list) {
|
|
||||||
var tracking = Discourse.TopicTrackingState.current();
|
var tracking = Discourse.TopicTrackingState.current();
|
||||||
if (tracking) {
|
if (tracking) {
|
||||||
tracking.sync(list, listFilter);
|
tracking.sync(list, listFilter);
|
||||||
|
|
|
@ -1,13 +1,26 @@
|
||||||
// A helper to build a topic route for a filter
|
// A helper to build a topic route for a filter
|
||||||
|
|
||||||
|
export var queryParams = {
|
||||||
|
sort: { replace: true },
|
||||||
|
ascending: { replace: true },
|
||||||
|
status: { replace: true },
|
||||||
|
state: { replace: true },
|
||||||
|
search: { replace: true }
|
||||||
|
};
|
||||||
|
|
||||||
|
export function filterQueryParams(params, defaultParams) {
|
||||||
|
var findOpts = defaultParams || {};
|
||||||
|
if (params) {
|
||||||
|
Ember.keys(queryParams).forEach(function(opt) {
|
||||||
|
if (params[opt]) { findOpts[opt] = params[opt]; }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return findOpts;
|
||||||
|
}
|
||||||
|
|
||||||
export default function(filter) {
|
export default function(filter) {
|
||||||
return Discourse.Route.extend({
|
return Discourse.Route.extend({
|
||||||
queryParams: {
|
queryParams: queryParams,
|
||||||
sort: { replace: true },
|
|
||||||
ascending: { replace: true },
|
|
||||||
status: { replace: true },
|
|
||||||
state: { replace: true },
|
|
||||||
search: { replace: true }
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeModel: function() {
|
beforeModel: function() {
|
||||||
this.controllerFor('navigation/default').set('filterMode', filter);
|
this.controllerFor('navigation/default').set('filterMode', filter);
|
||||||
|
@ -15,18 +28,10 @@ export default function(filter) {
|
||||||
|
|
||||||
model: function(data, transaction) {
|
model: function(data, transaction) {
|
||||||
|
|
||||||
var params = transaction.queryParams;
|
|
||||||
|
|
||||||
// attempt to stop early cause we need this to be called before .sync
|
// attempt to stop early cause we need this to be called before .sync
|
||||||
Discourse.ScreenTrack.current().stop();
|
Discourse.ScreenTrack.current().stop();
|
||||||
|
|
||||||
var findOpts = {};
|
var findOpts = filterQueryParams(transaction.queryParams);
|
||||||
if(params){
|
|
||||||
_.keys(this.queryParams).forEach(function(opt) {
|
|
||||||
if (params[opt]) { findOpts[opt] = params[opt]; }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return Discourse.TopicList.list(filter, findOpts).then(function(list) {
|
return Discourse.TopicList.list(filter, findOpts).then(function(list) {
|
||||||
var tracking = Discourse.TopicTrackingState.current();
|
var tracking = Discourse.TopicTrackingState.current();
|
||||||
if (tracking) {
|
if (tracking) {
|
||||||
|
@ -39,7 +44,7 @@ export default function(filter) {
|
||||||
|
|
||||||
setupController: function(controller, model, trans) {
|
setupController: function(controller, model, trans) {
|
||||||
|
|
||||||
controller.setProperties(Em.getProperties(trans, _.keys(this.queryParams).map(function(v){
|
controller.setProperties(Em.getProperties(trans, _.keys(queryParams).map(function(v){
|
||||||
return 'queryParams.' + v;
|
return 'queryParams.' + v;
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user