Drag n drop working

This commit is contained in:
Maxime Lalo 2023-05-02 09:31:47 +02:00
parent 5fd915467c
commit 268fdab81d
2 changed files with 48 additions and 2 deletions

View File

@ -2,6 +2,11 @@
padding: 24px; padding: 24px;
background-color: white; background-color: white;
border: 1px dashed #e7e7e7; border: 1px dashed #e7e7e7;
&[data-drag-over="true"] {
border: 1px dashed grey;
}
.top-container { .top-container {
display: flex; display: flex;
align-items: center; align-items: center;
@ -37,7 +42,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.left-part { .left-part {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -24,6 +24,7 @@ type IFile = {
type IState = { type IState = {
files: IFile[]; files: IFile[];
isDragOver: boolean;
}; };
export default class DepositDocument extends React.Component<IProps, IState> { export default class DepositDocument extends React.Component<IProps, IState> {
@ -35,16 +36,25 @@ export default class DepositDocument extends React.Component<IProps, IState> {
this.state = { this.state = {
files: [], files: [],
isDragOver: false,
}; };
this.addDocument = this.addDocument.bind(this); this.addDocument = this.addDocument.bind(this);
this.onFileChange = this.onFileChange.bind(this); this.onFileChange = this.onFileChange.bind(this);
this.removeFile = this.removeFile.bind(this); this.removeFile = this.removeFile.bind(this);
this.onDragOver = this.onDragOver.bind(this);
this.onDragDrop = this.onDragDrop.bind(this);
this.onDragLeave = this.onDragLeave.bind(this);
} }
public override render(): JSX.Element { public override render(): JSX.Element {
return ( return (
<div className={classes["root"]}> <div
className={classes["root"]}
onDragOver={this.onDragOver}
onDrop={this.onDragDrop}
onDragLeave={this.onDragLeave}
data-drag-over={this.state.isDragOver.toString()}>
<input type="file" ref={this.inputRef} hidden onChange={this.onFileChange} /> <input type="file" ref={this.inputRef} hidden onChange={this.onFileChange} />
<div className={classes["top-container"]}> <div className={classes["top-container"]}>
<div className={classes["left"]}> <div className={classes["left"]}>
@ -96,6 +106,37 @@ export default class DepositDocument extends React.Component<IProps, IState> {
); );
} }
private onDragOver(event: React.DragEvent<HTMLDivElement>) {
if (!this.state.isDragOver) {
this.setState({
isDragOver: true,
});
}
event.preventDefault();
}
private onDragLeave(event: React.DragEvent<HTMLDivElement>) {
this.setState({
isDragOver: false,
});
event.preventDefault();
}
private async onDragDrop(event: React.DragEvent<HTMLDivElement>) {
event.preventDefault();
const file = event.dataTransfer.files[0];
if (!file) return;
this.setState({
files: [
...this.state.files,
{
index: this.index++,
file: file,
},
],
});
}
private removeFile(e: any) { private removeFile(e: any) {
const image = e.target as HTMLElement; const image = e.target as HTMLElement;
const indexToRemove = image.getAttribute("data-file"); const indexToRemove = image.getAttribute("data-file");