import { IconButton } from "@mui/joy"; import { PaperclipIcon } from "lucide-react"; import { useContext, useRef, useState } from "react"; import toast from "react-hot-toast"; import { useResourceStore } from "@/store/v1"; import { Resource } from "@/types/proto/api/v1/resource_service"; import { MemoEditorContext } from "../types"; interface State { uploadingFlag: boolean; } const UploadResourceButton = () => { const context = useContext(MemoEditorContext); const resourceStore = useResourceStore(); const [state, setState] = useState({ uploadingFlag: false, }); const fileInputRef = useRef(null); const handleFileInputChange = async () => { if (!fileInputRef.current || !fileInputRef.current.files || fileInputRef.current.files.length === 0) { return; } if (state.uploadingFlag) { return; } setState((state) => { return { ...state, uploadingFlag: true, }; }); const createdResourceList: Resource[] = []; try { if (!fileInputRef.current || !fileInputRef.current.files) { return; } for (const file of fileInputRef.current.files) { const { name: filename, size, type } = file; const buffer = new Uint8Array(await file.arrayBuffer()); const resource = await resourceStore.createResource({ resource: Resource.fromPartial({ filename, size, type, content: buffer, }), }); createdResourceList.push(resource); } } catch (error: any) { console.error(error); toast.error(error.details); } context.setResourceList([...context.resourceList, ...createdResourceList]); setState((state) => { return { ...state, uploadingFlag: false, }; }); }; return ( ); }; export default UploadResourceButton;