import { MenuItem, MuiClickAwayListener, PureMenu } from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { MoreVerticalIcon, MoveToIcon, PenIcon, PlusIcon, } from '@blocksuite/icons'; import type { PageMeta } from '@blocksuite/store'; import { baseTheme } from '@toeverything/theme'; import { useMemo, useRef, useState } from 'react'; import { useBlockSuiteMetaHelper } from '../../../../hooks/affine/use-block-suite-meta-helper'; import type { BlockSuiteWorkspace } from '../../../../shared'; import { toast } from '../../../../utils'; import { CopyLink, MoveToTrash } from '../../operation-menu-items'; import { PinboardMenu } from '../pinboard-menu/'; import { StyledOperationButton } from '../styles'; export type OperationButtonProps = { isRoot: boolean; onAdd: () => void; onDelete: () => void; metas: PageMeta[]; currentMeta: PageMeta; blockSuiteWorkspace: BlockSuiteWorkspace; visible: boolean; onRename?: () => void; onMenuClose?: () => void; }; export const OperationButton = ({ isRoot, onAdd, onDelete, metas, currentMeta, blockSuiteWorkspace, visible, onMenuClose, onRename, }: OperationButtonProps) => { const t = useAFFiNEI18N(); const timer = useRef>(); const [anchorEl, setAnchorEl] = useState(null); const [operationMenuOpen, setOperationMenuOpen] = useState(false); const [pinboardMenuOpen, setPinboardMenuOpen] = useState(false); const [confirmModalOpen, setConfirmModalOpen] = useState(false); const menuIndex = useMemo(() => parseInt(baseTheme.zIndexModal) + 1, []); const { removeToTrash } = useBlockSuiteMetaHelper(blockSuiteWorkspace); return ( { setOperationMenuOpen(false); setPinboardMenuOpen(false); }} >
{ e.stopPropagation(); }} onMouseLeave={() => { timer.current = setTimeout(() => { setOperationMenuOpen(false); setPinboardMenuOpen(false); }, 150); }} onMouseEnter={() => { clearTimeout(timer.current); }} > setAnchorEl(ref)} size="small" onClick={() => { setOperationMenuOpen(!operationMenuOpen); }} visible={visible} > { onAdd(); setOperationMenuOpen(false); onMenuClose?.(); }} icon={} > {t['Add a subpage inside']()} {!isRoot && ( { setOperationMenuOpen(false); setPinboardMenuOpen(true); }} icon={} > {t['Move to']()} )} {!isRoot && ( { onRename?.(); setOperationMenuOpen(false); onMenuClose?.(); }} icon={} > {t['Rename']()} )} {!isRoot && ( { setOperationMenuOpen(false); setConfirmModalOpen(true); onMenuClose?.(); }} /> )} { toast(t['Moved to Trash']()); removeToTrash(currentMeta.id); onDelete(); }} onCancel={() => { setConfirmModalOpen(false); }} confirmButtonTestId="move-to-trash-confirm" cancelButtonTestId="move-to-trash-cancel" />
); };