Forked from
TO / cf-online-ui
163 commits behind the upstream repository.
utils.js 1.13 KiB
import filter from "lodash/filter";
import property from "lodash/property";
import values from "lodash/values";
/**
* Filter & sort collection of posts.
* @param {CF2021.PostStoreFilters} filters
* @param {CF2021.PostStoreItems} allItems
* @returns {CF2021.Post[]}
*/
export const filterPosts = (filters, allItems) => {
const predicate = {};
if (filters.flags === "active") {
predicate.archived = false;
}
if (filters.flags === "archived") {
predicate.archived = true;
}
if (filters.type === "proposalsOnly") {
predicate.type = "procedure-proposal";
}
if (filters.type === "discussionOnly") {
predicate.type = "post";
}
let filteredItems = filter(allItems, predicate);
if (filters.sort === "byDate") {
return filteredItems.sort((a, b) => b.datetime - a.datetime);
}
return filteredItems.sort((a, b) => b.ranking.score - a.ranking.score);
};
/**
* Update current posts window according to used filters.
* @param {CF2021.PostStorePayload} state
*/
export const updateWindowPosts = (state) => {
state.window.items = filterPosts(state.filters, values(state.items)).map(
property("id")
);
};