Pagination.tsx
const Pagination = (rawProps: PaginationProps) => {
const props = mergeProps(
{
currentPage: 1,
numberOfResults: 0,
pageSize: DEFAULT_PAGINATION_OFFSET,
name: 'resultados',
classList: {
info: '',
navigation: '',
item: '',
container: '',
},
},
rawProps,
);
const [paginationProps, infoProps, commonProps] = splitProps(
props,
['currentPage', 'name', 'numberOfResults', 'onPageChange', 'pageSize'],
['infoTextProps'],
);
const pagination = usePagination({
currentPage: paginationProps.currentPage,
name: paginationProps.name,
numberOfResults: paginationProps.numberOfResults,
pageSize: paginationProps.pageSize,
siblingCount: 1,
});
return (
<footer class={cn('flex w-full items-center justify-between gap-4')}>
<p class={cn('text-greyBlue-700 text-small')}>{pagination().info}</p>
<nav aria-label="pagination" class="flex items-center gap-6">
<ul class="flex items-center justify-end gap-2">
<PaginationNavigation
currentPage={paginationProps.currentPage}
onPageChange={paginationProps.onPageChange}
type="previous"
/>
<For each={pagination().pageNumbers}>
{(pageNumber, index) => (
<PaginationItem
currentPage={paginationProps.currentPage}
onPageChange={paginationProps.onPageChange}
pageNumber={pageNumber}
/>
)}
</For>
<PaginationNavigation
currentPage={paginationProps.currentPage}
lastPage={pagination().numberOfPages}
onPageChange={paginationProps.onPageChange}
type="next"
/>
</ul>
</nav>
</footer>
);
};