UsePagination
guarahooks/use-paginationFreeHook
Hook for controlling list pagination.
Install it
npx shadcn@latest add https://guarahooks.com/r/use-pagination.jsonSource
1'use client';23import { useCallback, useEffect, useMemo, useState } from 'react';45// Types for options and return value6interface UsePaginationOptions {7 initialPage?: number;8 initialPageSize?: number;9}1011export interface UsePaginationResult {12 page: number;13 pageSize: number;14 totalPages: number;15 setPage: (page: number) => void;16 nextPage: () => void;17 prevPage: () => void;18 setPageSize: (size: number) => void;19}2021export function usePagination(22 totalItems: number,23 options: UsePaginationOptions = {},24): UsePaginationResult {25 const { initialPage = 1, initialPageSize = 10 } = options;2627 const [page, setPageState] = useState<number>(initialPage);28 const [pageSize, setPageSizeState] = useState<number>(initialPageSize);2930 const totalPages = useMemo(31 () => Math.max(1, Math.ceil(totalItems / pageSize)),32 [totalItems, pageSize],33 );3435 useEffect(() => {36 // Ensure current page is within bounds when totalPages changes37 setPageState((current) => Math.min(current, totalPages));38 }, [totalPages]);3940 const setPage = useCallback(41 (newPage: number) => {42 setPageState((prev) => Math.max(1, Math.min(newPage, totalPages)));43 },44 [totalPages],45 );4647 const nextPage = useCallback(() => {48 setPage(page + 1);49 }, [page, setPage]);5051 const prevPage = useCallback(() => {52 setPage(page - 1);53 }, [page, setPage]);5455 const setPageSize = useCallback((newSize: number) => {56 setPageSizeState(newSize);57 }, []);5859 return {60 page,61 pageSize,62 totalPages,63 setPage,64 nextPage,65 prevPage,66 setPageSize,67 };68}
Files it writes
More from guarahooks
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| UseAbortControlleruse-abort-controller | guarahooks | Hooks | Free | no deps | |
| UseArrayStateuse-array-state | guarahooks | Hooks | Free | no deps | |
| UseAxiosuse-axios | guarahooks | Hooks | Free | no deps | |
| UseBatteryStatususe-battery-status | guarahooks | Hooks | Free | no deps | |
| UseBetterAuthuse-better-auth | guarahooks | Hooks | Free | no deps | |
| UseClickOutsideuse-click-outside | guarahooks | Hooks | Free | no deps | |
| UseConfirmuse-confirm | guarahooks | Hooks | Free | no deps | |
| UseCookieuse-cookie | guarahooks | Hooks | Free | no deps |
