UNPKG

@tapie-kr/inspire-react

Version:

React Component Collection for INSPIRE

18 lines (15 loc) 1.91 kB
/* eslint-disable */ /* * INSPIRE : Creative Kit * React Component Collection for INSPIRE * * This file is generated automatically. Do not modify it manually * Generated at : 2025. 3. 4. 오후 6:18:13 * @tapie-kr/inspire-react version: 0.2.15 * * (c) 2025 TAPIE. All rights reserved. * MIT License */ import { useState, useCallback } from 'react'; function useDraggableFileInputController(inputProps){const[files,setFiles]=useState(null);const[isDragging,setIsDragging]=useState(false);const handleFileChange=useCallback(e=>{const fileList=e.target.files;if(inputProps.onChange){inputProps.onChange(e);}if(fileList&&fileList.length>0&&!fileList[0].webkitRelativePath){setFiles(Array.from(fileList));}},[]);const removeFile=useCallback(index=>{setFiles(prev=>{if(!prev)return null;const newFiles=[...prev];newFiles.splice(index,1);return newFiles.length>0?newFiles:null});},[]);const handleDragEnter=useCallback(e=>{e.preventDefault();e.stopPropagation();setIsDragging(true);},[]);const handleDragLeave=useCallback(e=>{e.preventDefault();e.stopPropagation();setIsDragging(false);},[]);const handleDragOver=useCallback(e=>{e.preventDefault();e.stopPropagation();},[]);const handleDrop=useCallback(e=>{e.preventDefault();e.stopPropagation();setIsDragging(false);if(e.dataTransfer.items){const items=Array.from(e.dataTransfer.items);const filesOnly=items.reduce((acc,item)=>{const entry=item.webkitGetAsEntry();if(item.kind==="file"&&!entry?.isDirectory){const file=item.getAsFile();if(file)acc.push(file);}return acc},[]);if(filesOnly.length>0){setFiles(filesOnly);}}},[]);const clearFiles=useCallback(()=>setFiles(null),[]);const controller={files,onChange:handleFileChange,onDragEnter:handleDragEnter,onDragLeave:handleDragLeave,onDragOver:handleDragOver,onDrop:handleDrop};const tools={clearFiles,removeFile};return {files,isDragging,tools,controller}} export { useDraggableFileInputController };