mirror of
https://github.com/discourse/discourse.git
synced 2025-04-19 16:09:05 +08:00
FIX: sorting in a category isn't working
This commit is contained in:
parent
cca48ce22f
commit
c618478e88
@ -12,7 +12,7 @@ export var queryParams = {
|
||||
// Basic controller options
|
||||
var controllerOpts = {
|
||||
needs: ['discovery/topics'],
|
||||
queryParams: Ember.keys(queryParams)
|
||||
queryParams: Ember.keys(queryParams),
|
||||
};
|
||||
|
||||
// Aliases for the values
|
||||
|
@ -7,19 +7,32 @@ export default {
|
||||
name: 'dynamic-route-builders',
|
||||
|
||||
initialize(container, app) {
|
||||
app.DiscoveryCategoryController = DiscoverySortableController.extend();
|
||||
app.DiscoveryParentCategoryController = DiscoverySortableController.extend();
|
||||
app.DiscoveryCategoryNoneController = DiscoverySortableController.extend();
|
||||
|
||||
app.DiscoveryCategoryRoute = buildCategoryRoute('latest');
|
||||
app.DiscoveryParentCategoryRoute = buildCategoryRoute('latest');
|
||||
app.DiscoveryCategoryNoneRoute = buildCategoryRoute('latest', {no_subcategories: true});
|
||||
|
||||
const site = Discourse.Site.current();
|
||||
site.get('filters').forEach(filter => {
|
||||
app["Discovery" + filter.capitalize() + "Controller"] = DiscoverySortableController.extend();
|
||||
app["Discovery" + filter.capitalize() + "Route"] = buildTopicRoute(filter);
|
||||
app["Discovery" + filter.capitalize() + "CategoryRoute"] = buildCategoryRoute(filter);
|
||||
app["Discovery" + filter.capitalize() + "CategoryNoneRoute"] = buildCategoryRoute(filter, {no_subcategories: true});
|
||||
const filterCapitalized = filter.capitalize();
|
||||
app[`Discovery${filterCapitalized}Controller`] = DiscoverySortableController.extend();
|
||||
app[`Discovery${filterCapitalized}CategoryController`] = DiscoverySortableController.extend();
|
||||
app[`Discovery${filterCapitalized}ParentCategoryController`] = DiscoverySortableController.extend();
|
||||
app[`Discovery${filterCapitalized}CategoryNoneController`] = DiscoverySortableController.extend();
|
||||
app[`Discovery${filterCapitalized}Route`] = buildTopicRoute(filter);
|
||||
app[`Discovery${filterCapitalized}CategoryRoute`] = buildCategoryRoute(filter);
|
||||
app[`Discovery${filterCapitalized}ParentCategoryRoute`] = buildCategoryRoute(filter);
|
||||
app[`Discovery${filterCapitalized}CategoryNoneRoute`] = buildCategoryRoute(filter, {no_subcategories: true});
|
||||
});
|
||||
|
||||
Discourse.DiscoveryTopController = DiscoverySortableController.extend();
|
||||
Discourse.DiscoveryTopCategoryController = DiscoverySortableController.extend();
|
||||
Discourse.DiscoveryTopParentCategoryController = DiscoverySortableController.extend();
|
||||
Discourse.DiscoveryTopCategoryNoneController = DiscoverySortableController.extend();
|
||||
|
||||
Discourse.DiscoveryTopRoute = buildTopicRoute('top', {
|
||||
actions: {
|
||||
willTransition() {
|
||||
@ -30,13 +43,19 @@ export default {
|
||||
}
|
||||
});
|
||||
Discourse.DiscoveryTopCategoryRoute = buildCategoryRoute('top');
|
||||
Discourse.DiscoveryTopParentCategoryRoute = buildCategoryRoute('top');
|
||||
Discourse.DiscoveryTopCategoryNoneRoute = buildCategoryRoute('top', {no_subcategories: true});
|
||||
|
||||
site.get('periods').forEach(period => {
|
||||
app["DiscoveryTop" + period.capitalize() + "Controller"] = DiscoverySortableController.extend();
|
||||
app["DiscoveryTop" + period.capitalize() + "Route"] = buildTopicRoute('top/' + period);
|
||||
app["DiscoveryTop" + period.capitalize() + "CategoryRoute"] = buildCategoryRoute('top/' + period);
|
||||
app["DiscoveryTop" + period.capitalize() + "CategoryNoneRoute"] = buildCategoryRoute('top/' + period, {no_subcategories: true});
|
||||
const periodCapitalized = period.capitalize();
|
||||
app[`DiscoveryTop${periodCapitalized}Controller`] = DiscoverySortableController.extend();
|
||||
app[`DiscoveryTop${periodCapitalized}CategoryController`] = DiscoverySortableController.extend();
|
||||
app[`DiscoveryTop${periodCapitalized}ParentCategoryController`] = DiscoverySortableController.extend();
|
||||
app[`DiscoveryTop${periodCapitalized}CategoryNoneController`] = DiscoverySortableController.extend();
|
||||
app[`DiscoveryTop${periodCapitalized}Route`] = buildTopicRoute('top/' + period);
|
||||
app[`DiscoveryTop${periodCapitalized}CategoryRoute`] = buildCategoryRoute('top/' + period);
|
||||
app[`DiscoveryTop${periodCapitalized}ParentCategoryRoute`] = buildCategoryRoute('top/' + period);
|
||||
app[`DiscoveryTop${periodCapitalized}CategoryNoneRoute`] = buildCategoryRoute('top/' + period, {no_subcategories: true});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
@ -15,26 +15,25 @@ export default function() {
|
||||
this.resource('discovery', { path: '/' }, function() {
|
||||
// top
|
||||
this.route('top');
|
||||
this.route('topCategory', { path: '/c/:slug/l/top' });
|
||||
this.route('topParentCategory', { path: '/c/:slug/l/top' });
|
||||
this.route('topCategoryNone', { path: '/c/:slug/none/l/top' });
|
||||
this.route('topCategory', { path: '/c/:parentSlug/:slug/l/top' });
|
||||
|
||||
// top by periods
|
||||
var self = this;
|
||||
Discourse.Site.currentProp('periods').forEach(function(period) {
|
||||
var top = 'top' + period.capitalize();
|
||||
self.route(top, { path: '/top/' + period });
|
||||
self.route(top + 'Category', { path: '/c/:slug/l/top/' + period });
|
||||
self.route(top + 'CategoryNone', { path: '/c/:slug/none/l/top/' + period });
|
||||
self.route(top + 'Category', { path: '/c/:parentSlug/:slug/l/top/' + period });
|
||||
Discourse.Site.currentProp('periods').forEach(period => {
|
||||
const top = 'top' + period.capitalize();
|
||||
this.route(top, { path: '/top/' + period });
|
||||
this.route(top + 'ParentCategory', { path: '/c/:slug/l/top/' + period });
|
||||
this.route(top + 'CategoryNone', { path: '/c/:slug/none/l/top/' + period });
|
||||
this.route(top + 'Category', { path: '/c/:parentSlug/:slug/l/top/' + period });
|
||||
});
|
||||
|
||||
// filters
|
||||
Discourse.Site.currentProp('filters').forEach(function(filter) {
|
||||
self.route(filter, { path: '/' + filter });
|
||||
self.route(filter + 'Category', { path: '/c/:slug/l/' + filter });
|
||||
self.route(filter + 'CategoryNone', { path: '/c/:slug/none/l/' + filter });
|
||||
self.route(filter + 'Category', { path: '/c/:parentSlug/:slug/l/' + filter });
|
||||
Discourse.Site.currentProp('filters').forEach(filter => {
|
||||
this.route(filter, { path: '/' + filter });
|
||||
this.route(filter + 'ParentCategory', { path: '/c/:slug/l/' + filter });
|
||||
this.route(filter + 'CategoryNone', { path: '/c/:slug/none/l/' + filter });
|
||||
this.route(filter + 'Category', { path: '/c/:parentSlug/:slug/l/' + filter });
|
||||
});
|
||||
|
||||
this.route('categories');
|
||||
@ -56,9 +55,8 @@ export default function() {
|
||||
this.resource('users');
|
||||
this.resource('user', { path: '/users/:username' }, function() {
|
||||
this.resource('userActivity', { path: '/activity' }, function() {
|
||||
var self = this;
|
||||
_.map(Discourse.UserAction.TYPES, function (id, userAction) {
|
||||
self.route(userAction, { path: userAction.replace('_', '-') });
|
||||
_.map(Discourse.UserAction.TYPES, (id, userAction) => {
|
||||
this.route(userAction, { path: userAction.replace('_', '-') });
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
import { queryParams, filterQueryParams, findTopicList } from 'discourse/routes/build-topic-route';
|
||||
import { filterQueryParams, findTopicList } from 'discourse/routes/build-topic-route';
|
||||
import { queryParams } from 'discourse/controllers/discovery-sortable';
|
||||
|
||||
// A helper function to create a category route with parameters
|
||||
export default (filter, params) => {
|
||||
return Discourse.Route.extend({
|
||||
queryParams: queryParams,
|
||||
queryParams,
|
||||
|
||||
model(modelParams) {
|
||||
return Discourse.Category.findBySlug(modelParams.slug, modelParams.parentSlug);
|
||||
@ -63,7 +64,6 @@ export default (filter, params) => {
|
||||
|
||||
setupController(controller, model) {
|
||||
const topics = this.get('topics'),
|
||||
periodId = topics.get('for_period') || (filter.indexOf('/') > 0 ? filter.split('/')[1] : ''),
|
||||
canCreateTopic = topics.get('can_create_topic'),
|
||||
canCreateTopicOnCategory = model.get('permission') === Discourse.PermissionType.FULL;
|
||||
|
||||
@ -72,19 +72,29 @@ export default (filter, params) => {
|
||||
cannotCreateTopicOnCategory: !canCreateTopicOnCategory,
|
||||
canCreateTopic: canCreateTopic
|
||||
});
|
||||
this.controllerFor('discovery/topics').setProperties({
|
||||
|
||||
var topicOpts = {
|
||||
model: topics,
|
||||
category: model,
|
||||
period: periodId,
|
||||
period: topics.get('for_period') || (filter.indexOf('/') > 0 ? filter.split('/')[1] : ''),
|
||||
selected: [],
|
||||
noSubcategories: params && !!params.no_subcategories,
|
||||
order: topics.get('params.order'),
|
||||
ascending: topics.get('params.ascending'),
|
||||
expandAllPinned: true,
|
||||
canCreateTopic: canCreateTopic,
|
||||
canCreateTopicOnCategory: canCreateTopicOnCategory
|
||||
});
|
||||
};
|
||||
|
||||
const p = model.get('params');
|
||||
if (p && Object.keys(p).length) {
|
||||
if (p.order !== undefined) {
|
||||
topicOpts.order = p.order;
|
||||
}
|
||||
if (p.ascending !== undefined) {
|
||||
topicOpts.ascending = p.ascending;
|
||||
}
|
||||
}
|
||||
|
||||
this.controllerFor('discovery/topics').setProperties(topicOpts);
|
||||
this.searchService.set('searchContext', model.get('searchContext'));
|
||||
this.set('topics', null);
|
||||
|
||||
@ -100,6 +110,12 @@ export default (filter, params) => {
|
||||
this.render('discovery/topics', { controller: 'discovery/topics', outlet: 'list-container' });
|
||||
},
|
||||
|
||||
resetController(controller, isExiting) {
|
||||
if (isExiting) {
|
||||
controller.setProperties({ order: "default", ascending: false });
|
||||
}
|
||||
},
|
||||
|
||||
deactivate() {
|
||||
this._super();
|
||||
this.searchService.set('searchContext', null);
|
||||
|
@ -84,18 +84,11 @@ export default function(filter, extras) {
|
||||
return I18n.t('filters.with_topics', {filter: filterText});
|
||||
},
|
||||
|
||||
setupController(controller, model, trans) {
|
||||
if (trans) {
|
||||
controller.setProperties(Em.getProperties(trans, _.keys(queryParams).map(function(v){
|
||||
return 'queryParams.' + v;
|
||||
})));
|
||||
}
|
||||
|
||||
const period = model.get('for_period') || (filter.indexOf('/') > 0 ? filter.split('/')[1] : '');
|
||||
setupController(controller, model) {
|
||||
const topicOpts = {
|
||||
model,
|
||||
category: null,
|
||||
period,
|
||||
period: model.get('for_period') || (filter.indexOf('/') > 0 ? filter.split('/')[1] : ''),
|
||||
selected: [],
|
||||
expandGloballyPinned: true
|
||||
};
|
||||
@ -115,6 +108,12 @@ export default function(filter, extras) {
|
||||
this.controllerFor('navigation/default').set('canCreateTopic', model.get('can_create_topic'));
|
||||
},
|
||||
|
||||
resetController(controller, isExiting) {
|
||||
if (isExiting) {
|
||||
controller.setProperties({ order: "default", ascending: false });
|
||||
}
|
||||
},
|
||||
|
||||
renderTemplate() {
|
||||
this.render('navigation/default', { outlet: 'navigation-bar' });
|
||||
this.render('discovery/topics', { controller: 'discovery/topics', outlet: 'list-container' });
|
||||
|
Loading…
x
Reference in New Issue
Block a user