vc-error-handlers 0.1.8 → 0.1.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/shared/constants/api-config.constants.mjs +109 -0
- package/esm2020/lib/shared/interceptors/http.interceptor.mjs +5 -18
- package/esm2020/lib/shared/services/global-error.service.mjs +115 -5
- package/esm2020/lib/shared/services/util.service.mjs +21 -0
- package/esm2020/lib/vc-error-handlers.component.mjs +10 -3
- package/fesm2015/vc-error-handlers.mjs +380 -152
- package/fesm2015/vc-error-handlers.mjs.map +1 -1
- package/fesm2020/vc-error-handlers.mjs +379 -152
- package/fesm2020/vc-error-handlers.mjs.map +1 -1
- package/lib/shared/constants/api-config.constants.d.ts +24 -0
- package/lib/shared/interceptors/http.interceptor.d.ts +1 -4
- package/lib/shared/services/global-error.service.d.ts +20 -1
- package/lib/shared/services/util.service.d.ts +6 -0
- package/lib/vc-error-handlers.component.d.ts +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export const PAGE_LEVEL_API_CONFIG = [
|
|
2
|
+
{
|
|
3
|
+
method: 'POST',
|
|
4
|
+
path: '/compliance_post',
|
|
5
|
+
query: { mode: 'xyz' },
|
|
6
|
+
body: { mode: 'abc' },
|
|
7
|
+
pageCodes: ['compliance:mr', 'risk:mr'],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
method: 'GET',
|
|
11
|
+
path: '/compliance_post',
|
|
12
|
+
query: { mode: 'xyz' },
|
|
13
|
+
body: { mode: 'abc' },
|
|
14
|
+
pageCodes: ['compliance:mr', 'risk:mr'],
|
|
15
|
+
},
|
|
16
|
+
];
|
|
17
|
+
export const COMPONENT_LEVEL_API_CONFIG = [
|
|
18
|
+
{
|
|
19
|
+
method: 'GET',
|
|
20
|
+
path: '/organization/?mode=organisationUsersList',
|
|
21
|
+
query: { type: 'active' },
|
|
22
|
+
body: null,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
method: 'GET',
|
|
26
|
+
path: '/organization/?mode=organisationUsersList',
|
|
27
|
+
query: { type: 'power_users' },
|
|
28
|
+
body: null,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
method: 'GET',
|
|
32
|
+
path: '/organization/?mode=organisationUsersList',
|
|
33
|
+
query: { type: 'light_users' },
|
|
34
|
+
body: null,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
method: 'GET',
|
|
38
|
+
path: '/organization/?mode=organisationUsersList',
|
|
39
|
+
query: { type: 'inactive' },
|
|
40
|
+
body: null,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
method: 'GET',
|
|
44
|
+
path: '/Global-Dashboard/ManageDashboards',
|
|
45
|
+
query: null,
|
|
46
|
+
body: null,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
method: 'GET',
|
|
50
|
+
path: '/Global-Dashboard/MyDashboard',
|
|
51
|
+
query: null,
|
|
52
|
+
body: null,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
method: 'GET',
|
|
56
|
+
path: '/grc_object/?mode=grcObject/getGRCTypeList',
|
|
57
|
+
query: null,
|
|
58
|
+
body: null,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
method: 'GET',
|
|
62
|
+
path: '/compliance/?mode=responsibilityCenterTree',
|
|
63
|
+
query: null,
|
|
64
|
+
body: null,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
method: 'GET',
|
|
68
|
+
path: '/organization/?mode=rcholidaylist',
|
|
69
|
+
query: null,
|
|
70
|
+
body: null,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
method: 'GET',
|
|
74
|
+
path: '/organization/?mode=roles/getRoles',
|
|
75
|
+
query: null,
|
|
76
|
+
body: null,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
method: 'GET',
|
|
80
|
+
path: '/organization/?mode=groupsList',
|
|
81
|
+
query: null,
|
|
82
|
+
body: null,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
method: 'GET',
|
|
86
|
+
path: '/compliance_post/?mode=rcProfile',
|
|
87
|
+
query: null,
|
|
88
|
+
body: null,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
method: 'GET',
|
|
92
|
+
path: '/organization_post/?mode=userProfile',
|
|
93
|
+
query: null,
|
|
94
|
+
body: null,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
method: 'GET',
|
|
98
|
+
path: '/organization/?mode=roles/roleById',
|
|
99
|
+
query: null,
|
|
100
|
+
body: null,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
method: 'GET',
|
|
104
|
+
path: '/organization/?mode=groupDetails',
|
|
105
|
+
query: null,
|
|
106
|
+
body: null,
|
|
107
|
+
}
|
|
108
|
+
];
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbmZpZy5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Yy1lcnJvci1oYW5kbGVycy9zcmMvbGliL3NoYXJlZC9jb25zdGFudHMvYXBpLWNvbmZpZy5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkM7UUFDRSxNQUFNLEVBQUUsTUFBTTtRQUNkLElBQUksRUFBRSxrQkFBa0I7UUFDeEIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUN0QixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ3JCLFNBQVMsRUFBRSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUM7S0FDeEM7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ3RCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDckIsU0FBUyxFQUFFLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQztLQUN4QztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QztRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ3pCLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1FBQzlCLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1FBQzlCLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQzNCLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLG9DQUFvQztRQUMxQyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDRDQUE0QztRQUNsRCxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDRDQUE0QztRQUNsRCxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLG1DQUFtQztRQUN6QyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLG9DQUFvQztRQUMxQyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLGdDQUFnQztRQUN0QyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFDLGtDQUFrQztRQUN2QyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFDLHNDQUFzQztRQUMzQyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLG9DQUFvQztRQUMxQyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO0tBQ1g7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFBBR0VfTEVWRUxfQVBJX0NPTkZJRyA9IFtcclxuICB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHBhdGg6ICcvY29tcGxpYW5jZV9wb3N0JyxcclxuICAgIHF1ZXJ5OiB7IG1vZGU6ICd4eXonIH0sXHJcbiAgICBib2R5OiB7IG1vZGU6ICdhYmMnIH0sXHJcbiAgICBwYWdlQ29kZXM6IFsnY29tcGxpYW5jZTptcicsICdyaXNrOm1yJ10sXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9jb21wbGlhbmNlX3Bvc3QnLFxyXG4gICAgcXVlcnk6IHsgbW9kZTogJ3h5eicgfSxcclxuICAgIGJvZHk6IHsgbW9kZTogJ2FiYycgfSxcclxuICAgIHBhZ2VDb2RlczogWydjb21wbGlhbmNlOm1yJywgJ3Jpc2s6bXInXSxcclxuICB9LFxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9MRVZFTF9BUElfQ09ORklHID0gW1xyXG4gIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICBwYXRoOiAnL29yZ2FuaXphdGlvbi8/bW9kZT1vcmdhbmlzYXRpb25Vc2Vyc0xpc3QnLFxyXG4gICAgcXVlcnk6IHsgdHlwZTogJ2FjdGl2ZScgfSxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9vcmdhbml6YXRpb24vP21vZGU9b3JnYW5pc2F0aW9uVXNlcnNMaXN0JyxcclxuICAgIHF1ZXJ5OiB7IHR5cGU6ICdwb3dlcl91c2VycycgfSxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9vcmdhbml6YXRpb24vP21vZGU9b3JnYW5pc2F0aW9uVXNlcnNMaXN0JyxcclxuICAgIHF1ZXJ5OiB7IHR5cGU6ICdsaWdodF91c2VycycgfSxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9vcmdhbml6YXRpb24vP21vZGU9b3JnYW5pc2F0aW9uVXNlcnNMaXN0JyxcclxuICAgIHF1ZXJ5OiB7IHR5cGU6ICdpbmFjdGl2ZScgfSxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9HbG9iYWwtRGFzaGJvYXJkL01hbmFnZURhc2hib2FyZHMnLFxyXG4gICAgcXVlcnk6IG51bGwsXHJcbiAgICBib2R5OiBudWxsLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHBhdGg6ICcvR2xvYmFsLURhc2hib2FyZC9NeURhc2hib2FyZCcsXHJcbiAgICBxdWVyeTogbnVsbCxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9ncmNfb2JqZWN0Lz9tb2RlPWdyY09iamVjdC9nZXRHUkNUeXBlTGlzdCcsXHJcbiAgICBxdWVyeTogbnVsbCxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9jb21wbGlhbmNlLz9tb2RlPXJlc3BvbnNpYmlsaXR5Q2VudGVyVHJlZScsXHJcbiAgICBxdWVyeTogbnVsbCxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9vcmdhbml6YXRpb24vP21vZGU9cmNob2xpZGF5bGlzdCcsXHJcbiAgICBxdWVyeTogbnVsbCxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9vcmdhbml6YXRpb24vP21vZGU9cm9sZXMvZ2V0Um9sZXMnLFxyXG4gICAgcXVlcnk6IG51bGwsXHJcbiAgICBib2R5OiBudWxsLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHBhdGg6ICcvb3JnYW5pemF0aW9uLz9tb2RlPWdyb3Vwc0xpc3QnLFxyXG4gICAgcXVlcnk6IG51bGwsXHJcbiAgICBib2R5OiBudWxsLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHBhdGg6Jy9jb21wbGlhbmNlX3Bvc3QvP21vZGU9cmNQcm9maWxlJyxcclxuICAgIHF1ZXJ5OiBudWxsLFxyXG4gICAgYm9keTogbnVsbCxcclxuICB9LFxyXG4gIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICBwYXRoOicvb3JnYW5pemF0aW9uX3Bvc3QvP21vZGU9dXNlclByb2ZpbGUnLFxyXG4gICAgcXVlcnk6IG51bGwsXHJcbiAgICBib2R5OiBudWxsLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHBhdGg6ICcvb3JnYW5pemF0aW9uLz9tb2RlPXJvbGVzL3JvbGVCeUlkJyxcclxuICAgIHF1ZXJ5OiBudWxsLFxyXG4gICAgYm9keTogbnVsbCxcclxuICB9LFxyXG4gIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICBwYXRoOiAnL29yZ2FuaXphdGlvbi8/bW9kZT1ncm91cERldGFpbHMnLFxyXG4gICAgcXVlcnk6IG51bGwsXHJcbiAgICBib2R5OiBudWxsLFxyXG4gIH1cclxuXTtcclxuIl19
|
|
@@ -5,37 +5,24 @@ import { catchError, tap, timeout } from 'rxjs/operators';
|
|
|
5
5
|
import { API_TIMEOUT_TIME } from '../constants/error-handling.constants';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "../services/global-error.service";
|
|
8
|
-
import * as i2 from "../../ui-kit/snack-bar/snack-bar.service";
|
|
9
8
|
export class HttpReqInterceptor {
|
|
10
|
-
constructor(errorService
|
|
9
|
+
constructor(errorService) {
|
|
11
10
|
this.errorService = errorService;
|
|
12
|
-
this.snackBarService = snackBarService;
|
|
13
11
|
}
|
|
14
12
|
intercept(req, next) {
|
|
15
13
|
return next.handle(req).pipe(timeout(API_TIMEOUT_TIME), tap((event) => {
|
|
16
14
|
if (event instanceof HttpResponse) {
|
|
17
|
-
this.handleSoftErrors(event);
|
|
15
|
+
this.errorService.handleSoftErrors(event);
|
|
18
16
|
}
|
|
19
17
|
}), catchError((error) => {
|
|
20
18
|
this.errorService.handleError(error, req);
|
|
21
19
|
return throwError(error);
|
|
22
20
|
}));
|
|
23
21
|
}
|
|
24
|
-
handleSoftErrors(event) {
|
|
25
|
-
const xData = event.headers.get('X-Data');
|
|
26
|
-
if (xData) {
|
|
27
|
-
const parsedData = JSON.parse(xData);
|
|
28
|
-
const statusCode = parsedData.statusCode;
|
|
29
|
-
const statusMessage = parsedData.message;
|
|
30
|
-
if (statusCode && statusCode !== 0) {
|
|
31
|
-
this.snackBarService.show(statusMessage || 'Error occurred', 'error');
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
22
|
}
|
|
36
|
-
HttpReqInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor, deps: [{ token: i1.GlobalErrorService }
|
|
23
|
+
HttpReqInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor, deps: [{ token: i1.GlobalErrorService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
37
24
|
HttpReqInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor });
|
|
38
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor, decorators: [{
|
|
39
26
|
type: Injectable
|
|
40
|
-
}], ctorParameters: function () { return [{ type: i1.GlobalErrorService }
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
}], ctorParameters: function () { return [{ type: i1.GlobalErrorService }]; } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZjLWVycm9yLWhhbmRsZXJzL3NyYy9saWIvc2hhcmVkL2ludGVyY2VwdG9ycy9odHRwLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQU1MLFlBQVksR0FDYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQUd6RSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1UsWUFBZ0M7UUFBaEMsaUJBQVksR0FBWixZQUFZLENBQW9CO0lBQ3ZDLENBQUM7SUFFSixTQUFTLENBQ1AsR0FBcUIsRUFDckIsSUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDMUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQ3pCLEdBQUcsQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUM1QixJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzsrR0FyQlUsa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBIdHRwUmVxdWVzdCxcclxuICBIdHRwSGFuZGxlcixcclxuICBIdHRwRXZlbnQsXHJcbiAgSHR0cEludGVyY2VwdG9yLFxyXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gIEh0dHBSZXNwb25zZSxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ2xvYmFsLWVycm9yLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQVBJX1RJTUVPVVRfVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9lcnJvci1oYW5kbGluZy5jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSHR0cFJlcUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXJyb3JTZXJ2aWNlOiBHbG9iYWxFcnJvclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGludGVyY2VwdChcclxuICAgIHJlcTogSHR0cFJlcXVlc3Q8YW55PixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZShcclxuICAgICAgdGltZW91dChBUElfVElNRU9VVF9USU1FKSxcclxuICAgICAgdGFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmhhbmRsZVNvZnRFcnJvcnMoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yLCByZXEpO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,19 +1,55 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import { ErrorStatusCode } from '../types/global-error.types';
|
|
4
|
+
import { ERROR_CONFIG } from '../constants/error-handling.constants';
|
|
5
|
+
import { PAGE_LEVEL_API_CONFIG, COMPONENT_LEVEL_API_CONFIG, } from '../constants/api-config.constants';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../ui-kit/snack-bar/snack-bar.service";
|
|
8
|
+
import * as i2 from "./util.service";
|
|
9
|
+
import * as i3 from "@angular/router";
|
|
5
10
|
export class GlobalErrorService {
|
|
6
|
-
constructor() {
|
|
11
|
+
constructor(snackBarService, utilService, router) {
|
|
12
|
+
this.snackBarService = snackBarService;
|
|
13
|
+
this.utilService = utilService;
|
|
14
|
+
this.router = router;
|
|
7
15
|
this.globalError$ = new Subject();
|
|
8
16
|
this.localError$ = new Subject();
|
|
17
|
+
this.pageLevelApiConfig = PAGE_LEVEL_API_CONFIG;
|
|
18
|
+
this.componentLevelApiConfig = COMPONENT_LEVEL_API_CONFIG;
|
|
19
|
+
}
|
|
20
|
+
handleSoftErrors(event) {
|
|
21
|
+
const xData = event.headers.get('X-Data');
|
|
22
|
+
if (xData) {
|
|
23
|
+
const parsedData = JSON.parse(xData);
|
|
24
|
+
const statusCode = parsedData.statusCode;
|
|
25
|
+
const statusMessage = parsedData.message;
|
|
26
|
+
if (statusCode && statusCode !== 0) {
|
|
27
|
+
this.snackBarService.show(statusMessage || 'Error occurred', 'error');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
9
30
|
}
|
|
10
31
|
handleError(error, request) {
|
|
11
32
|
if (this.isUnauthenticated(error) ||
|
|
12
33
|
this.isUnauthorizedAccess(error) ||
|
|
13
34
|
this.isNetworkUnavailable(error)) {
|
|
14
|
-
this.
|
|
35
|
+
this.publishGlobalError(error);
|
|
36
|
+
}
|
|
37
|
+
else if (this.isServerError(error)) {
|
|
38
|
+
this.handleServerError(error, request);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.handleSoftErrors(error);
|
|
15
42
|
}
|
|
16
43
|
}
|
|
44
|
+
isServerError(error) {
|
|
45
|
+
const serverErrorCodes = [
|
|
46
|
+
ErrorStatusCode.InternalServerError,
|
|
47
|
+
ErrorStatusCode.ServiceUnavailable,
|
|
48
|
+
ErrorStatusCode.BadGateway,
|
|
49
|
+
ErrorStatusCode.RequestTimeout,
|
|
50
|
+
];
|
|
51
|
+
return serverErrorCodes.includes(error.status);
|
|
52
|
+
}
|
|
17
53
|
isUnauthenticated(error) {
|
|
18
54
|
return error.status === ErrorStatusCode.Unauthenticated;
|
|
19
55
|
}
|
|
@@ -23,13 +59,87 @@ export class GlobalErrorService {
|
|
|
23
59
|
isNetworkUnavailable(error) {
|
|
24
60
|
return error.status === ErrorStatusCode.NetworkUnavailable;
|
|
25
61
|
}
|
|
62
|
+
handleServerError(error, request) {
|
|
63
|
+
if (this.isPageLevelError(error, request)) {
|
|
64
|
+
this.publishGlobalError(error);
|
|
65
|
+
}
|
|
66
|
+
else if (this.isComponentLevelError(error, request)) {
|
|
67
|
+
this.publishLocalError(error, request);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.showServerSnackBarError();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
publishGlobalError(error) {
|
|
74
|
+
this.globalError$.next(error);
|
|
75
|
+
}
|
|
76
|
+
publishLocalError(error, request) {
|
|
77
|
+
this.localError$.next({ error, request });
|
|
78
|
+
}
|
|
79
|
+
showServerSnackBarError() {
|
|
80
|
+
const message = ERROR_CONFIG.SERVER_ERROR.snackBarMessage;
|
|
81
|
+
this.snackBarService.show(message, 'error');
|
|
82
|
+
}
|
|
83
|
+
isPageLevelError(error, request) {
|
|
84
|
+
const { method, path, query, body } = this.parseRequest(request);
|
|
85
|
+
const pageCode = this.getPageCode();
|
|
86
|
+
const isConfigMatched = this.pageLevelApiConfig.some((apiConfig) => {
|
|
87
|
+
if (apiConfig.method !== method)
|
|
88
|
+
return false;
|
|
89
|
+
if (apiConfig.path !== path)
|
|
90
|
+
return false;
|
|
91
|
+
const isQuerySubset = this.utilService.isJsonSubset(apiConfig.query, query);
|
|
92
|
+
if (!isQuerySubset)
|
|
93
|
+
return false;
|
|
94
|
+
const isBodyMatch = this.utilService.isJsonSubset(apiConfig.body, body);
|
|
95
|
+
if (!isBodyMatch)
|
|
96
|
+
return false;
|
|
97
|
+
return apiConfig.pageCodes.includes(pageCode);
|
|
98
|
+
});
|
|
99
|
+
return isConfigMatched;
|
|
100
|
+
}
|
|
101
|
+
isComponentLevelError(error, request) {
|
|
102
|
+
const { method, url: path, params, body } = request;
|
|
103
|
+
const query = {};
|
|
104
|
+
params.keys().forEach((key) => {
|
|
105
|
+
query[key] = params.get(key);
|
|
106
|
+
});
|
|
107
|
+
const isConfigFound = this.componentLevelApiConfig.some((apiConfig) => {
|
|
108
|
+
if (apiConfig.method !== method)
|
|
109
|
+
return false;
|
|
110
|
+
if (!path.includes(apiConfig.path))
|
|
111
|
+
return false;
|
|
112
|
+
const isQuerySubset = this.utilService.isJsonSubset(query, apiConfig.query);
|
|
113
|
+
if (!isQuerySubset)
|
|
114
|
+
return false;
|
|
115
|
+
if (apiConfig.body) {
|
|
116
|
+
const isBodyMatch = this.utilService.isJsonSubset(apiConfig.body, body);
|
|
117
|
+
if (!isBodyMatch)
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
});
|
|
122
|
+
return isConfigFound;
|
|
123
|
+
}
|
|
124
|
+
parseRequest(request) {
|
|
125
|
+
const { method, url: path, params, body } = request;
|
|
126
|
+
const query = {};
|
|
127
|
+
params.keys().forEach((key) => {
|
|
128
|
+
query[key] = params.get(key);
|
|
129
|
+
});
|
|
130
|
+
return { method, path, query, body };
|
|
131
|
+
}
|
|
132
|
+
getPageCode() {
|
|
133
|
+
const currentRoute = this.router.routerState.snapshot.root.firstChild;
|
|
134
|
+
return currentRoute?.data?.pageCode;
|
|
135
|
+
}
|
|
26
136
|
}
|
|
27
|
-
GlobalErrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
137
|
+
GlobalErrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, deps: [{ token: i1.SnackBarService }, { token: i2.UtilsService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
138
|
GlobalErrorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, providedIn: 'root' });
|
|
29
139
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, decorators: [{
|
|
30
140
|
type: Injectable,
|
|
31
141
|
args: [{
|
|
32
142
|
providedIn: 'root',
|
|
33
143
|
}]
|
|
34
|
-
}] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWVycm9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Yy1lcnJvci1oYW5kbGVycy9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUs5RCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSVMsaUJBQVksR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO0tBdUJsRDtJQXJCUSxXQUFXLENBQUMsS0FBd0IsRUFBRSxPQUF5QjtRQUNwRSxJQUNFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQ2hDO1lBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBd0I7UUFDaEQsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxlQUFlLENBQUM7SUFDMUQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXdCO1FBQ25ELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXdCO1FBQ25ELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsQ0FBQzs7K0dBeEJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBFcnJvclN0YXR1c0NvZGUgfSBmcm9tICcuLi90eXBlcy9nbG9iYWwtZXJyb3IudHlwZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdsb2JhbEVycm9yU2VydmljZSB7XHJcbiAgcHVibGljIGdsb2JhbEVycm9yJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwdWJsaWMgbG9jYWxFcnJvciQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5pc1VuYXV0aGVudGljYXRlZChlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc05ldHdvcmtVbmF2YWlsYWJsZShlcnJvcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmdsb2JhbEVycm9yJC5uZXh0KGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVbmF1dGhlbnRpY2F0ZWQoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRoZW50aWNhdGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWRBY2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTmV0d29ya1VuYXZhaWxhYmxlKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGVycm9yLnN0YXR1cyA9PT0gRXJyb3JTdGF0dXNDb2RlLk5ldHdvcmtVbmF2YWlsYWJsZTtcclxuICB9XHJcbn1cclxuIl19
|
|
144
|
+
}], ctorParameters: function () { return [{ type: i1.SnackBarService }, { type: i2.UtilsService }, { type: i3.Router }]; } });
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWVycm9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Yy1lcnJvci1oYW5kbGVycy9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDBCQUEwQixHQUMzQixNQUFNLG1DQUFtQyxDQUFDOzs7OztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCLFlBQ1UsZUFBZ0MsRUFDaEMsV0FBeUIsRUFDekIsTUFBYztRQUZkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYztRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBVGpCLGlCQUFZLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0MsZ0JBQVcsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUV6Qyx1QkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztRQUMzQyw0QkFBdUIsR0FBRywwQkFBMEIsQ0FBQztJQU0xRCxDQUFDO0lBRUcsZ0JBQWdCLENBQUMsS0FBNEM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLFVB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QUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3RFLE9BQU8sWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7SUFDdEMsQ0FBQzs7K0dBekpVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgSHR0cFJlcXVlc3QsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi91dGlsLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgRXJyb3JTdGF0dXNDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZ2xvYmFsLWVycm9yLnR5cGVzJztcclxuaW1wb3J0IHsgRVJST1JfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzL2Vycm9yLWhhbmRsaW5nLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgUEFHRV9MRVZFTF9BUElfQ09ORklHLFxyXG4gIENPTVBPTkVOVF9MRVZFTF9BUElfQ09ORklHLFxyXG59IGZyb20gJy4uL2NvbnN0YW50cy9hcGktY29uZmlnLmNvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2xvYmFsRXJyb3JTZXJ2aWNlIHtcclxuICBwdWJsaWMgZ2xvYmFsRXJyb3IkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyBsb2NhbEVycm9yJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBwYWdlTGV2ZWxBcGlDb25maWcgPSBQQUdFX0xFVkVMX0FQSV9DT05GSUc7XHJcbiAgcHJpdmF0ZSBjb21wb25lbnRMZXZlbEFwaUNvbmZpZyA9IENPTVBPTkVOVF9MRVZFTF9BUElfQ09ORklHO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc25hY2tCYXJTZXJ2aWNlOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU29mdEVycm9ycyhldmVudDogSHR0cFJlc3BvbnNlPGFueT4gfCBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgY29uc3QgeERhdGEgPSBldmVudC5oZWFkZXJzLmdldCgnWC1EYXRhJyk7XHJcblxyXG4gICAgaWYgKHhEYXRhKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKHhEYXRhKTtcclxuICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHBhcnNlZERhdGEuc3RhdHVzQ29kZTtcclxuICAgICAgY29uc3Qgc3RhdHVzTWVzc2FnZSA9IHBhcnNlZERhdGEubWVzc2FnZTtcclxuXHJcbiAgICAgIGlmIChzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgIT09IDApIHtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5zaG93KHN0YXR1c01lc3NhZ2UgfHwgJ0Vycm9yIG9jY3VycmVkJywgJ2Vycm9yJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5pc1VuYXV0aGVudGljYXRlZChlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc05ldHdvcmtVbmF2YWlsYWJsZShlcnJvcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hHbG9iYWxFcnJvcihlcnJvcik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZXJ2ZXJFcnJvcihlcnJvcikpIHtcclxuICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJFcnJvcihlcnJvciwgcmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhbmRsZVNvZnRFcnJvcnMoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU2VydmVyRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZXJ2ZXJFcnJvckNvZGVzID0gW1xyXG4gICAgICBFcnJvclN0YXR1c0NvZGUuSW50ZXJuYWxTZXJ2ZXJFcnJvcixcclxuICAgICAgRXJyb3JTdGF0dXNDb2RlLlNlcnZpY2VVbmF2YWlsYWJsZSxcclxuICAgICAgRXJyb3JTdGF0dXNDb2RlLkJhZEdhdGV3YXksXHJcbiAgICAgIEVycm9yU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dCxcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIHNlcnZlckVycm9yQ29kZXMuaW5jbHVkZXMoZXJyb3Iuc3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVbmF1dGhlbnRpY2F0ZWQoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRoZW50aWNhdGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWRBY2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTmV0d29ya1VuYXZhaWxhYmxlKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGVycm9yLnN0YXR1cyA9PT0gRXJyb3JTdGF0dXNDb2RlLk5ldHdvcmtVbmF2YWlsYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2VydmVyRXJyb3IoXHJcbiAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+XHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5pc1BhZ2VMZXZlbEVycm9yKGVycm9yLCByZXF1ZXN0KSkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hHbG9iYWxFcnJvcihlcnJvcik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wb25lbnRMZXZlbEVycm9yKGVycm9yLCByZXF1ZXN0KSkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hMb2NhbEVycm9yKGVycm9yLCByZXF1ZXN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd1NlcnZlclNuYWNrQmFyRXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHVibGlzaEdsb2JhbEVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgdGhpcy5nbG9iYWxFcnJvciQubmV4dChlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHB1Ymxpc2hMb2NhbEVycm9yKFxyXG4gICAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PlxyXG4gICkge1xyXG4gICAgdGhpcy5sb2NhbEVycm9yJC5uZXh0KHsgZXJyb3IsIHJlcXVlc3QgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3dTZXJ2ZXJTbmFja0JhckVycm9yKCkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IEVSUk9SX0NPTkZJRy5TRVJWRVJfRVJST1Iuc25hY2tCYXJNZXNzYWdlO1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uuc2hvdyhtZXNzYWdlLCAnZXJyb3InKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNQYWdlTGV2ZWxFcnJvcihcclxuICAgIGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSxcclxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT5cclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgbWV0aG9kLCBwYXRoLCBxdWVyeSwgYm9keSB9ID0gdGhpcy5wYXJzZVJlcXVlc3QocmVxdWVzdCk7XHJcbiAgICBjb25zdCBwYWdlQ29kZSA9IHRoaXMuZ2V0UGFnZUNvZGUoKTtcclxuXHJcbiAgICBjb25zdCBpc0NvbmZpZ01hdGNoZWQgPSB0aGlzLnBhZ2VMZXZlbEFwaUNvbmZpZy5zb21lKChhcGlDb25maWcpID0+IHtcclxuICAgICAgaWYgKGFwaUNvbmZpZy5tZXRob2QgIT09IG1ldGhvZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoYXBpQ29uZmlnLnBhdGggIT09IHBhdGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgY29uc3QgaXNRdWVyeVN1YnNldCA9IHRoaXMudXRpbFNlcnZpY2UuaXNKc29uU3Vic2V0KFxyXG4gICAgICAgIGFwaUNvbmZpZy5xdWVyeSxcclxuICAgICAgICBxdWVyeVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWlzUXVlcnlTdWJzZXQpIHJldHVybiBmYWxzZTtcclxuICAgICAgY29uc3QgaXNCb2R5TWF0Y2ggPSB0aGlzLnV0aWxTZXJ2aWNlLmlzSnNvblN1YnNldChhcGlDb25maWcuYm9keSwgYm9keSk7XHJcbiAgICAgIGlmICghaXNCb2R5TWF0Y2gpIHJldHVybiBmYWxzZTtcclxuICAgICAgcmV0dXJuIGFwaUNvbmZpZy5wYWdlQ29kZXMuaW5jbHVkZXMocGFnZUNvZGUpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXNDb25maWdNYXRjaGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NvbXBvbmVudExldmVsRXJyb3IoXHJcbiAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+XHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB7IG1ldGhvZCwgdXJsOiBwYXRoLCBwYXJhbXMsIGJvZHkgfSA9IHJlcXVlc3Q7XHJcbiAgICBjb25zdCBxdWVyeTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgcGFyYW1zLmtleXMoKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgcXVlcnlba2V5XSA9IHBhcmFtcy5nZXQoa2V5KTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgaXNDb25maWdGb3VuZCA9IHRoaXMuY29tcG9uZW50TGV2ZWxBcGlDb25maWcuc29tZSgoYXBpQ29uZmlnKSA9PiB7XHJcbiAgICAgIGlmIChhcGlDb25maWcubWV0aG9kICE9PSBtZXRob2QpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKCFwYXRoLmluY2x1ZGVzKGFwaUNvbmZpZy5wYXRoKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBjb25zdCBpc1F1ZXJ5U3Vic2V0ID0gdGhpcy51dGlsU2VydmljZS5pc0pzb25TdWJzZXQoXHJcbiAgICAgICAgcXVlcnksXHJcbiAgICAgICAgYXBpQ29uZmlnLnF1ZXJ5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghaXNRdWVyeVN1YnNldCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoYXBpQ29uZmlnLmJvZHkpIHtcclxuICAgICAgICBjb25zdCBpc0JvZHlNYXRjaCA9IHRoaXMudXRpbFNlcnZpY2UuaXNKc29uU3Vic2V0KGFwaUNvbmZpZy5ib2R5LCBib2R5KTtcclxuICAgICAgICBpZiAoIWlzQm9keU1hdGNoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpc0NvbmZpZ0ZvdW5kO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZVJlcXVlc3QocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pikge1xyXG4gICAgY29uc3QgeyBtZXRob2QsIHVybDogcGF0aCwgcGFyYW1zLCBib2R5IH0gPSByZXF1ZXN0O1xyXG4gICAgY29uc3QgcXVlcnk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIHBhcmFtcy5rZXlzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIHF1ZXJ5W2tleV0gPSBwYXJhbXMuZ2V0KGtleSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IG1ldGhvZCwgcGF0aCwgcXVlcnksIGJvZHkgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFnZUNvZGUoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290LmZpcnN0Q2hpbGQ7XHJcbiAgICByZXR1cm4gY3VycmVudFJvdXRlPy5kYXRhPy5wYWdlQ29kZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class UtilsService {
|
|
4
|
+
isJsonSubset(parentJson, subsetJson) {
|
|
5
|
+
for (let key in subsetJson) {
|
|
6
|
+
if (!parentJson.hasOwnProperty(key) || parentJson[key] !== subsetJson[key]) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
UtilsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: UtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
14
|
+
UtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: UtilsService, providedIn: 'root' });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: UtilsService, decorators: [{
|
|
16
|
+
type: Injectable,
|
|
17
|
+
args: [{
|
|
18
|
+
providedIn: 'root',
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxZQUFZO0lBQ2hCLFlBQVksQ0FBQyxVQUFlLEVBQUUsVUFBZTtRQUNsRCxLQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRTtZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRSxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O3lHQVJVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcclxuICBwdWJsaWMgaXNKc29uU3Vic2V0KHBhcmVudEpzb246IGFueSwgc3Vic2V0SnNvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gc3Vic2V0SnNvbikge1xyXG4gICAgICBpZiAoIXBhcmVudEpzb24uaGFzT3duUHJvcGVydHkoa2V5KSB8fCBwYXJlbnRKc29uW2tleV0gIT09IHN1YnNldEpzb25ba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -8,7 +8,8 @@ import * as i3 from "./ui-kit/snack-bar/snack-bar/snack-bar.component";
|
|
|
8
8
|
import * as i4 from "./shared/components/session-expired/session-expired.component";
|
|
9
9
|
import * as i5 from "./shared/components/unauthorized/unauthorized.component";
|
|
10
10
|
import * as i6 from "./shared/components/chunk-unavailable/chunk-unavailable.component";
|
|
11
|
-
import * as i7 from "
|
|
11
|
+
import * as i7 from "./shared/components/server-error/server-error.component";
|
|
12
|
+
import * as i8 from "@angular/common";
|
|
12
13
|
export class VcErrorHandlersComponent {
|
|
13
14
|
constructor(errorService, snackBarService) {
|
|
14
15
|
this.errorService = errorService;
|
|
@@ -17,6 +18,7 @@ export class VcErrorHandlersComponent {
|
|
|
17
18
|
this.unauthorized = false;
|
|
18
19
|
this.sessionExpired = false;
|
|
19
20
|
this.chunkUnavailable = false;
|
|
21
|
+
this.serverError = false;
|
|
20
22
|
this.isOnline = navigator.onLine;
|
|
21
23
|
this.onNetworkOnline = () => {
|
|
22
24
|
this.isOnline = true;
|
|
@@ -53,6 +55,9 @@ export class VcErrorHandlersComponent {
|
|
|
53
55
|
else if (error.status === ErrorStatusCode.NetworkUnavailable) {
|
|
54
56
|
this.handleNetworkError();
|
|
55
57
|
}
|
|
58
|
+
else if (this.errorService.isServerError(error)) {
|
|
59
|
+
this.serverError = true;
|
|
60
|
+
}
|
|
56
61
|
}
|
|
57
62
|
subscribeNetworkDetection() {
|
|
58
63
|
window.addEventListener('online', this.onNetworkOnline);
|
|
@@ -80,7 +85,8 @@ VcErrorHandlersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
|
|
|
80
85
|
<lib-vc-error-chunk-unavailable
|
|
81
86
|
*ngIf="chunkUnavailable"
|
|
82
87
|
></lib-vc-error-chunk-unavailable>
|
|
83
|
-
|
|
88
|
+
<lib-vc-error-server-error *ngIf="serverError"></lib-vc-error-server-error>
|
|
89
|
+
`, isInline: true, components: [{ type: i3.SnackBarComponent, selector: "app-snack-bar" }, { type: i4.SessionExpiredComponent, selector: "lib-vc-error-session-expired" }, { type: i5.UnauthorizedComponent, selector: "lib-vc-error-unauthorized" }, { type: i6.ChunkUnavailableComponent, selector: "lib-vc-error-chunk-unavailable" }, { type: i7.ServerErrorComponent, selector: "lib-vc-error-server-error" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
84
90
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: VcErrorHandlersComponent, decorators: [{
|
|
85
91
|
type: Component,
|
|
86
92
|
args: [{
|
|
@@ -94,7 +100,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
94
100
|
<lib-vc-error-chunk-unavailable
|
|
95
101
|
*ngIf="chunkUnavailable"
|
|
96
102
|
></lib-vc-error-chunk-unavailable>
|
|
103
|
+
<lib-vc-error-server-error *ngIf="serverError"></lib-vc-error-server-error>
|
|
97
104
|
`,
|
|
98
105
|
}]
|
|
99
106
|
}], ctorParameters: function () { return [{ type: i1.GlobalErrorService }, { type: i2.SnackBarService }]; } });
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmMtZXJyb3ItaGFuZGxlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi92Yy1lcnJvci1oYW5kbGVycy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7O0FBZ0IzRSxNQUFNLE9BQU8sd0JBQXdCO0lBU25DLFlBQ1UsWUFBZ0MsRUFDaEMsZUFBZ0M7UUFEaEMsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQVZsQyxnQkFBVyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUV2RCxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsYUFBUSxHQUFZLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUEyQzdCLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7UUFFTSxxQkFBZ0IsR0FBRyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBN0NBLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQXdCO1FBQzFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsZUFBZSxFQUFFO1lBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRTtZQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFZTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7cUhBeEVVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDZEQVp6Qjs7Ozs7Ozs7OztHQVVUOzJGQUVVLHdCQUF3QjtrQkFkcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEVycm9yU3RhdHVzQ29kZSB9IGZyb20gJy4vc2hhcmVkL3R5cGVzL2dsb2JhbC1lcnJvci50eXBlcyc7XHJcbmltcG9ydCB7IEVSUk9SX0NPTkZJRyB9IGZyb20gJy4vc2hhcmVkL2NvbnN0YW50cy9lcnJvci1oYW5kbGluZy5jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdmMtZXJyb3ItaGFuZGxlcnMnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXNuYWNrLWJhcj48L2FwcC1zbmFjay1iYXI+XHJcbiAgICA8bGliLXZjLWVycm9yLXNlc3Npb24tZXhwaXJlZFxyXG4gICAgICAqbmdJZj1cInNlc3Npb25FeHBpcmVkXCJcclxuICAgID48L2xpYi12Yy1lcnJvci1zZXNzaW9uLWV4cGlyZWQ+XHJcbiAgICA8bGliLXZjLWVycm9yLXVuYXV0aG9yaXplZCAqbmdJZj1cInVuYXV0aG9yaXplZFwiPjwvbGliLXZjLWVycm9yLXVuYXV0aG9yaXplZD5cclxuICAgIDxsaWItdmMtZXJyb3ItY2h1bmstdW5hdmFpbGFibGVcclxuICAgICAgKm5nSWY9XCJjaHVua1VuYXZhaWxhYmxlXCJcclxuICAgID48L2xpYi12Yy1lcnJvci1jaHVuay11bmF2YWlsYWJsZT5cclxuICAgIDxsaWItdmMtZXJyb3Itc2VydmVyLWVycm9yICpuZ0lmPVwic2VydmVyRXJyb3JcIj48L2xpYi12Yy1lcnJvci1zZXJ2ZXItZXJyb3I+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZjRXJyb3JIYW5kbGVyc0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBlcnJvckNvbmZpZyA9IEVSUk9SX0NPTkZJRy5ORVRXT1JLX1VOQVZBSUxBQkxFO1xyXG5cclxuICB1bmF1dGhvcml6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXNzaW9uRXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNodW5rVW5hdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXJ2ZXJFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzT25saW5lOiBib29sZWFuID0gbmF2aWdhdG9yLm9uTGluZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZU5ldHdvcmtEZXRlY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMub25OZXR3b3JrT25saW5lKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5vbk5ldHdvcmtPZmZsaW5lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlR2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmVycm9yU2VydmljZS5nbG9iYWxFcnJvciQuc3Vic2NyaWJlKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkV4cGlyZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWRBY2Nlc3MpIHtcclxuICAgICAgdGhpcy51bmF1dGhvcml6ZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5KU0NodW5rVW5hdmFpbGFibGUpIHtcclxuICAgICAgdGhpcy5jaHVua1VuYXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuTmV0d29ya1VuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTmV0d29ya0Vycm9yKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3JTZXJ2aWNlLmlzU2VydmVyRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgIHRoaXMuc2VydmVyRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVOZXR3b3JrRGV0ZWN0aW9uKCkge1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMub25OZXR3b3JrT25saW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5vbk5ldHdvcmtPZmZsaW5lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT25saW5lID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc09ubGluZSA9IHRydWU7XHJcbiAgICB0aGlzLmhpZGVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT2ZmbGluZSA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNPbmxpbmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTmV0d29ya0Vycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKSB7XHJcbiAgICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93T2ZmbGluZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uuc2hvdyh0aGlzLmVycm9yQ29uZmlnLm9mZmxpbmVNZXNzYWdlLCAnZXJyb3InKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGlkZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2UuaGlkZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|