Spaces:
Running
on
Zero
Running
on
Zero
/** | |
* Copyright (c) Meta Platforms, Inc. and affiliates. | |
* | |
* This source code is licensed under the Chameleon License found in the | |
* LICENSE file in the root directory of this source tree. | |
* | |
*/ | |
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"; | |
import { DRAG_DROP_PASTE } from "@lexical/rich-text"; | |
import { isMimeType, mediaFileReader } from "@lexical/utils"; | |
import { COMMAND_PRIORITY_LOW } from "lexical"; | |
import { useEffect } from "react"; | |
import { INSERT_IMAGE_COMMAND } from "./ImagesPlugin"; | |
const ACCEPTABLE_IMAGE_TYPES = [ | |
"image/", | |
"image/heic", | |
"image/heif", | |
"image/gif", | |
"image/webp", | |
]; | |
export default function DragDropPaste(): null { | |
const [editor] = useLexicalComposerContext(); | |
useEffect(() => { | |
return editor.registerCommand( | |
DRAG_DROP_PASTE, | |
(files) => { | |
(async () => { | |
const filesResult = await mediaFileReader( | |
files, | |
[ACCEPTABLE_IMAGE_TYPES].flatMap((x) => x), | |
); | |
for (const { file, result } of filesResult) { | |
if (isMimeType(file, ACCEPTABLE_IMAGE_TYPES)) { | |
editor.dispatchCommand(INSERT_IMAGE_COMMAND, { | |
altText: file.name, | |
src: result, | |
}); | |
} | |
} | |
})(); | |
return true; | |
}, | |
COMMAND_PRIORITY_LOW, | |
); | |
}, [editor]); | |
return null; | |
} | |