diff --git a/webapp/packages/core-dialogs/src/Menu/MenuPanel/MenuTrigger.tsx b/webapp/packages/core-dialogs/src/Menu/MenuPanel/MenuTrigger.tsx index e2aed4eb14..9dee3055fd 100644 --- a/webapp/packages/core-dialogs/src/Menu/MenuPanel/MenuTrigger.tsx +++ b/webapp/packages/core-dialogs/src/Menu/MenuPanel/MenuTrigger.tsx @@ -24,12 +24,15 @@ import type { import { MenuPanelItem } from './MenuPanelItem'; import { menuPanelStyles } from './menuPanelStyles'; +export type MenuState = MenuStateReturn; + /** * MenuTrigger */ interface IMenuTriggerBaseProps extends Omit, 'style'> { style?: ComponentStyle; + menuRef?: React.RefObject; disclosure?: boolean; placement?: MenuInitialState['placement']; modal?: boolean; @@ -50,6 +53,7 @@ interface IMenuTriggerProps extends IMenuTriggerBaseProps { export const MenuTrigger = React.forwardRef, IMenuTriggerProps | IMenuTriggerLazyProps>(function MenuTrigger({ panel, + menuRef, getPanel, disclosure, children, @@ -65,6 +69,11 @@ export const MenuTrigger = React.forwardRef, IMenuTrig const menu = useMenuState({ modal, placement, visible, rtl }); const styles = useStyles(menuPanelStyles, style); + if (menuRef) { + //@ts-expect-error ref mutation + menuRef.current = menu; + } + const handleItemClose = useCallback(() => { menu.hide(); }, [menu.hide]); diff --git a/webapp/packages/core-dialogs/src/index.ts b/webapp/packages/core-dialogs/src/index.ts index 31fbecb4c9..3f18b9d6e3 100644 --- a/webapp/packages/core-dialogs/src/index.ts +++ b/webapp/packages/core-dialogs/src/index.ts @@ -6,7 +6,7 @@ export * from './CommonDialog/RenameDialog'; export * from './CommonDialog/DialogsPortal'; export * from './Menu/IMenuPanel'; -export { MenuTrigger } from './Menu/MenuPanel/MenuTrigger'; +export { MenuTrigger, type MenuState } from './Menu/MenuPanel/MenuTrigger'; export * from './Menu/StaticMenu/StaticMenu'; export * from './Menu/models/ComputedContextMenuModel';