Merge pull request 'allow upload of files using drag and drop' (#670) from fernandoporazzi/snort:drag-and-drop-images into main

Reviewed-on: Kieran/snort#670
This commit is contained in:
Kieran 2023-11-09 09:41:12 +00:00
commit 9016d21eaa
2 changed files with 25 additions and 1 deletions

View File

@ -12,7 +12,7 @@ import ProfileImage from "Element/User/ProfileImage";
import useFileUpload from "Upload"; import useFileUpload from "Upload";
import Note from "Element/Event/Note"; import Note from "Element/Event/Note";
import { ClipboardEventHandler } from "react"; import { ClipboardEventHandler, DragEvent } from "react";
import useLogin from "Hooks/useLogin"; import useLogin from "Hooks/useLogin";
import { GetPowWorker } from "index"; import { GetPowWorker } from "index";
import AsyncButton from "Element/AsyncButton"; import AsyncButton from "Element/AsyncButton";
@ -505,6 +505,24 @@ export function NoteCreator() {
} }
}; };
const handleDragOver = (event: DragEvent<HTMLTextAreaElement>) => {
event.preventDefault();
};
const handleDragLeave = (event: DragEvent<HTMLTextAreaElement>) => {
event.preventDefault();
};
const handleDrop = (event: DragEvent<HTMLTextAreaElement>) => {
event.preventDefault();
const droppedFiles = Array.from(event.dataTransfer.files);
droppedFiles.forEach(async file => {
await uploadFile(file);
})
};
function noteCreatorForm() { function noteCreatorForm() {
return ( return (
<> <>
@ -550,6 +568,9 @@ export function NoteCreator() {
{!note.preview && ( {!note.preview && (
<div onPaste={handlePaste} className={classNames("note-creator", { poll: Boolean(note.pollOptions) })}> <div onPaste={handlePaste} className={classNames("note-creator", { poll: Boolean(note.pollOptions) })}>
<Textarea <Textarea
onDragOver={handleDragOver}
onDragLeave={handleDragLeave}
onDrop={handleDrop}
autoFocus autoFocus
className={classNames("textarea", { "textarea--focused": note.active })} className={classNames("textarea", { "textarea--focused": note.active })}
onChange={c => onChange(c)} onChange={c => onChange(c)}

View File

@ -51,6 +51,9 @@ interface TextareaProps {
value: string; value: string;
onFocus(): void; onFocus(): void;
onKeyDown(ev: React.KeyboardEvent<HTMLTextAreaElement>): void; onKeyDown(ev: React.KeyboardEvent<HTMLTextAreaElement>): void;
onDragOver?(ev: React.DragEvent<HTMLTextAreaElement>): void;
onDragLeave?(ev: React.DragEvent<HTMLTextAreaElement>): void;
onDrop?(ev: React.DragEvent<HTMLTextAreaElement>): void;
} }
const Textarea = (props: TextareaProps) => { const Textarea = (props: TextareaProps) => {