UNPKG

2.13 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3import classNames from 'classnames';
4import React, { useContext } from 'react';
5import useEventCallback from '@restart/hooks/useEventCallback';
6import SafeAnchor from './SafeAnchor';
7import SelectableContext, { makeEventKey } from './SelectableContext';
8import { useBootstrapPrefix } from './ThemeProvider';
9import NavContext from './NavContext';
10var defaultProps = {
11 as: SafeAnchor,
12 disabled: false
13};
14var DropdownItem = React.forwardRef(function (_ref, ref) {
15 var bsPrefix = _ref.bsPrefix,
16 className = _ref.className,
17 children = _ref.children,
18 eventKey = _ref.eventKey,
19 disabled = _ref.disabled,
20 href = _ref.href,
21 onClick = _ref.onClick,
22 onSelect = _ref.onSelect,
23 propActive = _ref.active,
24 Component = _ref.as,
25 props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "children", "eventKey", "disabled", "href", "onClick", "onSelect", "active", "as"]);
26
27 var prefix = useBootstrapPrefix(bsPrefix, 'dropdown-item');
28 var onSelectCtx = useContext(SelectableContext);
29 var navContext = useContext(NavContext);
30
31 var _ref2 = navContext || {},
32 activeKey = _ref2.activeKey;
33
34 var key = makeEventKey(eventKey, href);
35 var active = propActive == null && key != null ? makeEventKey(activeKey) === key : propActive;
36 var handleClick = useEventCallback(function (event) {
37 // SafeAnchor handles the disabled case, but we handle it here
38 // for other components
39 if (disabled) return;
40 if (onClick) onClick(event);
41 if (onSelectCtx) onSelectCtx(key, event);
42 if (onSelect) onSelect(key, event);
43 });
44 return React.createElement(Component, _extends({}, props, {
45 ref: ref,
46 href: href,
47 disabled: disabled,
48 className: classNames(className, prefix, active && 'active', disabled && 'disabled'),
49 onClick: handleClick
50 }), children);
51});
52DropdownItem.displayName = 'DropdownItem';
53DropdownItem.defaultProps = defaultProps;
54export default DropdownItem;
\No newline at end of file