mirror of https://github.com/gabehf/Koito.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.8 KiB
57 lines
1.8 KiB
import { replaceImage } from 'api/api';
|
|
import { useEffect } from 'react';
|
|
|
|
interface Props {
|
|
itemType: string,
|
|
onComplete: Function
|
|
}
|
|
|
|
export default function ImageDropHandler({ itemType, onComplete }: Props) {
|
|
useEffect(() => {
|
|
const handleDragOver = (e: DragEvent) => {
|
|
console.log('dragover!!')
|
|
e.preventDefault();
|
|
};
|
|
|
|
const handleDrop = async (e: DragEvent) => {
|
|
e.preventDefault();
|
|
if (!e.dataTransfer?.files.length) return;
|
|
|
|
const imageFile = Array.from(e.dataTransfer.files).find(file =>
|
|
file.type.startsWith('image/')
|
|
);
|
|
if (!imageFile) return;
|
|
|
|
const formData = new FormData();
|
|
formData.append('image', imageFile);
|
|
const pathname = window.location.pathname;
|
|
const segments = pathname.split('/');
|
|
const filteredSegments = segments.filter(segment => segment !== '');
|
|
const lastSegment = filteredSegments[filteredSegments.length - 1];
|
|
formData.append(itemType.toLowerCase()+'_id', lastSegment)
|
|
replaceImage(formData).then((r) => {
|
|
if (r.status >= 200 && r.status < 300) {
|
|
onComplete()
|
|
console.log("Replacement image uploaded successfully")
|
|
} else {
|
|
r.json().then((body) => {
|
|
console.log(`Upload failed: ${r.statusText} - ${body}`)
|
|
})
|
|
}
|
|
}).catch((err) => {
|
|
console.log(`Upload failed: ${err}`)
|
|
})
|
|
};
|
|
|
|
window.addEventListener('dragover', handleDragOver);
|
|
window.addEventListener('drop', handleDrop);
|
|
|
|
return () => {
|
|
window.removeEventListener('dragover', handleDragOver);
|
|
window.removeEventListener('drop', handleDrop);
|
|
};
|
|
}, []);
|
|
|
|
return null;
|
|
}
|