import { FOCUSABLE_BUT_NOT_TABBABLE } from '@/constants'; import { calculateSubmenuStyle, SubmenuStyle, } from '@/utils/calculateSubmenuStyle'; import { Disclosure, DisclosureButton, DisclosurePanel, } from '@reach/disclosure'; import { FunctionComponent } from 'preact'; import { StateUpdater, useCallback, useEffect, useRef, useState, } from 'preact/hooks'; import { Icon } from '../Icon'; import { Switch } from '../Switch'; import { useCloseOnBlur } from '../utils'; import { useFilePreviewModal } from '../Files/FilePreviewModalProvider'; import { PopoverFileItemProps } from './PopoverFileItem'; import { PopoverFileItemActionType } from './PopoverFileItemAction'; type Props = Omit & { setIsRenamingFile: StateUpdater; }; export const PopoverFileSubmenu: FunctionComponent = ({ file, isAttachedToNote, handleFileAction, setIsRenamingFile, }) => { const filePreviewModal = useFilePreviewModal(); const menuContainerRef = useRef(null); const menuButtonRef = useRef(null); const menuRef = useRef(null); const [isMenuOpen, setIsMenuOpen] = useState(false); const [isFileProtected, setIsFileProtected] = useState(file.protected); const [menuStyle, setMenuStyle] = useState({ right: 0, bottom: 0, maxHeight: 'auto', }); const [closeOnBlur] = useCloseOnBlur(menuContainerRef, setIsMenuOpen); const closeMenu = () => { setIsMenuOpen(false); }; const toggleMenu = () => { if (!isMenuOpen) { const menuPosition = calculateSubmenuStyle(menuButtonRef.current); if (menuPosition) { setMenuStyle(menuPosition); } } setIsMenuOpen(!isMenuOpen); }; const recalculateMenuStyle = useCallback(() => { const newMenuPosition = calculateSubmenuStyle( menuButtonRef.current, menuRef.current ); if (newMenuPosition) { setMenuStyle(newMenuPosition); } }, []); useEffect(() => { if (isMenuOpen) { setTimeout(() => { recalculateMenuStyle(); }); } }, [isMenuOpen, recalculateMenuStyle]); return (
{isMenuOpen && ( <> {isAttachedToNote ? ( ) : ( )}
)}
); };