import { useQueryParams } from "./chunk-W2TBR6J3.js"; import { require_lib } from "./chunk-LCL5TIBZ.js"; import { createContext } from "./chunk-76QM3EFM.js"; import { Dots, Flex, NextLink, PageLink, Pagination, PreviousLink, SingleSelect, SingleSelectOption, Typography, useIntl } from "./chunk-7XB6XSWQ.js"; import { Link } from "./chunk-TUXTO2Z5.js"; import { require_jsx_runtime } from "./chunk-NIAJZ5MX.js"; import { require_react } from "./chunk-MADUDGYZ.js"; import { __toESM } from "./chunk-PLDDJCW6.js"; // node_modules/@strapi/admin/dist/admin/admin/src/components/Pagination.mjs var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); var React = __toESM(require_react(), 1); var import_qs = __toESM(require_lib(), 1); var [PaginationProvider, usePagination] = createContext("Pagination"); var Root = React.forwardRef(({ children, defaultPageSize = 10, pageCount = 0, defaultPage = 1, onPageSizeChange, total = 0 }, forwardedRef) => { const [{ query }, setQuery] = useQueryParams({ pageSize: defaultPageSize.toString(), page: defaultPage.toString() }); const setPageSize = (pageSize) => { setQuery({ pageSize, page: "1" }); if (onPageSizeChange) { onPageSizeChange(pageSize); } }; return (0, import_jsx_runtime.jsx)(Flex, { ref: forwardedRef, paddingTop: 4, paddingBottom: 4, alignItems: "flex-end", justifyContent: "space-between", children: (0, import_jsx_runtime.jsx)(PaginationProvider, { currentQuery: query, page: query.page, pageSize: query.pageSize, pageCount: pageCount.toString(), setPageSize, total, children }) }); }); var PageSize = ({ options = [ "10", "20", "50", "100" ] }) => { const { formatMessage } = useIntl(); const pageSize = usePagination("PageSize", (state) => state.pageSize); const totalCount = usePagination("PageSize", (state) => state.total); const setPageSize = usePagination("PageSize", (state) => state.setPageSize); const handleChange = (value) => { setPageSize(value); }; const minimumOption = parseInt(options[0], 10); if (minimumOption >= totalCount) { return null; } return (0, import_jsx_runtime.jsxs)(Flex, { gap: 2, children: [ (0, import_jsx_runtime.jsx)(SingleSelect, { size: "S", "aria-label": formatMessage({ id: "components.PageFooter.select", defaultMessage: "Entries per page" }), // @ts-expect-error from the DS V2 this won't be needed because we're only returning strings. onChange: handleChange, value: pageSize, children: options.map((option) => (0, import_jsx_runtime.jsx)(SingleSelectOption, { value: option, children: option }, option)) }), (0, import_jsx_runtime.jsx)(Typography, { textColor: "neutral600", tag: "span", children: formatMessage({ id: "components.PageFooter.select", defaultMessage: "Entries per page" }) }) ] }); }; var Links = ({ boundaryCount = 1, siblingCount = 1 }) => { const { formatMessage } = useIntl(); const query = usePagination("Links", (state) => state.currentQuery); const currentPage = usePagination("Links", (state) => state.page); const totalPages = usePagination("Links", (state) => state.pageCount); const pageCount = parseInt(totalPages, 10); const activePage = parseInt(currentPage, 10); const range = (start, end) => { const length = end - start + 1; return Array.from({ length }, (_, i) => start + i); }; const startPages = range(1, Math.min(boundaryCount, pageCount)); const endPages = range(Math.max(pageCount - boundaryCount + 1, boundaryCount + 1), pageCount); const siblingsStart = Math.max( Math.min( // Natural start activePage - siblingCount, // Lower boundary when page is high pageCount - boundaryCount - siblingCount * 2 - 1 ), // Greater than startPages boundaryCount + 2 ); const siblingsEnd = Math.min( Math.max( // Natural end activePage + siblingCount, // Upper boundary when page is low boundaryCount + siblingCount * 2 + 2 ), // Less than endPages endPages.length > 0 ? endPages[0] - 2 : pageCount - 1 ); const items = [ ...startPages, // Start ellipsis // eslint-disable-next-line no-nested-ternary ...siblingsStart > boundaryCount + 2 ? [ "start-ellipsis" ] : boundaryCount + 1 < pageCount - boundaryCount ? [ boundaryCount + 1 ] : [], // Sibling pages ...range(siblingsStart, siblingsEnd), // End ellipsis // eslint-disable-next-line no-nested-ternary ...siblingsEnd < pageCount - boundaryCount - 1 ? [ "end-ellipsis" ] : pageCount - boundaryCount > boundaryCount ? [ pageCount - boundaryCount ] : [], ...endPages ]; if (pageCount <= 1) { return null; } return (0, import_jsx_runtime.jsxs)(Pagination, { activePage, pageCount, children: [ (0, import_jsx_runtime.jsx)(PreviousLink, { tag: Link, to: { search: (0, import_qs.stringify)({ ...query, page: activePage - 1 }) }, children: formatMessage({ id: "components.pagination.go-to-previous", defaultMessage: "Go to previous page" }) }), items.map((item) => { if (typeof item === "number") { return (0, import_jsx_runtime.jsx)(PageLink, { tag: Link, number: item, to: { search: (0, import_qs.stringify)({ ...query, page: item }) }, children: formatMessage({ id: "components.pagination.go-to", defaultMessage: "Go to page {page}" }, { page: item }) }, item); } return (0, import_jsx_runtime.jsx)(Dots, {}, item); }), (0, import_jsx_runtime.jsx)(NextLink, { tag: Link, to: { search: (0, import_qs.stringify)({ ...query, page: activePage + 1 }) }, children: formatMessage({ id: "components.pagination.go-to-next", defaultMessage: "Go to next page" }) }) ] }); }; var Pagination2 = { Root, Links, PageSize }; export { Pagination2 as Pagination }; //# sourceMappingURL=chunk-APGTER6B.js.map