1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.PaginationOptionsMenu = void 0;
|
4 | const tslib_1 = require("tslib");
|
5 | const React = tslib_1.__importStar(require("react"));
|
6 | const options_menu_1 = tslib_1.__importDefault(require("@patternfly/react-styles/css/components/OptionsMenu/options-menu"));
|
7 | const react_styles_1 = require("@patternfly/react-styles");
|
8 | const Dropdown_1 = require("../Dropdown");
|
9 | const check_icon_1 = tslib_1.__importDefault(require('@patternfly/react-icons/dist/js/icons/check-icon'));
|
10 | const OptionsToggle_1 = require("./OptionsToggle");
|
11 | const ToggleTemplate_1 = require("./ToggleTemplate");
|
12 | class 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 | }
|
71 | exports.PaginationOptionsMenu = PaginationOptionsMenu;
|
72 | PaginationOptionsMenu.displayName = 'PaginationOptionsMenu';
|
73 | PaginationOptionsMenu.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 |
|
\ | No newline at end of file |