Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
70
71
72
73
74
75
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
import { Component, OnDestroy } from '@angular/core';
import { JhiEventManager, JhiAlertService } from 'ng-jhipster';
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'jhi-alert-error',
template: `
<div class="alerts" role="alert">
<div *ngFor="let alert of alerts" [ngClass]="{\'alert.position\': true, \'toast\': alert.toast}">
<ngb-alert *ngIf="alert && alert.type && alert.msg" [type]="alert.type" (close)="alert.close(alerts)">
<pre [innerHTML]="alert.msg"></pre>
</ngb-alert>
</div>
</div>`
})
export class JhiAlertErrorComponent implements OnDestroy {
alerts: any[];
cleanHttpErrorListener: Subscription;
// tslint:disable-next-line: no-unused-variable
constructor(private alertService: JhiAlertService, private eventManager: JhiEventManager) {
this.alerts = [];
this.cleanHttpErrorListener = eventManager.subscribe('bootappApp.httpError', (response) => {
let i;
const httpErrorResponse = response.content;
switch (httpErrorResponse.status) {
// connection refused, server not reachable
case 0:
this.addErrorAlert('Server not reachable', 'error.server.not.reachable');
break;
case 400:
const arr = httpErrorResponse.headers.keys();
let errorHeader = null;
let entityKey = null;
arr.forEach((entry) => {
if (entry.endsWith('app-error')) {
errorHeader = httpErrorResponse.headers.get(entry);
} else if (entry.endsWith('app-params')) {
entityKey = httpErrorResponse.headers.get(entry);
}
});
if (errorHeader) {
const entityName = entityKey;
this.addErrorAlert(errorHeader, errorHeader, { entityName });
} else if (httpErrorResponse.error !== '' && httpErrorResponse.error.fieldErrors) {
const fieldErrors = httpErrorResponse.error.fieldErrors;
for (i = 0; i < fieldErrors.length; i++) {
const fieldError = fieldErrors[i];
// convert 'something[14].other[4].id' to 'something[].other[].id' so translations can be written to it
const convertedField = fieldError.field.replace(/\[\d*\]/g, '[]');
const fieldName = convertedField.charAt(0).toUpperCase() +
convertedField.slice(1);
this.addErrorAlert(
'Error on field "' + fieldName + '"', 'error.' + fieldError.message, { fieldName });
}
} else if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) {
this.addErrorAlert(httpErrorResponse.error.message, httpErrorResponse.error.message, httpErrorResponse.error.params);
} else {
this.addErrorAlert(httpErrorResponse.error);
}
break;
case 404:
this.addErrorAlert('Not found', 'error.url.not.found');
break;
default:
if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) {
this.addErrorAlert(httpErrorResponse.error.message);
} else {
this.addErrorAlert(httpErrorResponse.error);
}
}
});
}
ngOnDestroy() {
if (this.cleanHttpErrorListener !== undefined && this.cleanHttpErrorListener !== null) {
this.eventManager.destroy(this.cleanHttpErrorListener);
this.alerts = [];
}
}
addErrorAlert(message, key?, data?) {
this.alerts.push(
this.alertService.addAlert(
{
type: 'danger',
msg: message,
timeout: 5000,
toast: this.alertService.isToast(),
scoped: true
},
this.alerts
)
);
}
}