80 lines
3.0 KiB
TypeScript
80 lines
3.0 KiB
TypeScript
import { ElementIds } from '@/Constants/ElementIDs'
|
|
import { observer } from 'mobx-react-lite'
|
|
import { ChangeEventHandler, FormEventHandler, useCallback, useEffect, useState } from 'react'
|
|
import AttachedFilesButton from '@/Components/AttachedFilesPopover/AttachedFilesButton'
|
|
import FileOptionsPanel from '@/Components/FileContextMenu/FileOptionsPanel'
|
|
import FilePreview from '@/Components/FilePreview/FilePreview'
|
|
import { FileViewProps } from './FileViewProps'
|
|
|
|
const FileViewWithoutProtection = ({ application, viewControllerManager, file }: FileViewProps) => {
|
|
const [name, setName] = useState(file.name)
|
|
|
|
useEffect(() => {
|
|
setName(file.name)
|
|
}, [file.name])
|
|
|
|
const onTitleChange: ChangeEventHandler<HTMLInputElement> = useCallback(async (event) => {
|
|
setName(event.target.value)
|
|
}, [])
|
|
|
|
const onFormSubmit: FormEventHandler = useCallback(
|
|
async (event) => {
|
|
event.preventDefault()
|
|
|
|
await application.items.renameFile(file, name)
|
|
|
|
void application.sync.sync()
|
|
},
|
|
[application.items, application.sync, file, name],
|
|
)
|
|
|
|
return (
|
|
<div className="sn-component section editor" aria-label="File">
|
|
<div className="flex flex-col">
|
|
<div
|
|
className="content-title-bar section-title-bar section-title-bar z-editor-title-bar w-full"
|
|
id="file-title-bar"
|
|
>
|
|
<div className="flex h-8 items-center justify-between">
|
|
<div className="flex-grow">
|
|
<form onSubmit={onFormSubmit} className="title overflow-auto">
|
|
<input
|
|
className="input text-lg"
|
|
id={ElementIds.FileTitleEditor}
|
|
onChange={onTitleChange}
|
|
onFocus={(event) => {
|
|
event.target.select()
|
|
}}
|
|
spellCheck={false}
|
|
value={name}
|
|
autoComplete="off"
|
|
/>
|
|
</form>
|
|
</div>
|
|
<div className="flex items-center">
|
|
<div className="mr-3">
|
|
<AttachedFilesButton
|
|
application={application}
|
|
featuresController={viewControllerManager.featuresController}
|
|
filePreviewModalController={viewControllerManager.filePreviewModalController}
|
|
filesController={viewControllerManager.filesController}
|
|
navigationController={viewControllerManager.navigationController}
|
|
notesController={viewControllerManager.notesController}
|
|
selectionController={viewControllerManager.selectionController}
|
|
/>
|
|
</div>
|
|
<FileOptionsPanel
|
|
filesController={viewControllerManager.filesController}
|
|
selectionController={viewControllerManager.selectionController}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<FilePreview file={file} application={application} key={file.uuid} />
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default observer(FileViewWithoutProtection)
|