{"version":3,"file":"usePagination.hook.cjs","sources":["../../../../../src/components/navigation/pagination/hooks/usePagination.hook.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\r\n\r\nimport {\r\n    getPaginationPageItems,\r\n    type PaginationPageItem,\r\n} from '@components/navigation/pagination/utils/pagination.utils.ts'\r\n\r\ntype UsePaginationOptions = {\r\n    currentPage: number\r\n    totalPages: number\r\n    siblingCount: number\r\n    boundaryCount: number\r\n    onPageChange: (page: number) => void\r\n}\r\n\r\ntype UsePaginationReturn = {\r\n    pageItems: PaginationPageItem[]\r\n    isFirstPage: boolean\r\n    isLastPage: boolean\r\n    goToPreviousPage: () => void\r\n    goToNextPage: () => void\r\n}\r\n\r\nexport const usePagination = ({\r\n    currentPage,\r\n    totalPages,\r\n    siblingCount,\r\n    boundaryCount,\r\n    onPageChange,\r\n}: UsePaginationOptions): UsePaginationReturn => {\r\n    if (\r\n        totalPages < 1 ||\r\n        currentPage < 1 ||\r\n        currentPage > totalPages ||\r\n        !Number.isInteger(currentPage) ||\r\n        !Number.isInteger(totalPages)\r\n    ) {\r\n        throw new RangeError(\r\n            'Pagination requires an integer currentPage within totalPages.',\r\n        )\r\n    }\r\n\r\n    const pageItems = useMemo(\r\n        () =>\r\n            getPaginationPageItems(\r\n                totalPages,\r\n                currentPage,\r\n                Math.max(0, Math.floor(siblingCount)),\r\n                Math.max(0, Math.floor(boundaryCount)),\r\n            ),\r\n        [boundaryCount, currentPage, siblingCount, totalPages],\r\n    )\r\n    const goToPreviousPage = useCallback(\r\n        () => onPageChange(currentPage - 1),\r\n        [currentPage, onPageChange],\r\n    )\r\n    const goToNextPage = useCallback(\r\n        () => onPageChange(currentPage + 1),\r\n        [currentPage, onPageChange],\r\n    )\r\n\r\n    return {\r\n        pageItems,\r\n        isFirstPage: currentPage === 1,\r\n        isLastPage: currentPage === totalPages,\r\n        goToPreviousPage,\r\n        goToNextPage,\r\n    }\r\n}\r\n"],"names":["usePagination","currentPage","totalPages","siblingCount","boundaryCount","onPageChange","pageItems","useMemo","getPaginationPageItems","goToPreviousPage","useCallback","goToNextPage"],"mappings":"oJAuBaA,EAAgB,CAAC,CAC1B,YAAAC,EACA,WAAAC,EACA,aAAAC,EACA,cAAAC,EACA,aAAAC,CACJ,IAAiD,CAC7C,GACIH,EAAa,GACbD,EAAc,GACdA,EAAcC,GACd,CAAC,OAAO,UAAUD,CAAW,GAC7B,CAAC,OAAO,UAAUC,CAAU,EAE5B,MAAM,IAAI,WACN,+DAAA,EAIR,MAAMI,EAAYC,EAAAA,QACd,IACIC,EAAAA,uBACIN,EACAD,EACA,KAAK,IAAI,EAAG,KAAK,MAAME,CAAY,CAAC,EACpC,KAAK,IAAI,EAAG,KAAK,MAAMC,CAAa,CAAC,CAAA,EAE7C,CAACA,EAAeH,EAAaE,EAAcD,CAAU,CAAA,EAEnDO,EAAmBC,EAAAA,YACrB,IAAML,EAAaJ,EAAc,CAAC,EAClC,CAACA,EAAaI,CAAY,CAAA,EAExBM,EAAeD,EAAAA,YACjB,IAAML,EAAaJ,EAAc,CAAC,EAClC,CAACA,EAAaI,CAAY,CAAA,EAG9B,MAAO,CACH,UAAAC,EACA,YAAaL,IAAgB,EAC7B,WAAYA,IAAgBC,EAC5B,iBAAAO,EACA,aAAAE,CAAA,CAER"}