UNPKG

4.39 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7exports.__esModule = true;
8exports.default = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
14var _classnames = _interopRequireDefault(require("classnames"));
15
16var _react = _interopRequireWildcard(require("react"));
17
18var _Dropdown = _interopRequireDefault(require("react-overlays/Dropdown"));
19
20var _uncontrollable = require("uncontrollable");
21
22var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
23
24var _DropdownItem = _interopRequireDefault(require("./DropdownItem"));
25
26var _DropdownMenu = _interopRequireDefault(require("./DropdownMenu"));
27
28var _DropdownToggle = _interopRequireDefault(require("./DropdownToggle"));
29
30var _SelectableContext = _interopRequireDefault(require("./SelectableContext"));
31
32var _ThemeProvider = require("./ThemeProvider");
33
34var _createWithBsPrefix = _interopRequireDefault(require("./createWithBsPrefix"));
35
36var DropdownHeader = (0, _createWithBsPrefix.default)('dropdown-header', {
37 defaultProps: {
38 role: 'heading'
39 }
40});
41var DropdownDivider = (0, _createWithBsPrefix.default)('dropdown-divider', {
42 defaultProps: {
43 role: 'separator'
44 }
45});
46var DropdownItemText = (0, _createWithBsPrefix.default)('dropdown-item-text', {
47 Component: 'span'
48});
49var defaultProps = {
50 navbar: false
51};
52
53var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (pProps, ref) {
54 var _useUncontrolled = (0, _uncontrollable.useUncontrolled)(pProps, {
55 show: 'onToggle'
56 }),
57 bsPrefix = _useUncontrolled.bsPrefix,
58 drop = _useUncontrolled.drop,
59 show = _useUncontrolled.show,
60 className = _useUncontrolled.className,
61 alignRight = _useUncontrolled.alignRight,
62 onSelect = _useUncontrolled.onSelect,
63 onToggle = _useUncontrolled.onToggle,
64 focusFirstItemOnShow = _useUncontrolled.focusFirstItemOnShow,
65 _useUncontrolled$as = _useUncontrolled.as,
66 Component = _useUncontrolled$as === void 0 ? 'div' : _useUncontrolled$as,
67 _4 = _useUncontrolled.navbar,
68 props = (0, _objectWithoutPropertiesLoose2.default)(_useUncontrolled, ["bsPrefix", "drop", "show", "className", "alignRight", "onSelect", "onToggle", "focusFirstItemOnShow", "as", "navbar"]);
69
70 var onSelectCtx = (0, _react.useContext)(_SelectableContext.default);
71 var prefix = (0, _ThemeProvider.useBootstrapPrefix)(bsPrefix, 'dropdown');
72 var handleToggle = (0, _useEventCallback.default)(function (nextShow, event, source) {
73 if (source === void 0) {
74 source = event.type;
75 }
76
77 if (event.currentTarget === document) source = 'rootClose';
78
79 if (onToggle) {
80 onToggle(nextShow, event, {
81 source: source
82 });
83 }
84 });
85 var handleSelect = (0, _useEventCallback.default)(function (key, event) {
86 if (onSelectCtx) onSelectCtx(key, event);
87 if (onSelect) onSelect(key, event);
88 handleToggle(false, event, 'select');
89 });
90 return /*#__PURE__*/_react.default.createElement(_SelectableContext.default.Provider, {
91 value: handleSelect
92 }, /*#__PURE__*/_react.default.createElement(_Dropdown.default, {
93 drop: drop,
94 show: show,
95 alignEnd: alignRight,
96 onToggle: handleToggle,
97 focusFirstItemOnShow: focusFirstItemOnShow,
98 itemSelector: "." + prefix + "-item:not(.disabled):not(:disabled)"
99 }, function (_ref) {
100 var dropdownProps = _ref.props;
101 return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, props, dropdownProps, {
102 ref: ref,
103 className: (0, _classnames.default)(className, show && 'show', (!drop || drop === 'down') && prefix, drop === 'up' && 'dropup', drop === 'right' && 'dropright', drop === 'left' && 'dropleft')
104 }));
105 }));
106});
107
108Dropdown.displayName = 'Dropdown';
109Dropdown.defaultProps = defaultProps;
110Dropdown.Divider = DropdownDivider;
111Dropdown.Header = DropdownHeader;
112Dropdown.Item = _DropdownItem.default;
113Dropdown.ItemText = DropdownItemText;
114Dropdown.Menu = _DropdownMenu.default;
115Dropdown.Toggle = _DropdownToggle.default;
116var _default = Dropdown;
117exports.default = _default;
118module.exports = exports["default"];
\No newline at end of file