import axios from "axios"; import React, { useEffect, useState } from "react"; import swal from "sweetalert"; import { isAutheticated } from "src/auth"; const ProductsImages = (props) => { const token = isAutheticated(); const productId = props.productId; const { images, setImages } = props.data; const { loading, setLoading } = props.loading; const [deleting, setDeleting] = useState(false); const [imagePreview, setImagePreview] = useState({ preview: "", image: "" }); const [imagesPreview, setImagesPreview] = useState([]); const [allimage, setAllImage] = useState([]); // const [data, setData] = useState({ image: [], imageURL: [], }); useEffect(() => { if (images?.length > 0) { setData((prev) => ({ ...prev, imageURL: images?.url, })); setImagesPreview(images); } }, []); const handleChange = (e) => { if (e.target.id === "image") { if ( e.target.files[0]?.type === "image/jpeg" || e.target.files[0]?.type === "image/png" || e.target.files[0]?.type === "image/jpg" ) { if (imagesPreview.length > 3) { swal({ title: "Warning", text: "maximum Four image Upload ", icon: "error", button: "Close", dangerMode: true, }); return; } // only for file preview------------------------------------ const files = Array.from(e.target.files); files.forEach((file) => { const reader = new FileReader(); reader.onload = () => { if (reader.readyState === 2) { setImagesPreview((old) => [...old, reader.result]); } }; reader.readAsDataURL(file); }); // ----------------------------------------------------------------------------- setData((prev) => ({ ...prev, image: [...data.image, ...e.target.files], })); return; } else { swal({ title: "Warning", text: "Upload jpg, jpeg, png only.", icon: "error", button: "Close", dangerMode: true, }); setData((prev) => ({ ...prev, imageURL: "", image: "", })); e.target.value = null; return; } } setData((prev) => ({ ...prev, [e.target.id]: e.target.value })); }; // // const handleChange = (e) => { // if ( // e.target.files[0]?.type === "image/jpeg" || // e.target.files[0]?.type === "image/png" || // e.target.files[0]?.type === "image/jpg" // ) { // setImagePreview((prev) => ({ // ...prev, // preview: URL.createObjectURL(e.target.files[0]), // image: e.target.files[0], // })); // return; // } else { // swal({ // title: "Warning", // text: "Upload jpg, jpeg, png only.", // icon: "error", // button: "Close", // dangerMode: true, // }); // setImagePreview((prev) => ({ // ...prev, // preview: "", // image: "", // })); // e.target.value = null; // return; // } // }; const handleDelete = (id) => { swal({ title: "Are you sure?", icon: "error", buttons: { Yes: { text: "Yes", value: true }, Cancel: { text: "Cancel", value: "cancel" }, }, }).then((value) => { if (value === true) { setDeleting(true); axios .delete(`/api/product/image/${productId}/${id}`, { headers: { "Access-Control-Allow-Origin": "*", Authorization: `Bearer ${token}`, }, }) .then((res) => { setDeleting(false); const filteredImages = images.filter((e) => e._id !== id); setImages(filteredImages); }) .catch((err) => { setDeleting(false); swal({ title: "Warning", text: "Something went wrong!", icon: "error", button: "Retry", dangerMode: true, }); }); } }); }; const handleSubmit = () => { // if (!imagePreview.image) return; if (data.image?.length < 1) { swal({ title: "Warning", text: "PLease select Product Image", icon: "warning", button: "ok", dangerMode: true, }); return; } setLoading(true); const formData = new FormData(); data.image.forEach((Singleimage) => { // console.log(Singleimage) formData.append("image", Singleimage); }); axios .patch(`/api/product/update/${productId}`, formData, { headers: { "Content-Type": "multipart/form-data", Authorization: `Bearer ${token}`, "Access-Control-Allow-Origin": "*", }, }) .then((res) => { swal({ title: "Saved", text: "Product image saved successfully!", icon: "success", button: "Close", }); setImages((prev) => [...prev, res.data?.image]); setImagePreview({ preview: "", image: "" }); setLoading(false); }) .catch((err) => { // console.log(err); const msg = err?.response?.data?.message || "Something went wrong!"; swal({ title: "Warning", text: msg, icon: "warning", button: "Close", }); setLoading(false); }); }; return ( <>
Product Images
handleChange(e)} />

Upload jpg, jpeg and png only*

*Please Upload maximum four images
{/* Uploaded Image will be shown here */} {imagesPreview.map((image, index) => ( Uploaded Image will be shown here ))}
{/* {images.length !== 0 ? ( images.map((r, idx) => ( )) ) : ( )}
Preview Actions
preview
No Image Added
*/} ); }; export default ProductsImages;