import {Component, Input, OnDestroy, OnInit} from '@angular/core'; import {Job, JobExecution} from "../../../model/job"; import {Subscription} from "rxjs"; import {JobsService} from "../../../services/jobs.service"; import {FormControl, FormGroup} from "@angular/forms"; import {ConfigurationService} from "../../../env/configuration.service"; import {faCheckCircle, faCopy, faList, faSave, faStickyNote} from "@fortawesome/free-solid-svg-icons"; import {AlertService} from "../../../services/alert.service"; @Component({ selector: 'app-execution-detail', templateUrl: './execution-detail.component.html', styleUrls: ['./execution-detail.component.scss'] }) export class ExecutionDetailComponent implements OnInit, OnDestroy { @Input() job: Job; private jobDetail$: Subscription; public jobDetail: JobExecution; noteFormGroup: FormGroup; public faSave = faSave; public faList = faList; public faCheckCircle = faCheckCircle; public faStickyNote = faStickyNote; public faCopy = faCopy; constructor( private configService: ConfigurationService, private jobService: JobsService, private alertService: AlertService ) { this.noteFormGroup = new FormGroup({ notes: new FormControl(), id: new FormControl() }); } ngOnInit() { this.jobDetail$ = this.jobService.getJob(this.job.jobspec_id).subscribe((j: JobExecution) => { if (j) { this.jobDetail = j; this.noteFormGroup.get('notes').setValue(j.notes); this.noteFormGroup.get('id').setValue(j.id); } }); } copyToClipboard(text: string): void { const selBox = document.createElement('textarea'); selBox.style.position = 'fixed'; selBox.style.left = '0'; selBox.style.top = '0'; selBox.style.opacity = '0'; selBox.value = text; document.body.appendChild(selBox); selBox.focus(); selBox.select(); document.execCommand('copy'); document.body.removeChild(selBox); } getTaskStatusBgClass(status: string) { switch (status) { case 'ERROR': return 'badge-danger'; case 'SUCCESS': return 'badge-success'; default: return 'badge-info'; } } canAcceptArchive(status: string, archiveStatus: string): boolean { //console.log(status, archiveStatus); if (status === 'QA_READY' || status === 'QA_MANUAL' || archiveStatus === 'ARCHIVE_ERROR') { return true; } else { return false; } } getConfigRootDataDirectory(): string { return this.configService.config.rootDataDirectory; } getConfigWebLogBaseUrl(): string { return this.configService.config.weblogbaseurl; } updateNotes() { this.alertService.info('Saving Notes'); let notes = this.noteFormGroup.get('notes').value; let id = this.noteFormGroup.get('id').value; this.jobService.updateNotes(id, notes).subscribe(response => { this.alertService.success('Notes Saved'); }, error => { this.alertService.error('Notes did not save. ' + error); }); } acceptQa() { this.performQa(this.job.job_id, 'accept'); } rejectQa() { let yesno = confirm("Are you sure you want to reject this image?"); if (yesno) { this.performQa(this.job.job_id, 'reject'); } } performQa(id: number, status: string) { //console.log(status + 'ing QA'); let newStatus; if (status == 'accept' && (this.job.job_status === 'QA_READY' || this.job.job_status === 'QA_MANUAL')) { newStatus = 'QA_ACCEPTED'; } else if (status == 'reject' && (this.job.job_status === 'QA_READY' || this.job.job_status === 'QA_MANUAL')) { newStatus = 'QA_REJECTED'; } if (['QA_ACCEPTED', 'QA_MANUAL_ACCEPTED', 'QA_REJECTED', 'QA_MANUAL_REJECTED'].indexOf(newStatus) > -1) { this.jobService.updateJobStatus(this.job.job_id, newStatus, this.jobDetail.queueName).subscribe(response => { // this.hideDetails(); }); } }; ngOnDestroy(): void { if (this.jobDetail$) { this.jobDetail$.unsubscribe(); } } }