@abp/ng.theme.shared 5.0.0 → 5.1.2
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/{esm2015/abp-ng.theme.shared.js → esm2020/abp-ng.theme.shared.mjs} +0 -0
- package/{esm2015/extensions/abp-ng.theme.shared-extensions.js → esm2020/extensions/abp-ng.theme.shared-extensions.mjs} +0 -0
- package/esm2020/extensions/lib/adapters/date-time.adapter.mjs +44 -0
- package/{esm2015/extensions/lib/adapters/date.adapter.js → esm2020/extensions/lib/adapters/date.adapter.mjs} +4 -4
- package/{esm2015/extensions/lib/adapters/time.adapter.js → esm2020/extensions/lib/adapters/time.adapter.mjs} +4 -4
- package/{esm2015/extensions/lib/components/abstract-actions/abstract-actions.component.js → esm2020/extensions/lib/components/abstract-actions/abstract-actions.component.mjs} +4 -4
- package/{esm2015/extensions/lib/components/date-time-picker/date-time-picker.component.js → esm2020/extensions/lib/components/date-time-picker/date-time-picker.component.mjs} +5 -5
- package/esm2020/extensions/lib/components/extensible-form/extensible-form-prop.component.mjs +159 -0
- package/esm2020/extensions/lib/components/extensible-form/extensible-form.component.mjs +64 -0
- package/esm2020/extensions/lib/components/extensible-table/extensible-table.component.mjs +128 -0
- package/esm2020/extensions/lib/components/grid-actions/grid-actions.component.mjs +39 -0
- package/esm2020/extensions/lib/components/page-toolbar/page-toolbar.component.mjs +40 -0
- package/{esm2015/extensions/lib/constants/extra-properties.js → esm2020/extensions/lib/constants/extra-properties.mjs} +0 -0
- package/{esm2015/extensions/lib/directives/disabled.directive.js → esm2020/extensions/lib/directives/disabled.directive.mjs} +4 -4
- package/{esm2015/extensions/lib/directives/prop-data.directive.js → esm2020/extensions/lib/directives/prop-data.directive.mjs} +4 -4
- package/{esm2015/extensions/lib/enums/props.enum.js → esm2020/extensions/lib/enums/props.enum.mjs} +0 -0
- package/{esm2015/extensions/lib/models/actions.js → esm2020/extensions/lib/models/actions.mjs} +0 -0
- package/{esm2015/extensions/lib/models/entity-actions.js → esm2020/extensions/lib/models/entity-actions.mjs} +0 -0
- package/esm2020/extensions/lib/models/entity-props.mjs +36 -0
- package/{esm2015/extensions/lib/models/form-props.js → esm2020/extensions/lib/models/form-props.mjs} +0 -0
- package/{esm2015/extensions/lib/models/internal/object-extensions.js → esm2020/extensions/lib/models/internal/object-extensions.mjs} +0 -0
- package/{esm2015/extensions/lib/models/object-extensions.js → esm2020/extensions/lib/models/object-extensions.mjs} +0 -0
- package/{esm2015/extensions/lib/models/props.js → esm2020/extensions/lib/models/props.mjs} +0 -0
- package/{esm2015/extensions/lib/models/toolbar-actions.js → esm2020/extensions/lib/models/toolbar-actions.mjs} +0 -0
- package/{esm2015/extensions/lib/services/extensions.service.js → esm2020/extensions/lib/services/extensions.service.mjs} +4 -4
- package/{esm2015/extensions/lib/tokens/extensions.token.js → esm2020/extensions/lib/tokens/extensions.token.mjs} +0 -0
- package/{esm2015/extensions/lib/ui-extensions.module.js → esm2020/extensions/lib/ui-extensions.module.mjs} +9 -9
- package/{esm2015/extensions/lib/utils/actions.util.js → esm2020/extensions/lib/utils/actions.util.mjs} +0 -0
- package/{esm2015/extensions/lib/utils/enum.util.js → esm2020/extensions/lib/utils/enum.util.mjs} +0 -0
- package/{esm2015/extensions/lib/utils/factory.util.js → esm2020/extensions/lib/utils/factory.util.mjs} +0 -0
- package/{esm2015/extensions/lib/utils/form-props.util.js → esm2020/extensions/lib/utils/form-props.util.mjs} +0 -0
- package/{esm2015/extensions/lib/utils/localization.util.js → esm2020/extensions/lib/utils/localization.util.mjs} +0 -0
- package/{esm2015/extensions/lib/utils/props.util.js → esm2020/extensions/lib/utils/props.util.mjs} +0 -0
- package/{esm2015/extensions/lib/utils/state.util.js → esm2020/extensions/lib/utils/state.util.mjs} +2 -3
- package/{esm2015/extensions/lib/utils/typeahead.util.js → esm2020/extensions/lib/utils/typeahead.util.mjs} +0 -0
- package/{esm2015/extensions/lib/utils/validation.util.js → esm2020/extensions/lib/utils/validation.util.mjs} +0 -0
- package/{esm2015/extensions/public-api.js → esm2020/extensions/public-api.mjs} +0 -0
- package/{esm2015/lib/animations/bounce.animations.js → esm2020/lib/animations/bounce.animations.mjs} +0 -0
- package/{esm2015/lib/animations/collapse.animations.js → esm2020/lib/animations/collapse.animations.mjs} +0 -0
- package/{esm2015/lib/animations/fade.animations.js → esm2020/lib/animations/fade.animations.mjs} +0 -0
- package/{esm2015/lib/animations/index.js → esm2020/lib/animations/index.mjs} +0 -0
- package/{esm2015/lib/animations/modal.animations.js → esm2020/lib/animations/modal.animations.mjs} +0 -0
- package/{esm2015/lib/animations/slide.animations.js → esm2020/lib/animations/slide.animations.mjs} +0 -0
- package/{esm2015/lib/animations/toast.animations.js → esm2020/lib/animations/toast.animations.mjs} +0 -0
- package/esm2020/lib/components/breadcrumb/breadcrumb.component.mjs +43 -0
- package/esm2020/lib/components/breadcrumb-items/breadcrumb-items.component.mjs +19 -0
- package/esm2020/lib/components/button/button.component.mjs +97 -0
- package/esm2020/lib/components/confirmation/confirmation.component.mjs +36 -0
- package/esm2020/lib/components/http-error-wrapper/http-error-wrapper.component.mjs +59 -0
- package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
- package/{esm2015/lib/components/loader-bar/loader-bar.component.js → esm2020/lib/components/loader-bar/loader-bar.component.mjs} +6 -11
- package/{esm2015/lib/components/loading/loading.component.js → esm2020/lib/components/loading/loading.component.mjs} +5 -5
- package/{esm2015/lib/components/modal/modal-close.directive.js → esm2020/lib/components/modal/modal-close.directive.mjs} +5 -6
- package/{esm2015/lib/components/modal/modal-ref.service.js → esm2020/lib/components/modal/modal-ref.service.mjs} +4 -4
- package/esm2020/lib/components/modal/modal.component.mjs +189 -0
- package/esm2020/lib/components/toast/toast.component.mjs +55 -0
- package/esm2020/lib/components/toast-container/toast-container.component.mjs +43 -0
- package/{esm2015/lib/constants/styles.js → esm2020/lib/constants/styles.mjs} +0 -0
- package/{esm2015/lib/constants/validation.js → esm2020/lib/constants/validation.mjs} +0 -0
- package/{esm2015/lib/directives/ellipsis.directive.js → esm2020/lib/directives/ellipsis.directive.mjs} +8 -8
- package/{esm2015/lib/directives/index.js → esm2020/lib/directives/index.mjs} +0 -0
- package/esm2020/lib/directives/loading.directive.mjs +89 -0
- package/{esm2015/lib/directives/ngx-datatable-default.directive.js → esm2020/lib/directives/ngx-datatable-default.directive.mjs} +4 -4
- package/{esm2015/lib/directives/ngx-datatable-list.directive.js → esm2020/lib/directives/ngx-datatable-list.directive.mjs} +4 -4
- package/{esm2015/lib/enums/index.js → esm2020/lib/enums/index.mjs} +0 -0
- package/{esm2015/lib/enums/route-names.js → esm2020/lib/enums/route-names.mjs} +0 -0
- package/{esm2015/lib/handlers/document-dir.handler.js → esm2020/lib/handlers/document-dir.handler.mjs} +4 -4
- package/esm2020/lib/handlers/error.handler.mjs +286 -0
- package/{esm2015/lib/handlers/index.js → esm2020/lib/handlers/index.mjs} +0 -0
- package/{esm2015/lib/models/common.js → esm2020/lib/models/common.mjs} +0 -0
- package/{esm2015/lib/models/confirmation.js → esm2020/lib/models/confirmation.mjs} +0 -0
- package/esm2020/lib/models/index.mjs +7 -0
- package/esm2020/lib/models/nav-item.mjs +7 -0
- package/{esm2015/lib/models/statistics.js → esm2020/lib/models/statistics.mjs} +0 -0
- package/{esm2015/lib/models/toaster.js → esm2020/lib/models/toaster.mjs} +0 -0
- package/esm2020/lib/models/user-menu.mjs +4 -0
- package/{esm2015/lib/providers/index.js → esm2020/lib/providers/index.mjs} +0 -0
- package/{esm2015/lib/providers/ng-bootstrap-config.provider.js → esm2020/lib/providers/ng-bootstrap-config.provider.mjs} +0 -0
- package/{esm2015/lib/providers/route.provider.js → esm2020/lib/providers/route.provider.mjs} +0 -0
- package/esm2020/lib/services/abstract-menu.service.mjs +50 -0
- package/{esm2015/lib/services/confirmation.service.js → esm2020/lib/services/confirmation.service.mjs} +4 -4
- package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +2 -1
- package/esm2020/lib/services/nav-items.service.mjs +17 -0
- package/esm2020/lib/services/page-alert.service.mjs +28 -0
- package/esm2020/lib/services/toaster.service.mjs +103 -0
- package/esm2020/lib/services/user-menu.service.mjs +17 -0
- package/esm2020/lib/theme-shared.module.mjs +162 -0
- package/{esm2015/lib/tokens/append-content.token.js → esm2020/lib/tokens/append-content.token.mjs} +0 -0
- package/esm2020/lib/tokens/http-error.token.mjs +14 -0
- package/{esm2015/lib/tokens/index.js → esm2020/lib/tokens/index.mjs} +0 -0
- package/{esm2015/lib/tokens/ngx-datatable-messages.token.js → esm2020/lib/tokens/ngx-datatable-messages.token.mjs} +0 -0
- package/{esm2015/lib/tokens/suppress-unsaved-changes-warning.token.js → esm2020/lib/tokens/suppress-unsaved-changes-warning.token.mjs} +0 -0
- package/{esm2015/lib/utils/date-parser-formatter.js → esm2020/lib/utils/date-parser-formatter.mjs} +5 -6
- package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
- package/{esm2015/lib/utils/validation-utils.js → esm2020/lib/utils/validation-utils.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/{esm2015/testing/abp-ng.theme.shared-testing.js → esm2020/testing/abp-ng.theme.shared-testing.mjs} +0 -0
- package/{esm2015/testing/lib/models/config.js → esm2020/testing/lib/models/config.mjs} +0 -0
- package/{esm2015/testing/lib/models/index.js → esm2020/testing/lib/models/index.mjs} +0 -0
- package/esm2020/testing/lib/theme-shared-testing.module.mjs +46 -0
- package/{esm2015/testing/public-api.js → esm2020/testing/public-api.mjs} +0 -0
- package/extensions/lib/models/entity-props.d.ts +1 -1
- package/extensions/lib/tokens/extensions.token.d.ts +1 -1
- package/extensions/package.json +5 -5
- package/fesm2015/abp-ng.theme.shared-extensions.mjs +1329 -0
- package/fesm2015/abp-ng.theme.shared-extensions.mjs.map +1 -0
- package/fesm2015/{abp-ng.theme.shared-testing.js → abp-ng.theme.shared-testing.mjs} +5 -5
- package/fesm2015/abp-ng.theme.shared-testing.mjs.map +1 -0
- package/fesm2015/{abp-ng.theme.shared.js → abp-ng.theme.shared.mjs} +174 -175
- package/fesm2015/abp-ng.theme.shared.mjs.map +1 -0
- package/{fesm2015/abp-ng.theme.shared-extensions.js → fesm2020/abp-ng.theme.shared-extensions.mjs} +80 -99
- package/fesm2020/abp-ng.theme.shared-extensions.mjs.map +1 -0
- package/fesm2020/abp-ng.theme.shared-testing.mjs +57 -0
- package/fesm2020/abp-ng.theme.shared-testing.mjs.map +1 -0
- package/fesm2020/abp-ng.theme.shared.mjs +2202 -0
- package/fesm2020/abp-ng.theme.shared.mjs.map +1 -0
- package/lib/models/index.d.ts +2 -1
- package/lib/models/user-menu.d.ts +8 -0
- package/lib/services/abstract-menu.service.d.ts +12 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/services/nav-items.service.d.ts +3 -8
- package/lib/services/user-menu.service.d.ts +8 -0
- package/package.json +38 -8
- package/testing/package.json +5 -5
- package/bundles/abp-ng.theme.shared-extensions.umd.js +0 -1904
- package/bundles/abp-ng.theme.shared-extensions.umd.js.map +0 -1
- package/bundles/abp-ng.theme.shared-testing.umd.js +0 -82
- package/bundles/abp-ng.theme.shared-testing.umd.js.map +0 -1
- package/bundles/abp-ng.theme.shared.umd.js +0 -2506
- package/bundles/abp-ng.theme.shared.umd.js.map +0 -1
- package/esm2015/extensions/lib/adapters/date-time.adapter.js +0 -34
- package/esm2015/extensions/lib/components/extensible-form/extensible-form-prop.component.js +0 -164
- package/esm2015/extensions/lib/components/extensible-form/extensible-form.component.js +0 -70
- package/esm2015/extensions/lib/components/extensible-table/extensible-table.component.js +0 -134
- package/esm2015/extensions/lib/components/grid-actions/grid-actions.component.js +0 -45
- package/esm2015/extensions/lib/components/page-toolbar/page-toolbar.component.js +0 -46
- package/esm2015/extensions/lib/models/entity-props.js +0 -34
- package/esm2015/lib/components/breadcrumb/breadcrumb.component.js +0 -49
- package/esm2015/lib/components/breadcrumb-items/breadcrumb-items.component.js +0 -22
- package/esm2015/lib/components/button/button.component.js +0 -98
- package/esm2015/lib/components/confirmation/confirmation.component.js +0 -40
- package/esm2015/lib/components/http-error-wrapper/http-error-wrapper.component.js +0 -65
- package/esm2015/lib/components/modal/modal.component.js +0 -188
- package/esm2015/lib/components/toast/toast.component.js +0 -61
- package/esm2015/lib/components/toast-container/toast-container.component.js +0 -49
- package/esm2015/lib/directives/loading.directive.js +0 -90
- package/esm2015/lib/handlers/error.handler.js +0 -292
- package/esm2015/lib/models/index.js +0 -6
- package/esm2015/lib/models/nav-item.js +0 -7
- package/esm2015/lib/services/nav-items.service.js +0 -51
- package/esm2015/lib/services/page-alert.service.js +0 -26
- package/esm2015/lib/services/toaster.service.js +0 -103
- package/esm2015/lib/theme-shared.module.js +0 -165
- package/esm2015/lib/tokens/http-error.token.js +0 -10
- package/esm2015/testing/lib/theme-shared-testing.module.js +0 -43
- package/fesm2015/abp-ng.theme.shared-extensions.js.map +0 -1
- package/fesm2015/abp-ng.theme.shared-testing.js.map +0 -1
- package/fesm2015/abp-ng.theme.shared.js.map +0 -1
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { AuthService, HttpErrorReporterService, RouterEvents, } from '@abp/ng.core';
|
|
2
|
-
import { HttpErrorResponse } from '@angular/common/http';
|
|
3
|
-
import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector, RendererFactory2, } from '@angular/core';
|
|
4
|
-
import { ResolveEnd } from '@angular/router';
|
|
5
|
-
import { Observable, of, Subject, throwError } from 'rxjs';
|
|
6
|
-
import { catchError, filter, switchMap } from 'rxjs/operators';
|
|
7
|
-
import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component';
|
|
8
|
-
import { ConfirmationService } from '../services/confirmation.service';
|
|
9
|
-
import { HTTP_ERROR_HANDLER } from '../tokens/http-error.token';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
export const DEFAULT_ERROR_MESSAGES = {
|
|
12
|
-
defaultError: {
|
|
13
|
-
title: 'An error has occurred!',
|
|
14
|
-
details: 'Error detail not sent by server.',
|
|
15
|
-
},
|
|
16
|
-
defaultError401: {
|
|
17
|
-
title: 'You are not authenticated!',
|
|
18
|
-
details: 'You should be authenticated (sign in) in order to perform this operation.',
|
|
19
|
-
},
|
|
20
|
-
defaultError403: {
|
|
21
|
-
title: 'You are not authorized!',
|
|
22
|
-
details: 'You are not allowed to perform this operation.',
|
|
23
|
-
},
|
|
24
|
-
defaultError404: {
|
|
25
|
-
title: 'Resource not found!',
|
|
26
|
-
details: 'The resource requested could not found on the server.',
|
|
27
|
-
},
|
|
28
|
-
defaultError500: {
|
|
29
|
-
title: 'Internal server error',
|
|
30
|
-
details: 'Error detail not sent by server.',
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
export const DEFAULT_ERROR_LOCALIZATIONS = {
|
|
34
|
-
defaultError: {
|
|
35
|
-
title: 'AbpUi::DefaultErrorMessage',
|
|
36
|
-
details: 'AbpUi::DefaultErrorMessageDetail',
|
|
37
|
-
},
|
|
38
|
-
defaultError401: {
|
|
39
|
-
title: 'AbpUi::DefaultErrorMessage401',
|
|
40
|
-
details: 'AbpUi::DefaultErrorMessage401Detail',
|
|
41
|
-
},
|
|
42
|
-
defaultError403: {
|
|
43
|
-
title: 'AbpUi::DefaultErrorMessage403',
|
|
44
|
-
details: 'AbpUi::DefaultErrorMessage403Detail',
|
|
45
|
-
},
|
|
46
|
-
defaultError404: {
|
|
47
|
-
title: 'AbpUi::DefaultErrorMessage404',
|
|
48
|
-
details: 'AbpUi::DefaultErrorMessage404Detail',
|
|
49
|
-
},
|
|
50
|
-
defaultError500: {
|
|
51
|
-
title: 'AbpUi::500Message',
|
|
52
|
-
details: 'AbpUi::DefaultErrorMessage',
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
export class ErrorHandler {
|
|
56
|
-
constructor(injector) {
|
|
57
|
-
this.injector = injector;
|
|
58
|
-
this.componentRef = null;
|
|
59
|
-
this.httpErrorHandler = this.injector.get(HTTP_ERROR_HANDLER, (_, err) => throwError(err));
|
|
60
|
-
this.executeErrorHandler = (error) => {
|
|
61
|
-
const returnValue = this.httpErrorHandler(this.injector, error);
|
|
62
|
-
return (returnValue instanceof Observable ? returnValue : of(null)).pipe(catchError(err => {
|
|
63
|
-
this.handleError(err);
|
|
64
|
-
return of(null);
|
|
65
|
-
}));
|
|
66
|
-
};
|
|
67
|
-
this.filterRestErrors = ({ status }) => {
|
|
68
|
-
if (typeof status !== 'number')
|
|
69
|
-
return false;
|
|
70
|
-
return (!!this.httpErrorConfig.skipHandledErrorCodes &&
|
|
71
|
-
this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === status) < 0);
|
|
72
|
-
};
|
|
73
|
-
this.filterRouteErrors = (navigationError) => {
|
|
74
|
-
var _a, _b;
|
|
75
|
-
return (((_b = (_a = navigationError.error) === null || _a === void 0 ? void 0 : _a.message) === null || _b === void 0 ? void 0 : _b.indexOf('Cannot match')) > -1 &&
|
|
76
|
-
!!this.httpErrorConfig.skipHandledErrorCodes &&
|
|
77
|
-
this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === 404) < 0);
|
|
78
|
-
};
|
|
79
|
-
this.httpErrorReporter = injector.get(HttpErrorReporterService);
|
|
80
|
-
this.routerEvents = injector.get(RouterEvents);
|
|
81
|
-
this.confirmationService = injector.get(ConfirmationService);
|
|
82
|
-
this.cfRes = injector.get(ComponentFactoryResolver);
|
|
83
|
-
this.rendererFactory = injector.get(RendererFactory2);
|
|
84
|
-
this.httpErrorConfig = injector.get('HTTP_ERROR_CONFIG');
|
|
85
|
-
this.listenToRestError();
|
|
86
|
-
this.listenToRouterError();
|
|
87
|
-
this.listenToRouterDataResolved();
|
|
88
|
-
}
|
|
89
|
-
listenToRouterError() {
|
|
90
|
-
this.routerEvents
|
|
91
|
-
.getNavigationEvents('Error')
|
|
92
|
-
.pipe(filter(this.filterRouteErrors))
|
|
93
|
-
.subscribe(() => this.show404Page());
|
|
94
|
-
}
|
|
95
|
-
listenToRouterDataResolved() {
|
|
96
|
-
this.routerEvents
|
|
97
|
-
.getEvents(ResolveEnd)
|
|
98
|
-
.pipe(filter(() => !!this.componentRef))
|
|
99
|
-
.subscribe(() => {
|
|
100
|
-
var _a;
|
|
101
|
-
(_a = this.componentRef) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
102
|
-
this.componentRef = null;
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
listenToRestError() {
|
|
106
|
-
this.httpErrorReporter.reporter$
|
|
107
|
-
.pipe(filter(this.filterRestErrors), switchMap(this.executeErrorHandler))
|
|
108
|
-
.subscribe();
|
|
109
|
-
}
|
|
110
|
-
handleError(err) {
|
|
111
|
-
var _a;
|
|
112
|
-
const body = ((_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.error) || {
|
|
113
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
114
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
115
|
-
};
|
|
116
|
-
if (err instanceof HttpErrorResponse && err.headers.get('_AbpErrorFormat')) {
|
|
117
|
-
const confirmation$ = this.showErrorWithRequestBody(body);
|
|
118
|
-
if (err.status === 401) {
|
|
119
|
-
confirmation$.subscribe(() => {
|
|
120
|
-
this.navigateToLogin();
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
switch (err.status) {
|
|
126
|
-
case 401:
|
|
127
|
-
this.canCreateCustomError(401)
|
|
128
|
-
? this.show401Page()
|
|
129
|
-
: this.showError({
|
|
130
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title,
|
|
131
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title,
|
|
132
|
-
}, {
|
|
133
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details,
|
|
134
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details,
|
|
135
|
-
}).subscribe(() => this.navigateToLogin());
|
|
136
|
-
break;
|
|
137
|
-
case 403:
|
|
138
|
-
this.createErrorComponent({
|
|
139
|
-
title: {
|
|
140
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.title,
|
|
141
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title,
|
|
142
|
-
},
|
|
143
|
-
details: {
|
|
144
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.details,
|
|
145
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details,
|
|
146
|
-
},
|
|
147
|
-
status: 403,
|
|
148
|
-
});
|
|
149
|
-
break;
|
|
150
|
-
case 404:
|
|
151
|
-
this.canCreateCustomError(404)
|
|
152
|
-
? this.show404Page()
|
|
153
|
-
: this.showError({
|
|
154
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.details,
|
|
155
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details,
|
|
156
|
-
}, {
|
|
157
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title,
|
|
158
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title,
|
|
159
|
-
});
|
|
160
|
-
break;
|
|
161
|
-
case 500:
|
|
162
|
-
this.createErrorComponent({
|
|
163
|
-
title: {
|
|
164
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.title,
|
|
165
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title,
|
|
166
|
-
},
|
|
167
|
-
details: {
|
|
168
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.details,
|
|
169
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details,
|
|
170
|
-
},
|
|
171
|
-
status: 500,
|
|
172
|
-
});
|
|
173
|
-
break;
|
|
174
|
-
case 0:
|
|
175
|
-
if (err.statusText === 'Unknown Error') {
|
|
176
|
-
this.createErrorComponent({
|
|
177
|
-
title: {
|
|
178
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
179
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
180
|
-
},
|
|
181
|
-
details: err.message,
|
|
182
|
-
isHomeShow: false,
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
break;
|
|
186
|
-
default:
|
|
187
|
-
this.showError({
|
|
188
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.details,
|
|
189
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.details,
|
|
190
|
-
}, {
|
|
191
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
192
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
193
|
-
});
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
show401Page() {
|
|
199
|
-
this.createErrorComponent({
|
|
200
|
-
title: {
|
|
201
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title,
|
|
202
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title,
|
|
203
|
-
},
|
|
204
|
-
status: 401,
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
show404Page() {
|
|
208
|
-
this.createErrorComponent({
|
|
209
|
-
title: {
|
|
210
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title,
|
|
211
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title,
|
|
212
|
-
},
|
|
213
|
-
status: 404,
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
showErrorWithRequestBody(body) {
|
|
217
|
-
let message;
|
|
218
|
-
let title;
|
|
219
|
-
if (body.details) {
|
|
220
|
-
message = body.details;
|
|
221
|
-
title = body.message;
|
|
222
|
-
}
|
|
223
|
-
else if (body.message) {
|
|
224
|
-
title = {
|
|
225
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
226
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
227
|
-
};
|
|
228
|
-
message = body.message;
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
message = body.message || {
|
|
232
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
233
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
234
|
-
};
|
|
235
|
-
title = '';
|
|
236
|
-
}
|
|
237
|
-
return this.showError(message, title);
|
|
238
|
-
}
|
|
239
|
-
showError(message, title) {
|
|
240
|
-
return this.confirmationService.error(message, title, {
|
|
241
|
-
hideCancelBtn: true,
|
|
242
|
-
yesText: 'AbpAccount::Close',
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
navigateToLogin() {
|
|
246
|
-
this.injector.get(AuthService).navigateToLogin();
|
|
247
|
-
}
|
|
248
|
-
createErrorComponent(instance) {
|
|
249
|
-
var _a, _b;
|
|
250
|
-
const renderer = this.rendererFactory.createRenderer(null, null);
|
|
251
|
-
const host = renderer.selectRootElement(document.body, true);
|
|
252
|
-
this.componentRef = this.cfRes
|
|
253
|
-
.resolveComponentFactory(HttpErrorWrapperComponent)
|
|
254
|
-
.create(this.injector);
|
|
255
|
-
for (const key in instance) {
|
|
256
|
-
/* istanbul ignore else */
|
|
257
|
-
if (Object.prototype.hasOwnProperty.call(this.componentRef.instance, key)) {
|
|
258
|
-
this.componentRef.instance[key] = instance[key];
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
this.componentRef.instance.hideCloseIcon = !!((_a = this.httpErrorConfig.errorScreen) === null || _a === void 0 ? void 0 : _a.hideCloseIcon);
|
|
262
|
-
const appRef = this.injector.get(ApplicationRef);
|
|
263
|
-
if (this.canCreateCustomError(instance.status)) {
|
|
264
|
-
this.componentRef.instance.cfRes = this.cfRes;
|
|
265
|
-
this.componentRef.instance.appRef = appRef;
|
|
266
|
-
this.componentRef.instance.injector = this.injector;
|
|
267
|
-
this.componentRef.instance.customComponent = (_b = this.httpErrorConfig.errorScreen) === null || _b === void 0 ? void 0 : _b.component;
|
|
268
|
-
}
|
|
269
|
-
appRef.attachView(this.componentRef.hostView);
|
|
270
|
-
renderer.appendChild(host, this.componentRef.hostView.rootNodes[0]);
|
|
271
|
-
const destroy$ = new Subject();
|
|
272
|
-
this.componentRef.instance.destroy$ = destroy$;
|
|
273
|
-
destroy$.subscribe(() => {
|
|
274
|
-
var _a;
|
|
275
|
-
(_a = this.componentRef) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
276
|
-
this.componentRef = null;
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
canCreateCustomError(status) {
|
|
280
|
-
var _a, _b, _c, _d, _e, _f;
|
|
281
|
-
return !!(((_b = (_a = this.httpErrorConfig) === null || _a === void 0 ? void 0 : _a.errorScreen) === null || _b === void 0 ? void 0 : _b.component) &&
|
|
282
|
-
((_d = (_c = this.httpErrorConfig) === null || _c === void 0 ? void 0 : _c.errorScreen) === null || _d === void 0 ? void 0 : _d.forWhichErrors) &&
|
|
283
|
-
((_f = (_e = this.httpErrorConfig) === null || _e === void 0 ? void 0 : _e.errorScreen) === null || _f === void 0 ? void 0 : _f.forWhichErrors.indexOf(status)) > -1);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
ErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ErrorHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
287
|
-
ErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ErrorHandler, providedIn: 'root' });
|
|
288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ErrorHandler, decorators: [{
|
|
289
|
-
type: Injectable,
|
|
290
|
-
args: [{ providedIn: 'root' }]
|
|
291
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
292
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9zcmMvbGliL2hhbmRsZXJzL2Vycm9yLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCx3QkFBd0IsRUFFeEIsWUFBWSxHQUNiLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFDTCxjQUFjLEVBQ2Qsd0JBQXdCLEVBR3hCLFVBQVUsRUFDVixRQUFRLEVBQ1IsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUcxRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFaEUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7SUFDcEMsWUFBWSxFQUFFO1FBQ1osS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixPQUFPLEVBQUUsa0NBQWtDO0tBQzVDO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsS0FBSyxFQUFFLDRCQUE0QjtRQUNuQyxPQUFPLEVBQUUsMkVBQTJFO0tBQ3JGO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsS0FBSyxFQUFFLHlCQUF5QjtRQUNoQyxPQUFPLEVBQUUsZ0RBQWdE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QUEsTUFBQSxJQUFJLENBQUMsZUFBZSwwQ0FBRSxXQUFXLDBDQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUcsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7SUFDSixDQUFDOzswR0FuUVUsWUFBWTs4R0FBWixZQUFZLGNBREMsTUFBTTs0RkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEF1dGhTZXJ2aWNlLFxyXG4gIEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSxcclxuICBMb2NhbGl6YXRpb25QYXJhbSxcclxuICBSb3V0ZXJFdmVudHMsXHJcbn0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25SZWYsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBFbWJlZGRlZFZpZXdSZWYsXHJcbiAgSW5qZWN0YWJsZSxcclxuICBJbmplY3RvcixcclxuICBSZW5kZXJlckZhY3RvcnkyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXJyb3IsIFJlc29sdmVFbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSHR0cEVycm9yV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvaHR0cC1lcnJvci13cmFwcGVyL2h0dHAtZXJyb3Itd3JhcHBlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFcnJvclNjcmVlbkVycm9yQ29kZXMsIEh0dHBFcnJvckNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9jb21tb24nO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29uZmlybWF0aW9uJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpcm1hdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSFRUUF9FUlJPUl9IQU5ETEVSIH0gZnJvbSAnLi4vdG9rZW5zL2h0dHAtZXJyb3IudG9rZW4nO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVJST1JfTUVTU0FHRVMgPSB7XHJcbiAgZGVmYXVsdEVycm9yOiB7XHJcbiAgICB0aXRsZTogJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCEnLFxyXG4gICAgZGV0YWlsczogJ0Vycm9yIGRldGFpbCBub3Qgc2VudCBieSBzZXJ2ZXIuJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjQwMToge1xyXG4gICAgdGl0bGU6ICdZb3UgYXJlIG5vdCBhdXRoZW50aWNhdGVkIScsXHJcbiAgICBkZXRhaWxzOiAnWW91IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkIChzaWduIGluKSBpbiBvcmRlciB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLicsXHJcbiAgfSxcclxuICBkZWZhdWx0RXJyb3I0MDM6IHtcclxuICAgIHRpdGxlOiAnWW91IGFyZSBub3QgYXV0aG9yaXplZCEnLFxyXG4gICAgZGV0YWlsczogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbi4nLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNDA0OiB7XHJcbiAgICB0aXRsZTogJ1Jlc291cmNlIG5vdCBmb3VuZCEnLFxyXG4gICAgZGV0YWlsczogJ1RoZSByZXNvdXJjZSByZXF1ZXN0ZWQgY291bGQgbm90IGZvdW5kIG9uIHRoZSBzZXJ2ZXIuJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjUwMDoge1xyXG4gICAgdGl0bGU6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3InLFxyXG4gICAgZGV0YWlsczogJ0Vycm9yIGRldGFpbCBub3Qgc2VudCBieSBzZXJ2ZXIuJyxcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUyA9IHtcclxuICBkZWZhdWx0RXJyb3I6IHtcclxuICAgIHRpdGxlOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2UnLFxyXG4gICAgZGV0YWlsczogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlRGV0YWlsJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjQwMToge1xyXG4gICAgdGl0bGU6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZTQwMScsXHJcbiAgICBkZXRhaWxzOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2U0MDFEZXRhaWwnLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNDAzOiB7XHJcbiAgICB0aXRsZTogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlNDAzJyxcclxuICAgIGRldGFpbHM6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZTQwM0RldGFpbCcsXHJcbiAgfSxcclxuICBkZWZhdWx0RXJyb3I0MDQ6IHtcclxuICAgIHRpdGxlOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2U0MDQnLFxyXG4gICAgZGV0YWlsczogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlNDA0RGV0YWlsJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjUwMDoge1xyXG4gICAgdGl0bGU6ICdBYnBVaTo6NTAwTWVzc2FnZScsXHJcbiAgICBkZXRhaWxzOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2UnLFxyXG4gIH0sXHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgRXJyb3JIYW5kbGVyIHtcclxuICBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxIdHRwRXJyb3JXcmFwcGVyQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgaHR0cEVycm9ySGFuZGxlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KEhUVFBfRVJST1JfSEFORExFUiwgKF8sIGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+XHJcbiAgICB0aHJvd0Vycm9yKGVyciksXHJcbiAgKTtcclxuXHJcbiAgcHJvdGVjdGVkIGh0dHBFcnJvclJlcG9ydGVyOiBIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHJvdXRlckV2ZW50czogUm91dGVyRXZlbnRzO1xyXG4gIHByb3RlY3RlZCBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCBjZlJlczogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xyXG4gIHByb3RlY3RlZCByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTI7XHJcbiAgcHJvdGVjdGVkIGh0dHBFcnJvckNvbmZpZzogSHR0cEVycm9yQ29uZmlnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyID0gaW5qZWN0b3IuZ2V0KEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSk7XHJcbiAgICB0aGlzLnJvdXRlckV2ZW50cyA9IGluamVjdG9yLmdldChSb3V0ZXJFdmVudHMpO1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbmZpcm1hdGlvblNlcnZpY2UpO1xyXG4gICAgdGhpcy5jZlJlcyA9IGluamVjdG9yLmdldChDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xyXG4gICAgdGhpcy5yZW5kZXJlckZhY3RvcnkgPSBpbmplY3Rvci5nZXQoUmVuZGVyZXJGYWN0b3J5Mik7XHJcbiAgICB0aGlzLmh0dHBFcnJvckNvbmZpZyA9IGluamVjdG9yLmdldCgnSFRUUF9FUlJPUl9DT05GSUcnKTtcclxuXHJcbiAgICB0aGlzLmxpc3RlblRvUmVzdEVycm9yKCk7XHJcbiAgICB0aGlzLmxpc3RlblRvUm91dGVyRXJyb3IoKTtcclxuICAgIHRoaXMubGlzdGVuVG9Sb3V0ZXJEYXRhUmVzb2x2ZWQoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub1JvdXRlckVycm9yKCkge1xyXG4gICAgdGhpcy5yb3V0ZXJFdmVudHNcclxuICAgICAgLmdldE5hdmlnYXRpb25FdmVudHMoJ0Vycm9yJylcclxuICAgICAgLnBpcGUoZmlsdGVyKHRoaXMuZmlsdGVyUm91dGVFcnJvcnMpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvdzQwNFBhZ2UoKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuVG9Sb3V0ZXJEYXRhUmVzb2x2ZWQoKSB7XHJcbiAgICB0aGlzLnJvdXRlckV2ZW50c1xyXG4gICAgICAuZ2V0RXZlbnRzKFJlc29sdmVFbmQpXHJcbiAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhIXRoaXMuY29tcG9uZW50UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblRvUmVzdEVycm9yKCkge1xyXG4gICAgdGhpcy5odHRwRXJyb3JSZXBvcnRlci5yZXBvcnRlciRcclxuICAgICAgLnBpcGUoZmlsdGVyKHRoaXMuZmlsdGVyUmVzdEVycm9ycyksIHN3aXRjaE1hcCh0aGlzLmV4ZWN1dGVFcnJvckhhbmRsZXIpKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4ZWN1dGVFcnJvckhhbmRsZXIgPSAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSB0aGlzLmh0dHBFcnJvckhhbmRsZXIodGhpcy5pbmplY3RvciwgZXJyb3IpO1xyXG5cclxuICAgIHJldHVybiAocmV0dXJuVmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gcmV0dXJuVmFsdWUgOiBvZihudWxsKSkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogYW55KSB7XHJcbiAgICBjb25zdCBib2R5ID0gZXJyPy5lcnJvcj8uZXJyb3IgfHwge1xyXG4gICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3IudGl0bGUsXHJcbiAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3IudGl0bGUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiBlcnIuaGVhZGVycy5nZXQoJ19BYnBFcnJvckZvcm1hdCcpKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbiQgPSB0aGlzLnNob3dFcnJvcldpdGhSZXF1ZXN0Qm9keShib2R5KTtcclxuXHJcbiAgICAgIGlmIChlcnIuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICBjb25maXJtYXRpb24kLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Mb2dpbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzd2l0Y2ggKGVyci5zdGF0dXMpIHtcclxuICAgICAgICBjYXNlIDQwMTpcclxuICAgICAgICAgIHRoaXMuY2FuQ3JlYXRlQ3VzdG9tRXJyb3IoNDAxKVxyXG4gICAgICAgICAgICA/IHRoaXMuc2hvdzQwMVBhZ2UoKVxyXG4gICAgICAgICAgICA6IHRoaXMuc2hvd0Vycm9yKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3I0MDEudGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3I0MDEudGl0bGUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3I0MDEuZGV0YWlscyxcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvcjQwMS5kZXRhaWxzLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLm5hdmlnYXRlVG9Mb2dpbigpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDAzOlxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVFcnJvckNvbXBvbmVudCh7XHJcbiAgICAgICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNDAzLnRpdGxlLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3I0MDMudGl0bGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHtcclxuICAgICAgICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3I0MDMuZGV0YWlscyxcclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yNDAzLmRldGFpbHMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0YXR1czogNDAzLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQwNDpcclxuICAgICAgICAgIHRoaXMuY2FuQ3JlYXRlQ3VzdG9tRXJyb3IoNDA0KVxyXG4gICAgICAgICAgICA/IHRoaXMuc2hvdzQwNFBhZ2UoKVxyXG4gICAgICAgICAgICA6IHRoaXMuc2hvd0Vycm9yKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3I0MDQuZGV0YWlscyxcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvcjQwNC5kZXRhaWxzLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNDA0LnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yNDA0LnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA1MDA6XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUVycm9yQ29tcG9uZW50KHtcclxuICAgICAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3I1MDAudGl0bGUsXHJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvcjUwMC50aXRsZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGV0YWlsczoge1xyXG4gICAgICAgICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvcjUwMC5kZXRhaWxzLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3I1MDAuZGV0YWlscyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3RhdHVzOiA1MDAsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgIGlmIChlcnIuc3RhdHVzVGV4dCA9PT0gJ1Vua25vd24gRXJyb3InKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRXJyb3JDb21wb25lbnQoe1xyXG4gICAgICAgICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3IudGl0bGUsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZGV0YWlsczogZXJyLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgaXNIb21lU2hvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yLmRldGFpbHMsXHJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvci5kZXRhaWxzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3IudGl0bGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzaG93NDAxUGFnZSgpIHtcclxuICAgIHRoaXMuY3JlYXRlRXJyb3JDb21wb25lbnQoe1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvcjQwMS50aXRsZSxcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yNDAxLnRpdGxlLFxyXG4gICAgICB9LFxyXG4gICAgICBzdGF0dXM6IDQwMSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNob3c0MDRQYWdlKCkge1xyXG4gICAgdGhpcy5jcmVhdGVFcnJvckNvbXBvbmVudCh7XHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNDA0LnRpdGxlLFxyXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3I0MDQudGl0bGUsXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YXR1czogNDA0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yV2l0aFJlcXVlc3RCb2R5KGJvZHk6IGFueSkge1xyXG4gICAgbGV0IG1lc3NhZ2U6IExvY2FsaXphdGlvblBhcmFtO1xyXG4gICAgbGV0IHRpdGxlOiBMb2NhbGl6YXRpb25QYXJhbTtcclxuXHJcbiAgICBpZiAoYm9keS5kZXRhaWxzKSB7XHJcbiAgICAgIG1lc3NhZ2UgPSBib2R5LmRldGFpbHM7XHJcbiAgICAgIHRpdGxlID0gYm9keS5tZXNzYWdlO1xyXG4gICAgfSBlbHNlIGlmIChib2R5Lm1lc3NhZ2UpIHtcclxuICAgICAgdGl0bGUgPSB7XHJcbiAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3IudGl0bGUsXHJcbiAgICAgIH07XHJcbiAgICAgIG1lc3NhZ2UgPSBib2R5Lm1lc3NhZ2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXNzYWdlID0gYm9keS5tZXNzYWdlIHx8IHtcclxuICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3IudGl0bGUsXHJcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvci50aXRsZSxcclxuICAgICAgfTtcclxuICAgICAgdGl0bGUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zaG93RXJyb3IobWVzc2FnZSwgdGl0bGUpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNob3dFcnJvcihcclxuICAgIG1lc3NhZ2U6IExvY2FsaXphdGlvblBhcmFtLFxyXG4gICAgdGl0bGU6IExvY2FsaXphdGlvblBhcmFtLFxyXG4gICk6IE9ic2VydmFibGU8Q29uZmlybWF0aW9uLlN0YXR1cz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5lcnJvcihtZXNzYWdlLCB0aXRsZSwge1xyXG4gICAgICBoaWRlQ2FuY2VsQnRuOiB0cnVlLFxyXG4gICAgICB5ZXNUZXh0OiAnQWJwQWNjb3VudDo6Q2xvc2UnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlVG9Mb2dpbigpIHtcclxuICAgIHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlKS5uYXZpZ2F0ZVRvTG9naW4oKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUVycm9yQ29tcG9uZW50KGluc3RhbmNlOiBQYXJ0aWFsPEh0dHBFcnJvcldyYXBwZXJDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xyXG4gICAgY29uc3QgaG9zdCA9IHJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KGRvY3VtZW50LmJvZHksIHRydWUpO1xyXG5cclxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jZlJlc1xyXG4gICAgICAucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSHR0cEVycm9yV3JhcHBlckNvbXBvbmVudClcclxuICAgICAgLmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnN0YW5jZSkge1xyXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLCBrZXkpKSB7XHJcbiAgICAgICAgKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSlba2V5XSA9IChpbnN0YW5jZSBhcyBhbnkpW2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5oaWRlQ2xvc2VJY29uID0gISF0aGlzLmh0dHBFcnJvckNvbmZpZy5lcnJvclNjcmVlbj8uaGlkZUNsb3NlSWNvbjtcclxuICAgIGNvbnN0IGFwcFJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uUmVmKTtcclxuXHJcbiAgICBpZiAodGhpcy5jYW5DcmVhdGVDdXN0b21FcnJvcihpbnN0YW5jZS5zdGF0dXMgYXMgRXJyb3JTY3JlZW5FcnJvckNvZGVzKSkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZlJlcyA9IHRoaXMuY2ZSZXM7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmFwcFJlZiA9IGFwcFJlZjtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaW5qZWN0b3IgPSB0aGlzLmluamVjdG9yO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jdXN0b21Db21wb25lbnQgPSB0aGlzLmh0dHBFcnJvckNvbmZpZy5lcnJvclNjcmVlbj8uY29tcG9uZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgIHJlbmRlcmVyLmFwcGVuZENoaWxkKGhvc3QsICh0aGlzLmNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdKTtcclxuXHJcbiAgICBjb25zdCBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5kZXN0cm95JCA9IGRlc3Ryb3kkO1xyXG4gICAgZGVzdHJveSQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYW5DcmVhdGVDdXN0b21FcnJvcihzdGF0dXM6IEVycm9yU2NyZWVuRXJyb3JDb2Rlcyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhKFxyXG4gICAgICB0aGlzLmh0dHBFcnJvckNvbmZpZz8uZXJyb3JTY3JlZW4/LmNvbXBvbmVudCAmJlxyXG4gICAgICB0aGlzLmh0dHBFcnJvckNvbmZpZz8uZXJyb3JTY3JlZW4/LmZvcldoaWNoRXJyb3JzICYmXHJcbiAgICAgIHRoaXMuaHR0cEVycm9yQ29uZmlnPy5lcnJvclNjcmVlbj8uZm9yV2hpY2hFcnJvcnMuaW5kZXhPZihzdGF0dXMpID4gLTFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmlsdGVyUmVzdEVycm9ycyA9ICh7IHN0YXR1cyB9OiBIdHRwRXJyb3JSZXNwb25zZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0dXMgIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgISF0aGlzLmh0dHBFcnJvckNvbmZpZy5za2lwSGFuZGxlZEVycm9yQ29kZXMgJiZcclxuICAgICAgdGhpcy5odHRwRXJyb3JDb25maWcuc2tpcEhhbmRsZWRFcnJvckNvZGVzLmZpbmRJbmRleChjb2RlID0+IGNvZGUgPT09IHN0YXR1cykgPCAwXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJSb3V0ZUVycm9ycyA9IChuYXZpZ2F0aW9uRXJyb3I6IE5hdmlnYXRpb25FcnJvcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgbmF2aWdhdGlvbkVycm9yLmVycm9yPy5tZXNzYWdlPy5pbmRleE9mKCdDYW5ub3QgbWF0Y2gnKSA+IC0xICYmXHJcbiAgICAgICEhdGhpcy5odHRwRXJyb3JDb25maWcuc2tpcEhhbmRsZWRFcnJvckNvZGVzICYmXHJcbiAgICAgIHRoaXMuaHR0cEVycm9yQ29uZmlnLnNraXBIYW5kbGVkRXJyb3JDb2Rlcy5maW5kSW5kZXgoY29kZSA9PiBjb2RlID09PSA0MDQpIDwgMFxyXG4gICAgKTtcclxuICB9O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from './common';
|
|
2
|
-
export * from './confirmation';
|
|
3
|
-
export * from './statistics';
|
|
4
|
-
export * from './toaster';
|
|
5
|
-
export * from './nav-item';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb25maXJtYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL3N0YXRpc3RpY3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RvYXN0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL25hdi1pdGVtJztcclxuIl19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export class NavItem {
|
|
2
|
-
constructor(props) {
|
|
3
|
-
props = Object.assign(Object.assign({}, props), { visible: props.visible || (() => true) });
|
|
4
|
-
Object.assign(this, props);
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9tb2RlbHMvbmF2LWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLE9BQU87SUFRbEIsWUFBWSxLQUF1QjtRQUNqQyxLQUFLLG1DQUFRLEtBQUssS0FBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUM7UUFDN0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE5hdkl0ZW0ge1xyXG4gIGlkPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGNvbXBvbmVudD86IFR5cGU8YW55PjtcclxuICBodG1sPzogc3RyaW5nO1xyXG4gIGFjdGlvbj86ICgpID0+IHZvaWQ7XHJcbiAgb3JkZXI/OiBudW1iZXI7XHJcbiAgcmVxdWlyZWRQb2xpY3k/OiBzdHJpbmc7XHJcbiAgdmlzaWJsZT86ICgpID0+IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IFBhcnRpYWw8TmF2SXRlbT4pIHtcclxuICAgIHByb3BzID0geyAuLi5wcm9wcywgdmlzaWJsZTogcHJvcHMudmlzaWJsZSB8fCAoKCkgPT4gdHJ1ZSkgfTtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcHJvcHMpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { NavItem } from '../models/nav-item';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class NavItemsService {
|
|
6
|
-
constructor() {
|
|
7
|
-
this._items$ = new BehaviorSubject([]);
|
|
8
|
-
}
|
|
9
|
-
get items() {
|
|
10
|
-
return this._items$.value;
|
|
11
|
-
}
|
|
12
|
-
get items$() {
|
|
13
|
-
return this._items$.asObservable();
|
|
14
|
-
}
|
|
15
|
-
addItems(newItems) {
|
|
16
|
-
const items = [...this.items];
|
|
17
|
-
newItems.forEach(item => items.push(new NavItem(item)));
|
|
18
|
-
items.sort(sortItems);
|
|
19
|
-
this._items$.next(items);
|
|
20
|
-
}
|
|
21
|
-
removeItem(id) {
|
|
22
|
-
const index = this.items.findIndex(item => item.id === id);
|
|
23
|
-
if (index < 0)
|
|
24
|
-
return;
|
|
25
|
-
const items = [...this.items.slice(0, index), ...this.items.slice(index + 1)];
|
|
26
|
-
this._items$.next(items);
|
|
27
|
-
}
|
|
28
|
-
patchItem(id, item) {
|
|
29
|
-
const index = this.items.findIndex(i => i.id === id);
|
|
30
|
-
if (index < 0)
|
|
31
|
-
return;
|
|
32
|
-
const items = [...this.items];
|
|
33
|
-
items[index] = new NavItem(Object.assign(Object.assign({}, items[index]), item));
|
|
34
|
-
items.sort(sortItems);
|
|
35
|
-
this._items$.next(items);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
NavItemsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NavItemsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
39
|
-
NavItemsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NavItemsService, providedIn: 'root' });
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NavItemsService, decorators: [{
|
|
41
|
-
type: Injectable,
|
|
42
|
-
args: [{ providedIn: 'root' }]
|
|
43
|
-
}] });
|
|
44
|
-
function sortItems(a, b) {
|
|
45
|
-
if (!a.order)
|
|
46
|
-
return 1;
|
|
47
|
-
if (!b.order)
|
|
48
|
-
return -1;
|
|
49
|
-
return a.order - b.order;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW1zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9zZXJ2aWNlcy9uYXYtaXRlbXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUc3QyxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVVLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBWSxFQUFFLENBQUMsQ0FBQztLQW9DdEQ7SUFsQ0MsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRLENBQUMsUUFBbUI7UUFDMUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQW1CO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUzRCxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQUUsT0FBTztRQUV0QixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxFQUFtQixFQUFFLElBQWtDO1FBQy9ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVyRCxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQUUsT0FBTztRQUV0QixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8saUNBQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFLLElBQUksRUFBRyxDQUFDO1FBQ3pELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7NkdBcENVLGVBQWU7aUhBQWYsZUFBZSxjQURGLE1BQU07NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXdDbEMsU0FBUyxTQUFTLENBQUMsQ0FBVSxFQUFFLENBQVU7SUFDdkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUV4QixPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uL21vZGVscy9uYXYtaXRlbSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTmF2SXRlbXNTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5hdkl0ZW1bXT4oW10pO1xyXG5cclxuICBnZXQgaXRlbXMoKTogTmF2SXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtcyQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXRlbXMkKCk6IE9ic2VydmFibGU8TmF2SXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXMkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbXMobmV3SXRlbXM6IE5hdkl0ZW1bXSkge1xyXG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5pdGVtc107XHJcbiAgICBuZXdJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbXMucHVzaChuZXcgTmF2SXRlbShpdGVtKSkpO1xyXG4gICAgaXRlbXMuc29ydChzb3J0SXRlbXMpO1xyXG4gICAgdGhpcy5faXRlbXMkLm5leHQoaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShpZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpO1xyXG5cclxuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zLnNsaWNlKDAsIGluZGV4KSwgLi4udGhpcy5pdGVtcy5zbGljZShpbmRleCArIDEpXTtcclxuICAgIHRoaXMuX2l0ZW1zJC5uZXh0KGl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHBhdGNoSXRlbShpZDogc3RyaW5nIHwgbnVtYmVyLCBpdGVtOiBQYXJ0aWFsPE9taXQ8TmF2SXRlbSwgJ2lkJz4+KSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGkgPT4gaS5pZCA9PT0gaWQpO1xyXG5cclxuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zXTtcclxuICAgIGl0ZW1zW2luZGV4XSA9IG5ldyBOYXZJdGVtKHsgLi4uaXRlbXNbaW5kZXhdLCAuLi5pdGVtIH0pO1xyXG4gICAgaXRlbXMuc29ydChzb3J0SXRlbXMpO1xyXG4gICAgdGhpcy5faXRlbXMkLm5leHQoaXRlbXMpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc29ydEl0ZW1zKGE6IE5hdkl0ZW0sIGI6IE5hdkl0ZW0pIHtcclxuICBpZiAoIWEub3JkZXIpIHJldHVybiAxO1xyXG4gIGlmICghYi5vcmRlcikgcmV0dXJuIC0xO1xyXG5cclxuICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XHJcbn1cclxuIl19
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { InternalStore } from '@abp/ng.core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class PageAlertService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.alerts = new InternalStore([]);
|
|
7
|
-
this.alerts$ = this.alerts.sliceState(state => state);
|
|
8
|
-
}
|
|
9
|
-
show(alert) {
|
|
10
|
-
var _a;
|
|
11
|
-
const newAlert = Object.assign(Object.assign({}, alert), { dismissible: (_a = alert.dismissible) !== null && _a !== void 0 ? _a : true });
|
|
12
|
-
this.alerts.set([newAlert, ...this.alerts.state]);
|
|
13
|
-
}
|
|
14
|
-
remove(index) {
|
|
15
|
-
const alerts = [...this.alerts.state];
|
|
16
|
-
alerts.splice(index, 1);
|
|
17
|
-
this.alerts.set(alerts);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
PageAlertService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PageAlertService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
21
|
-
PageAlertService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PageAlertService, providedIn: 'root' });
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PageAlertService, decorators: [{
|
|
23
|
-
type: Injectable,
|
|
24
|
-
args: [{ providedIn: 'root' }]
|
|
25
|
-
}], ctorParameters: function () { return []; } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1hbGVydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvcGFnZS1hbGVydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFZN0MsTUFBTSxPQUFPLGdCQUFnQjtJQUszQjtRQUpRLFdBQU0sR0FBRyxJQUFJLGFBQWEsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUVwRCxZQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVsQyxDQUFDO0lBRWhCLElBQUksQ0FBQyxLQUFnQjs7UUFDbkIsTUFBTSxRQUFRLG1DQUNULEtBQUssS0FDUixXQUFXLEVBQUUsTUFBQSxLQUFLLENBQUMsV0FBVyxtQ0FBSSxJQUFJLEdBQ3ZDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQzs7OEdBbkJVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs0RkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW50ZXJuYWxTdG9yZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VBbGVydCB7XHJcbiAgdHlwZTogJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJyB8ICdsaWdodCcgfCAnZGFyayc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIGRpc21pc3NpYmxlPzogYm9vbGVhbjtcclxuICB0aXRsZT86IHN0cmluZztcclxuICBtZXNzYWdlTG9jYWxpemF0aW9uUGFyYW1zPzogc3RyaW5nW107XHJcbiAgdGl0bGVMb2NhbGl6YXRpb25QYXJhbXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhZ2VBbGVydFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgYWxlcnRzID0gbmV3IEludGVybmFsU3RvcmU8UGFnZUFsZXJ0W10+KFtdKTtcclxuXHJcbiAgYWxlcnRzJCA9IHRoaXMuYWxlcnRzLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHNob3coYWxlcnQ6IFBhZ2VBbGVydCkge1xyXG4gICAgY29uc3QgbmV3QWxlcnQ6IFBhZ2VBbGVydCA9IHtcclxuICAgICAgLi4uYWxlcnQsXHJcbiAgICAgIGRpc21pc3NpYmxlOiBhbGVydC5kaXNtaXNzaWJsZSA/PyB0cnVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYWxlcnRzLnNldChbbmV3QWxlcnQsIC4uLnRoaXMuYWxlcnRzLnN0YXRlXSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYWxlcnRzID0gWy4uLnRoaXMuYWxlcnRzLnN0YXRlXTtcclxuICAgIGFsZXJ0cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5hbGVydHMuc2V0KGFsZXJ0cyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { ContentProjectionService, PROJECTION_STRATEGY, } from '@abp/ng.core';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { ReplaySubject } from 'rxjs';
|
|
4
|
-
import { ToastContainerComponent } from '../components/toast-container/toast-container.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@abp/ng.core";
|
|
7
|
-
export class ToasterService {
|
|
8
|
-
constructor(contentProjectionService) {
|
|
9
|
-
this.contentProjectionService = contentProjectionService;
|
|
10
|
-
this.toasts$ = new ReplaySubject(1);
|
|
11
|
-
this.lastId = -1;
|
|
12
|
-
this.toasts = [];
|
|
13
|
-
/**
|
|
14
|
-
* Removes the toast with given id.
|
|
15
|
-
* @param id ID of the toast to be removed.
|
|
16
|
-
*/
|
|
17
|
-
this.remove = (id) => {
|
|
18
|
-
this.toasts = this.toasts.filter(toast => { var _a; return ((_a = toast.options) === null || _a === void 0 ? void 0 : _a.id) !== id; });
|
|
19
|
-
this.toasts$.next(this.toasts);
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
setContainer() {
|
|
23
|
-
this.containerComponentRef = this.contentProjectionService.projectContent(PROJECTION_STRATEGY.AppendComponentToBody(ToastContainerComponent, {
|
|
24
|
-
toasts$: this.toasts$,
|
|
25
|
-
remove: this.remove,
|
|
26
|
-
}));
|
|
27
|
-
this.containerComponentRef.changeDetectorRef.detectChanges();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Creates an info toast with given parameters.
|
|
31
|
-
* @param message Content of the toast
|
|
32
|
-
* @param title Title of the toast
|
|
33
|
-
* @param options Spesific style or structural options for individual toast
|
|
34
|
-
*/
|
|
35
|
-
info(message, title, options) {
|
|
36
|
-
return this.show(message, title, 'info', options);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Creates a success toast with given parameters.
|
|
40
|
-
* @param message Content of the toast
|
|
41
|
-
* @param title Title of the toast
|
|
42
|
-
* @param options Spesific style or structural options for individual toast
|
|
43
|
-
*/
|
|
44
|
-
success(message, title, options) {
|
|
45
|
-
return this.show(message, title, 'success', options);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Creates a warning toast with given parameters.
|
|
49
|
-
* @param message Content of the toast
|
|
50
|
-
* @param title Title of the toast
|
|
51
|
-
* @param options Spesific style or structural options for individual toast
|
|
52
|
-
*/
|
|
53
|
-
warn(message, title, options) {
|
|
54
|
-
return this.show(message, title, 'warning', options);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Creates an error toast with given parameters.
|
|
58
|
-
* @param message Content of the toast
|
|
59
|
-
* @param title Title of the toast
|
|
60
|
-
* @param options Spesific style or structural options for individual toast
|
|
61
|
-
*/
|
|
62
|
-
error(message, title, options) {
|
|
63
|
-
return this.show(message, title, 'error', options);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Creates a toast with given parameters.
|
|
67
|
-
* @param message Content of the toast
|
|
68
|
-
* @param title Title of the toast
|
|
69
|
-
* @param severity Sets color of the toast. "success", "warning" etc.
|
|
70
|
-
* @param options Spesific style or structural options for individual toast
|
|
71
|
-
*/
|
|
72
|
-
show(message, title = undefined, severity = 'neutral', options = {}) {
|
|
73
|
-
if (!this.containerComponentRef)
|
|
74
|
-
this.setContainer();
|
|
75
|
-
const id = ++this.lastId;
|
|
76
|
-
this.toasts.push({
|
|
77
|
-
message,
|
|
78
|
-
title,
|
|
79
|
-
severity,
|
|
80
|
-
options: Object.assign({ closable: true, id }, options),
|
|
81
|
-
});
|
|
82
|
-
this.toasts$.next(this.toasts);
|
|
83
|
-
return id;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Removes all open toasts at once.
|
|
87
|
-
*/
|
|
88
|
-
clear(containerKey) {
|
|
89
|
-
this.toasts = !containerKey
|
|
90
|
-
? []
|
|
91
|
-
: this.toasts.filter(toast => { var _a; return ((_a = toast.options) === null || _a === void 0 ? void 0 : _a.containerKey) !== containerKey; });
|
|
92
|
-
this.toasts$.next(this.toasts);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
ToasterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ToasterService, deps: [{ token: i1.ContentProjectionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
96
|
-
ToasterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ToasterService, providedIn: 'root' });
|
|
97
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ToasterService, decorators: [{
|
|
98
|
-
type: Injectable,
|
|
99
|
-
args: [{
|
|
100
|
-
providedIn: 'root',
|
|
101
|
-
}]
|
|
102
|
-
}], ctorParameters: function () { return [{ type: i1.ContentProjectionService }]; } });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvdG9hc3Rlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFFeEIsbUJBQW1CLEdBRXBCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seURBQXlELENBQUM7OztBQU1sRyxNQUFNLE9BQU8sY0FBYztJQVN6QixZQUFvQix3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQVI5RCxZQUFPLEdBQUcsSUFBSSxhQUFhLENBQWtCLENBQUMsQ0FBQyxDQUFDO1FBRWhELFdBQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVaLFdBQU0sR0FBRyxFQUFxQixDQUFDO1FBb0d2Qzs7O1dBR0c7UUFDSCxXQUFNLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQUMsT0FBQSxDQUFBLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUUsRUFBRSxNQUFLLEVBQUUsQ0FBQSxFQUFBLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBdkd1RSxDQUFDO0lBRWxFLFlBQVk7UUFDbEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQ3ZFLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO1lBQ2pFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUNGLE9BQTBCLEVBQzFCLEtBQXlCLEVBQ3pCLE9BQXVDO1FBRXZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQ0wsT0FBMEIsRUFDMUIsS0FBeUIsRUFDekIsT0FBdUM7UUFFdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksQ0FDRixPQUEwQixFQUMxQixLQUF5QixFQUN6QixPQUF1QztRQUV2QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUNILE9BQTBCLEVBQzFCLEtBQXlCLEVBQ3pCLE9BQXVDO1FBRXZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBRUgsSUFBSSxDQUNGLE9BQTBCLEVBQzFCLFFBQXVDLFNBQVMsRUFDaEQsV0FBNkIsU0FBUyxFQUN0QyxVQUFVLEVBQW1DO1FBRTdDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCO1lBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXJELE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLE9BQU87WUFDUCxLQUFLO1lBQ0wsUUFBUTtZQUNSLE9BQU8sa0JBQUksUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUssT0FBTyxDQUFFO1NBQzVDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFXRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFxQjtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsWUFBWTtZQUN6QixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQSxNQUFBLEtBQUssQ0FBQyxPQUFPLDBDQUFFLFlBQVksTUFBSyxZQUFZLENBQUEsRUFBQSxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OzRHQTFIVSxjQUFjO2dIQUFkLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb250ZW50UHJvamVjdGlvblNlcnZpY2UsXHJcbiAgTG9jYWxpemF0aW9uUGFyYW0sXHJcbiAgUFJPSkVDVElPTl9TVFJBVEVHWSxcclxuICBTdHJpY3QsXHJcbn0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVG9hc3RDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3RvYXN0LWNvbnRhaW5lci90b2FzdC1jb250YWluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9hc3RlciB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9hc3RlclNlcnZpY2UgaW1wbGVtZW50cyBUb2FzdGVyQ29udHJhY3Qge1xyXG4gIHByaXZhdGUgdG9hc3RzJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFRvYXN0ZXIuVG9hc3RbXT4oMSk7XHJcblxyXG4gIHByaXZhdGUgbGFzdElkID0gLTE7XHJcblxyXG4gIHByaXZhdGUgdG9hc3RzID0gW10gYXMgVG9hc3Rlci5Ub2FzdFtdO1xyXG5cclxuICBwcml2YXRlIGNvbnRhaW5lckNvbXBvbmVudFJlZiE6IENvbXBvbmVudFJlZjxUb2FzdENvbnRhaW5lckNvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGVudFByb2plY3Rpb25TZXJ2aWNlOiBDb250ZW50UHJvamVjdGlvblNlcnZpY2UpIHt9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29udGFpbmVyKCkge1xyXG4gICAgdGhpcy5jb250YWluZXJDb21wb25lbnRSZWYgPSB0aGlzLmNvbnRlbnRQcm9qZWN0aW9uU2VydmljZS5wcm9qZWN0Q29udGVudChcclxuICAgICAgUFJPSkVDVElPTl9TVFJBVEVHWS5BcHBlbmRDb21wb25lbnRUb0JvZHkoVG9hc3RDb250YWluZXJDb21wb25lbnQsIHtcclxuICAgICAgICB0b2FzdHMkOiB0aGlzLnRvYXN0cyQsXHJcbiAgICAgICAgcmVtb3ZlOiB0aGlzLnJlbW92ZSxcclxuICAgICAgfSksXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29udGFpbmVyQ29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5mbyB0b2FzdCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgQ29udGVudCBvZiB0aGUgdG9hc3RcclxuICAgKiBAcGFyYW0gdGl0bGUgVGl0bGUgb2YgdGhlIHRvYXN0XHJcbiAgICogQHBhcmFtIG9wdGlvbnMgU3Blc2lmaWMgc3R5bGUgb3Igc3RydWN0dXJhbCBvcHRpb25zIGZvciBpbmRpdmlkdWFsIHRvYXN0XHJcbiAgICovXHJcbiAgaW5mbyhcclxuICAgIG1lc3NhZ2U6IExvY2FsaXphdGlvblBhcmFtLFxyXG4gICAgdGl0bGU/OiBMb2NhbGl6YXRpb25QYXJhbSxcclxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPFRvYXN0ZXIuVG9hc3RPcHRpb25zPixcclxuICApOiBUb2FzdGVyLlRvYXN0ZXJJZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93KG1lc3NhZ2UsIHRpdGxlLCAnaW5mbycsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHN1Y2Nlc3MgdG9hc3Qgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIENvbnRlbnQgb2YgdGhlIHRvYXN0XHJcbiAgICogQHBhcmFtIHRpdGxlIFRpdGxlIG9mIHRoZSB0b2FzdFxyXG4gICAqIEBwYXJhbSBvcHRpb25zIFNwZXNpZmljIHN0eWxlIG9yIHN0cnVjdHVyYWwgb3B0aW9ucyBmb3IgaW5kaXZpZHVhbCB0b2FzdFxyXG4gICAqL1xyXG4gIHN1Y2Nlc3MoXHJcbiAgICBtZXNzYWdlOiBMb2NhbGl6YXRpb25QYXJhbSxcclxuICAgIHRpdGxlPzogTG9jYWxpemF0aW9uUGFyYW0sXHJcbiAgICBvcHRpb25zPzogUGFydGlhbDxUb2FzdGVyLlRvYXN0T3B0aW9ucz4sXHJcbiAgKTogVG9hc3Rlci5Ub2FzdGVySWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvdyhtZXNzYWdlLCB0aXRsZSwgJ3N1Y2Nlc3MnLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSB3YXJuaW5nIHRvYXN0IHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cclxuICAgKiBAcGFyYW0gbWVzc2FnZSBDb250ZW50IG9mIHRoZSB0b2FzdFxyXG4gICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBvZiB0aGUgdG9hc3RcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBTcGVzaWZpYyBzdHlsZSBvciBzdHJ1Y3R1cmFsIG9wdGlvbnMgZm9yIGluZGl2aWR1YWwgdG9hc3RcclxuICAgKi9cclxuICB3YXJuKFxyXG4gICAgbWVzc2FnZTogTG9jYWxpemF0aW9uUGFyYW0sXHJcbiAgICB0aXRsZT86IExvY2FsaXphdGlvblBhcmFtLFxyXG4gICAgb3B0aW9ucz86IFBhcnRpYWw8VG9hc3Rlci5Ub2FzdE9wdGlvbnM+LFxyXG4gICk6IFRvYXN0ZXIuVG9hc3RlcklkIHtcclxuICAgIHJldHVybiB0aGlzLnNob3cobWVzc2FnZSwgdGl0bGUsICd3YXJuaW5nJywgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGVycm9yIHRvYXN0IHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cclxuICAgKiBAcGFyYW0gbWVzc2FnZSBDb250ZW50IG9mIHRoZSB0b2FzdFxyXG4gICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBvZiB0aGUgdG9hc3RcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBTcGVzaWZpYyBzdHlsZSBvciBzdHJ1Y3R1cmFsIG9wdGlvbnMgZm9yIGluZGl2aWR1YWwgdG9hc3RcclxuICAgKi9cclxuICBlcnJvcihcclxuICAgIG1lc3NhZ2U6IExvY2FsaXphdGlvblBhcmFtLFxyXG4gICAgdGl0bGU/OiBMb2NhbGl6YXRpb25QYXJhbSxcclxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPFRvYXN0ZXIuVG9hc3RPcHRpb25zPixcclxuICApOiBUb2FzdGVyLlRvYXN0ZXJJZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93KG1lc3NhZ2UsIHRpdGxlLCAnZXJyb3InLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSB0b2FzdCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgQ29udGVudCBvZiB0aGUgdG9hc3RcclxuICAgKiBAcGFyYW0gdGl0bGUgVGl0bGUgb2YgdGhlIHRvYXN0XHJcbiAgICogQHBhcmFtIHNldmVyaXR5IFNldHMgY29sb3Igb2YgdGhlIHRvYXN0LiBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIgZXRjLlxyXG4gICAqIEBwYXJhbSBvcHRpb25zIFNwZXNpZmljIHN0eWxlIG9yIHN0cnVjdHVyYWwgb3B0aW9ucyBmb3IgaW5kaXZpZHVhbCB0b2FzdFxyXG4gICAqL1xyXG5cclxuICBzaG93KFxyXG4gICAgbWVzc2FnZTogTG9jYWxpemF0aW9uUGFyYW0sXHJcbiAgICB0aXRsZTogTG9jYWxpemF0aW9uUGFyYW0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICBzZXZlcml0eTogVG9hc3Rlci5TZXZlcml0eSA9ICduZXV0cmFsJyxcclxuICAgIG9wdGlvbnMgPSB7fSBhcyBQYXJ0aWFsPFRvYXN0ZXIuVG9hc3RPcHRpb25zPixcclxuICApOiBUb2FzdGVyLlRvYXN0ZXJJZCB7XHJcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyQ29tcG9uZW50UmVmKSB0aGlzLnNldENvbnRhaW5lcigpO1xyXG5cclxuICAgIGNvbnN0IGlkID0gKyt0aGlzLmxhc3RJZDtcclxuICAgIHRoaXMudG9hc3RzLnB1c2goe1xyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICB0aXRsZSxcclxuICAgICAgc2V2ZXJpdHksXHJcbiAgICAgIG9wdGlvbnM6IHsgY2xvc2FibGU6IHRydWUsIGlkLCAuLi5vcHRpb25zIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudG9hc3RzJC5uZXh0KHRoaXMudG9hc3RzKTtcclxuICAgIHJldHVybiBpZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgdGhlIHRvYXN0IHdpdGggZ2l2ZW4gaWQuXHJcbiAgICogQHBhcmFtIGlkIElEIG9mIHRoZSB0b2FzdCB0byBiZSByZW1vdmVkLlxyXG4gICAqL1xyXG4gIHJlbW92ZSA9IChpZDogbnVtYmVyKSA9PiB7XHJcbiAgICB0aGlzLnRvYXN0cyA9IHRoaXMudG9hc3RzLmZpbHRlcih0b2FzdCA9PiB0b2FzdC5vcHRpb25zPy5pZCAhPT0gaWQpO1xyXG4gICAgdGhpcy50b2FzdHMkLm5leHQodGhpcy50b2FzdHMpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYWxsIG9wZW4gdG9hc3RzIGF0IG9uY2UuXHJcbiAgICovXHJcbiAgY2xlYXIoY29udGFpbmVyS2V5Pzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvYXN0cyA9ICFjb250YWluZXJLZXlcclxuICAgICAgPyBbXVxyXG4gICAgICA6IHRoaXMudG9hc3RzLmZpbHRlcih0b2FzdCA9PiB0b2FzdC5vcHRpb25zPy5jb250YWluZXJLZXkgIT09IGNvbnRhaW5lcktleSk7XHJcbiAgICB0aGlzLnRvYXN0cyQubmV4dCh0aGlzLnRvYXN0cyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUb2FzdGVyQ29udHJhY3QgPSBTdHJpY3Q8VG9hc3RlclNlcnZpY2UsIFRvYXN0ZXIuU2VydmljZT47XHJcbiJdfQ==
|