import { FOCUSABLE_BUT_NOT_TABBABLE } from '@/Constants/Constants' import { KeyboardKey } from '@/Services/IOService' import { formatSizeToReadableString } from '@standardnotes/filepicker' import { FileItem } from '@standardnotes/snjs' import { FormEventHandler, FunctionComponent, KeyboardEventHandler, useCallback, useEffect, useRef, useState, } from 'react' import Icon from '@/Components/Icon/Icon' import { PopoverFileItemActionType } from './PopoverFileItemAction' import PopoverFileSubmenu from './PopoverFileSubmenu' import { getFileIconComponent } from './getFileIconComponent' import { PopoverFileItemProps } from './PopoverFileItemProps' const PopoverFileItem: FunctionComponent = ({ file, isAttachedToNote, handleFileAction, getIconType, closeOnBlur, previewHandler, }) => { const [fileName, setFileName] = useState(file.name) const [isRenamingFile, setIsRenamingFile] = useState(false) const itemRef = useRef(null) const fileNameInputRef = useRef(null) useEffect(() => { if (isRenamingFile) { fileNameInputRef.current?.focus() } }, [isRenamingFile]) const renameFile = useCallback( async (file: FileItem, name: string) => { if (name.length < 1) { return } await handleFileAction({ type: PopoverFileItemActionType.RenameFile, payload: { file, name, }, }) setIsRenamingFile(false) }, [handleFileAction], ) const handleFileNameInput: FormEventHandler = useCallback((event) => { setFileName((event.target as HTMLInputElement).value) }, []) const handleFileNameInputKeyDown: KeyboardEventHandler = useCallback( (event) => { if (fileName.length > 0 && event.key === KeyboardKey.Enter) { itemRef.current?.focus() } }, [fileName.length], ) const handleFileNameInputBlur = useCallback(() => { renameFile(file, fileName).catch(console.error) }, [file, fileName, renameFile]) const handleClick = useCallback(() => { if (isRenamingFile) { return } previewHandler(file) }, [file, isRenamingFile, previewHandler]) return (
{getFileIconComponent(getIconType(file.mimeType), 'w-8 h-8 flex-shrink-0')}
{isRenamingFile ? ( ) : (
{file.name} {file.protected && ( )}
)}
{file.created_at.toLocaleString()} ยท {formatSizeToReadableString(file.decryptedSize)}
) } export default PopoverFileItem