@wordpress/components
Version:
UI components for WordPress.
91 lines (81 loc) • 2.26 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement } from "@wordpress/element";
/**
* External dependencies
*/
import classnames from 'classnames';
/**
* 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, ItemIconUI } from '../styles/navigation-styles';
import NavigationItemBaseContent from './base-content';
import NavigationItemBase from './base';
const noop = () => {};
export function NavigationItem(props) {
const {
badge,
children,
className,
href,
item,
navigateToMenu,
onClick = noop,
title,
icon,
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 isActive = item && activeItem === item;
const classes = classnames(className, {
'is-active': isActive
});
const onItemClick = event => {
if (navigateToMenu) {
setActiveMenu(navigateToMenu);
}
onClick(event);
};
const navigationIcon = isRTL() ? chevronLeft : chevronRight;
const baseProps = children ? props : { ...props,
onClick: undefined
};
const itemProps = isText ? restProps : {
as: Button,
href,
onClick: onItemClick,
'aria-current': isActive ? 'page' : undefined,
...restProps
};
return createElement(NavigationItemBase, _extends({}, baseProps, {
className: classes
}), children || createElement(ItemUI, itemProps, icon && createElement(ItemIconUI, null, createElement(Icon, {
icon: icon
})), createElement(NavigationItemBaseContent, {
title: title,
badge: badge
}), navigateToMenu && createElement(Icon, {
icon: navigationIcon
})));
}
export default NavigationItem;
//# sourceMappingURL=index.js.map