UNPKG

2.34 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 SelectableContext, { makeEventKey } from './SelectableContext';
7import { useBootstrapPrefix } from './ThemeProvider';
8import NavContext from './NavContext';
9import SafeAnchor from './SafeAnchor';
10var defaultProps = {
11 as: SafeAnchor,
12 disabled: false
13};
14var DropdownItem = /*#__PURE__*/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; // TODO: Restrict eventKey to string in v5?
33
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