vc-error-handlers 0.1.7 → 0.1.9
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/components/chunk-unavailable/chunk-unavailable.component.mjs +26 -6
- package/esm2020/lib/shared/components/error-modal/error-modal.component.mjs +61 -0
- package/esm2020/lib/shared/components/page-not-found/page-not-found.component.mjs +27 -25
- package/esm2020/lib/shared/components/server-error/server-error.component.mjs +63 -6
- package/esm2020/lib/shared/components/session-expired/session-expired.component.mjs +11 -11
- package/esm2020/lib/shared/components/unauthorized/unauthorized.component.mjs +21 -22
- package/esm2020/lib/shared/constants/api-config.constants.mjs +43 -0
- package/esm2020/lib/shared/constants/error-handling.constants.mjs +19 -2
- package/esm2020/lib/shared/errorhandler/sentry-error.handler.mjs +15 -10
- package/esm2020/lib/shared/interceptors/http.interceptor.mjs +8 -3
- package/esm2020/lib/shared/services/global-error.service.mjs +115 -5
- package/esm2020/lib/shared/services/util.service.mjs +21 -0
- package/esm2020/lib/shared/types/global-error.types.mjs +1 -1
- package/esm2020/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +1 -2
- package/esm2020/lib/vc-error-handlers.component.mjs +65 -10
- package/esm2020/lib/vc-error-handlers.module.mjs +6 -6
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/vc-error-handlers.mjs +552 -223
- package/fesm2015/vc-error-handlers.mjs.map +1 -1
- package/fesm2020/vc-error-handlers.mjs +550 -223
- package/fesm2020/vc-error-handlers.mjs.map +1 -1
- package/lib/shared/components/chunk-unavailable/chunk-unavailable.component.d.ts +10 -2
- package/lib/shared/components/error-modal/error-modal.component.d.ts +17 -0
- package/lib/shared/components/page-not-found/page-not-found.component.d.ts +5 -1
- package/lib/shared/components/server-error/server-error.component.d.ts +12 -5
- package/lib/shared/components/session-expired/session-expired.component.d.ts +1 -3
- package/lib/shared/components/unauthorized/unauthorized.component.d.ts +3 -1
- package/lib/shared/constants/api-config.constants.d.ts +19 -0
- package/lib/shared/constants/error-handling.constants.d.ts +18 -1
- package/lib/shared/errorhandler/sentry-error.handler.d.ts +5 -3
- package/lib/shared/services/global-error.service.d.ts +20 -1
- package/lib/shared/services/util.service.d.ts +6 -0
- package/lib/shared/types/global-error.types.d.ts +1 -1
- package/lib/vc-error-handlers.component.d.ts +15 -2
- package/lib/vc-error-handlers.module.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2020/lib/shared/components/session-expired-modal/session-expired-modal.component.mjs +0 -48
- package/lib/shared/components/session-expired-modal/session-expired-modal.component.d.ts +0 -18
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { Injectable, Optional } from '@angular/core';
|
|
2
2
|
import * as Sentry from '@sentry/angular-ivy';
|
|
3
|
+
import { ErrorStatusCode } from '../types/global-error.types';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@vcomply/authorizer";
|
|
5
|
-
import * as i2 from "
|
|
6
|
+
import * as i2 from "../services/global-error.service";
|
|
7
|
+
import * as i3 from "../../configuration";
|
|
6
8
|
export class SentryErrorHandler {
|
|
7
|
-
constructor(authorizerService, config) {
|
|
9
|
+
constructor(authorizerService, errorService, config) {
|
|
8
10
|
this.authorizerService = authorizerService;
|
|
11
|
+
this.errorService = errorService;
|
|
9
12
|
if (config?.sentryConfig) {
|
|
10
13
|
const SENTRY_CONFIG = config.sentryConfig;
|
|
11
14
|
Sentry.init({
|
|
@@ -25,21 +28,23 @@ export class SentryErrorHandler {
|
|
|
25
28
|
}
|
|
26
29
|
handleError(error) {
|
|
27
30
|
const ERROR = error?.originalError || error;
|
|
28
|
-
this.
|
|
31
|
+
this.handleChunkNotFoundError(ERROR);
|
|
29
32
|
Sentry.captureException(ERROR);
|
|
30
33
|
}
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
|
|
34
|
+
handleChunkNotFoundError(error) {
|
|
35
|
+
const failedMessage = /Loading chunk [\d]+ failed/;
|
|
36
|
+
if (failedMessage.test(error.message)) {
|
|
37
|
+
this.errorService.globalError$.next({
|
|
38
|
+
status: ErrorStatusCode.JSChunkUnavailable,
|
|
39
|
+
});
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
|
-
SentryErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SentryErrorHandler, deps: [{ token: i1.AuthorizerService }, { token: i2.Configurations, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
43
|
+
SentryErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SentryErrorHandler, deps: [{ token: i1.AuthorizerService }, { token: i2.GlobalErrorService }, { token: i3.Configurations, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
39
44
|
SentryErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SentryErrorHandler });
|
|
40
45
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SentryErrorHandler, decorators: [{
|
|
41
46
|
type: Injectable
|
|
42
|
-
}], ctorParameters: function () { return [{ type: i1.AuthorizerService }, { type: i2.Configurations, decorators: [{
|
|
47
|
+
}], ctorParameters: function () { return [{ type: i1.AuthorizerService }, { type: i2.GlobalErrorService }, { type: i3.Configurations, decorators: [{
|
|
43
48
|
type: Optional
|
|
44
49
|
}] }]; } });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudHJ5LWVycm9yLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Yy1lcnJvci1oYW5kbGVycy9zcmMvbGliL3NoYXJlZC9lcnJvcmhhbmRsZXIvc2VudHJ5LWVycm9yLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sS0FBSyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFNOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQUc5RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1UsaUJBQW9DLEVBQ3BDLFlBQWdDLEVBQzVCLE1BQXVCO1FBRjNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBR3hDLElBQUksTUFBTSxFQUFFLFlBQVksRUFBRTtZQUN4QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHO2dCQUN2QixZQUFZLEVBQUU7b0JBQ1osSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDO3dCQUN4Qix1QkFBdUIsRUFBRSxhQUFhLENBQUMsWUFBWTt3QkFDbkQsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLHNCQUFzQjtxQkFDdEQsQ0FBQztpQkFDSDtnQkFDRCxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCO2dCQUNsRCx3QkFBd0IsRUFBRSxhQUFhLENBQUMsMEJBQTBCO2dCQUNsRSx3QkFBd0IsRUFBRSxhQUFhLENBQUMsMkJBQTJCO2FBQ3BFLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsYUFBYSxJQUFJLEtBQUssQ0FBQztRQUM1QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUFVO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLDRCQUE0QixDQUFDO1FBQ25ELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxNQUFNLEVBQUUsZUFBZSxDQUFDLGtCQUFrQjthQUMzQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7OytHQXJDVSxrQkFBa0I7bUhBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOzswQkFLTixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS9hbmd1bGFyLWl2eSc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbic7XHJcblxyXG5pbXBvcnQgeyBBdXRob3JpemVyU2VydmljZSB9IGZyb20gJ0B2Y29tcGx5L2F1dGhvcml6ZXInO1xyXG5pbXBvcnQgeyBHbG9iYWxFcnJvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBFcnJvclN0YXR1c0NvZGUgfSBmcm9tICcuLi90eXBlcy9nbG9iYWwtZXJyb3IudHlwZXMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2VudHJ5RXJyb3JIYW5kbGVyIGltcGxlbWVudHMgRXJyb3JIYW5kbGVyIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXV0aG9yaXplclNlcnZpY2U6IEF1dGhvcml6ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEdsb2JhbEVycm9yU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIGNvbmZpZz86IENvbmZpZ3VyYXRpb25zXHJcbiAgKSB7XHJcbiAgICBpZiAoY29uZmlnPy5zZW50cnlDb25maWcpIHtcclxuICAgICAgY29uc3QgU0VOVFJZX0NPTkZJRyA9IGNvbmZpZy5zZW50cnlDb25maWc7XHJcbiAgICAgIFNlbnRyeS5pbml0KHtcclxuICAgICAgICBkc246IFNFTlRSWV9DT05GSUc/LkRTTixcclxuICAgICAgICBpbnRlZ3JhdGlvbnM6IFtcclxuICAgICAgICAgIG5ldyBTZW50cnkuQnJvd3NlclRyYWNpbmcoe1xyXG4gICAgICAgICAgICB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0czogU0VOVFJZX0NPTkZJRy5BTExPV19PUklHSU4sXHJcbiAgICAgICAgICAgIHJvdXRpbmdJbnN0cnVtZW50YXRpb246IFNlbnRyeS5yb3V0aW5nSW5zdHJ1bWVudGF0aW9uLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgXSxcclxuICAgICAgICB0cmFjZXNTYW1wbGVSYXRlOiBTRU5UUllfQ09ORklHLlRSQUNFU19TQU1QTEVfUkFURSxcclxuICAgICAgICByZXBsYXlzU2Vzc2lvblNhbXBsZVJhdGU6IFNFTlRSWV9DT05GSUcuUkVQTEFZX1NFU1NJT05fU0FNUExFX1JBVEUsXHJcbiAgICAgICAgcmVwbGF5c09uRXJyb3JTYW1wbGVSYXRlOiBTRU5UUllfQ09ORklHLlJFUExBWV9PTl9FUlJPUl9TQU1QTEVfUkFURSxcclxuICAgICAgfSk7XHJcbiAgICAgIFNlbnRyeS5zZXRVc2VyKHsgdXNlckRldGFpbHM6IHRoaXMuYXV0aG9yaXplclNlcnZpY2UuZ2V0VXNlcigpIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgY29uc3QgRVJST1IgPSBlcnJvcj8ub3JpZ2luYWxFcnJvciB8fCBlcnJvcjtcclxuICAgIHRoaXMuaGFuZGxlQ2h1bmtOb3RGb3VuZEVycm9yKEVSUk9SKTtcclxuICAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKEVSUk9SKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2h1bmtOb3RGb3VuZEVycm9yKGVycm9yOiBhbnkpIHtcclxuICAgIGNvbnN0IGZhaWxlZE1lc3NhZ2UgPSAvTG9hZGluZyBjaHVuayBbXFxkXSsgZmFpbGVkLztcclxuICAgIGlmIChmYWlsZWRNZXNzYWdlLnRlc3QoZXJyb3IubWVzc2FnZSkpIHtcclxuICAgICAgdGhpcy5lcnJvclNlcnZpY2UuZ2xvYmFsRXJyb3IkLm5leHQoe1xyXG4gICAgICAgIHN0YXR1czogRXJyb3JTdGF0dXNDb2RlLkpTQ2h1bmtVbmF2YWlsYWJsZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
+
import { HttpResponse, } from '@angular/common/http';
|
|
2
3
|
import { throwError } from 'rxjs';
|
|
3
|
-
import { catchError, timeout } from 'rxjs/operators';
|
|
4
|
+
import { catchError, tap, timeout } from 'rxjs/operators';
|
|
4
5
|
import { API_TIMEOUT_TIME } from '../constants/error-handling.constants';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../services/global-error.service";
|
|
@@ -9,7 +10,11 @@ export class HttpReqInterceptor {
|
|
|
9
10
|
this.errorService = errorService;
|
|
10
11
|
}
|
|
11
12
|
intercept(req, next) {
|
|
12
|
-
return next.handle(req).pipe(timeout(API_TIMEOUT_TIME),
|
|
13
|
+
return next.handle(req).pipe(timeout(API_TIMEOUT_TIME), tap((event) => {
|
|
14
|
+
if (event instanceof HttpResponse) {
|
|
15
|
+
this.errorService.handleSoftErrors(event);
|
|
16
|
+
}
|
|
17
|
+
}), catchError((error) => {
|
|
13
18
|
this.errorService.handleError(error, req);
|
|
14
19
|
return throwError(error);
|
|
15
20
|
}));
|
|
@@ -20,4 +25,4 @@ HttpReqInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", v
|
|
|
20
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor, decorators: [{
|
|
21
26
|
type: Injectable
|
|
22
27
|
}], ctorParameters: function () { return [{ type: i1.GlobalErrorService }]; } });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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==
|
|
@@ -13,4 +13,4 @@ export var ErrorStatusCode;
|
|
|
13
13
|
// Application-specific errors
|
|
14
14
|
ErrorStatusCode[ErrorStatusCode["JSChunkUnavailable"] = 600] = "JSChunkUnavailable";
|
|
15
15
|
})(ErrorStatusCode || (ErrorStatusCode = {}));
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWVycm9yLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi9zaGFyZWQvdHlwZXMvZ2xvYmFsLWVycm9yLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sQ0FBTixJQUFZLGVBZ0JYO0FBaEJELFdBQVksZUFBZTtJQUN6QixxRUFBaUIsQ0FBQTtJQUNqQixtRkFBd0IsQ0FBQTtJQUN4Qiw2RUFBcUIsQ0FBQTtJQUVyQixxQkFBcUI7SUFDckIscUZBQXlCLENBQUE7SUFDekIsbUZBQXdCLENBQUE7SUFDeEIsbUVBQWdCLENBQUE7SUFDaEIsMkVBQWtCLENBQUE7SUFFbEIsc0NBQXNDO0lBQ3RDLGlGQUFzQixDQUFBO0lBRXRCLDhCQUE4QjtJQUM5QixtRkFBd0IsQ0FBQTtBQUMxQixDQUFDLEVBaEJXLGVBQWUsS0FBZixlQUFlLFFBZ0IxQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nRGF0YSB7XHJcbiAgaGVhZGluZzogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgYnV0dG9uVGV4dDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFcnJvclN0YXR1c0NvZGUge1xyXG4gIFVSTE5vdEZvdW5kID0gNDA0LFxyXG4gIFVuYXV0aG9yaXplZEFjY2VzcyA9IDQwMyxcclxuICBVbmF1dGhlbnRpY2F0ZWQgPSA0MDEsXHJcblxyXG4gIC8vIFNlcnZlci1zaWRlIGVycm9yc1xyXG4gIEludGVybmFsU2VydmVyRXJyb3IgPSA1MDAsXHJcbiAgU2VydmljZVVuYXZhaWxhYmxlID0gNTAzLFxyXG4gIEJhZEdhdGV3YXkgPSA1MDIsXHJcbiAgUmVxdWVzdFRpbWVvdXQ9NTA0LFxyXG5cclxuICAvLyBOZXR3b3JrIHVuYXZhaWxhYmlsaXR5L29mZmxpbmUgY2FzZVxyXG4gIE5ldHdvcmtVbmF2YWlsYWJsZSA9IDAsXHJcblxyXG4gIC8vIEFwcGxpY2F0aW9uLXNwZWNpZmljIGVycm9yc1xyXG4gIEpTQ2h1bmtVbmF2YWlsYWJsZSA9IDYwMCxcclxufVxyXG4iXX0=
|
|
@@ -25,7 +25,6 @@ export class SnackBarComponent {
|
|
|
25
25
|
}
|
|
26
26
|
this.message = state.message;
|
|
27
27
|
this.show = state.show;
|
|
28
|
-
this.setAutoClose();
|
|
29
28
|
});
|
|
30
29
|
}
|
|
31
30
|
setAutoClose() {
|
|
@@ -48,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
48
47
|
type: Component,
|
|
49
48
|
args: [{ selector: 'app-snack-bar', template: "<div class=\"workflow-snackbar\" *ngIf=\"show\">\r\n <div class=\"workflow-snackbar-inner\">\r\n <div class=\"workflow-snackbarText\">\r\n <!--  -->\r\n <i class=\"icons\" [class]=\"type\" [innerHTML]=\"icon\"></i> <span [innerHTML]=\"message\">{{ message }}</span>\r\n </div>\r\n <button (click)=\"close()\">[ <span>Close</span> ]</button>\r\n </div>\r\n </div>", styles: ["::ng-deep .workflow-snackbar{position:fixed;top:20px;left:0;right:0;display:flex;align-items:center;justify-content:center;z-index:2147483647!important;pointer-events:none;animation:slide-top .3s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .workflow-snackbar.white{background-color:#fff;color:#000;z-index:20}::ng-deep .workflow-snackbar.white button{color:#f6882f;font-size:11px;font-weight:400;pointer-events:all}::ng-deep .workflow-snackbar .workflow-snackbar-inner{display:flex;max-width:500px;min-width:450px;align-items:center;justify-content:space-between;padding:10px;background:#ffffff;border-radius:3px;box-shadow:0 0 10px #0003;min-height:55px;pointer-events:auto}::ng-deep .workflow-snackbar .workflow-snackbar-inner .workflow-snackbarText{color:#161b2f;font-size:13px;display:flex;align-items:center;width:calc(100% - 70px)}::ng-deep .workflow-snackbar .workflow-snackbar-inner .workflow-snackbarText i{background:#f1f1f1;color:#d93b41;border-radius:50px;font-size:16px;width:30px;height:30px;text-align:center;line-height:28px;margin-right:10px;min-width:30px}::ng-deep .workflow-snackbar .workflow-snackbar-inner .workflow-snackbarText i.success{color:#34aa44}::ng-deep .workflow-snackbar .workflow-snackbar-inner .workflow-snackbarText i.warning{color:#f0b819}::ng-deep .workflow-snackbar .workflow-snackbar-inner .workflow-snackbarText i.info{color:#1e5dd3}::ng-deep .workflow-snackbar .workflow-snackbar-inner .workflow-snackbarText i.alert,::ng-deep .workflow-snackbar .workflow-snackbar-inner .workflow-snackbarText i.error{color:#d93b41}::ng-deep .workflow-snackbar .workflow-snackbar-inner button{background:transparent;border:none;font-size:11px;padding:0;position:relative;color:#747576;width:65px;text-align:right;cursor:pointer;text-transform:uppercase}::ng-deep .workflow-snackbar .workflow-snackbar-inner button span{color:#1e5dd3;font-weight:500}::ng-deep .workflow-snackbar .workflow-snackbar-inner button:focus{outline:none}@keyframes slide-top{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}\n"] }]
|
|
50
49
|
}], ctorParameters: function () { return [{ type: i1.SnackBarService }]; } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZjLWVycm9yLWhhbmRsZXJzL3NyYy9saWIvdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIvc25hY2stYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZjLWVycm9yLWhhbmRsZXJzL3NyYy9saWIvdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIvc25hY2stYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDOzs7O0FBUzdELE1BQU0sT0FBTyxpQkFBaUI7SUFhNUIsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBWnBELFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsU0FBSSxHQUFHLFVBQVUsQ0FBQztRQUNsQixTQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ2YsVUFBSyxHQUFRO1lBQ1gsT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFLFVBQVU7WUFDakIsS0FBSyxFQUFFLFVBQVU7U0FDbEIsQ0FBQztJQUVxRCxDQUFDO0lBRXhELFFBQVE7UUFDTixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUN0RSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQzthQUN6QjtZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWTtRQUNWLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7OEdBeENVLGlCQUFpQjtrR0FBakIsaUJBQWlCLHFEQ1Q5Qix3WkFRUTsyRkRDSyxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNuYWNrLWJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NuYWNrLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc25hY2stYmFyLmNvbXBvbmVudC5sZXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbmFja0JhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBzaG93ID0gZmFsc2U7XHJcbiAgbWVzc2FnZSA9ICctLSc7XHJcbiAgaWNvbiA9ICcmI3hlOTE0Oyc7XHJcbiAgdHlwZSA9ICdhbGVydCc7XHJcbiAgaWNvbnM6IGFueSA9IHtcclxuICAgIHN1Y2Nlc3M6ICcmI3hlOTNkOycsXHJcbiAgICB3YXJuaW5nOiAnJiN4ZTkxNDsnLFxyXG4gICAgaW5mbzogJyYjeGU5MzI7JyxcclxuICAgIGFsZXJ0OiAnJiN4ZTkxNDsnLFxyXG4gICAgZXJyb3I6ICcmI3hlYWFlOycsXHJcbiAgfTtcclxuICBzbmFja2JhclN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrYmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc25hY2tiYXJTdWJzY3JpcHRpb24gPSB0aGlzLnNuYWNrYmFyU2VydmljZS5zbmFja2JhclN0YXRlLnN1YnNjcmliZShcclxuICAgICAgKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmljb24gJiYgT2JqZWN0LmtleXModGhpcy5pY29ucykuaW5jbHVkZXMoc3RhdGU/Lmljb24pKSB7XHJcbiAgICAgICAgICB0aGlzLmljb24gPSB0aGlzLmljb25zW3N0YXRlLmljb25dO1xyXG4gICAgICAgICAgdGhpcy50eXBlID0gc3RhdGU/Lmljb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHN0YXRlLm1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5zaG93ID0gc3RhdGUuc2hvdztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEF1dG9DbG9zZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfSwgMzAwMCk7XHJcbiAgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNuYWNrYmFyU2VydmljZS5oaWRlKCk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zbmFja2JhclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwid29ya2Zsb3ctc25hY2tiYXJcIiAqbmdJZj1cInNob3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3b3JrZmxvdy1zbmFja2Jhci1pbm5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctc25hY2tiYXJUZXh0XCI+XHJcbiAgICAgICAgPCEtLSAmI3hlOTE0OyAtLT5cclxuICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgW2NsYXNzXT1cInR5cGVcIiBbaW5uZXJIVE1MXT1cImljb25cIj48L2k+IDxzcGFuIFtpbm5lckhUTUxdPVwibWVzc2FnZVwiPnt7IG1lc3NhZ2UgfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCI+WyA8c3Bhbj5DbG9zZTwvc3Bhbj4gXTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+Il19
|
|
@@ -1,18 +1,42 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { ErrorStatusCode } from './shared/types/global-error.types';
|
|
3
|
+
import { ERROR_CONFIG } from './shared/constants/error-handling.constants';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "./shared/services/global-error.service";
|
|
5
|
-
import * as i2 from "./
|
|
6
|
-
import * as i3 from "./
|
|
7
|
-
import * as i4 from "
|
|
6
|
+
import * as i2 from "./ui-kit/snack-bar/snack-bar.service";
|
|
7
|
+
import * as i3 from "./ui-kit/snack-bar/snack-bar/snack-bar.component";
|
|
8
|
+
import * as i4 from "./shared/components/session-expired/session-expired.component";
|
|
9
|
+
import * as i5 from "./shared/components/unauthorized/unauthorized.component";
|
|
10
|
+
import * as i6 from "./shared/components/chunk-unavailable/chunk-unavailable.component";
|
|
11
|
+
import * as i7 from "./shared/components/server-error/server-error.component";
|
|
12
|
+
import * as i8 from "@angular/common";
|
|
8
13
|
export class VcErrorHandlersComponent {
|
|
9
|
-
constructor(errorService) {
|
|
14
|
+
constructor(errorService, snackBarService) {
|
|
10
15
|
this.errorService = errorService;
|
|
16
|
+
this.snackBarService = snackBarService;
|
|
17
|
+
this.errorConfig = ERROR_CONFIG.NETWORK_UNAVAILABLE;
|
|
11
18
|
this.unauthorized = false;
|
|
12
19
|
this.sessionExpired = false;
|
|
13
|
-
this.
|
|
20
|
+
this.chunkUnavailable = false;
|
|
21
|
+
this.serverError = false;
|
|
22
|
+
this.isOnline = navigator.onLine;
|
|
23
|
+
this.onNetworkOnline = () => {
|
|
24
|
+
this.isOnline = true;
|
|
25
|
+
this.hideSnackBar();
|
|
26
|
+
};
|
|
27
|
+
this.onNetworkOffline = () => {
|
|
28
|
+
this.isOnline = false;
|
|
29
|
+
this.showOfflineSnackBar();
|
|
30
|
+
};
|
|
14
31
|
this.subscribeGlobalError();
|
|
15
32
|
}
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
this.subscribeNetworkDetection();
|
|
35
|
+
}
|
|
36
|
+
ngOnDestroy() {
|
|
37
|
+
window.removeEventListener('online', this.onNetworkOnline);
|
|
38
|
+
window.removeEventListener('offline', this.onNetworkOffline);
|
|
39
|
+
}
|
|
16
40
|
subscribeGlobalError() {
|
|
17
41
|
this.errorService.globalError$.subscribe((error) => {
|
|
18
42
|
this.handleError(error);
|
|
@@ -25,28 +49,59 @@ export class VcErrorHandlersComponent {
|
|
|
25
49
|
else if (error.status === ErrorStatusCode.UnauthorizedAccess) {
|
|
26
50
|
this.unauthorized = true;
|
|
27
51
|
}
|
|
52
|
+
else if (error.status === ErrorStatusCode.JSChunkUnavailable) {
|
|
53
|
+
this.chunkUnavailable = true;
|
|
54
|
+
}
|
|
28
55
|
else if (error.status === ErrorStatusCode.NetworkUnavailable) {
|
|
29
|
-
this.
|
|
56
|
+
this.handleNetworkError();
|
|
30
57
|
}
|
|
58
|
+
else if (this.errorService.isServerError(error)) {
|
|
59
|
+
this.serverError = true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
subscribeNetworkDetection() {
|
|
63
|
+
window.addEventListener('online', this.onNetworkOnline);
|
|
64
|
+
window.addEventListener('offline', this.onNetworkOffline);
|
|
65
|
+
}
|
|
66
|
+
handleNetworkError() {
|
|
67
|
+
if (!this.isOnline) {
|
|
68
|
+
this.showOfflineSnackBar();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
showOfflineSnackBar() {
|
|
72
|
+
this.snackBarService.show(this.errorConfig.offlineMessage, 'error');
|
|
73
|
+
}
|
|
74
|
+
hideSnackBar() {
|
|
75
|
+
this.snackBarService.hide();
|
|
31
76
|
}
|
|
32
77
|
}
|
|
33
|
-
VcErrorHandlersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: VcErrorHandlersComponent, deps: [{ token: i1.GlobalErrorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
78
|
+
VcErrorHandlersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: VcErrorHandlersComponent, deps: [{ token: i1.GlobalErrorService }, { token: i2.SnackBarService }], target: i0.ɵɵFactoryTarget.Component });
|
|
34
79
|
VcErrorHandlersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: VcErrorHandlersComponent, selector: "lib-vc-error-handlers", ngImport: i0, template: `
|
|
80
|
+
<app-snack-bar></app-snack-bar>
|
|
35
81
|
<lib-vc-error-session-expired
|
|
36
82
|
*ngIf="sessionExpired"
|
|
37
83
|
></lib-vc-error-session-expired>
|
|
38
84
|
<lib-vc-error-unauthorized *ngIf="unauthorized"></lib-vc-error-unauthorized>
|
|
39
|
-
|
|
85
|
+
<lib-vc-error-chunk-unavailable
|
|
86
|
+
*ngIf="chunkUnavailable"
|
|
87
|
+
></lib-vc-error-chunk-unavailable>
|
|
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"] }] });
|
|
40
90
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: VcErrorHandlersComponent, decorators: [{
|
|
41
91
|
type: Component,
|
|
42
92
|
args: [{
|
|
43
93
|
selector: 'lib-vc-error-handlers',
|
|
44
94
|
template: `
|
|
95
|
+
<app-snack-bar></app-snack-bar>
|
|
45
96
|
<lib-vc-error-session-expired
|
|
46
97
|
*ngIf="sessionExpired"
|
|
47
98
|
></lib-vc-error-session-expired>
|
|
48
99
|
<lib-vc-error-unauthorized *ngIf="unauthorized"></lib-vc-error-unauthorized>
|
|
100
|
+
<lib-vc-error-chunk-unavailable
|
|
101
|
+
*ngIf="chunkUnavailable"
|
|
102
|
+
></lib-vc-error-chunk-unavailable>
|
|
103
|
+
<lib-vc-error-server-error *ngIf="serverError"></lib-vc-error-server-error>
|
|
49
104
|
`,
|
|
50
105
|
}]
|
|
51
|
-
}], ctorParameters: function () { return [{ type: i1.GlobalErrorService }]; } });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
}], ctorParameters: function () { return [{ type: i1.GlobalErrorService }, { type: i2.SnackBarService }]; } });
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmMtZXJyb3ItaGFuZGxlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi92Yy1lcnJvci1oYW5kbGVycy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7O0FBZ0IzRSxNQUFNLE9BQU8sd0JBQXdCO0lBU25DLFlBQ1UsWUFBZ0MsRUFDaEMsZUFBZ0M7UUFEaEMsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQVZsQyxnQkFBVyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUV2RCxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsYUFBUSxHQUFZLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUEyQzdCLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7UUFFTSxxQkFBZ0IsR0FBRyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBN0NBLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQXdCO1FBQzFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsZUFBZSxFQUFFO1lBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRTtZQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFZTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7cUhBeEVVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDZEQVp6Qjs7Ozs7Ozs7OztHQVVUOzJGQUVVLHdCQUF3QjtrQkFkcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEVycm9yU3RhdHVzQ29kZSB9IGZyb20gJy4vc2hhcmVkL3R5cGVzL2dsb2JhbC1lcnJvci50eXBlcyc7XHJcbmltcG9ydCB7IEVSUk9SX0NPTkZJRyB9IGZyb20gJy4vc2hhcmVkL2NvbnN0YW50cy9lcnJvci1oYW5kbGluZy5jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdmMtZXJyb3ItaGFuZGxlcnMnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXNuYWNrLWJhcj48L2FwcC1zbmFjay1iYXI+XHJcbiAgICA8bGliLXZjLWVycm9yLXNlc3Npb24tZXhwaXJlZFxyXG4gICAgICAqbmdJZj1cInNlc3Npb25FeHBpcmVkXCJcclxuICAgID48L2xpYi12Yy1lcnJvci1zZXNzaW9uLWV4cGlyZWQ+XHJcbiAgICA8bGliLXZjLWVycm9yLXVuYXV0aG9yaXplZCAqbmdJZj1cInVuYXV0aG9yaXplZFwiPjwvbGliLXZjLWVycm9yLXVuYXV0aG9yaXplZD5cclxuICAgIDxsaWItdmMtZXJyb3ItY2h1bmstdW5hdmFpbGFibGVcclxuICAgICAgKm5nSWY9XCJjaHVua1VuYXZhaWxhYmxlXCJcclxuICAgID48L2xpYi12Yy1lcnJvci1jaHVuay11bmF2YWlsYWJsZT5cclxuICAgIDxsaWItdmMtZXJyb3Itc2VydmVyLWVycm9yICpuZ0lmPVwic2VydmVyRXJyb3JcIj48L2xpYi12Yy1lcnJvci1zZXJ2ZXItZXJyb3I+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZjRXJyb3JIYW5kbGVyc0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBlcnJvckNvbmZpZyA9IEVSUk9SX0NPTkZJRy5ORVRXT1JLX1VOQVZBSUxBQkxFO1xyXG5cclxuICB1bmF1dGhvcml6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXNzaW9uRXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNodW5rVW5hdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXJ2ZXJFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzT25saW5lOiBib29sZWFuID0gbmF2aWdhdG9yLm9uTGluZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZU5ldHdvcmtEZXRlY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMub25OZXR3b3JrT25saW5lKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5vbk5ldHdvcmtPZmZsaW5lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlR2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmVycm9yU2VydmljZS5nbG9iYWxFcnJvciQuc3Vic2NyaWJlKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkV4cGlyZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWRBY2Nlc3MpIHtcclxuICAgICAgdGhpcy51bmF1dGhvcml6ZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5KU0NodW5rVW5hdmFpbGFibGUpIHtcclxuICAgICAgdGhpcy5jaHVua1VuYXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuTmV0d29ya1VuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTmV0d29ya0Vycm9yKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3JTZXJ2aWNlLmlzU2VydmVyRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgIHRoaXMuc2VydmVyRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVOZXR3b3JrRGV0ZWN0aW9uKCkge1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMub25OZXR3b3JrT25saW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5vbk5ldHdvcmtPZmZsaW5lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT25saW5lID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc09ubGluZSA9IHRydWU7XHJcbiAgICB0aGlzLmhpZGVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT2ZmbGluZSA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNPbmxpbmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTmV0d29ya0Vycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKSB7XHJcbiAgICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93T2ZmbGluZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uuc2hvdyh0aGlzLmVycm9yQ29uZmlnLm9mZmxpbmVNZXNzYWdlLCAnZXJyb3InKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGlkZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2UuaGlkZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -11,8 +11,8 @@ import { UnauthorizedComponent } from './shared/components/unauthorized/unauthor
|
|
|
11
11
|
import { SessionExpiredComponent } from './shared/components/session-expired/session-expired.component';
|
|
12
12
|
import { ChunkUnavailableComponent } from './shared/components/chunk-unavailable/chunk-unavailable.component';
|
|
13
13
|
import { ServerErrorComponent } from './shared/components/server-error/server-error.component';
|
|
14
|
-
import { SessionExpiredModalComponent } from './shared/components/session-expired-modal/session-expired-modal.component';
|
|
15
14
|
import { HttpReqInterceptor } from './shared/interceptors/http.interceptor';
|
|
15
|
+
import { ErrorModalComponent } from './shared/components/error-modal/error-modal.component';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
export const FOR_ROOT_SENTRY_OPTIONS_TOKEN = new InjectionToken('forRoot() SentryErrorHandler options');
|
|
18
18
|
export class VcErrorHandlersModule {
|
|
@@ -30,13 +30,13 @@ VcErrorHandlersModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", v
|
|
|
30
30
|
SessionExpiredComponent,
|
|
31
31
|
ChunkUnavailableComponent,
|
|
32
32
|
ServerErrorComponent,
|
|
33
|
-
|
|
33
|
+
ErrorModalComponent], imports: [CommonModule, DialogModule, SnackBarModule], exports: [VcErrorHandlersComponent,
|
|
34
34
|
PageNotFoundComponent,
|
|
35
35
|
UnauthorizedComponent,
|
|
36
36
|
SessionExpiredComponent,
|
|
37
37
|
ChunkUnavailableComponent,
|
|
38
38
|
ServerErrorComponent,
|
|
39
|
-
|
|
39
|
+
ErrorModalComponent] });
|
|
40
40
|
VcErrorHandlersModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: VcErrorHandlersModule, providers: [
|
|
41
41
|
{ provide: ErrorHandler, useClass: SentryErrorHandler },
|
|
42
42
|
{ provide: HTTP_INTERCEPTORS, useClass: HttpReqInterceptor, multi: true },
|
|
@@ -51,7 +51,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
51
51
|
SessionExpiredComponent,
|
|
52
52
|
ChunkUnavailableComponent,
|
|
53
53
|
ServerErrorComponent,
|
|
54
|
-
|
|
54
|
+
ErrorModalComponent,
|
|
55
55
|
],
|
|
56
56
|
imports: [CommonModule, DialogModule, SnackBarModule],
|
|
57
57
|
exports: [
|
|
@@ -61,7 +61,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
61
61
|
SessionExpiredComponent,
|
|
62
62
|
ChunkUnavailableComponent,
|
|
63
63
|
ServerErrorComponent,
|
|
64
|
-
|
|
64
|
+
ErrorModalComponent,
|
|
65
65
|
],
|
|
66
66
|
providers: [
|
|
67
67
|
{ provide: ErrorHandler, useClass: SentryErrorHandler },
|
|
@@ -70,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
70
70
|
bootstrap: [VcErrorHandlersComponent],
|
|
71
71
|
}]
|
|
72
72
|
}] });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmMtZXJyb3ItaGFuZGxlcnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi92Yy1lcnJvci1oYW5kbGVycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBRWQsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN4RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUUvRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7QUFFNUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzdELHNDQUFzQyxDQUN2QyxDQUFDO0FBNEJGLE1BQU0sT0FBTyxxQkFBcUI7SUFDekIsTUFBTSxDQUFDLE9BQU8sQ0FDbkIsaUJBQWlDO1FBRWpDLE9BQU87WUFDTCxRQUFRLEVBQUUscUJBQXFCO1lBQy9CLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztTQUN0RSxDQUFDO0lBQ0osQ0FBQzs7a0hBUlUscUJBQXFCO21IQUFyQixxQkFBcUIsY0FGcEIsd0JBQXdCLGtCQXRCbEMsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixxQkFBcUI7UUFDckIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6QixvQkFBb0I7UUFDcEIsbUJBQW1CLGFBRVgsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLGFBRWxELHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIscUJBQXFCO1FBQ3JCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIsb0JBQW9CO1FBQ3BCLG1CQUFtQjttSEFRVixxQkFBcUIsYUFOckI7UUFDVCxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1FBQ3ZELEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0tBQzFFLFlBYlEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQzsyRkFnQjFDLHFCQUFxQjtrQkExQmpDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLHdCQUF3Qjt3QkFDeEIscUJBQXFCO3dCQUNyQixxQkFBcUI7d0JBQ3JCLHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLG1CQUFtQjtxQkFDcEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUM7b0JBQ3JELE9BQU8sRUFBRTt3QkFDUCx3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLHlCQUF5Qjt3QkFDekIsb0JBQW9CO3dCQUNwQixtQkFBbUI7cUJBQ3BCO29CQUNELFNBQVMsRUFBRTt3QkFDVCxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO3dCQUN2RCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtxQkFDMUU7b0JBQ0QsU0FBUyxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBFcnJvckhhbmRsZXIsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgTW9kdWxlV2l0aFByb3ZpZGVycyxcclxuICBOZ01vZHVsZSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgeyBQYWdlTm90Rm91bmRDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL3BhZ2Utbm90LWZvdW5kL3BhZ2Utbm90LWZvdW5kLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZjRXJyb3JIYW5kbGVyc0NvbXBvbmVudCB9IGZyb20gJy4vdmMtZXJyb3ItaGFuZGxlcnMuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJy4vdWkta2l0L2RpYWxvZy9kaWFsb2cubW9kdWxlJztcclxuaW1wb3J0IHsgU25hY2tCYXJNb2R1bGUgfSBmcm9tICcuL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLm1vZHVsZSc7XHJcblxyXG5pbXBvcnQgeyBCcm93c2VyT3B0aW9ucyB9IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XHJcbmltcG9ydCB7IEdsb2JhbEVycm9ySGFuZGxlciB9IGZyb20gJy4vc2hhcmVkL2Vycm9yaGFuZGxlci9jaHVuay1lcnJvci5oYW5kbGVyJztcclxuaW1wb3J0IHsgU2VudHJ5RXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9zaGFyZWQvZXJyb3JoYW5kbGVyL3NlbnRyeS1lcnJvci5oYW5kbGVyJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnMgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBVbmF1dGhvcml6ZWRDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL3VuYXV0aG9yaXplZC91bmF1dGhvcml6ZWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2Vzc2lvbkV4cGlyZWRDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL3Nlc3Npb24tZXhwaXJlZC9zZXNzaW9uLWV4cGlyZWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2h1bmtVbmF2YWlsYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2h1bmstdW5hdmFpbGFibGUvY2h1bmstdW5hdmFpbGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VydmVyRXJyb3JDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL3NlcnZlci1lcnJvci9zZXJ2ZXItZXJyb3IuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEh0dHBSZXFJbnRlcmNlcHRvciB9IGZyb20gJy4vc2hhcmVkL2ludGVyY2VwdG9ycy9odHRwLmludGVyY2VwdG9yJztcclxuaW1wb3J0IHsgRXJyb3JNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvZXJyb3ItbW9kYWwvZXJyb3ItbW9kYWwuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBGT1JfUk9PVF9TRU5UUllfT1BUSU9OU19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCcm93c2VyT3B0aW9ucz4oXHJcbiAgJ2ZvclJvb3QoKSBTZW50cnlFcnJvckhhbmRsZXIgb3B0aW9ucydcclxuKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBWY0Vycm9ySGFuZGxlcnNDb21wb25lbnQsXHJcbiAgICBQYWdlTm90Rm91bmRDb21wb25lbnQsXHJcbiAgICBVbmF1dGhvcml6ZWRDb21wb25lbnQsXHJcbiAgICBTZXNzaW9uRXhwaXJlZENvbXBvbmVudCxcclxuICAgIENodW5rVW5hdmFpbGFibGVDb21wb25lbnQsXHJcbiAgICBTZXJ2ZXJFcnJvckNvbXBvbmVudCxcclxuICAgIEVycm9yTW9kYWxDb21wb25lbnQsXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIFNuYWNrQmFyTW9kdWxlXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBWY0Vycm9ySGFuZGxlcnNDb21wb25lbnQsXHJcbiAgICBQYWdlTm90Rm91bmRDb21wb25lbnQsXHJcbiAgICBVbmF1dGhvcml6ZWRDb21wb25lbnQsXHJcbiAgICBTZXNzaW9uRXhwaXJlZENvbXBvbmVudCxcclxuICAgIENodW5rVW5hdmFpbGFibGVDb21wb25lbnQsXHJcbiAgICBTZXJ2ZXJFcnJvckNvbXBvbmVudCxcclxuICAgIEVycm9yTW9kYWxDb21wb25lbnQsXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHsgcHJvdmlkZTogRXJyb3JIYW5kbGVyLCB1c2VDbGFzczogU2VudHJ5RXJyb3JIYW5kbGVyIH0sXHJcbiAgICB7IHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogSHR0cFJlcUludGVyY2VwdG9yLCBtdWx0aTogdHJ1ZSB9LFxyXG4gIF0sXHJcbiAgYm9vdHN0cmFwOiBbVmNFcnJvckhhbmRsZXJzQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZjRXJyb3JIYW5kbGVyc01vZHVsZSB7XHJcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KFxyXG4gICAgZW52aXJvbm1lbnRDb25maWc6IENvbmZpZ3VyYXRpb25zXHJcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxWY0Vycm9ySGFuZGxlcnNNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBWY0Vycm9ySGFuZGxlcnNNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQ29uZmlndXJhdGlvbnMsIHVzZVZhbHVlOiBlbnZpcm9ubWVudENvbmZpZyB9XSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export * from './lib/shared/components/unauthorized/unauthorized.component';
|
|
|
11
11
|
export * from './lib/shared/components/chunk-unavailable/chunk-unavailable.component';
|
|
12
12
|
export * from './lib/shared/components/server-error/server-error.component';
|
|
13
13
|
export * from './lib/shared/components/session-expired/session-expired.component';
|
|
14
|
-
export * from './lib/shared/components/
|
|
14
|
+
export * from './lib/shared/components/error-modal/error-modal.component';
|
|
15
15
|
export * from './lib/vc-error-handlers.module';
|
|
16
16
|
export * from './lib/shared/interceptors/http.interceptor';
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3ZjLWVycm9yLWhhbmRsZXJzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLHVFQUF1RSxDQUFDO0FBQ3RGLGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyxtRUFBbUUsQ0FBQztBQUNsRixjQUFjLDJEQUEyRCxDQUFDO0FBQzFFLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyw0Q0FBNEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB2Yy1lcnJvci1oYW5kbGVyc1xyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZjLWVycm9yLWhhbmRsZXJzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvc2VydmljZXMvZ2xvYmFsLWVycm9yLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL3NlcnZpY2VzL3JvdXRlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmMtZXJyb3ItaGFuZGxlcnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFnZS1ub3QtZm91bmQvcGFnZS1ub3QtZm91bmQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvdW5hdXRob3JpemVkL3VuYXV0aG9yaXplZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jaHVuay11bmF2YWlsYWJsZS9jaHVuay11bmF2YWlsYWJsZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9zZXJ2ZXItZXJyb3Ivc2VydmVyLWVycm9yLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9jb21wb25lbnRzL3Nlc3Npb24tZXhwaXJlZC9zZXNzaW9uLWV4cGlyZWQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvZXJyb3ItbW9kYWwvZXJyb3ItbW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmMtZXJyb3ItaGFuZGxlcnMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2ludGVyY2VwdG9ycy9odHRwLmludGVyY2VwdG9yJztcclxuIl19
|