1 | import _extends from "@babel/runtime/helpers/esm/extends";
|
2 | import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
3 | var _excluded = ["bsPrefix", "drop", "show", "className", "alignRight", "onSelect", "onToggle", "focusFirstItemOnShow", "as", "navbar"];
|
4 | import classNames from 'classnames';
|
5 | import React, { useContext } from 'react';
|
6 | import BaseDropdown from 'react-overlays/Dropdown';
|
7 | import { useUncontrolled } from 'uncontrollable';
|
8 | import useEventCallback from '@restart/hooks/useEventCallback';
|
9 | import DropdownItem from './DropdownItem';
|
10 | import DropdownMenu from './DropdownMenu';
|
11 | import DropdownToggle from './DropdownToggle';
|
12 | import SelectableContext from './SelectableContext';
|
13 | import { useBootstrapPrefix } from './ThemeProvider';
|
14 | import createWithBsPrefix from './createWithBsPrefix';
|
15 | var DropdownHeader = createWithBsPrefix('dropdown-header', {
|
16 | defaultProps: {
|
17 | role: 'heading'
|
18 | }
|
19 | });
|
20 | var DropdownDivider = createWithBsPrefix('dropdown-divider', {
|
21 | defaultProps: {
|
22 | role: 'separator'
|
23 | }
|
24 | });
|
25 | var DropdownItemText = createWithBsPrefix('dropdown-item-text', {
|
26 | Component: 'span'
|
27 | });
|
28 | var defaultProps = {
|
29 | navbar: false
|
30 | };
|
31 | var Dropdown = React.forwardRef(function (pProps, ref) {
|
32 | var _useUncontrolled = useUncontrolled(pProps, {
|
33 | show: 'onToggle'
|
34 | }),
|
35 | bsPrefix = _useUncontrolled.bsPrefix,
|
36 | drop = _useUncontrolled.drop,
|
37 | show = _useUncontrolled.show,
|
38 | className = _useUncontrolled.className,
|
39 | alignRight = _useUncontrolled.alignRight,
|
40 | onSelect = _useUncontrolled.onSelect,
|
41 | onToggle = _useUncontrolled.onToggle,
|
42 | focusFirstItemOnShow = _useUncontrolled.focusFirstItemOnShow,
|
43 | _useUncontrolled$as = _useUncontrolled.as,
|
44 | Component = _useUncontrolled$as === void 0 ? 'div' : _useUncontrolled$as,
|
45 | _4 = _useUncontrolled.navbar,
|
46 | props = _objectWithoutPropertiesLoose(_useUncontrolled, _excluded);
|
47 |
|
48 | var onSelectCtx = useContext(SelectableContext);
|
49 | var prefix = useBootstrapPrefix(bsPrefix, 'dropdown');
|
50 | var handleToggle = useEventCallback(function (nextShow, event, source) {
|
51 | if (source === void 0) {
|
52 | source = event.type;
|
53 | }
|
54 |
|
55 | if (event.currentTarget === document && (source !== 'keydown' || event.key === 'Escape')) source = 'rootClose';
|
56 |
|
57 | if (onToggle) {
|
58 | onToggle(nextShow, event, {
|
59 | source: source
|
60 | });
|
61 | }
|
62 | });
|
63 | var handleSelect = useEventCallback(function (key, event) {
|
64 | if (onSelectCtx) onSelectCtx(key, event);
|
65 | if (onSelect) onSelect(key, event);
|
66 | handleToggle(false, event, 'select');
|
67 | });
|
68 | return React.createElement(SelectableContext.Provider, {
|
69 | value: handleSelect
|
70 | }, React.createElement(BaseDropdown, {
|
71 | drop: drop,
|
72 | show: show,
|
73 | alignEnd: alignRight,
|
74 | onToggle: handleToggle,
|
75 | focusFirstItemOnShow: focusFirstItemOnShow,
|
76 | itemSelector: "." + prefix + "-item:not(.disabled):not(:disabled)"
|
77 | }, React.createElement(Component, _extends({}, props, {
|
78 | ref: ref,
|
79 | className: classNames(className, show && 'show', (!drop || drop === 'down') && prefix, drop === 'up' && 'dropup', drop === 'right' && 'dropright', drop === 'left' && 'dropleft')
|
80 | }))));
|
81 | });
|
82 | Dropdown.displayName = 'Dropdown';
|
83 | Dropdown.defaultProps = defaultProps;
|
84 | Dropdown.Divider = DropdownDivider;
|
85 | Dropdown.Header = DropdownHeader;
|
86 | Dropdown.Item = DropdownItem;
|
87 | Dropdown.ItemText = DropdownItemText;
|
88 | Dropdown.Menu = DropdownMenu;
|
89 | Dropdown.Toggle = DropdownToggle;
|
90 | export default Dropdown; |
\ | No newline at end of file |