Repo for the search and displace core module including the interface to select files and search and displace operations to run on them.
https://searchanddisplace.com
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.
98 lines
2.8 KiB
98 lines
2.8 KiB
import {Vue, Component, Prop} from 'vue-property-decorator';
|
|
import FileUploadResponse from '@/interfaces/responses/FileUploadResponse';
|
|
import {isServerError} from "@/SearchDisplace/helpers";
|
|
import { Searcher } from '@/interfaces/Searcher';
|
|
import { eventBus } from '@/app';
|
|
|
|
@Component
|
|
export default class Home extends Vue {
|
|
private availableSearchers: Array<Searcher> = [];
|
|
public uiBlocked = false;
|
|
public uploading = false;
|
|
public fileUploaded: boolean = false;
|
|
public document: File | null = null;
|
|
public uploadResult: FileUploadResponse = {
|
|
id: '',
|
|
file_name: '',
|
|
};
|
|
public error: string = '';
|
|
|
|
@Prop({default: []})
|
|
public searchers!: Searcher[];
|
|
|
|
public mounted()
|
|
{
|
|
eventBus.$on('changeRoute', this.changeRoute);
|
|
|
|
this.availableSearchers = this.searchers;
|
|
}
|
|
|
|
/**
|
|
* A method which uploads the files to the server for processing
|
|
*
|
|
* @param {any} event The event containing the uploaded files information
|
|
*/
|
|
public async uploadFile(event: any): Promise<void> {
|
|
let file = event.files[0];
|
|
|
|
return this.uploadNewFile(file);
|
|
}
|
|
|
|
/**
|
|
* A method which uploads the files to the server for processing
|
|
*
|
|
* @param {File} file The event containing the uploaded files information
|
|
*/
|
|
public async uploadNewFile(file: File): Promise<void> {
|
|
this.uploading = true;
|
|
this.fileUploaded = false;
|
|
|
|
this.$toast.add({severity: 'info', summary: 'Uploading...', detail: 'Uploading your file...', life: 3000});
|
|
|
|
try {
|
|
let response = await this.$api.uploadFile(file);
|
|
|
|
this.fileUploaded = true;
|
|
this.uploadResult = response;
|
|
|
|
this.document = file;
|
|
} catch (e) {
|
|
this.uploading = false;
|
|
this.fileUploaded = false;
|
|
|
|
if (isServerError(e)) {
|
|
if (e.response.data.hasOwnProperty('errors')) {
|
|
const errors = e.response.data.errors;
|
|
|
|
if (errors.hasOwnProperty('file')) {
|
|
this.error = errors.file[0];
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (e.response.data.hasOwnProperty('message')) {
|
|
this.error = e.response.data.message;
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
this.error = 'There was an error uploading your file. Please try again later.';
|
|
}
|
|
}
|
|
|
|
private onNewSearcher(searcher: Searcher): void {
|
|
this.availableSearchers.unshift(searcher);
|
|
}
|
|
|
|
public onError(error: string) {
|
|
this.error = error;
|
|
}
|
|
|
|
public changeRoute(url: string) {
|
|
if (!this.fileUploaded) {
|
|
window.location.href = url;
|
|
}
|
|
}
|
|
}
|