pawelnvk/react-dropout

View on GitHub
src/utils.js

Summary

Maintainability
A
0 mins
Test Coverage
export const extendProps = (initialProps) => (externalProps) => ({
  ...externalProps,
  ...initialProps,
});

export const getItemsIdsByGrades = (items = []) =>
  Object.entries(items)
    .sort(
      (
        [indexA, { grade: gradeA = Number(indexA) + items.length }],
        [indexB, { grade: gradeB = Number(indexB) + items.length }],
      ) => gradeA - gradeB,
    )
    .map(([id]) => Number(id));

export const hasIndex = (ids) => (_, index) => ids.indexOf(index) !== -1;

export const getItemsData = (items = [], countToHide = 0) => {
  const rangeIndex = items.length - countToHide;
  const idsByGrades = getItemsIdsByGrades(items);
  const ids = idsByGrades.slice(0, rangeIndex);
  const exceedingIds = idsByGrades.slice(rangeIndex);

  return {
    countToHide,
    exceedingItems: items.filter(hasIndex(exceedingIds)),
    items: items.filter(hasIndex(ids)),
  };
};