import React, { useId, useState } from "react"; import { UploadModal } from "~/components"; // import { useId } from 'hooks'; // replace with react v18 import "./FileWrapper.scss"; interface Props { render?: JSX.Element | JSX.Element[]; fileTypes?: string[]; onChange: (file?: React.ChangeEvent) => void; onSuccess: () => void; panelClass?: string; } export default function FileWrapper({ render: Render, fileTypes = [], onSuccess, ...rest }: Props) { const [file, fileSet] = useState(); const [modalOpen, modalOpenSet] = useState(false); const [dragging, draggingSet] = useState(false); const id = "file-input-" + useId(); const accept = fileTypes.map((type) => `.${type.toLowerCase()}`).join(","); const clearFile = () => fileSet(undefined); const closeModal = () => modalOpenSet(false); const fileChange = (e: React.DragEvent) => { e.preventDefault(); fileSet(e.target.files[0]); modalOpenSet(true); // onChange({ target: { name: e.target?.name || "file-input", value: e.target.files[0] }}); }; const onDragDrop = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); }; const onDragEvent = (onOff: boolean) => (e: React.DragEvent): void => { draggingSet(onOff); onDragDrop(e); }; const onDrop = (e: React.DragEvent): void => { draggingSet(false); onDragDrop(e); if (e.dataTransfer.files && e.dataTransfer.files[0]) { fileSet(e.dataTransfer.files[0]); modalOpenSet(true); // onChange({ target: { name: e.target?.name || "file-input", value: e.dataTransfer.files[0] }}); } }; return (
); }