import { useRef, useState } from "react"; import { useLockFn } from "ahooks"; import { Box, Button, Typography } from "@mui/material"; interface Props { onChange: (value: string) => void; } const FileInput = (props: Props) => { const { onChange } = props; // file input const inputRef = useRef(); const [loading, setLoading] = useState(false); const [fileName, setFileName] = useState(""); const onFileInput = useLockFn(async (e: any) => { const file = e.target.files?.[0] as File; if (!file) return; setFileName(file.name); setLoading(true); return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = (event) => { resolve(null); onChange(event.target?.result as string); }; reader.onerror = reject; reader.readAsText(file); }).finally(() => setLoading(false)); }); return ( {loading ? "Loading..." : fileName} ); }; export default FileInput;