48 lines
1.5 KiB
JavaScript
48 lines
1.5 KiB
JavaScript
import { alias } from "@ember/object/computed";
|
|
import { inject } from "@ember/controller";
|
|
import Controller from "@ember/controller";
|
|
import DiscourseNavigation from "discourse/components/d-navigation";
|
|
|
|
// Just add query params here to have them automatically passed to topic list filters.
|
|
export const queryParams = {
|
|
order: { replace: true, refreshModel: true },
|
|
ascending: { replace: true, refreshModel: true },
|
|
status: { replace: true, refreshModel: true },
|
|
state: { replace: true, refreshModel: true },
|
|
search: { replace: true, refreshModel: true },
|
|
max_posts: { replace: true, refreshModel: true },
|
|
q: { replace: true, refreshModel: true },
|
|
tags: { replace: true },
|
|
before: { replace: true, refreshModel: true },
|
|
bumped_before: { replace: true, refreshModel: true }
|
|
};
|
|
|
|
// Basic controller options
|
|
const controllerOpts = {
|
|
discoveryTopics: inject("discovery/topics"),
|
|
queryParams: Object.keys(queryParams)
|
|
};
|
|
|
|
// Aliases for the values
|
|
controllerOpts.queryParams.forEach(
|
|
p => (controllerOpts[p] = alias(`discoveryTopics.${p}`))
|
|
);
|
|
|
|
const SortableController = Controller.extend(controllerOpts);
|
|
|
|
export const addDiscoveryQueryParam = function(p, opts) {
|
|
queryParams[p] = opts;
|
|
const cOpts = {};
|
|
cOpts[p] = alias(`discoveryTopics.${p}`);
|
|
cOpts["queryParams"] = Object.keys(queryParams);
|
|
SortableController.reopen(cOpts);
|
|
|
|
if (opts && opts.persisted) {
|
|
DiscourseNavigation.reopen({
|
|
persistedQueryParams: queryParams
|
|
});
|
|
}
|
|
};
|
|
|
|
export default SortableController;
|