kar-cw/src/popin/upload-progress/upload-progress.ts

124 lines
3.5 KiB
TypeScript

/** @file
* @author Edouard DUPIN
* @copyright 2018, Edouard DUPIN, all right reserved
* @license PROPRIETARY (see license file)
*/
import { Component, OnInit, Input, SimpleChanges, EventEmitter, Output } from '@angular/core';
import { Router } from '@angular/router';
import { PopInService } from '../../service';
import { isNullOrUndefined } from '../../utils';
export class UploadProgress {
labelMediaTitle: string = '';
mediaSendSize: number = 0;
mediaSize: number = 99999999999999;
result?: string;
error?: string;
clear() {
this.labelMediaTitle = '';
this.mediaSendSize = 0;
this.mediaSize = 99999999999999;
this.result = undefined;
this.error = undefined;
}
}
@Component({
selector: 'upload-progress',
templateUrl: './upload-progress.html',
styleUrls: ['./upload-progress.less'],
})
export class PopInUploadProgress implements OnInit {
@Input() mediaTitle: string = '';
@Input() mediaUploaded: number = 0;
@Input() mediaSize: number = 999999999999;
@Input() result?: string;
@Input() error?: string;
@Output() abort: EventEmitter<void> = new EventEmitter();
public closeButtonTitle?: string = 'Abort';
public otherButtonTitle?: string;
public validateButtonTitle?: string;
public uploadDisplay: string = '';
public sizeDisplay: string = '';
public progress: number = 0;
constructor(private router: Router, private popInService: PopInService) { }
OnDestroy() { }
ngOnInit() { }
eventPopUp(_event: string): void {
if (_event == "close") {
if (this.abort) {
this.abort.emit();
}
} else {
console.log(`GET event: ${_event}`);
this.popInService.close('popin-upload-progress');
}
}
updateNeedSend(): void { }
limit3(count: number): string {
if (count >= 1000) {
return `${count}`;
}
if (count >= 100) {
return ` ${count}`;
}
if (count >= 10) {
return ` ${count}`;
}
return ` ${count}`;
}
convertInHuman(countIn: number): string {
let count = countIn;
let tera = Math.trunc(count / (1024 * 1024 * 1024 * 1024));
count = count - tera * 1024 * 1024 * 1024 * 1024;
let giga = Math.trunc(count / (1024 * 1024 * 1024));
count = count - giga * 1024 * 1024 * 1024;
let mega = Math.trunc(count / (1024 * 1024));
count = count - mega * 1024 * 1024;
let kilo = Math.trunc(count / 1024);
count = count - kilo * 1024;
let out = '';
if (out.length !== 0 || tera !== 0) {
out = `${out} ${this.limit3(tera)}T`;
}
if (out.length !== 0 || giga !== 0) {
out = `${out} ${this.limit3(giga)}G`;
}
if (out.length !== 0 || mega !== 0) {
out = `${out} ${this.limit3(mega)}M`;
}
if (out.length !== 0 || kilo !== 0) {
out = `${out} ${this.limit3(kilo)}k`;
}
if (out.length !== 0 || count !== 0) {
out = `${out} ${this.limit3(count)}B`;
}
return out;
}
ngOnChanges(changes: SimpleChanges) {
//console.log(`Upload progress event : ${JSON.stringify(changes)}`);
this.progress = Math.trunc((this.mediaUploaded * 100) / this.mediaSize);
this.uploadDisplay = this.convertInHuman(this.mediaUploaded);
this.sizeDisplay = this.convertInHuman(this.mediaSize);
if (isNullOrUndefined(this.error) && isNullOrUndefined(this.result)) {
this.closeButtonTitle = 'Abort';
this.otherButtonTitle = undefined;
this.validateButtonTitle = undefined;
} else if (isNullOrUndefined(this.result)) {
this.closeButtonTitle = undefined;
this.otherButtonTitle = 'Close';
this.validateButtonTitle = undefined;
} else {
this.closeButtonTitle = undefined;
this.otherButtonTitle = undefined;
this.validateButtonTitle = 'Ok';
}
}
}