diff --git a/packages/maskbook/src/plugins/Trader/SNSAdaptor/trader/FootnoteMenu.tsx b/packages/maskbook/src/plugins/Trader/SNSAdaptor/trader/FootnoteMenu.tsx index 438505583880..2ce88adacbc8 100644 --- a/packages/maskbook/src/plugins/Trader/SNSAdaptor/trader/FootnoteMenu.tsx +++ b/packages/maskbook/src/plugins/Trader/SNSAdaptor/trader/FootnoteMenu.tsx @@ -1,7 +1,6 @@ -import { useState } from 'react' import { Typography, MenuItem, Link } from '@material-ui/core' import { makeStyles } from '@masknet/theme' -import { ShadowRootMenu } from '../../../../utils/shadow-root/ShadowRootComponents' +import { useMenu } from '../../../../utils' const useStyles = makeStyles()((theme) => ({ link: { @@ -31,29 +30,37 @@ export function FootnoteMenu(props: FootnoteMenuProps) { const { children, options, selectedIndex = -1, onChange } = props const { classes } = useStyles() - const [anchorEl, setAnchorEl] = useState(null) - const onOpen = (event: React.MouseEvent) => setAnchorEl(event.currentTarget) const onSelect = (option: FootnoteMenuOption) => { onChange?.(option) - onClose() } - const onClose = () => setAnchorEl(null) + const [menu, openMenu] = useMenu( + options.map((x, i) => ( + onSelect(x)}> + {x.name} + + )), + false, + { + anchorOrigin: { + vertical: 'top', + horizontal: 'left', + }, + transformOrigin: { + vertical: 'bottom', + horizontal: 'left', + }, + }, + ) return ( <> - + {options[selectedIndex]?.name} {children} - - {options.map((x, i) => ( - onSelect(x)}> - {x.name} - - ))} - + {menu} ) } diff --git a/packages/maskbook/src/utils/hooks/useMenu.tsx b/packages/maskbook/src/utils/hooks/useMenu.tsx index d343e5488340..44424258085d 100644 --- a/packages/maskbook/src/utils/hooks/useMenu.tsx +++ b/packages/maskbook/src/utils/hooks/useMenu.tsx @@ -1,5 +1,5 @@ import { SyntheticEvent, cloneElement, isValidElement, useCallback, useState, createElement } from 'react' -import { Menu } from '@material-ui/core' +import { Menu, PopoverOrigin } from '@material-ui/core' import type { MenuListProps, PaperProps } from '@material-ui/core' import { ShadowRootMenu } from '../shadow-root/ShadowRootComponents' import { useUpdate } from 'react-use' @@ -7,6 +7,8 @@ import { useUpdate } from 'react-use' interface MenuProps { paperProps?: PaperProps menuListProps?: MenuListProps + anchorOrigin?: PopoverOrigin + transformOrigin?: PopoverOrigin } /** @@ -36,6 +38,9 @@ export function useMenu( anchorEl, onClose: close, onClick: close, + + anchorOrigin: props?.anchorOrigin, + transformOrigin: props?.transformOrigin, }, elements?.map((element, key) => isValidElement(element) ? cloneElement(element, { ...element.props, key }) : element,