All files / react-app/src/components/Pagination utils.ts

94.44% Statements 17/18
92.85% Branches 13/14
100% Functions 4/4
93.75% Lines 15/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68  672x     71x                 188x 2x                       186x   186x   186x 186x   4x 4x 3x     1x 1x               1x                 186x                      
export function createNumberRange(start: number, end: number): number[] {
  return [...Array(end - start + 1)].map((_, idx) => start + idx);
}
 
export const pageStateResolver = ({
  pageNumber,
  pageSize,
  count,
}: {
  count: number;
  pageNumber: number;
  pageSize: number;
}) => {
  if (!count) {
    return {
      pageNumber,
      pageSize,
      count,
      lowerBoundValue: 0,
      upperBoundValue: 0,
      pageRange: [],
      nextDisabled: true,
      prevDisabled: true,
    };
  }
 
  const reducedCount = pageNumber * pageSize + pageSize;
 
  const pageCount = Math.ceil(count / pageSize);
 
  const pageRange = (() => {
    if (pageCount <= 7) return createNumberRange(1, pageCount);
 
    const leftLead = pageNumber <= 4 && pageCount > 7;
    if (leftLead) {
      return [1, 2, 3, 4, 5, createNumberRange(6, pageCount - 1), pageCount];
    }
 
    const rightLead = pageCount > 7 && pageNumber >= pageCount - 5;
    Iif (rightLead) {
      return [
        1,
        createNumberRange(2, pageCount - 5),
        ...createNumberRange(pageCount - 4, pageCount),
      ];
    }
 
    return [
      1,
      createNumberRange(2, pageNumber - 1),
      ...createNumberRange(pageNumber, pageNumber + 2),
      createNumberRange(pageNumber + 3, pageCount - 1),
      pageCount,
    ];
  })();
 
  return {
    pageRange,
    pageNumber,
    count,
    pageSize,
    lowerBoundValue: pageNumber * pageSize + 1,
    upperBoundValue: reducedCount > count ? count : reducedCount,
    nextDisabled: reducedCount >= count,
    prevDisabled: !pageNumber,
  };
};