@tapie-kr/inspire-react
Version:
React Component Collection for INSPIRE
20 lines (16 loc) • 1.99 kB
JavaScript
/* 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
*/
;
var React = require('react');
function useDraggableFileInputController(inputProps){const[files,setFiles]=React.useState(null);const[isDragging,setIsDragging]=React.useState(false);const handleFileChange=React.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=React.useCallback(index=>{setFiles(prev=>{if(!prev)return null;const newFiles=[...prev];newFiles.splice(index,1);return newFiles.length>0?newFiles:null});},[]);const handleDragEnter=React.useCallback(e=>{e.preventDefault();e.stopPropagation();setIsDragging(true);},[]);const handleDragLeave=React.useCallback(e=>{e.preventDefault();e.stopPropagation();setIsDragging(false);},[]);const handleDragOver=React.useCallback(e=>{e.preventDefault();e.stopPropagation();},[]);const handleDrop=React.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=React.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}}
exports.useDraggableFileInputController = useDraggableFileInputController;