/** * Copyright 2022 Design Barn Inc. */ import { Appearance, Size } from '@lottiefiles/react-ui-kit'; import clsx from 'clsx'; import React, { createRef, useEffect, useState } from 'react'; import { JsonIcon } from '../../assets/Icons/json-icon'; import { Button } from '../Button'; // Export interface InputProps extends InputHTMLAttributes {} export interface DragDropProps { bordered?: boolean; handleFileChosen: (value: FileList) => void; onDrag: (value: DragEvent) => void; onDragDrop: (value: FileList) => void; onDragIn: (value: DragEvent) => void; onDragOut: (value: DragEvent) => void; } export const DragDrop: React.FC = (props: DragDropProps) => { const [dragging, setIsDragging] = useState(false); const { bordered, handleFileChosen, onDrag, onDragDrop, onDragIn, onDragOut } = props; const dropRef = createRef(); const inputRef = createRef(); const handleDrag = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); onDrag(e); }; const handleDragIn = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); onDragIn(e); setIsDragging(() => true); }; const handleDragOut = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); onDragOut(e); }; const handleDrop = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.dataTransfer) { if (e.dataTransfer.files && e.dataTransfer.files.length > 0) { onDragDrop(e.dataTransfer.files); e.dataTransfer.clearData(); } } }; useEffect(() => { const div = dropRef.current; if (div) { div.addEventListener('dragenter', e => handleDragIn(e)); div.addEventListener('dragleave', e => handleDragOut(e)); div.addEventListener('dragover', e => handleDrag(e)); div.addEventListener('drop', e => handleDrop(e)); } }, [dropRef.current]); return (
) => { if (e.target.files) { handleFileChosen(e.target.files); } }} hidden />

Drop animation here

or

); }; export default DragDrop;