in packages/eui/src/components/context_menu/context_menu_panel.tsx [414:486]
render() {
const {
stylesMemoizer,
children,
className,
onClose,
title,
onHeightChange,
transitionType,
transitionDirection,
onTransitionComplete,
onUseKeyboardToNavigate,
items,
initialFocusedItemIndex,
showNextPanel,
showPreviousPanel,
size,
...rest
} = this.props;
const classes = classNames('euiContextMenuPanel', className);
const styles = stylesMemoizer(euiContextMenuPanelStyles);
const cssStyles = [
styles.euiContextMenuPanel,
transitionDirection &&
transitionType &&
styles[transitionDirection][transitionType],
];
const panelTitle = title && (
<EuiContextMenuItem
css={styles.euiContextMenuPanel__title}
className="euiContextMenuPanel__title"
onClick={onClose}
buttonRef={(node: HTMLButtonElement) => {
if (onClose) this.backButton = node;
}}
data-test-subj={
onClose ? 'contextMenuPanelTitleButton' : 'contextMenuPanelTitle'
}
icon={onClose && 'arrowLeft'}
>
{title}
</EuiContextMenuItem>
);
const content =
items && items.length
? items.map((MenuItem) => {
const cloneProps: Partial<EuiContextMenuItemProps> = {};
if (size) {
cloneProps.size = size;
}
return MenuItem.type === EuiContextMenuItem
? cloneElement(MenuItem, cloneProps)
: MenuItem;
})
: children;
return (
<div
ref={this.panelRef}
css={cssStyles}
className={classes}
onKeyDown={this.onKeyDown}
tabIndex={-1}
onAnimationEnd={this.onTransitionComplete}
{...rest}
>
{panelTitle}
<EuiResizeObserver onResize={() => this.updateHeight()}>