UNPKG

4.98 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.PaginationOptionsMenu = void 0;
4const tslib_1 = require("tslib");
5const React = tslib_1.__importStar(require("react"));
6const options_menu_1 = tslib_1.__importDefault(require("@patternfly/react-styles/css/components/OptionsMenu/options-menu"));
7const react_styles_1 = require("@patternfly/react-styles");
8const Dropdown_1 = require("../Dropdown");
9const check_icon_1 = tslib_1.__importDefault(require('@patternfly/react-icons/dist/js/icons/check-icon'));
10const OptionsToggle_1 = require("./OptionsToggle");
11const ToggleTemplate_1 = require("./ToggleTemplate");
12class PaginationOptionsMenu extends React.Component {
13 constructor(props) {
14 super(props);
15 this.parentRef = React.createRef();
16 this.onToggle = (isOpen) => {
17 this.setState({ isOpen });
18 };
19 this.onSelect = () => {
20 this.setState((prevState) => ({ isOpen: !prevState.isOpen }));
21 };
22 this.handleNewPerPage = (_evt, newPerPage) => {
23 const { page, onPerPageSelect, itemCount, defaultToFullPage } = this.props;
24 let newPage = page;
25 while (Math.ceil(itemCount / newPerPage) < newPage) {
26 newPage--;
27 }
28 if (defaultToFullPage) {
29 if (itemCount / newPerPage !== newPage) {
30 while (newPage > 1 && itemCount - newPerPage * newPage < 0) {
31 newPage--;
32 }
33 }
34 }
35 const startIdx = (newPage - 1) * newPerPage;
36 const endIdx = newPage * newPerPage;
37 return onPerPageSelect(_evt, newPerPage, newPage, startIdx, endIdx);
38 };
39 this.renderItems = () => {
40 const { perPageOptions, perPage, perPageSuffix } = this.props;
41 return perPageOptions.map(({ value, title }) => (React.createElement(Dropdown_1.DropdownItem, { key: value, component: "button", "data-action": `per-page-${value}`, className: react_styles_1.css(perPage === value && 'pf-m-selected'), onClick: event => this.handleNewPerPage(event, value) },
42 title,
43 ` ${perPageSuffix}`,
44 perPage === value && (React.createElement("div", { className: react_styles_1.css(options_menu_1.default.optionsMenuMenuItemIcon) },
45 React.createElement(check_icon_1.default, null))))));
46 };
47 this.state = {
48 isOpen: false
49 };
50 }
51 render() {
52 const { widgetId, isDisabled, itemsPerPageTitle, dropDirection, optionsToggle, perPageOptions, toggleTemplate, firstIndex, lastIndex, itemCount, itemsTitle, ofWord, perPageComponent } = this.props;
53 const { isOpen } = this.state;
54 return (React.createElement(Dropdown_1.DropdownContext.Provider, { value: {
55 id: widgetId,
56 onSelect: this.onSelect,
57 toggleIndicatorClass: perPageComponent === 'div' ? options_menu_1.default.optionsMenuToggleButtonIcon : options_menu_1.default.optionsMenuToggleIcon,
58 toggleTextClass: options_menu_1.default.optionsMenuToggleText,
59 menuClass: options_menu_1.default.optionsMenuMenu,
60 itemClass: options_menu_1.default.optionsMenuMenuItem,
61 toggleClass: ' ',
62 baseClass: options_menu_1.default.optionsMenu,
63 disabledClass: options_menu_1.default.modifiers.disabled,
64 menuComponent: 'ul',
65 baseComponent: 'div',
66 ouiaComponentType: PaginationOptionsMenu.displayName
67 } },
68 React.createElement(Dropdown_1.DropdownWithContext, { direction: dropDirection, isOpen: isOpen, toggle: React.createElement(OptionsToggle_1.OptionsToggle, { optionsToggle: optionsToggle, itemsPerPageTitle: itemsPerPageTitle, showToggle: perPageOptions && perPageOptions.length > 0, onToggle: this.onToggle, isOpen: isOpen, widgetId: widgetId, firstIndex: firstIndex, lastIndex: lastIndex, itemCount: itemCount, itemsTitle: itemsTitle, ofWord: ofWord, toggleTemplate: toggleTemplate, parentRef: this.parentRef.current, isDisabled: isDisabled, perPageComponent: perPageComponent }), dropdownItems: this.renderItems(), isPlain: true })));
69 }
70}
71exports.PaginationOptionsMenu = PaginationOptionsMenu;
72PaginationOptionsMenu.displayName = 'PaginationOptionsMenu';
73PaginationOptionsMenu.defaultProps = {
74 className: '',
75 widgetId: '',
76 isDisabled: false,
77 dropDirection: Dropdown_1.DropdownDirection.down,
78 perPageOptions: [],
79 itemsPerPageTitle: 'Items per page',
80 perPageSuffix: 'per page',
81 optionsToggle: '',
82 ofWord: 'of',
83 perPage: 0,
84 firstIndex: 0,
85 lastIndex: 0,
86 defaultToFullPage: false,
87 itemsTitle: 'items',
88 toggleTemplate: ToggleTemplate_1.ToggleTemplate,
89 onPerPageSelect: () => null,
90 perPageComponent: 'div'
91};
92//# sourceMappingURL=PaginationOptionsMenu.js.map
\No newline at end of file