I have the following code and I am trying to remove or delete a selected file when the x button is press. Currently I am able to upload a image by drag and drop. I can see a preview of the image. I have added a button at the top left of the preview. When click it should be remove. I am not sure how to do this.
import React, { useEffect, useState } from "react";
import { useDropzone } from "react-dropzone";
import Box from "@mui/material/Box";
import ToggleButton from "@mui/material/ToggleButton";
import ClearIcon from "@mui/icons-material/Clear";
const thumbsContainer = {
display: "flex",
flexDirection: "row",
flexWrap: "wrap",
marginTop: 16,
};
const thumb = {
display: "inline-flex",
borderRadius: 2,
border: "1px solid #eaeaea",
marginBottom: 8,
marginRight: 8,
width: 100,
height: 100,
padding: 4,
boxSizing: "border-box",
};
const thumbInner = {
display: "flex",
minWidth: 0,
overflow: "hidden",
};
const img = {
display: "block",
width: "100%",
height: "100%",
};
const clearBtn = {
position: "absolute",
width: 5,
height: 5,
};
export const Uploader = (props) => {
const [files, setFiles] = useState([]);
const { getRootProps, getInputProps } = useDropzone({
accept: {
"image/*": [],
},
onDrop: (acceptedFiles) => {
setFiles(
acceptedFiles.map((file, index) =>
Object.assign(file, {
preview: URL.createObjectURL(file),
id: index,
})
)
);
},
});
const thumbs = files.map((file) => (
<div style={thumb} key={file.name}>
<div style={thumbInner}>
<ToggleButton
value="left"
key="left"
sx={clearBtn}
onClick={() => removeFile}
>
<ClearIcon />
</ToggleButton>
<img
src={file.preview}
style={img}
// Revoke data uri after image is loaded
onLoad={() => {
URL.revokeObjectURL(file.preview);
}}
/>
</div>
</div>
));
useEffect(() => {
// Make sure to revoke the data uris to avoid memory leaks, will run on unmount
return () => files.forEach((file) => URL.revokeObjectURL(file.preview));
}, []);
return (
<section className="container">
<div {...getRootProps({ className: "dropzone" })}>
<input {...getInputProps()} />
<p>Drag 'n' drop some files here, or click to select files</p>
</div>
<aside style={thumbsContainer}>{thumbs}</aside>
</section>
);
};
export default Uploader;