{"version":3,"file":"Pagination.mjs","sources":["../../../packages/pagination/Pagination.tsx"],"sourcesContent":["import { useMemo, useState, useEffect, FC, MouseEvent } from 'react'\nimport styled from '../utils/styled-components-wrapper.js'\nimport { ArrowLeft, ArrowRight } from '../icons/index.js'\nimport { Box } from '../box/index.js'\nimport {\n  PaginationProps,\n  PaginationItemProps,\n  PaginationItemVariant,\n} from './types.js'\nimport getShowingPages from './getShowingPages.js'\nimport { PaginationItem } from './PaginationItem.js'\n\nconst getActiveItem = (length: number, activeItem: number): number => {\n  const isActiveNotInRange: boolean = activeItem >= length || activeItem < 0\n\n  if (!activeItem || isActiveNotInRange) {\n    return 1 // default active item will be the first one\n  }\n\n  return activeItem\n}\n\nconst PaginationBlock = styled(Box)`\n  display: flex;\n  gap: 8px;\n`\n\nexport const Pagination: FC<PaginationProps> = ({\n  onItemClick,\n  pagesCount,\n  activePage = 1,\n  siblingCount,\n  ...rest\n}) => {\n  const [currentPage, setCurrPage] = useState(\n    getActiveItem(pagesCount, activePage),\n  )\n\n  const showingPages = useMemo<(string | number)[]>(\n    () => getShowingPages(pagesCount, currentPage, siblingCount),\n    [pagesCount, currentPage, siblingCount],\n  )\n\n  useEffect(() => {\n    setCurrPage((page) => (page !== activePage ? activePage : page))\n  }, [activePage])\n\n  if (pagesCount <= 0) {\n    return null\n  }\n\n  const onPageItemClick = (page: number, e: MouseEvent) => {\n    onItemClick(page, e)\n    setCurrPage(page)\n  }\n\n  const onPreviousClick = () => {\n    if (currentPage === 1) {\n      return // disabled\n    }\n\n    onItemClick(currentPage - 1)\n    setCurrPage(currentPage - 1)\n  }\n\n  const onNextClick = () => {\n    if (currentPage === pagesCount) {\n      return // disabled\n    }\n\n    onItemClick(currentPage + 1)\n    setCurrPage(currentPage + 1)\n  }\n\n  return (\n    <PaginationBlock {...rest}>\n      <PaginationItem\n        disabled={currentPage === 1}\n        icon={<ArrowLeft />}\n        onClick={onPreviousClick}\n      />\n\n      {showingPages.map((page, index) => {\n        const isDisabled = page === '...'\n        const variant: PaginationItemProps['variant'] =\n          page === currentPage\n            ? PaginationItemVariant.active\n            : PaginationItemVariant.default\n\n        return (\n          <PaginationItem\n            key={page === '...' ? `${page}${index}` : page}\n            icon={page}\n            variant={variant}\n            disabled={isDisabled}\n            onClick={onPageItemClick.bind(null, page)}\n          />\n        )\n      })}\n\n      <PaginationItem\n        disabled={currentPage === pagesCount}\n        icon={<ArrowRight />}\n        onClick={onNextClick}\n      />\n    </PaginationBlock>\n  )\n}\n"],"names":["getActiveItem","length","activeItem","isActiveNotInRange","PaginationBlock","styled","Box","Pagination","_ref","onItemClick","pagesCount","activePage","siblingCount","rest","currentPage","setCurrPage","useState","showingPages","useMemo","getShowingPages","useEffect","page","onPageItemClick","e","onPreviousClick","onNextClick","_jsxs","children","_jsx","PaginationItem","disabled","icon","ArrowLeft","onClick","map","index","isDisabled","variant","PaginationItemVariant","active","default","bind","ArrowRight"],"mappings":"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"}