mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
feat(core-dialogs): CB-2097 add menu state ref
This commit is contained in:
@@ -24,12 +24,15 @@ import type {
|
||||
import { MenuPanelItem } from './MenuPanelItem';
|
||||
import { menuPanelStyles } from './menuPanelStyles';
|
||||
|
||||
export type MenuState = MenuStateReturn;
|
||||
|
||||
/**
|
||||
* MenuTrigger
|
||||
*/
|
||||
|
||||
interface IMenuTriggerBaseProps extends Omit<ButtonHTMLAttributes<any>, 'style'> {
|
||||
style?: ComponentStyle;
|
||||
menuRef?: React.RefObject<MenuState | undefined>;
|
||||
disclosure?: boolean;
|
||||
placement?: MenuInitialState['placement'];
|
||||
modal?: boolean;
|
||||
@@ -50,6 +53,7 @@ interface IMenuTriggerProps extends IMenuTriggerBaseProps {
|
||||
|
||||
export const MenuTrigger = React.forwardRef<ButtonHTMLAttributes<any>, IMenuTriggerProps | IMenuTriggerLazyProps>(function MenuTrigger({
|
||||
panel,
|
||||
menuRef,
|
||||
getPanel,
|
||||
disclosure,
|
||||
children,
|
||||
@@ -65,6 +69,11 @@ export const MenuTrigger = React.forwardRef<ButtonHTMLAttributes<any>, 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]);
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user