import { ElementIds } from '@/Constants/ElementIDs' import { observer } from 'mobx-react-lite' import { ChangeEventHandler, useCallback, useEffect, useRef, useState } from 'react' import FileOptionsPanel from '@/Components/FileContextMenu/FileOptionsPanel' import FilePreview from '@/Components/FilePreview/FilePreview' import { FileViewProps } from './FileViewProps' import MobileItemsListButton from '../NoteGroupView/MobileItemsListButton' import LinkedItemsButton from '../LinkedItems/LinkedItemsButton' import LinkedItemBubblesContainer from '../LinkedItems/LinkedItemBubblesContainer' import Popover from '../Popover/Popover' import FilePreviewInfoPanel from '../FilePreview/FilePreviewInfoPanel' import { useFileDragNDrop } from '../FileDragNDropProvider' import RoundIconButton from '../Button/RoundIconButton' const SyncTimeoutNoDebounceMs = 100 const SyncTimeoutDebounceMs = 350 const FileViewWithoutProtection = ({ application, viewControllerManager, file }: FileViewProps) => { const syncTimeoutRef = useRef() const fileInfoButtonRef = useRef(null) const [isFileInfoPanelOpen, setIsFileInfoPanelOpen] = useState(false) const toggleFileInfoPanel = () => { setIsFileInfoPanelOpen((show) => !show) } const onTitleChange: ChangeEventHandler = useCallback( async (event) => { if (syncTimeoutRef.current) { clearTimeout(syncTimeoutRef.current) } const shouldNotDebounce = application.noAccount() const syncDebounceMs = shouldNotDebounce ? SyncTimeoutNoDebounceMs : SyncTimeoutDebounceMs syncTimeoutRef.current = window.setTimeout(async () => { await application.items.renameFile(file, event.target.value) void application.sync.sync() }, syncDebounceMs) }, [application, file], ) const fileDragTargetRef = useRef(null) const { addDragTarget, removeDragTarget } = useFileDragNDrop() useEffect(() => { const target = fileDragTargetRef.current if (target) { addDragTarget(target, { tooltipText: 'Drop your files to upload and link them to the current file', async callback(uploadedFile) { await viewControllerManager.linkingController.linkItems(uploadedFile, file) }, }) } return () => { if (target) { removeDragTarget(target) } } }, [addDragTarget, file, removeDragTarget, viewControllerManager.linkingController]) return (
{ event.target.select() }} spellCheck={false} defaultValue={file.name} autoComplete="off" />
) } export default observer(FileViewWithoutProtection)