diff --git a/packages/core-browser/src/components/actions/index.tsx b/packages/core-browser/src/components/actions/index.tsx index 36386ad267..0c3d1e9047 100644 --- a/packages/core-browser/src/components/actions/index.tsx +++ b/packages/core-browser/src/components/actions/index.tsx @@ -1,5 +1,5 @@ import clsx from 'classnames'; -import React, { useCallback } from 'react'; +import React, { useCallback, useEffect } from 'react'; import { Button, CheckBox, Icon } from '@opensumi/ide-components'; import { ClickParam, Menu } from '@opensumi/ide-components/lib/menu'; @@ -16,6 +16,8 @@ import { SubmenuItemNode, IMenuAction, ComponentMenuItemNode, + AbstractMenuService, + generateMergedCtxMenu, } from '../../menu/next'; import { useInjectable } from '../../react-hooks'; import { useMenus, useContextMenus } from '../../utils'; @@ -351,8 +353,8 @@ export const TitleActionList: React.FC< regroup = (...args: [MenuNode[], MenuNode[]]) => args, }) => { const ctxMenuRenderer = useInjectable(ICtxMenuRenderer); + const abstractMenuService = useInjectable(AbstractMenuService); const [primary, secondary] = regroup(nav, more); - const handleShowMore = React.useCallback( (e: React.MouseEvent) => { e.preventDefault(); @@ -391,6 +393,14 @@ export const TitleActionList: React.FC< ); } + if (item.id === SubmenuItemNode.ID) { + const menus = abstractMenuService.createMenu((item as SubmenuItemNode).submenuId); + const hasSubMenu = generateMergedCtxMenu({ menus }).length > 0; + if (!hasSubMenu) { + return; + } + } + // submenu 使用 submenu-id 作为 id 唯一值 const id = item.id === SubmenuItemNode.ID ? (item as SubmenuItemNode).submenuId : item.id; return (