Newer
Older
import { Component, OnInit, Input, EventEmitter, Output, Inject, ViewChildren, QueryList } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { LANG } from '../../translate.component';
import { catchError, tap, finalize, exhaustMap } from 'rxjs/operators';
import { of, forkJoin } from 'rxjs';
import { NotificationService } from '../../notification.service';
import { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { AppService } from '../../../service/app.service';
import { DocumentViewerComponent } from '../../viewer/document-viewer.component';
import { SortPipe } from '../../../plugins/sorting.pipe';
import { FormControl, FormGroup, Validators } from '@angular/forms';
@Component({
templateUrl: "attachment-create.component.html",
styleUrls: [
'attachment-create.component.scss',
'../../indexation/indexing-form/indexing-form.component.scss'
],
providers: [AppService, SortPipe],
})
export class AttachmentCreateComponent implements OnInit {
lang: any = LANG;
loading: boolean = true;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
attachmentsTypes: any[] = [];
creationMode: boolean = true;
attachFormGroup: FormGroup[] = [];
attachments: any[] = [];
now: Date = new Date();
@Input('resId') resId: number = null;
@ViewChildren('appDocumentViewer') appDocumentViewer: QueryList<DocumentViewerComponent>;
constructor(
public http: HttpClient,
@Inject(MAT_DIALOG_DATA) public data: any,
public dialogRef: MatDialogRef<AttachmentCreateComponent>,
public appService: AppService,
private notify: NotificationService,
private sortPipe: SortPipe) {
}
ngOnInit(): void {
this.loadAttachmentTypes();
}
loadAttachmentTypes() {
this.http.get('../../rest/attachmentsTypes').pipe(
tap((data: any) => {
Object.keys(data.attachmentsTypes).forEach(templateType => {
if (data.attachmentsTypes[templateType].show) {
this.attachmentsTypes.push({
id: templateType,
...data.attachmentsTypes[templateType]
});
}
});
this.attachmentsTypes = this.sortPipe.transform(this.attachmentsTypes, 'label')
}),
exhaustMap(() => this.http.get(`../../rest/resources/${this.data.resIdMaster}?light=true`)),
tap((data: any) => {
this.attachments.push({
title: new FormControl({ value: data.subject, disabled: false }, [Validators.required]),
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
contact: new FormControl({ value: '', disabled: false }),
type: new FormControl({ value: '', disabled: false }, [Validators.required]),
validationDate: new FormControl({ value: '', disabled: false }),
encodedFile: new FormControl({ value: '', disabled: false }, [Validators.required])
});
this.attachFormGroup.push(new FormGroup(this.attachments[0]));
}),
finalize(() => this.loading = false)
).subscribe();
}
selectAttachType(attachment: any, type: any) {
attachment.type = type.id;
}
formatAttachments() {
let formattedAttachments: any[] = [];
this.attachments.forEach((element, index: number) => {
formattedAttachments.push({
resIdMaster: this.data.resIdMaster,
type: element.type.value,
title: element.title.value,
validationDate: element.validationDate.value !== '' ? element.validationDate.value : null,
encodedFile: this.appDocumentViewer.toArray()[index].getFile().content,
format: this.appDocumentViewer.toArray()[index].getFile().format
});
});
return formattedAttachments;
}
onSubmit() {
if (this.isValid()) {
this.sendingData = true;
const attach = this.formatAttachments();
let arrayRoutes: any = [];
this.attachments.forEach((element, index: number) => {
arrayRoutes.push(this.http.post('../../rest/attachments', attach[index]));
});
forkJoin(arrayRoutes).pipe(
tap(() => {
this.notify.success(this.lang.attachmentAdded);
this.dialogRef.close('success');
}),
finalize(() => this.sendingData),
catchError((err: any) => {
this.notify.handleErrors(err);
return of(false);
})
).subscribe();
} else {
this.notify.error(this.lang.mustCompleteAllAttachments);
}
}
isValid() {
let state = true;
this.attachFormGroup.forEach(formgroup => {
if (formgroup.status === 'INVALID') {
state = false;
}
});
return state;
}
isPjValid(index: number) {
let state = true;
if (this.attachFormGroup[index].status === 'INVALID') {
state = false;
}
return state;
}
isDocLoading() {
let state = false;
this.appDocumentViewer.toArray().forEach((app, index: number) => {
if (app.isEditingTemplate()) {
state = true;
}
});
return state;
}
setEncodedFile(i: number) {
this.attachments[i].encodedFile.setValue(this.appDocumentViewer.toArray()[i].getFile().content);
}
newPj() {
this.attachments.push({
title: new FormControl({ value: '', disabled: false }, [Validators.required]),
contact: new FormControl({ value: null, disabled: false }),
type: new FormControl({ value: '', disabled: false }, [Validators.required]),
validationDate: new FormControl({ value: null, disabled: false }),
encodedFile: new FormControl({ value: '', disabled: false }, [Validators.required])
});
this.attachFormGroup.push(new FormGroup(this.attachments[this.attachments.length - 1]));
}
removePj(i: number) {
this.attachments.splice(i, 1);
this.attachFormGroup.splice(i, 1);
getAttachType(attachType: any, i: number) {
this.appDocumentViewer.toArray()[i].loadTemplatesByResId(this.data.resIdMaster, attachType);
}