import PropTypes from 'prop-types'; import { useCallback, useState, useRef } from 'react'; import Overlay from 'react-overlays/Overlay'; import { IconButton } from 'flavours/glitch/components/icon_button'; import DropdownMenu from './dropdown_menu'; export const DropdownIconButton = ({ value, disabled, icon, onChange, iconComponent, title, options }) => { const containerRef = useRef(null); const [activeElement, setActiveElement] = useState(null); const [open, setOpen] = useState(false); const [placement, setPlacement] = useState('bottom'); const handleToggle = useCallback(() => { if (open && activeElement) { activeElement.focus({ preventScroll: true }); setActiveElement(null); } setOpen(!open); }, [open, setOpen, activeElement, setActiveElement]); const handleClose = useCallback(() => { if (open && activeElement) { activeElement.focus({ preventScroll: true }); setActiveElement(null); } setOpen(false); }, [open, setOpen, activeElement, setActiveElement]); const handleOverlayEnter = useCallback((state) => { setPlacement(state.placement); }, [setPlacement]); return (
{({ props, placement }) => (
)}
); }; DropdownIconButton.propTypes = { value: PropTypes.string.isRequired, disabled: PropTypes.bool, icon: PropTypes.string, onChange: PropTypes.func.isRequired, iconComponent: PropTypes.func.isRequired, options: PropTypes.array.isRequired, title: PropTypes.string.isRequired, };