diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
| commit | 3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch) | |
| tree | 57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/hooks/use-file-upload.ts | |
| parent | 729d10592f4e802f91c555c309ff3ba4b119f843 (diff) | |
| download | opencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz | |
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/hooks/use-file-upload.ts')
| -rw-r--r-- | apps/web/src/hooks/use-file-upload.ts | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/apps/web/src/hooks/use-file-upload.ts b/apps/web/src/hooks/use-file-upload.ts deleted file mode 100644 index d174e002..00000000 --- a/apps/web/src/hooks/use-file-upload.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { useState, useRef } from "react"; -import { hasDragData } from "@/lib/drag-data"; - -interface UseFileUploadOptions { - accept?: string; - multiple?: boolean; - onFilesSelected?: (files: File[]) => void; -} - -function containsFiles(dataTransfer: DataTransfer): boolean { - return !hasDragData({ dataTransfer }) && dataTransfer.types.includes("Files"); -} - -export function useFileUpload({ - accept, - multiple, - onFilesSelected, -}: UseFileUploadOptions = {}) { - const [isDragOver, setIsDragOver] = useState(false); - const dragCounterRef = useRef(0); - const inputRef = useRef<HTMLInputElement>(null); - - function openFilePicker() { - if (!inputRef.current) return; - - inputRef.current.accept = accept || "*"; - inputRef.current.multiple = multiple || false; - inputRef.current.click(); - } - - function handleFileChange(event: React.ChangeEvent<HTMLInputElement>) { - const files = Array.from(event.target.files ?? []); - if (files.length > 0 && onFilesSelected) { - onFilesSelected(files); - } - - if (event.target) { - event.target.value = ""; - } - } - - function handleDragEnter(e: React.DragEvent) { - e.preventDefault(); - - if (!containsFiles(e.dataTransfer)) return; - - dragCounterRef.current += 1; - setIsDragOver(true); - } - - function handleDragOver(e: React.DragEvent) { - e.preventDefault(); - - if (!containsFiles(e.dataTransfer)) return; - } - - function handleDragLeave(e: React.DragEvent) { - e.preventDefault(); - - if (!containsFiles(e.dataTransfer)) return; - - dragCounterRef.current -= 1; - if (dragCounterRef.current === 0) { - setIsDragOver(false); - } - } - - function handleDrop(e: React.DragEvent) { - e.preventDefault(); - setIsDragOver(false); - dragCounterRef.current = 0; - - if (onFilesSelected && containsFiles(e.dataTransfer)) { - const files = Array.from(e.dataTransfer.files); - const shouldUseMultiple = multiple ?? false; - - if (shouldUseMultiple) { - onFilesSelected(files); - } else if (files.length > 0) { - onFilesSelected([files[0]]); - } - } - } - - return { - isDragOver, - openFilePicker, - fileInputProps: { - ref: inputRef, - type: "file", - style: { display: "none" }, - onChange: handleFileChange, - }, - dragProps: { - onDragEnter: handleDragEnter, - onDragOver: handleDragOver, - onDragLeave: handleDragLeave, - onDrop: handleDrop, - }, - }; -} |
