/* * This file is part of Cockpit. * * Copyright (C) 2024 Red Hat, Inc. * * Cockpit is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * Cockpit is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Cockpit; If not, see . */ import React, { useState } from 'react'; import PropTypes from "prop-types"; import { MenuToggle } from "@patternfly/react-core/dist/esm/components/MenuToggle"; import { Dropdown, DropdownList } from "@patternfly/react-core/dist/esm/components/Dropdown"; import { EllipsisVIcon } from '@patternfly/react-icons'; /* * A dropdown with a Kebab button, commonly used in Cockpit pages provided as * component so not all pages have to re-invent the wheel. * * This component expects a list of (non-deprecated!) DropdownItem's, if you * require a separator between DropdownItem's use PatternFly's Divivder * component. */ export const KebabDropdown = ({ dropdownItems, position, isDisabled, toggleButtonId, props }) => { const [isKebabOpen, setKebabOpen] = useState(false); return ( setKebabOpen(isOpen)} onSelect={() => setKebabOpen(!isKebabOpen)} toggle={(toggleRef) => ( setKebabOpen(!isKebabOpen)} isExpanded={isKebabOpen} > )} isOpen={isKebabOpen} popperProps={{ position }} > {dropdownItems} ); }; KebabDropdown.propTypes = { dropdownItems: PropTypes.array.isRequired, isDisabled: PropTypes.bool, toggleButtonId: PropTypes.string, position: PropTypes.oneOf(['right', 'left', 'center', 'start', 'end']), }; KebabDropdown.defaultProps = { isDisabled: false, position: "end", };