in packages/eui/src/components/context_menu/context_menu.tsx [330:371]
renderItems(items: EuiContextMenuPanelItemDescriptor[] = []) {
return items.map((item, index) => {
if (item.renderItem) {
return <Fragment key={item.key ?? index}>{item.renderItem()}</Fragment>;
}
if (isItemSeparator(item)) {
const { isSeparator: omit, key = index, ...rest } = item;
return <EuiHorizontalRule key={key} margin="none" {...rest} />;
}
const { panel, name, key, icon, onClick, ...rest } = item;
const onClickHandler = panel
? (event: React.MouseEvent) => {
if (onClick && event) {
event.persist();
}
// This component is commonly wrapped in a EuiOutsideClickDetector, which means we'll
// need to wait for that logic to complete before re-rendering the DOM via showPanel.
window.requestAnimationFrame(() => {
if (onClick) {
onClick(event);
}
this.showNextPanel(index);
});
}
: onClick;
return (
<EuiContextMenuItem
key={key || (typeof name === 'string' ? name : undefined) || index}
icon={icon}
onClick={onClickHandler}
hasPanel={Boolean(panel)}
{...rest}
>
{name}
</EuiContextMenuItem>
);
});
}