1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-01 00:08:27 +01:00
unleash.unleash/frontend/src/hooks/usePagination.ts
Nuno Góis 4167a60588
feat: biome lint frontend (#4903)
Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome
to the frontend as well.


![image](https://github.com/Unleash/unleash/assets/14320932/1906faf1-fc29-4172-a4d4-b2716d72cd65)

Added a few `biome-ignore` to speed up the process but we may want to
check and fix them in the future.
2023-10-02 13:25:46 +01:00

61 lines
1.3 KiB
TypeScript

import { useEffect, useState } from 'react';
import { paginate } from 'utils/paginate';
/**
* @deprecated
*/
const usePagination = <T>(
data: T[],
limit: number,
filterFunc?: (item: T) => boolean,
) => {
const [paginatedData, setPaginatedData] = useState<T[][]>([[]]);
const [pageIndex, setPageIndex] = useState(0);
useEffect(() => {
let dataToPaginate = data;
if (filterFunc) {
dataToPaginate = data.filter(filterFunc);
}
const result = paginate(dataToPaginate, limit);
setPageIndex(0);
setPaginatedData(result);
/* eslint-disable-next-line */
}, [JSON.stringify(data), limit]);
const nextPage = () => {
if (pageIndex < paginatedData.length - 1) {
setPageIndex((prev) => prev + 1);
}
};
const prevPage = () => {
if (pageIndex > 0) {
setPageIndex((prev) => prev - 1);
}
};
const lastPage = () => {
setPageIndex(paginatedData.length - 1);
};
const firstPage = () => {
setPageIndex(0);
};
return {
page: paginatedData[pageIndex] || [],
pages: paginatedData,
nextPage,
prevPage,
lastPage,
firstPage,
setPageIndex,
pageIndex,
};
};
export default usePagination;