@wordpress/components
Version:
UI components for WordPress.
80 lines (72 loc) • 1.95 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement } from "@wordpress/element";
/**
* External dependencies
*/
import classnames from 'classnames';
import { noop } from 'lodash';
/**
* WordPress dependencies
*/
import { Icon, chevronLeft, chevronRight } from '@wordpress/icons';
import { isRTL } from '@wordpress/i18n';
/**
* Internal dependencies
*/
import Button from '../../button';
import { useNavigationContext } from '../context';
import { ItemUI } from '../styles/navigation-styles';
import NavigationItemBaseContent from './base-content';
import NavigationItemBase from './base';
export default function NavigationItem(props) {
const {
badge,
children,
className,
href,
item,
navigateToMenu,
onClick = noop,
title,
hideIfTargetMenuEmpty,
isText,
...restProps
} = props;
const {
activeItem,
setActiveMenu,
navigationTree: {
isMenuEmpty
}
} = useNavigationContext(); // If hideIfTargetMenuEmpty prop is true
// And the menu we are supposed to navigate to
// Is marked as empty, then we skip rendering the item
if (hideIfTargetMenuEmpty && navigateToMenu && isMenuEmpty(navigateToMenu)) {
return null;
}
const classes = classnames(className, {
'is-active': item && activeItem === item
});
const onItemClick = event => {
if (navigateToMenu) {
setActiveMenu(navigateToMenu);
}
onClick(event);
};
const icon = isRTL() ? chevronLeft : chevronRight;
const baseProps = isText ? restProps : {
as: Button,
href,
onClick: onItemClick,
...restProps
};
return createElement(NavigationItemBase, _extends({}, props, {
className: classes
}), children || createElement(ItemUI, baseProps, createElement(NavigationItemBaseContent, {
title: title,
badge: badge
}), navigateToMenu && createElement(Icon, {
icon: icon
})));
}
//# sourceMappingURL=index.js.map