This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/controllers/discovery-sortable.js
2020-03-12 13:29:55 -04:00

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;