diff --git a/apps/web/src/components/affine/pinboard/pinboard-render/OperationButton.tsx b/apps/web/src/components/affine/pinboard/pinboard-render/OperationButton.tsx index 0a97b4c385..b15b5880dd 100644 --- a/apps/web/src/components/affine/pinboard/pinboard-render/OperationButton.tsx +++ b/apps/web/src/components/affine/pinboard/pinboard-render/OperationButton.tsx @@ -8,7 +8,7 @@ import { } from '@blocksuite/icons'; import type { PageMeta } from '@blocksuite/store'; import { useTheme } from '@mui/material'; -import { useMemo, useState } from 'react'; +import { useMemo, useRef, useState } from 'react'; import { useMetaHelper } from '../../../../hooks/affine/use-meta-helper'; import type { BlockSuiteWorkspace } from '../../../../shared'; @@ -44,6 +44,7 @@ export const OperationButton = ({ } = useTheme(); const { t } = useTranslation(); + const timer = useRef>(); const [anchorEl, setAnchorEl] = useState(null); const [operationMenuOpen, setOperationMenuOpen] = useState(false); const [pinboardMenuOpen, setPinboardMenuOpen] = useState(false); @@ -58,7 +59,20 @@ export const OperationButton = ({ setPinboardMenuOpen(false); }} > -
+
{ + e.stopPropagation(); + }} + onMouseLeave={() => { + timer.current = setTimeout(() => { + setOperationMenuOpen(false); + setPinboardMenuOpen(false); + }, 150); + }} + onMouseEnter={() => { + clearTimeout(timer.current); + }} + > setAnchorEl(ref)}