UNPKG

4.11 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 defaultProps = {
37 navbar: false
38};
39
40var Dropdown = _react.default.forwardRef(function (uncontrolledProps, ref) {
41 var _useUncontrolled = (0, _uncontrollable.useUncontrolled)(uncontrolledProps, {
42 show: 'onToggle'
43 }),
44 bsPrefix = _useUncontrolled.bsPrefix,
45 drop = _useUncontrolled.drop,
46 show = _useUncontrolled.show,
47 className = _useUncontrolled.className,
48 alignRight = _useUncontrolled.alignRight,
49 onSelect = _useUncontrolled.onSelect,
50 onToggle = _useUncontrolled.onToggle,
51 focusFirstItemOnShow = _useUncontrolled.focusFirstItemOnShow,
52 _useUncontrolled$as = _useUncontrolled.as,
53 Component = _useUncontrolled$as === void 0 ? 'div' : _useUncontrolled$as,
54 _4 = _useUncontrolled.navbar,
55 props = (0, _objectWithoutPropertiesLoose2.default)(_useUncontrolled, ["bsPrefix", "drop", "show", "className", "alignRight", "onSelect", "onToggle", "focusFirstItemOnShow", "as", "navbar"]);
56
57 var onSelectCtx = (0, _react.useContext)(_SelectableContext.default);
58 var prefix = (0, _ThemeProvider.useBootstrapPrefix)(bsPrefix, 'dropdown');
59 var handleToggle = (0, _useEventCallback.default)(function (nextShow, event, source) {
60 if (source === void 0) {
61 source = event.type;
62 }
63
64 if (event.currentTarget === document) source = 'rootClose';
65 onToggle(nextShow, event, {
66 source: source
67 });
68 });
69 var handleSelect = (0, _useEventCallback.default)(function (key, event) {
70 if (onSelectCtx) onSelectCtx(key, event);
71 if (onSelect) onSelect(key, event);
72 handleToggle(false, event, 'select');
73 });
74 return _react.default.createElement(_SelectableContext.default.Provider, {
75 value: handleSelect
76 }, _react.default.createElement(_Dropdown.default, {
77 drop: drop,
78 show: show,
79 alignEnd: alignRight,
80 onToggle: handleToggle,
81 focusFirstItemOnShow: focusFirstItemOnShow,
82 itemSelector: "." + prefix + "-item:not(.disabled):not(:disabled)"
83 }, function (_ref) {
84 var dropdownProps = _ref.props;
85 return _react.default.createElement(Component, (0, _extends2.default)({}, props, dropdownProps, {
86 ref: ref,
87 className: (0, _classnames.default)(className, show && 'show', (!drop || drop === 'down') && prefix, drop === 'up' && 'dropup', drop === 'right' && 'dropright', drop === 'left' && 'dropleft')
88 }));
89 }));
90});
91
92Dropdown.displayName = 'Dropdown';
93Dropdown.defaultProps = defaultProps;
94Dropdown.Toggle = _DropdownToggle.default;
95Dropdown.Menu = _DropdownMenu.default;
96Dropdown.Item = _DropdownItem.default;
97Dropdown.Header = (0, _createWithBsPrefix.default)('dropdown-header', {
98 defaultProps: {
99 role: 'heading'
100 }
101});
102Dropdown.Divider = (0, _createWithBsPrefix.default)('dropdown-divider', {
103 defaultProps: {
104 role: 'separator'
105 }
106});
107var _default = Dropdown;
108exports.default = _default;
109module.exports = exports["default"];
\No newline at end of file