| 12345678910111213141516171819202122232425262728293031323334353637 |
- import React from 'react'
- import { Dropdown } from 'react-bootstrap'
- import PropTypes from 'prop-types'
- import useDropdown from '../hooks/use-dropdown'
- export default function ControlledDropdown(props) {
- const dropdownProps = useDropdown(Boolean(props.defaultOpen))
- return (
- <Dropdown {...props} {...dropdownProps}>
- {React.Children.map(props.children, child => {
- if (!React.isValidElement(child)) {
- return child
- }
- // Dropdown.Menu
- if ('open' in child.props) {
- return React.cloneElement(child, { open: dropdownProps.open })
- }
- // Overlay
- if ('show' in child.props) {
- return React.cloneElement(child, { show: dropdownProps.open })
- }
- // anything else
- return React.cloneElement(child)
- })}
- </Dropdown>
- )
- }
- ControlledDropdown.propTypes = {
- children: PropTypes.any,
- defaultOpen: PropTypes.bool,
- id: PropTypes.string,
- className: PropTypes.string,
- }
|