UNPKG

8.2 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6Object.defineProperty(exports, "__esModule", {
7 value: true
8});
9exports.default = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _propTypes = _interopRequireDefault(require("prop-types"));
12var _RtlProvider = require("@mui/system/RtlProvider");
13var _KeyboardArrowLeft = _interopRequireDefault(require("../internal/svg-icons/KeyboardArrowLeft"));
14var _KeyboardArrowRight = _interopRequireDefault(require("../internal/svg-icons/KeyboardArrowRight"));
15var _IconButton = _interopRequireDefault(require("../IconButton"));
16var _LastPage = _interopRequireDefault(require("../internal/svg-icons/LastPage"));
17var _FirstPage = _interopRequireDefault(require("../internal/svg-icons/FirstPage"));
18var _jsxRuntime = require("react/jsx-runtime");
19/**
20 * @ignore - internal component.
21 */const TablePaginationActions = /*#__PURE__*/React.forwardRef(function TablePaginationActions(props, ref) {
22 const {
23 backIconButtonProps,
24 count,
25 disabled = false,
26 getItemAriaLabel,
27 nextIconButtonProps,
28 onPageChange,
29 page,
30 rowsPerPage,
31 showFirstButton,
32 showLastButton,
33 slots = {},
34 slotProps = {},
35 ...other
36 } = props;
37 const isRtl = (0, _RtlProvider.useRtl)();
38 const handleFirstPageButtonClick = event => {
39 onPageChange(event, 0);
40 };
41 const handleBackButtonClick = event => {
42 onPageChange(event, page - 1);
43 };
44 const handleNextButtonClick = event => {
45 onPageChange(event, page + 1);
46 };
47 const handleLastPageButtonClick = event => {
48 onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
49 };
50 const FirstButton = slots.firstButton ?? _IconButton.default;
51 const LastButton = slots.lastButton ?? _IconButton.default;
52 const NextButton = slots.nextButton ?? _IconButton.default;
53 const PreviousButton = slots.previousButton ?? _IconButton.default;
54 const FirstButtonIcon = slots.firstButtonIcon ?? _FirstPage.default;
55 const LastButtonIcon = slots.lastButtonIcon ?? _LastPage.default;
56 const NextButtonIcon = slots.nextButtonIcon ?? _KeyboardArrowRight.default;
57 const PreviousButtonIcon = slots.previousButtonIcon ?? _KeyboardArrowLeft.default;
58 const FirstButtonSlot = isRtl ? LastButton : FirstButton;
59 const PreviousButtonSlot = isRtl ? NextButton : PreviousButton;
60 const NextButtonSlot = isRtl ? PreviousButton : NextButton;
61 const LastButtonSlot = isRtl ? FirstButton : LastButton;
62 const firstButtonSlotProps = isRtl ? slotProps.lastButton : slotProps.firstButton;
63 const previousButtonSlotProps = isRtl ? slotProps.nextButton : slotProps.previousButton;
64 const nextButtonSlotProps = isRtl ? slotProps.previousButton : slotProps.nextButton;
65 const lastButtonSlotProps = isRtl ? slotProps.firstButton : slotProps.lastButton;
66 return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
67 ref: ref,
68 ...other,
69 children: [showFirstButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(FirstButtonSlot, {
70 onClick: handleFirstPageButtonClick,
71 disabled: disabled || page === 0,
72 "aria-label": getItemAriaLabel('first', page),
73 title: getItemAriaLabel('first', page),
74 ...firstButtonSlotProps,
75 children: isRtl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(LastButtonIcon, {
76 ...slotProps.lastButtonIcon
77 }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(FirstButtonIcon, {
78 ...slotProps.firstButtonIcon
79 })
80 }), /*#__PURE__*/(0, _jsxRuntime.jsx)(PreviousButtonSlot, {
81 onClick: handleBackButtonClick,
82 disabled: disabled || page === 0,
83 color: "inherit",
84 "aria-label": getItemAriaLabel('previous', page),
85 title: getItemAriaLabel('previous', page),
86 ...(previousButtonSlotProps ?? backIconButtonProps),
87 children: isRtl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(NextButtonIcon, {
88 ...slotProps.nextButtonIcon
89 }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(PreviousButtonIcon, {
90 ...slotProps.previousButtonIcon
91 })
92 }), /*#__PURE__*/(0, _jsxRuntime.jsx)(NextButtonSlot, {
93 onClick: handleNextButtonClick,
94 disabled: disabled || (count !== -1 ? page >= Math.ceil(count / rowsPerPage) - 1 : false),
95 color: "inherit",
96 "aria-label": getItemAriaLabel('next', page),
97 title: getItemAriaLabel('next', page),
98 ...(nextButtonSlotProps ?? nextIconButtonProps),
99 children: isRtl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(PreviousButtonIcon, {
100 ...slotProps.previousButtonIcon
101 }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(NextButtonIcon, {
102 ...slotProps.nextButtonIcon
103 })
104 }), showLastButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(LastButtonSlot, {
105 onClick: handleLastPageButtonClick,
106 disabled: disabled || page >= Math.ceil(count / rowsPerPage) - 1,
107 "aria-label": getItemAriaLabel('last', page),
108 title: getItemAriaLabel('last', page),
109 ...lastButtonSlotProps,
110 children: isRtl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(FirstButtonIcon, {
111 ...slotProps.firstButtonIcon
112 }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(LastButtonIcon, {
113 ...slotProps.lastButtonIcon
114 })
115 })]
116 });
117});
118process.env.NODE_ENV !== "production" ? TablePaginationActions.propTypes = {
119 /**
120 * Props applied to the back arrow [`IconButton`](/material-ui/api/icon-button/) element.
121 */
122 backIconButtonProps: _propTypes.default.object,
123 /**
124 * The total number of rows.
125 */
126 count: _propTypes.default.number.isRequired,
127 /**
128 * If `true`, the component is disabled.
129 * @default false
130 */
131 disabled: _propTypes.default.bool,
132 /**
133 * Accepts a function which returns a string value that provides a user-friendly name for the current page.
134 *
135 * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
136 *
137 * @param {string} type The link or button type to format ('page' | 'first' | 'last' | 'next' | 'previous'). Defaults to 'page'.
138 * @param {number} page The page number to format.
139 * @returns {string}
140 */
141 getItemAriaLabel: _propTypes.default.func.isRequired,
142 /**
143 * Props applied to the next arrow [`IconButton`](/material-ui/api/icon-button/) element.
144 */
145 nextIconButtonProps: _propTypes.default.object,
146 /**
147 * Callback fired when the page is changed.
148 *
149 * @param {object} event The event source of the callback.
150 * @param {number} page The page selected.
151 */
152 onPageChange: _propTypes.default.func.isRequired,
153 /**
154 * The zero-based index of the current page.
155 */
156 page: _propTypes.default.number.isRequired,
157 /**
158 * The number of rows per page.
159 */
160 rowsPerPage: _propTypes.default.number.isRequired,
161 /**
162 * If `true`, show the first-page button.
163 */
164 showFirstButton: _propTypes.default.bool.isRequired,
165 /**
166 * If `true`, show the last-page button.
167 */
168 showLastButton: _propTypes.default.bool.isRequired,
169 /**
170 * The props used for each slot inside the TablePaginationActions.
171 * @default {}
172 */
173 slotProps: _propTypes.default.shape({
174 firstButton: _propTypes.default.object,
175 firstButtonIcon: _propTypes.default.object,
176 lastButton: _propTypes.default.object,
177 lastButtonIcon: _propTypes.default.object,
178 nextButton: _propTypes.default.object,
179 nextButtonIcon: _propTypes.default.object,
180 previousButton: _propTypes.default.object,
181 previousButtonIcon: _propTypes.default.object
182 }),
183 /**
184 * The components used for each slot inside the TablePaginationActions.
185 * Either a string to use a HTML element or a component.
186 * @default {}
187 */
188 slots: _propTypes.default.shape({
189 firstButton: _propTypes.default.elementType,
190 firstButtonIcon: _propTypes.default.elementType,
191 lastButton: _propTypes.default.elementType,
192 lastButtonIcon: _propTypes.default.elementType,
193 nextButton: _propTypes.default.elementType,
194 nextButtonIcon: _propTypes.default.elementType,
195 previousButton: _propTypes.default.elementType,
196 previousButtonIcon: _propTypes.default.elementType
197 })
198} : void 0;
199var _default = exports.default = TablePaginationActions;
\No newline at end of file