UNPKG

2.7 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3var _excluded = ["active", "className", "eventKey", "onSelect", "onClick", "as"];
4import classNames from 'classnames';
5import React, { useContext } from 'react';
6import useEventCallback from '@restart/hooks/useEventCallback';
7import warning from 'warning';
8import NavContext from './NavContext';
9import SelectableContext, { makeEventKey } from './SelectableContext';
10var defaultProps = {
11 disabled: false
12};
13var AbstractNavItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
14 var active = _ref.active,
15 className = _ref.className,
16 eventKey = _ref.eventKey,
17 onSelect = _ref.onSelect,
18 onClick = _ref.onClick,
19 Component = _ref.as,
20 props = _objectWithoutPropertiesLoose(_ref, _excluded);
21
22 var navKey = makeEventKey(eventKey, props.href);
23 var parentOnSelect = useContext(SelectableContext);
24 var navContext = useContext(NavContext);
25 var isActive = active;
26
27 if (navContext) {
28 if (!props.role && navContext.role === 'tablist') props.role = 'tab';
29 var contextControllerId = navContext.getControllerId(navKey);
30 var contextControlledId = navContext.getControlledId(navKey);
31 process.env.NODE_ENV !== "production" ? warning(!contextControllerId || !props.id, "[react-bootstrap] The provided id '" + props.id + "' was overwritten by the current navContext with '" + contextControllerId + "'.") : void 0;
32 process.env.NODE_ENV !== "production" ? warning(!contextControlledId || !props['aria-controls'], "[react-bootstrap] The provided aria-controls value '" + props['aria-controls'] + "' was overwritten by the current navContext with '" + contextControlledId + "'.") : void 0;
33 props['data-rb-event-key'] = navKey;
34 props.id = contextControllerId || props.id;
35 props['aria-controls'] = contextControlledId || props['aria-controls'];
36 isActive = active == null && navKey != null ? navContext.activeKey === navKey : active;
37 }
38
39 if (props.role === 'tab') {
40 if (props.disabled) {
41 props.tabIndex = -1;
42 props['aria-disabled'] = true;
43 }
44
45 props['aria-selected'] = isActive;
46 }
47
48 var handleOnclick = useEventCallback(function (e) {
49 if (onClick) onClick(e);
50 if (navKey == null) return;
51 if (onSelect) onSelect(navKey, e);
52 if (parentOnSelect) parentOnSelect(navKey, e);
53 });
54 return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
55 ref: ref,
56 onClick: handleOnclick,
57 className: classNames(className, isActive && 'active')
58 }));
59});
60AbstractNavItem.defaultProps = defaultProps;
61export default AbstractNavItem;
\No newline at end of file