1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-05-01 07:36:40 +07:00
vault-frontend/src/components/editors/ImageEditor/index.tsx
2019-08-06 21:31:36 +07:00

55 lines
1.3 KiB
TypeScript

import React, {FC, useCallback, useEffect} from 'react';
import { INode } from '~/redux/types';
import * as styles from './styles.scss';
interface IProps {
data: INode,
setData: (val: INode) => void;
onUpload: (val: File[]) => void;
}
const ImageEditor: FC<IProps> = ({
data,
setData,
onUpload,
}) => {
const eventPreventer = useCallback(event => event.preventDefault(), []);
const onDrop = useCallback(event => {
event.preventDefault();
if (!event.dataTransfer || !event.dataTransfer.files || !event.dataTransfer.files.length) return;
onUpload(event.dataTransfer.files);
}, [onUpload]);
const onInputChange = useCallback(event => {
event.preventDefault();
if (!event.target.files || !event.target.files.length) return;
onUpload(event.target.files);
}, [onUpload]);
useEffect(() => {
window.addEventListener("dragover", eventPreventer,false);
window.addEventListener("drop",eventPreventer,false);
return () => {
window.removeEventListener("dragover", eventPreventer,false);
window.removeEventListener("drop",eventPreventer,false);
}
}, [eventPreventer]);
return (
<form
className={styles.uploads}
onDrop={onDrop}
>
<div>{data.type}</div>
<input type="file" onChange={onInputChange} accept="image/*" multiple />
</form>
);
};
export { ImageEditor };