duanfuxiang 0c7ee142cb init
2025-01-05 11:51:39 +08:00

35 lines
1.0 KiB
TypeScript

import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
import { DRAG_DROP_PASTE } from '@lexical/rich-text'
import { COMMAND_PRIORITY_LOW } from 'lexical'
import { useEffect } from 'react'
import { MentionableImage } from '../../../../../types/mentionable'
import { fileToMentionableImage } from '../../../../../utils/image'
export default function DragDropPaste({
onCreateImageMentionables,
}: {
onCreateImageMentionables?: (mentionables: MentionableImage[]) => void
}): null {
const [editor] = useLexicalComposerContext()
useEffect(() => {
return editor.registerCommand(
DRAG_DROP_PASTE, // dispatched in RichTextPlugin
(files) => {
; (async () => {
const images = files.filter((file) => file.type.startsWith('image/'))
const mentionableImages = await Promise.all(
images.map(async (image) => await fileToMentionableImage(image)),
)
onCreateImageMentionables?.(mentionableImages)
})()
return true
},
COMMAND_PRIORITY_LOW,
)
}, [editor, onCreateImageMentionables])
return null
}