file drop rework
This commit is contained in:
parent
130cd7b747
commit
1a3779bc62
@ -1,4 +1,4 @@
|
||||
import { ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
|
||||
import { ChangeDetectorRef, Component, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { NotificationService } from '../../notification/notification.service';
|
||||
import { AppStateService } from '../../state/app-state.service';
|
||||
@ -26,6 +26,7 @@ import { StatusSorter } from '../../common/sorters/status-sorter';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { debounce } from '../../utils/debounce';
|
||||
import { download } from '../../utils/file-download-utils';
|
||||
import { handleFileDrop } from '../../utils/file-drop-utils';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-project-overview-screen',
|
||||
@ -182,20 +183,19 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
|
||||
return item.fileId;
|
||||
}
|
||||
|
||||
uploadFiles(files: FileList | File[]) {
|
||||
const uploadFiles: FileUploadModel[] = [];
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
uploadFiles.push({
|
||||
file: file,
|
||||
progress: 0,
|
||||
completed: false,
|
||||
error: null,
|
||||
retryCount: 0
|
||||
});
|
||||
}
|
||||
@HostListener('drop', ['$event'])
|
||||
onDrop(event: DragEvent) {
|
||||
handleFileDrop(event, this.uploadFiles.bind(this));
|
||||
}
|
||||
|
||||
this._fileUploadService.uploadFiles(uploadFiles);
|
||||
@HostListener('dragover', ['$event'])
|
||||
onDragOver(event) {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
uploadFiles(files: FileUploadModel[]) {
|
||||
this._fileUploadService.uploadFiles(files);
|
||||
this._uploadStatusOverlayService.openStatusOverlay();
|
||||
this._changeDetectorRef.detectChanges();
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
<section (mouseout)="close()">
|
||||
<ngx-dropzone (change)="handleFileInput($event.addedFiles)" class="file-drop-zone">
|
||||
<ngx-dropzone-label>{{ 'project-overview.upload-files' | translate }}</ngx-dropzone-label>
|
||||
</ngx-dropzone>
|
||||
<input type="file" multiple hidden accept="application/pdf" />
|
||||
<mat-icon svgIcon="red:upload" class="upload-icon"></mat-icon>
|
||||
<div class="heading-xl">
|
||||
{{ 'project-overview.upload-files' | translate }}
|
||||
</div>
|
||||
|
||||
<button (click)="close()" class="close-icon" mat-icon-button>
|
||||
<mat-icon svgIcon="red:close"></mat-icon>
|
||||
|
||||
@ -8,13 +8,18 @@ section {
|
||||
height: 100vh;
|
||||
z-index: 1000;
|
||||
padding: 12px;
|
||||
opacity: 0.7;
|
||||
background: white;
|
||||
}
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.file-drop-zone {
|
||||
background: white;
|
||||
height: calc(100% - 26px);
|
||||
width: calc(100% - 26px);
|
||||
.upload-icon {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.close-icon {
|
||||
|
||||
@ -3,6 +3,7 @@ import { FileUploadService } from '../file-upload.service';
|
||||
import { FileUploadModel } from '../model/file-upload.model';
|
||||
import { OverlayRef } from '@angular/cdk/overlay';
|
||||
import { UploadStatusOverlayService } from '../upload-status-dialog/service/upload-status-overlay.service';
|
||||
import { handleFileDrop } from '../../utils/file-drop-utils';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-drop',
|
||||
@ -20,28 +21,29 @@ export class FileDropComponent implements OnInit {
|
||||
ngOnInit() {}
|
||||
|
||||
close() {
|
||||
this._dialogRef.detach();
|
||||
setTimeout(() => {
|
||||
this._dialogRef.detach();
|
||||
}, 150);
|
||||
}
|
||||
|
||||
@HostListener('document:keydown.escape', ['$event'])
|
||||
onKeydownHandler(evt: KeyboardEvent) {
|
||||
onKeydownHandler() {
|
||||
this.close();
|
||||
}
|
||||
|
||||
handleFileInput(files: FileList | File[]) {
|
||||
const uploadFiles: FileUploadModel[] = [];
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
uploadFiles.push({
|
||||
file: file,
|
||||
progress: 0,
|
||||
completed: false,
|
||||
error: null,
|
||||
retryCount: 0
|
||||
});
|
||||
}
|
||||
@HostListener('drop', ['$event'])
|
||||
onDrop(event: DragEvent) {
|
||||
handleFileDrop(event, this.uploadFiles.bind(this));
|
||||
}
|
||||
|
||||
this._fileUploadService.uploadFiles(uploadFiles);
|
||||
@HostListener('dragover', ['$event'])
|
||||
onDragOver(event) {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
uploadFiles(files: FileUploadModel[]) {
|
||||
this._fileUploadService.uploadFiles(files);
|
||||
this._uploadStatusOverlayService.openStatusOverlay();
|
||||
this._dialogRef.detach();
|
||||
this._changeDetectorRef.detectChanges();
|
||||
|
||||
37
apps/red-ui/src/app/utils/file-drop-utils.ts
Normal file
37
apps/red-ui/src/app/utils/file-drop-utils.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import { FileUploadModel } from '../upload/model/file-upload.model';
|
||||
|
||||
export function handleFileDrop(event: DragEvent, uploadFiles: (files: FileUploadModel[]) => void) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const { dataTransfer } = event;
|
||||
if (dataTransfer.items) {
|
||||
const files = [];
|
||||
for (let i = 0; i < dataTransfer.items.length; i++) {
|
||||
// If dropped items aren't files, reject them
|
||||
if (dataTransfer.items[i].kind === 'file') {
|
||||
files.push(dataTransfer.items[i].getAsFile());
|
||||
}
|
||||
}
|
||||
dataTransfer.items.clear();
|
||||
uploadFiles(convert(files));
|
||||
} else {
|
||||
const files = dataTransfer.files;
|
||||
dataTransfer.clearData();
|
||||
uploadFiles(convert(files));
|
||||
}
|
||||
}
|
||||
|
||||
function convert(files: FileList | File[]): FileUploadModel[] {
|
||||
const uploadFiles: FileUploadModel[] = [];
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
uploadFiles.push({
|
||||
file: file,
|
||||
progress: 0,
|
||||
completed: false,
|
||||
error: null,
|
||||
retryCount: 0
|
||||
});
|
||||
}
|
||||
return uploadFiles;
|
||||
}
|
||||
@ -185,7 +185,7 @@
|
||||
"approve": "Approve",
|
||||
"under-review": "Under Review",
|
||||
"no-files-match": "No File match your current filters",
|
||||
"upload-files": "Drop files anywhere for upload!",
|
||||
"upload-files": "Drag & Drop files here",
|
||||
"upload-files-btn": "Upload Files",
|
||||
"new-rule": {
|
||||
"label": "Outdated",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user