renderItems()

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>
      );
    });
  }