import { FunctionComponent, useCallback, useMemo } from 'react' import { PopoverFileItemActionType } from '../AttachedFilesPopover/PopoverFileItemAction' import Icon from '@/Components/Icon/Icon' import { observer } from 'mobx-react-lite' import { FilesController } from '@/Controllers/FilesController' import { SelectedItemsController } from '@/Controllers/SelectedItemsController' import HorizontalSeparator from '../Shared/HorizontalSeparator' import { formatSizeToReadableString } from '@standardnotes/filepicker' import { useResponsiveAppPane } from '../Panes/ResponsivePaneProvider' import { AppPaneId } from '../Panes/AppPaneMetadata' import MenuItem from '../Menu/MenuItem' import { FileContextMenuBackupOption } from './FileContextMenuBackupOption' import MenuSwitchButtonItem from '../Menu/MenuSwitchButtonItem' type Props = { closeMenu: () => void filesController: FilesController selectionController: SelectedItemsController isFileAttachedToNote?: boolean renameToggleCallback?: (isRenamingFile: boolean) => void shouldShowRenameOption: boolean shouldShowAttachOption: boolean } const FileMenuOptions: FunctionComponent = ({ closeMenu, filesController, selectionController, isFileAttachedToNote, renameToggleCallback, shouldShowRenameOption, shouldShowAttachOption, }) => { const { selectedFiles } = selectionController const { handleFileAction } = filesController const { toggleAppPane } = useResponsiveAppPane() const hasProtectedFiles = useMemo(() => selectedFiles.some((file) => file.protected), [selectedFiles]) const hasSelectedMultipleFiles = useMemo(() => selectedFiles.length > 1, [selectedFiles.length]) const totalFileSize = useMemo( () => selectedFiles.map((file) => file.decryptedSize).reduce((prev, next) => prev + next, 0), [selectedFiles], ) const onDetach = useCallback(() => { const file = selectedFiles[0] void handleFileAction({ type: PopoverFileItemActionType.DetachFileToNote, payload: { file }, }) closeMenu() }, [closeMenu, handleFileAction, selectedFiles]) const onAttach = useCallback(() => { const file = selectedFiles[0] void handleFileAction({ type: PopoverFileItemActionType.AttachFileToNote, payload: { file }, }) closeMenu() }, [closeMenu, handleFileAction, selectedFiles]) const closeMenuAndToggleFilesList = useCallback(() => { toggleAppPane(AppPaneId.Items) closeMenu() }, [closeMenu, toggleAppPane]) return ( <> {selectedFiles.length === 1 && ( <> {isFileAttachedToNote ? ( Detach from note ) : shouldShowAttachOption ? ( Attach to note ) : null} )} { void filesController.setProtectionForFiles(hasProtectedFiles, selectionController.selectedFiles) }} > Password protect { void filesController.downloadFiles(selectionController.selectedFiles) }} > Download {shouldShowRenameOption && ( { renameToggleCallback?.(true) }} > Rename )} { closeMenuAndToggleFilesList() void filesController.deleteFilesPermanently(selectionController.selectedFiles) }} > Delete permanently
{!hasSelectedMultipleFiles && (
File ID: {selectedFiles[0].uuid}
)}
{hasSelectedMultipleFiles ? 'Total Size:' : 'Size:'}{' '} {formatSizeToReadableString(totalFileSize)}
) } export default observer(FileMenuOptions)