File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -92,11 +92,21 @@ export default function Home() {
9292 setDarkMode ( ! darkMode ) ;
9393 }
9494
95- function handleFileUpload ( e ) {
96- var uploadedFile = e . target . files [ 0 ] ;
97- if ( / \. ( j p e ? g | p n g ) $ / i. test ( uploadedFile . name ) === true ) {
95+ function handleFileUpload ( event ) {
96+ const uploadedFile = event . target . files [ 0 ] ;
97+ setNewFile ( uploadedFile ) ;
98+ }
99+
100+ function handleFileDrop ( event ) {
101+ event . preventDefault ( ) ;
102+ const droppedFiles = event . dataTransfer . files ;
103+ setNewFile ( droppedFiles [ 0 ] ) ;
104+ } ;
105+
106+ function setNewFile ( file ) {
107+ if ( / \. ( j p e ? g | p n g ) $ / i. test ( file . name ) === true ) {
98108 setFileIsValid ( true ) ;
99- setFile ( URL . createObjectURL ( uploadedFile ) ) ;
109+ setFile ( URL . createObjectURL ( file ) ) ;
100110 } else {
101111 setFileIsValid ( false ) ;
102112 }
@@ -144,7 +154,7 @@ export default function Home() {
144154 </ nav >
145155
146156 < main id = "main" className = "flex justify-center items-center py-6" >
147- { file == null ? < UploadArea fileIsValid = { fileIsValid } onFileUpload = { handleFileUpload } > </ UploadArea > :
157+ { file == null ? < UploadArea fileIsValid = { fileIsValid } onFileUpload = { handleFileUpload } onFileDrop = { handleFileDrop } > </ UploadArea > :
148158 < ImageCanvas file = { file } imageFilters = { imageFilters } gridMode = { gridMode } > </ ImageCanvas > }
149159 </ main >
150160 </ div >
Original file line number Diff line number Diff line change @@ -3,9 +3,10 @@ import {
33 UploadIcon ,
44} from "@radix-ui/react-icons" ;
55
6- export default function UploadArea ( { fileIsValid, onFileUpload } ) {
6+ export default function UploadArea ( { fileIsValid, onFileUpload, onFileDrop } ) {
77 return (
8- < div id = "uploadArea" className = "flex justify-center px-5 mx-5 transition duration-300 ease-in-out cursor-pointer group bg-foreground/15 hover:bg-foreground/10 dark:bg-foreground dark:hover:bg-foreground/90 outline-dashed outline-gray dark:outline-gray/30 dark:hover:outline-gray/40 outline-2 outline-offset-2" >
8+ < div id = "uploadArea" onDrop = { ( event ) => onFileDrop ( event ) }
9+ onDragOver = { ( event ) => event . preventDefault ( ) } className = "flex justify-center px-5 mx-5 transition duration-300 ease-in-out cursor-pointer group bg-foreground/15 hover:bg-foreground/10 dark:bg-foreground dark:hover:bg-foreground/90 outline-dashed outline-gray dark:outline-gray/30 dark:hover:outline-gray/40 outline-2 outline-offset-2" >
910 < label htmlFor = "dropzone" className = "flex flex-col justify-center text-center cursor-pointer" >
1011 < UploadIcon className = "mx-auto w-12 h-12 transition duration-300 ease-in-out rotate-3 group-hover:rotate-0 text-foreground/50 dark:text-gray" > </ UploadIcon >
1112 < h2 className = "mt-4 text-2xl font-bold text-foreground/50 dark:text-gray" > Click to upload or drag and drop</ h2 >
You can’t perform that action at this time.
0 commit comments