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 '@/Components/Icon' import { Switch } from '@/Components/Switch' import { useCloseOnBlur } from '@/Hooks/useCloseOnBlur' import { useFilePreviewModal } from '@/Components/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 ? ( ) : ( )}
)}
) }