UNPKG

2.01 kBJavaScriptView Raw
1import PropTypes from 'prop-types';
2import React, { useContext } from 'react';
3import DropdownContext from './DropdownContext';
4
5var noop = function noop() {};
6/**
7 * Wires up Dropdown toggle functionality, returning a set a props to attach
8 * to the element that functions as the dropdown toggle (generally a button).
9 *
10 * @memberOf Dropdown
11 */
12
13
14export function useDropdownToggle() {
15 var _ref = useContext(DropdownContext) || {},
16 _ref$show = _ref.show,
17 show = _ref$show === void 0 ? false : _ref$show,
18 _ref$toggle = _ref.toggle,
19 toggle = _ref$toggle === void 0 ? noop : _ref$toggle,
20 setToggle = _ref.setToggle;
21
22 return [{
23 ref: setToggle || noop,
24 'aria-haspopup': true,
25 'aria-expanded': !!show
26 }, {
27 show: show,
28 toggle: toggle
29 }];
30}
31var propTypes = {
32 /**
33 * A render prop that returns a Toggle element. The `props`
34 * argument should spread through to **a component that can accept a ref**. Use
35 * the `onToggle` argument to toggle the menu open or closed
36 *
37 * @type {Function ({
38 * show: boolean,
39 * toggle: (show: boolean) => void,
40 * props: {
41 * ref: (?HTMLElement) => void,
42 * aria-haspopup: true
43 * aria-expanded: boolean
44 * },
45 * }) => React.Element}
46 */
47 children: PropTypes.func.isRequired
48};
49
50/**
51 * Also exported as `<Dropdown.Toggle>` from `Dropdown`.
52 *
53 * @displayName DropdownToggle
54 * @memberOf Dropdown
55 */
56function DropdownToggle(_ref2) {
57 var children = _ref2.children;
58
59 var _useDropdownToggle = useDropdownToggle(),
60 props = _useDropdownToggle[0],
61 _useDropdownToggle$ = _useDropdownToggle[1],
62 show = _useDropdownToggle$.show,
63 toggle = _useDropdownToggle$.toggle;
64
65 return /*#__PURE__*/React.createElement(React.Fragment, null, children({
66 show: show,
67 toggle: toggle,
68 props: props
69 }));
70}
71
72DropdownToggle.displayName = 'ReactOverlaysDropdownToggle';
73DropdownToggle.propTypes = propTypes;
74/** @component */
75
76export default DropdownToggle;
\No newline at end of file