UNPKG

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