import { useFormikContext } from "formik"; import { useState, useRef, useEffect } from "react"; import "./ImageBoxField.scss"; import ImageIcon from "./ImageIcon"; import ImageCancelIcon from "./ImageCancelIcon"; import { getNestedValue } from "../../../utils/getNestedValue"; import { generateImagePreview } from "./generateImagePreview"; // Helper function to generate image preview from a File const ImageBoxField = ({ name }: any) => { const formik = useFormikContext(); const value = getNestedValue(formik.values, name); const [imagePreview, setImagePreview] = useState(null); const fileInputRef = useRef(null); useEffect(() => { if (value instanceof File) { generateImagePreview(value, setImagePreview); } else if (typeof value === "string") { setImagePreview(value); } else { setImagePreview(null); } }, [value]); const handleFileChange = (event: any) => { const file = event.target.files[0]; if (file) { generateImagePreview(file, setImagePreview); formik.setFieldValue(name, file); } }; const handleButtonClick = () => { const fileInput = fileInputRef.current; if (fileInput) { fileInput.click(); } }; const handleCancel = () => { setImagePreview(""); formik.setFieldValue(name, ""); if (fileInputRef.current) { fileInputRef.current.value = ""; } }; return (
{imagePreview ? ( <> ) : (
hidden
)}
{imagePreview ? ( Preview ) : ( )}
); }; export default ImageBoxField;