import React, { useState } from "react"; import { LoadingOutlined, PlusOutlined } from "@ant-design/icons"; import { message, Upload } from "antd"; import { Image } from "@nextui-org/react"; import { useWatch, useForm } from "react-hook-form"; const getBase64 = (img, callback) => { const reader = new FileReader(); reader.addEventListener("load", () => callback(reader.result)); reader.readAsDataURL(img); }; const beforeUpload = (file) => { const isJpgOrPng = file.type === "image/jpeg" || file.type === "image/png"; if (!isJpgOrPng) { message.error("You can only upload JPG/PNG file!"); } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { message.error("Image must smaller than 2MB!"); } return isJpgOrPng && isLt2M; }; const UploadImage = ({ control, setValue }) => { const [loading, setLoading] = useState(false); const imageUrl = useWatch({ control, name: "poster", defaultValue: null, }); function setImageUrl(path) { setValue("poster", path); } const handleChange = (info) => { if (info.file.status === "uploading") { setLoading(true); return; } if (info.file.status === "done") { // Get this url from response in real world. const url = info?.file?.response?.data?.fileUrl ?? ''; setLoading(false); setImageUrl(url); } }; const uploadButton = ( ); return ( <> {imageUrl ? ( avatar ) : ( uploadButton )} ); }; export default UploadImage;