Skip to content
Snippets Groups Projects
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")
  );
};