UNPKG

5.29 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = void 0;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/extends"));
9
10var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutPropertiesLoose"));
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inheritsLoose"));
13
14var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
15
16var _classnames = _interopRequireDefault(require("classnames"));
17
18var _react = _interopRequireDefault(require("react"));
19
20var _propTypes = _interopRequireDefault(require("prop-types"));
21
22var _all = _interopRequireDefault(require("prop-types-extra/lib/all"));
23
24var _SafeAnchor = _interopRequireDefault(require("./SafeAnchor"));
25
26var _bootstrapUtils = require("./utils/bootstrapUtils");
27
28var _createChainedFunction = _interopRequireDefault(require("./utils/createChainedFunction"));
29
30var propTypes = {
31 /**
32 * Highlight the menu item as active.
33 */
34 active: _propTypes.default.bool,
35
36 /**
37 * Disable the menu item, making it unselectable.
38 */
39 disabled: _propTypes.default.bool,
40
41 /**
42 * Styles the menu item as a horizontal rule, providing visual separation between
43 * groups of menu items.
44 */
45 divider: (0, _all.default)(_propTypes.default.bool, function (_ref) {
46 var divider = _ref.divider,
47 children = _ref.children;
48 return divider && children ? new Error('Children will not be rendered for dividers') : null;
49 }),
50
51 /**
52 * Value passed to the `onSelect` handler, useful for identifying the selected menu item.
53 */
54 eventKey: _propTypes.default.any,
55
56 /**
57 * Styles the menu item as a header label, useful for describing a group of menu items.
58 */
59 header: _propTypes.default.bool,
60
61 /**
62 * HTML `href` attribute corresponding to `a.href`.
63 */
64 href: _propTypes.default.string,
65
66 /**
67 * Callback fired when the menu item is clicked.
68 */
69 onClick: _propTypes.default.func,
70
71 /**
72 * Callback fired when the menu item is selected.
73 *
74 * ```js
75 * (eventKey: any, event: Object) => any
76 * ```
77 */
78 onSelect: _propTypes.default.func
79};
80var defaultProps = {
81 divider: false,
82 disabled: false,
83 header: false
84};
85
86var MenuItem =
87/*#__PURE__*/
88function (_React$Component) {
89 (0, _inheritsLoose2.default)(MenuItem, _React$Component);
90
91 function MenuItem(props, context) {
92 var _this;
93
94 _this = _React$Component.call(this, props, context) || this;
95 _this.handleClick = _this.handleClick.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
96 return _this;
97 }
98
99 var _proto = MenuItem.prototype;
100
101 _proto.handleClick = function handleClick(event) {
102 var _this$props = this.props,
103 href = _this$props.href,
104 disabled = _this$props.disabled,
105 onSelect = _this$props.onSelect,
106 eventKey = _this$props.eventKey;
107
108 if (!href || disabled) {
109 event.preventDefault();
110 }
111
112 if (disabled) {
113 return;
114 }
115
116 if (onSelect) {
117 onSelect(eventKey, event);
118 }
119 };
120
121 _proto.render = function render() {
122 var _this$props2 = this.props,
123 active = _this$props2.active,
124 disabled = _this$props2.disabled,
125 divider = _this$props2.divider,
126 header = _this$props2.header,
127 onClick = _this$props2.onClick,
128 className = _this$props2.className,
129 style = _this$props2.style,
130 props = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["active", "disabled", "divider", "header", "onClick", "className", "style"]);
131
132 var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['eventKey', 'onSelect']),
133 bsProps = _splitBsPropsAndOmit[0],
134 elementProps = _splitBsPropsAndOmit[1];
135
136 if (divider) {
137 // Forcibly blank out the children; separators shouldn't render any.
138 elementProps.children = undefined;
139 return _react.default.createElement("li", (0, _extends2.default)({}, elementProps, {
140 role: "separator",
141 className: (0, _classnames.default)(className, 'divider'),
142 style: style
143 }));
144 }
145
146 if (header) {
147 return _react.default.createElement("li", (0, _extends2.default)({}, elementProps, {
148 role: "heading",
149 className: (0, _classnames.default)(className, (0, _bootstrapUtils.prefix)(bsProps, 'header')),
150 style: style
151 }));
152 }
153
154 return _react.default.createElement("li", {
155 role: "presentation",
156 className: (0, _classnames.default)(className, {
157 active: active,
158 disabled: disabled
159 }),
160 style: style
161 }, _react.default.createElement(_SafeAnchor.default, (0, _extends2.default)({}, elementProps, {
162 role: "menuitem",
163 tabIndex: "-1",
164 onClick: (0, _createChainedFunction.default)(onClick, this.handleClick)
165 })));
166 };
167
168 return MenuItem;
169}(_react.default.Component);
170
171MenuItem.propTypes = propTypes;
172MenuItem.defaultProps = defaultProps;
173
174var _default = (0, _bootstrapUtils.bsClass)('dropdown', MenuItem);
175
176exports.default = _default;
177module.exports = exports["default"];
\No newline at end of file