import React, { useId, useRef, useState } from "react"; import { UploadModal } from "~/components"; import { AssetType } from "~/pages/PageEnigma/models"; // 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; type: AssetType; } export default function FileWrapper({ render: Render, fileTypes = [], onSuccess, type, ...rest }: Props) { const fileRef = useRef(null); const [file, fileSet] = useState(); const [modalOpen, modalOpenSet] = useState(false); const [resetModal, resetModalSet] = useState(false); const [dragging, draggingSet] = useState(false); const id = "file-input-" + useId(); const accept = fileTypes .map((fileType) => `.${fileType.toLowerCase()}`) .join(","); const clearFile = () => { if (fileRef.current !== null) { fileRef.current.value = ""; fileSet(undefined); } }; const closeModal = () => modalOpenSet(false); const fileChange = (e: React.ChangeEvent) => { resetModalSet(true); e.preventDefault(); fileSet(e.target.files[0]); modalOpenSet(true); }; 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 (
); }