UNPKG

@mui/base

Version:

MUI Base is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.

142 lines (140 loc) 4.6 kB
'use client'; var _span, _span2, _span3, _span4; import * as React from 'react'; import { useSlotProps } from "../utils/index.js"; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; function LastPageIconDefault() { return _span || (_span = /*#__PURE__*/_jsx("span", { children: '⇾|' })); } function FirstPageIconDefault() { return _span2 || (_span2 = /*#__PURE__*/_jsx("span", { children: '|⇽' })); } function NextPageIconDefault() { return _span3 || (_span3 = /*#__PURE__*/_jsx("span", { children: '⇾' })); } function BackPageIconDefault() { return _span4 || (_span4 = /*#__PURE__*/_jsx("span", { children: '⇽' })); } function defaultGetAriaLabel(type) { return `Go to ${type} page`; } /** * @ignore - internal component. */ const TablePaginationActions = /*#__PURE__*/React.forwardRef(function TablePaginationActions(props, forwardedRef) { const { count, getItemAriaLabel = defaultGetAriaLabel, onPageChange, page, rowsPerPage, showFirstButton = false, showLastButton = false, direction, // @ts-ignore ownerState: ownerStateProp, slotProps = {}, slots = {}, ...other } = props; const ownerState = props; const handleFirstPageButtonClick = event => { onPageChange(event, 0); }; const handleBackButtonClick = event => { onPageChange(event, page - 1); }; const handleNextButtonClick = event => { onPageChange(event, page + 1); }; const handleLastPageButtonClick = event => { onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1)); }; const Root = slots.root ?? 'div'; const rootProps = useSlotProps({ elementType: Root, externalSlotProps: slotProps.root, externalForwardedProps: other, additionalProps: { ref: forwardedRef }, ownerState }); const FirstButton = slots.firstButton ?? 'button'; const firstButtonProps = useSlotProps({ elementType: FirstButton, externalSlotProps: slotProps.firstButton, additionalProps: { onClick: handleFirstPageButtonClick, disabled: page === 0, 'aria-label': getItemAriaLabel('first', page), title: getItemAriaLabel('first', page) }, ownerState }); const LastButton = slots.lastButton ?? 'button'; const lastButtonProps = useSlotProps({ elementType: LastButton, externalSlotProps: slotProps.lastButton, additionalProps: { onClick: handleLastPageButtonClick, disabled: page >= Math.ceil(count / rowsPerPage) - 1, 'aria-label': getItemAriaLabel('last', page), title: getItemAriaLabel('last', page) }, ownerState }); const NextButton = slots.nextButton ?? 'button'; const nextButtonProps = useSlotProps({ elementType: NextButton, externalSlotProps: slotProps.nextButton, additionalProps: { onClick: handleNextButtonClick, disabled: count !== -1 ? page >= Math.ceil(count / rowsPerPage) - 1 : false, 'aria-label': getItemAriaLabel('next', page), title: getItemAriaLabel('next', page) }, ownerState }); const BackButton = slots.backButton ?? 'button'; const backButtonProps = useSlotProps({ elementType: BackButton, externalSlotProps: slotProps.backButton, additionalProps: { onClick: handleBackButtonClick, disabled: page === 0, 'aria-label': getItemAriaLabel('previous', page), title: getItemAriaLabel('previous', page) }, ownerState }); const LastPageIcon = slots.lastPageIcon ?? LastPageIconDefault; const FirstPageIcon = slots.firstPageIcon ?? FirstPageIconDefault; const NextPageIcon = slots.nextPageIcon ?? NextPageIconDefault; const BackPageIcon = slots.backPageIcon ?? BackPageIconDefault; return /*#__PURE__*/_jsxs(Root, { ...rootProps, children: [showFirstButton && /*#__PURE__*/_jsx(FirstButton, { ...firstButtonProps, children: direction === 'rtl' ? /*#__PURE__*/_jsx(LastPageIcon, {}) : /*#__PURE__*/_jsx(FirstPageIcon, {}) }), /*#__PURE__*/_jsx(BackButton, { ...backButtonProps, children: direction === 'rtl' ? /*#__PURE__*/_jsx(NextPageIcon, {}) : /*#__PURE__*/_jsx(BackPageIcon, {}) }), /*#__PURE__*/_jsx(NextButton, { ...nextButtonProps, children: direction === 'rtl' ? /*#__PURE__*/_jsx(BackPageIcon, {}) : /*#__PURE__*/_jsx(NextPageIcon, {}) }), showLastButton && /*#__PURE__*/_jsx(LastButton, { ...lastButtonProps, children: direction === 'rtl' ? /*#__PURE__*/_jsx(FirstPageIcon, {}) : /*#__PURE__*/_jsx(LastPageIcon, {}) })] }); }); export { TablePaginationActions };