JSFiddle - React, Tailwind, and code Playground

by saidulu401

HTML

<input  class="file-upload__input" #fileInput (click)="fileInput.value = null" value="" (change)="handleFn($event)" type="file" name="file-upload">

JavaScript

handleFn(event){
		let me = this;
		let attachmentFormData = new FormData();
		let fileList: FileList = event.target.files;
		let message = this.validateFile(fileList);
		if(message){
			this.showMessage = true;
			this.message = new MessagesDetail("Validation Failed",message,true,'error')
		}else{
			this.showMessage = false;
			let file: File = fileList[0];
			attachmentFormData.append('fileAttachment', file, file.name);
			this.isProgress= true;
			this.browseService.uploadFile(attachmentFormData).subscribe((response) => {

				this.isProgress= false;
			},
			error =>{
				this.isProgress = false;
			});
		}
	}
  
  validateFile(fileList){
		let message = '';
		if (fileList == null || fileList == undefined || fileList.length <= 0) {
			message = 'Select a file';
		}else{
			let file: File = fileList[0];
			let sFileExtension = file.name.split('.')[file.name.split('.').length - 1];	
			if (this.checkFileIfExist(file.name)) {
				message = 'This file already is attached.';
			}else if(this.browseData.length >= 10){ 
				message = 'Maximum number of attachments reached.';
			}else if(file.size>=10000000){
				message = 'Uploaded file size should be less than 10MB.';
			}else if (!this.checkFormats(sFileExtension)) {
				message = 'File type is not supported online for attachment.';
			}
		}
		return message;
	} 
	checkFormats(sFileExtension) {
		var formats = new Set(['csv','doc','docx','gif','jpeg','jpg','pdf','png','ppt','pptx','rtf','txt','xls','xlsm','xlsx','vsd.','wav']);
		var endsWith = false;
		var regexp = /^([a-zA-Z0-1]{3,4})$/;
		if (regexp.test(sFileExtension)) {
			endsWith = formats.has(sFileExtension.toLowerCase());
		}
		return endsWith;
	}