@dbg-riskit/angular-error 12.3.0 → 9999.9999.9999-rc.12148

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.
Files changed (31) hide show
  1. package/dbg-riskit-angular-error.d.ts +1 -2
  2. package/docs/README.md +1 -11
  3. package/esm2020/dbg-riskit-angular-error.mjs +5 -0
  4. package/esm2020/lib/error.collector.mjs +65 -0
  5. package/esm2020/lib/error.menu.component.mjs +205 -0
  6. package/esm2020/lib/error.message.component.mjs +119 -0
  7. package/{esm2015/lib/error.message.wrapper.js → esm2020/lib/error.message.wrapper.mjs} +1 -1
  8. package/esm2020/lib/error.module.mjs +47 -0
  9. package/{esm2015/lib/rxjs.utils.js → esm2020/lib/rxjs.utils.mjs} +0 -0
  10. package/esm2020/public_api.mjs +5 -0
  11. package/fesm2015/dbg-riskit-angular-error.mjs +468 -0
  12. package/fesm2015/dbg-riskit-angular-error.mjs.map +1 -0
  13. package/fesm2020/dbg-riskit-angular-error.mjs +462 -0
  14. package/fesm2020/dbg-riskit-angular-error.mjs.map +1 -0
  15. package/lib/error.collector.d.ts +3 -0
  16. package/lib/error.menu.component.d.ts +3 -0
  17. package/lib/error.message.component.d.ts +3 -0
  18. package/lib/error.module.d.ts +8 -0
  19. package/package.json +26 -14
  20. package/public_api.d.ts +1 -0
  21. package/bundles/dbg-riskit-angular-error.umd.js +0 -767
  22. package/bundles/dbg-riskit-angular-error.umd.js.map +0 -1
  23. package/dbg-riskit-angular-error.metadata.json +0 -1
  24. package/esm2015/dbg-riskit-angular-error.js +0 -7
  25. package/esm2015/lib/error.collector.js +0 -60
  26. package/esm2015/lib/error.menu.component.js +0 -185
  27. package/esm2015/lib/error.message.component.js +0 -84
  28. package/esm2015/lib/error.module.js +0 -31
  29. package/esm2015/public_api.js +0 -4
  30. package/fesm2015/dbg-riskit-angular-error.js +0 -393
  31. package/fesm2015/dbg-riskit-angular-error.js.map +0 -1
@@ -1,31 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { ErrorHandler, NgModule } from '@angular/core';
3
- import { CommonViewModule } from '@dbg-riskit/angular-view';
4
- import { ErrorCollectorService } from './error.collector';
5
- import { ErrorComponent } from './error.menu.component';
6
- import { ErrorMessageComponent } from './error.message.component';
7
- export class ErrorModule {
8
- }
9
- ErrorModule.decorators = [
10
- { type: NgModule, args: [{
11
- imports: [
12
- CommonModule,
13
- CommonViewModule
14
- ],
15
- exports: [
16
- ErrorComponent
17
- ],
18
- declarations: [
19
- ErrorComponent,
20
- ErrorMessageComponent
21
- ],
22
- providers: [
23
- ErrorCollectorService,
24
- {
25
- provide: ErrorHandler,
26
- useExisting: ErrorCollectorService
27
- }
28
- ]
29
- },] }
30
- ];
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1lcnJvci9zcmMvbGliL2Vycm9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBc0JoRSxNQUFNLE9BQU8sV0FBVzs7O1lBcEJ2QixRQUFRLFNBQUM7Z0JBQ04sT0FBTyxFQUFPO29CQUNWLFlBQVk7b0JBQ1osZ0JBQWdCO2lCQUNuQjtnQkFDRCxPQUFPLEVBQU87b0JBQ1YsY0FBYztpQkFDakI7Z0JBQ0QsWUFBWSxFQUFFO29CQUNWLGNBQWM7b0JBQ2QscUJBQXFCO2lCQUN4QjtnQkFDRCxTQUFTLEVBQUs7b0JBQ1YscUJBQXFCO29CQUNyQjt3QkFDSSxPQUFPLEVBQU0sWUFBWTt3QkFDekIsV0FBVyxFQUFFLHFCQUFxQjtxQkFDckM7aUJBQ0o7YUFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtFcnJvckhhbmRsZXIsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uVmlld01vZHVsZX0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci12aWV3JztcbmltcG9ydCB7RXJyb3JDb2xsZWN0b3JTZXJ2aWNlfSBmcm9tICcuL2Vycm9yLmNvbGxlY3Rvcic7XG5pbXBvcnQge0Vycm9yQ29tcG9uZW50fSBmcm9tICcuL2Vycm9yLm1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7RXJyb3JNZXNzYWdlQ29tcG9uZW50fSBmcm9tICcuL2Vycm9yLm1lc3NhZ2UuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzICAgICA6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBDb21tb25WaWV3TW9kdWxlXG4gICAgXSxcbiAgICBleHBvcnRzICAgICA6IFtcbiAgICAgICAgRXJyb3JDb21wb25lbnRcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBFcnJvckNvbXBvbmVudCxcbiAgICAgICAgRXJyb3JNZXNzYWdlQ29tcG9uZW50XG4gICAgXSxcbiAgICBwcm92aWRlcnMgICA6IFtcbiAgICAgICAgRXJyb3JDb2xsZWN0b3JTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlICAgIDogRXJyb3JIYW5kbGVyLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEVycm9yQ29sbGVjdG9yU2VydmljZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBFcnJvck1vZHVsZSB7XG59XG4iXX0=
@@ -1,4 +0,0 @@
1
- export * from './lib/error.collector';
2
- export * from './lib/error.module';
3
- export * from './lib/rxjs.utils';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItZXJyb3Ivc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9lcnJvci5jb2xsZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZXJyb3IubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3J4anMudXRpbHMnO1xuIl19
@@ -1,393 +0,0 @@
1
- import { ErrorHandler, Injectable, Optional, Inject, Component, ChangeDetectionStrategy, ChangeDetectorRef, Input, EventEmitter, ViewChildren, NgModule } from '@angular/core';
2
- import { AUTH_PROVIDER, DATE_FORMAT } from '@dbg-riskit/angular-common';
3
- import { toString, ErrorType } from '@dbg-riskit/common';
4
- import { ReplaySubject, EMPTY, Subject, merge, timer } from 'rxjs';
5
- import { CommonModule } from '@angular/common';
6
- import { BaseComponent, CommonViewModule } from '@dbg-riskit/angular-view';
7
- import { trigger, state, style, transition, animate, keyframes } from '@angular/animations';
8
- import { filter, takeUntil, map, catchError, defaultIfEmpty } from 'rxjs/operators';
9
-
10
- function toErrorMessage(err) {
11
- let errorMessage;
12
- if ('errorType' in err) {
13
- errorMessage = err;
14
- }
15
- else {
16
- if ('message' in err) {
17
- err = err.message || toString(err);
18
- }
19
- else {
20
- err = toString(err);
21
- }
22
- errorMessage = {
23
- message: err,
24
- status: 0,
25
- errorType: ErrorType.ERROR
26
- };
27
- }
28
- return errorMessage;
29
- }
30
- class ErrorCollectorService extends ErrorHandler {
31
- constructor(authProvider) {
32
- super();
33
- this._errorObservable = new ReplaySubject(10);
34
- if (authProvider) {
35
- authProvider.loggedInStream.subscribe((auth) => {
36
- this._errorObservable = new ReplaySubject(10);
37
- });
38
- }
39
- }
40
- error(err) {
41
- this._errorObservable.next(err);
42
- }
43
- get errorStream() {
44
- return this._errorObservable.asObservable();
45
- }
46
- handleError(err) {
47
- try {
48
- super.handleError(err);
49
- }
50
- finally {
51
- this.error(toErrorMessage(err));
52
- }
53
- }
54
- handleStreamError(err) {
55
- this.handleError(err);
56
- return EMPTY;
57
- }
58
- }
59
- ErrorCollectorService.decorators = [
60
- { type: Injectable }
61
- ];
62
- ErrorCollectorService.ctorParameters = () => [
63
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [AUTH_PROVIDER,] }] }
64
- ];
65
-
66
- class ErrorMessageComponent {
67
- constructor(dateFormat, changeDetectorRef) {
68
- this.dateFormat = dateFormat;
69
- this.changeDetectorRef = changeDetectorRef;
70
- this.readState = null;
71
- this.isLast = false;
72
- }
73
- animate() {
74
- if (this.error != null && !this.error.read && this.readState !== 'read') {
75
- setTimeout(() => {
76
- this.readState = 'read';
77
- this.changeDetectorRef.markForCheck();
78
- });
79
- }
80
- }
81
- markRead(event) {
82
- if (this.error != null && event.toState === 'read') {
83
- this.error.markRead();
84
- this.changeDetectorRef.markForCheck();
85
- }
86
- }
87
- }
88
- ErrorMessageComponent.decorators = [
89
- { type: Component, args: [{
90
- selector: 'risk-error-message',
91
- template: "<mat-card [class.risk-error-message-last]=\"isLast\" [@readState]=\"readState\" (@readState.done)=\"markRead($event)\">\n <mat-card-header>\n <mat-icon color=\"warn\" mat-card-avatar>error_outline</mat-icon>\n <mat-card-title *ngIf=\"error?.type.isNetworkError()\">Network error</mat-card-title>\n <mat-card-title *ngIf=\"error?.type.isRequestError()\">API error</mat-card-title>\n <mat-card-title *ngIf=\"error?.type.isAuthError()\">Authorization error</mat-card-title>\n <mat-card-title\n *ngIf=\"!error?.type.isNetworkError() && !error?.type.isRequestError() && !error?.type.isAuthError()\">\n General error\n </mat-card-title>\n <mat-card-subtitle>{{error?.date | date:dateFormat}}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <p *ngIf=\"error?.statusCode\" class=\"risk-error-message-code\">Error code: {{error?.statusCode}}</p>\n <p>\n {{error?.message}}\n </p>\n </mat-card-content>\n</mat-card>\n",
92
- animations: [
93
- trigger('readState', [
94
- state('read', style({ background: 'transparent' })),
95
- transition(':enter', [
96
- style({
97
- height: 0,
98
- transform: 'scale(0)'
99
- }),
100
- animate('200ms ease-in', style({
101
- height: '*',
102
- transform: 'scale(1)'
103
- }))
104
- ]),
105
- transition('* => read', [
106
- style({
107
- background: 'transparent'
108
- }),
109
- animate('1500ms', keyframes([
110
- style({
111
- background: 'rgba(204, 51, 51, .5)',
112
- offset: 0.25
113
- }),
114
- style({
115
- background: 'transparent',
116
- offset: 0.5
117
- }),
118
- style({
119
- background: 'rgba(204, 51, 51, .5)',
120
- offset: 0.75
121
- }),
122
- style({
123
- background: 'transparent',
124
- offset: 1
125
- })
126
- ]))
127
- ])
128
- ])
129
- ],
130
- host: {
131
- '[class.risk-error-message]': 'true'
132
- },
133
- changeDetection: ChangeDetectionStrategy.OnPush,
134
- preserveWhitespaces: false,
135
- styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host .mat-card{margin:0 10px 7px}:host .mat-card.risk-error-message-last{margin-bottom:0}:host .mat-card .mat-card-subtitle{margin-bottom:5px}:host .mat-card p{margin:0}:host .mat-card p.risk-error-message-code{position:absolute;bottom:10px;right:10px}:host .mat-card p.risk-error-message-code+p:last-child{margin-bottom:3px}\n"]
136
- },] }
137
- ];
138
- ErrorMessageComponent.ctorParameters = () => [
139
- { type: String, decorators: [{ type: Inject, args: [DATE_FORMAT,] }] },
140
- { type: ChangeDetectorRef }
141
- ];
142
- ErrorMessageComponent.propDecorators = {
143
- error: [{ type: Input }],
144
- isLast: [{ type: Input }]
145
- };
146
-
147
- class ErrorMessageWrapper {
148
- constructor(error) {
149
- this._date = new Date();
150
- this._read = false;
151
- this.readStateChanged = new EventEmitter();
152
- this._error = error;
153
- }
154
- get message() {
155
- return this._error.message;
156
- }
157
- get type() {
158
- return this._error.errorType;
159
- }
160
- get statusCode() {
161
- return this._error.status;
162
- }
163
- get date() {
164
- return this._date;
165
- }
166
- get read() {
167
- return this._read;
168
- }
169
- markRead() {
170
- if (!this._read) {
171
- this._read = true;
172
- this.readStateChanged.emit(this._read);
173
- this.readStateChanged.complete();
174
- }
175
- }
176
- }
177
-
178
- const JIGGLE_ANIMATION = animate('1s ease-in', keyframes([
179
- style({
180
- transform: 'scale(0.8) translateX(-1px) rotate(0)',
181
- offset: 0.1
182
- }),
183
- style({
184
- transform: 'scale(1) translateX(2px) rotate(4deg)',
185
- offset: 0.2
186
- }),
187
- style({
188
- transform: 'scale(1.2) translateX(-4px) rotate(0)',
189
- offset: 0.3
190
- }),
191
- style({
192
- transform: 'scale(1.5) translateX(4px) rotate(0)',
193
- offset: 0.4
194
- }),
195
- style({
196
- transform: 'scale(1.5) translateX(-4px) rotate(-8deg)',
197
- offset: 0.5
198
- }),
199
- style({
200
- transform: 'scale(1.5) translateX(4px) rotate(0)',
201
- offset: 0.6
202
- }),
203
- style({
204
- transform: 'scale(1.2) translateX(-4px) rotate(0)',
205
- offset: 0.7
206
- }),
207
- style({
208
- transform: 'scale(1) translateX(2px) rotate(4deg)',
209
- offset: 0.8
210
- }),
211
- style({
212
- transform: 'scale(1) translateX(-1px) rotate(0)',
213
- offset: 0.9
214
- })
215
- ]));
216
- class ErrorComponent extends BaseComponent {
217
- constructor(errorCollector, authProvider, changeDetectorRef) {
218
- super();
219
- this.errorCollector = errorCollector;
220
- this.authProvider = authProvider;
221
- this.changeDetectorRef = changeDetectorRef;
222
- this.state = null;
223
- this._errors = [];
224
- this._menuState = new Subject();
225
- }
226
- ngOnInit() {
227
- // Init Jiggle animation loop
228
- this.initAnimation();
229
- // Subscribe to error stream
230
- this.subscribeToErrors();
231
- // Once opened animate messages and set as read after animation
232
- this._menuState.pipe(filter((opened) => opened), takeUntil(this.destroyed)).subscribe(() => this.animateOnMenuOpened());
233
- // Refresh on "logged-in" state changes
234
- if (this.authProvider) {
235
- this.authProvider.loggedInStream.pipe(takeUntil(this.destroyed)).subscribe((auth) => this.loggedInChanged(auth));
236
- }
237
- }
238
- animateOnMenuOpened() {
239
- const animateMessages = () => this.errorMessages.forEach((message) => message.animate());
240
- animateMessages();
241
- this.errorMessages.changes.pipe(takeUntil(merge(this.destroyed, this._menuState))).subscribe(() => animateMessages());
242
- }
243
- loggedInChanged(auth) {
244
- // Subscribe to errors once logged in again
245
- if (auth) {
246
- this.subscribeToErrors();
247
- }
248
- else {
249
- while (this._errors.length > 0) {
250
- this._errors.pop();
251
- }
252
- }
253
- this.changeDetectorRef.markForCheck();
254
- }
255
- subscribeToErrors() {
256
- let until = this.destroyed;
257
- // Stop receiving errors once user was logged out
258
- if (this.authProvider) {
259
- until = merge(until, this.authProvider.loggedInStream.pipe(filter((auth) => !auth), map(() => undefined)));
260
- }
261
- this.errorCollector.errorStream.pipe(takeUntil(until)).subscribe((error) => this.errorReceived(error, until));
262
- }
263
- errorReceived(error, until) {
264
- const errorMessageWrapper = new ErrorMessageWrapper(error);
265
- // Subscribe for state changes
266
- errorMessageWrapper.readStateChanged.pipe(takeUntil(until)).subscribe(() => this.changeDetectorRef.detectChanges());
267
- this._errors.unshift(errorMessageWrapper);
268
- while (this._errors.length > 10) {
269
- this._errors.pop();
270
- }
271
- this.changeDetectorRef.markForCheck();
272
- }
273
- get color() {
274
- if (this.errors.some((error) => !error.read)) {
275
- return 'warn';
276
- }
277
- return null;
278
- }
279
- menuOpened() {
280
- this._menuState.next(true);
281
- }
282
- menuClosed() {
283
- this._menuState.next(false);
284
- }
285
- get errors() {
286
- return this._errors;
287
- }
288
- // <editor-fold desc="Animation control" defaultstate="collapsed">
289
- animationDone(event) {
290
- if (event.toState === 'newError') {
291
- // Reset after annimation
292
- this.state = 'active';
293
- // Called from animation controller we need to re-check
294
- this.changeDetectorRef.markForCheck();
295
- }
296
- }
297
- initAnimation() {
298
- timer(100, 2000).pipe(
299
- // Run animation everytime we have non-read errors
300
- filter(() => this.errors.some((error) => !error.read)), takeUntil(this.destroyed)).subscribe(() => {
301
- switch (this.state) {
302
- case null:
303
- this.state = 'active';
304
- break;
305
- case 'active':
306
- this.state = 'newError';
307
- break;
308
- }
309
- this.changeDetectorRef.markForCheck();
310
- });
311
- }
312
- }
313
- ErrorComponent.decorators = [
314
- { type: Component, args: [{
315
- selector: 'risk-error-menu',
316
- template: "<button *ngIf=\"state != null\"\n mat-icon-button\n [color]=\"color\"\n type=\"button\"\n [@buttonState]=\"state\"\n (@buttonState.done)=\"animationDone($event)\"\n [matMenuTriggerFor]=\"errorMenu\"\n #errorMenuTrigger=\"matMenuTrigger\"\n (menuOpened)=\"menuOpened()\"\n (menuClosed)=\"menuClosed()\"\n [class.risk-menu-open]=\"errorMenuTrigger.menuOpen\">\n <mat-icon>error_outline</mat-icon>\n</button>\n\n<mat-menu #errorMenu=\"matMenu\"\n class=\"risk-error-menu-mat-menu\"\n [overlapTrigger]=\"false\">\n <risk-error-message *ngFor=\"let error of errors; last as isLast\"\n [error]=\"error\"\n (click)=\"keepVisibleOnClick ? $event.stopPropagation() : null\"\n [isLast]=\"isLast\"></risk-error-message>\n</mat-menu>\n",
317
- animations: [
318
- trigger('buttonState', [
319
- state('inactive', style({ transform: 'translateX(0) scale(0)' })),
320
- state('active', style({ transform: 'translateX(0) scale(1)' })),
321
- state('newError', style({ transform: 'translateX(0) scale(1)' })),
322
- transition('void => active', [
323
- style({ transform: 'scale(0) translateX(0) rotate(0)' }),
324
- JIGGLE_ANIMATION
325
- ]),
326
- transition('void => newError', [
327
- style({ transform: 'scale(0) translateX(0) rotate(0)' }),
328
- JIGGLE_ANIMATION
329
- ]),
330
- transition('active => newError', [
331
- style({ transform: 'scale(1) translateX(0) rotate(0)' }),
332
- JIGGLE_ANIMATION
333
- ])
334
- ])
335
- ],
336
- host: {
337
- '[class.risk-error-menu]': 'true'
338
- },
339
- changeDetection: ChangeDetectionStrategy.OnPush,
340
- preserveWhitespaces: false,
341
- styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", "::ng-deep .risk-error-menu-mat-menu{max-width:600px!important}\n"]
342
- },] }
343
- ];
344
- ErrorComponent.ctorParameters = () => [
345
- { type: ErrorCollectorService },
346
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [AUTH_PROVIDER,] }] },
347
- { type: ChangeDetectorRef }
348
- ];
349
- ErrorComponent.propDecorators = {
350
- keepVisibleOnClick: [{ type: Input }],
351
- errorMessages: [{ type: ViewChildren, args: [ErrorMessageComponent,] }]
352
- };
353
-
354
- class ErrorModule {
355
- }
356
- ErrorModule.decorators = [
357
- { type: NgModule, args: [{
358
- imports: [
359
- CommonModule,
360
- CommonViewModule
361
- ],
362
- exports: [
363
- ErrorComponent
364
- ],
365
- declarations: [
366
- ErrorComponent,
367
- ErrorMessageComponent
368
- ],
369
- providers: [
370
- ErrorCollectorService,
371
- {
372
- provide: ErrorHandler,
373
- useExisting: ErrorCollectorService
374
- }
375
- ]
376
- },] }
377
- ];
378
-
379
- /**
380
- * Collects all error using error collector and returns the "otherwise" error instead.
381
- * @param errorCollector Error collector service.
382
- * @param otherwise Value to be returned in case of error.
383
- */
384
- function collectErrors(errorCollector, otherwise) {
385
- return (source) => source.pipe(catchError((err) => errorCollector.handleStreamError(err)), defaultIfEmpty(otherwise));
386
- }
387
-
388
- /**
389
- * Generated bundle index. Do not edit.
390
- */
391
-
392
- export { ErrorCollectorService, ErrorModule, collectErrors, toErrorMessage, JIGGLE_ANIMATION as ɵa, ErrorComponent as ɵb, ErrorMessageComponent as ɵc };
393
- //# sourceMappingURL=dbg-riskit-angular-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dbg-riskit-angular-error.js","sources":["../../../../pkg/dbg-riskit/angular-error/src/lib/error.collector.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.component.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.wrapper.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.menu.component.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.module.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/rxjs.utils.ts","../../../../pkg/dbg-riskit/angular-error/src/dbg-riskit-angular-error.ts"],"sourcesContent":["import {ErrorHandler, Inject, Injectable, Optional} from '@angular/core';\nimport {AUTH_PROVIDER} from '@dbg-riskit/angular-common';\nimport {AuthProvider, ErrorMessage, ErrorType, toString} from '@dbg-riskit/common';\nimport {EMPTY, Observable, ReplaySubject} from 'rxjs';\n\nexport type ErrorTypes = ErrorMessage | Error | object | string;\n\nexport function toErrorMessage(err: ErrorTypes): ErrorMessage {\n let errorMessage: ErrorMessage;\n if ('errorType' in (err as ErrorMessage)) {\n errorMessage = err as ErrorMessage;\n } else {\n if ('message' in (err as Error)) {\n err = (err as Error).message || toString(err);\n } else {\n err = toString(err);\n }\n errorMessage = {\n message : err,\n status : 0,\n errorType: ErrorType.ERROR\n };\n }\n return errorMessage;\n}\n\n@Injectable()\nexport class ErrorCollectorService extends ErrorHandler {\n\n private _errorObservable: ReplaySubject<ErrorMessage> = new ReplaySubject(10);\n\n public constructor(@Optional() @Inject(AUTH_PROVIDER) authProvider: AuthProvider) {\n super();\n if (authProvider) {\n authProvider.loggedInStream.subscribe((auth: boolean) => {\n this._errorObservable = new ReplaySubject(10);\n });\n }\n }\n\n public error(err: ErrorMessage) {\n this._errorObservable.next(err);\n }\n\n public get errorStream(): Observable<ErrorMessage> {\n return this._errorObservable.asObservable();\n }\n\n public handleError(err: ErrorTypes): void {\n try {\n super.handleError(err);\n } finally {\n this.error(toErrorMessage(err));\n }\n }\n\n public handleStreamError<T>(err: ErrorTypes): Observable<T> {\n this.handleError(err);\n return EMPTY;\n }\n}\n","import {animate, AnimationEvent, keyframes, state, style, transition, trigger} from '@angular/animations';\nimport {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input} from '@angular/core';\nimport {DATE_FORMAT} from '@dbg-riskit/angular-common';\nimport {ErrorMessageWrapper} from './error.message.wrapper';\n\n@Component({\n selector : 'risk-error-message',\n templateUrl: 'error.message.component.html',\n styleUrls : [\n '../../../component.scss',\n 'error.message.component.scss'\n ],\n animations : [\n trigger('readState', [\n state('read', style({background: 'transparent'})),\n transition(':enter', [\n style({\n height : 0,\n transform: 'scale(0)'\n }),\n animate('200ms ease-in', style({\n height : '*',\n transform: 'scale(1)'\n }))\n ]),\n transition('* => read', [\n style({\n background: 'transparent'\n }),\n animate('1500ms', keyframes([\n style({\n background: 'rgba(204, 51, 51, .5)',\n offset : 0.25\n }),\n style({\n background: 'transparent',\n offset : 0.5\n }),\n style({\n background: 'rgba(204, 51, 51, .5)',\n offset : 0.75\n }),\n style({\n background: 'transparent',\n offset : 1\n })\n ]))\n ])\n ])\n ],\n host : {\n '[class.risk-error-message]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n})\nexport class ErrorMessageComponent {\n\n public readState: 'read' | null = null;\n\n @Input()\n public error?: ErrorMessageWrapper;\n\n @Input()\n public isLast: boolean = false;\n\n public constructor(@Inject(DATE_FORMAT) public readonly dateFormat: string,\n private readonly changeDetectorRef: ChangeDetectorRef) {\n }\n\n public animate(): void {\n if (this.error != null && !this.error.read && this.readState !== 'read') {\n setTimeout(() => {\n this.readState = 'read';\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n\n public markRead(event: AnimationEvent): void {\n if (this.error != null && event.toState === 'read') {\n this.error.markRead();\n this.changeDetectorRef.markForCheck();\n }\n }\n}\n","import {EventEmitter} from '@angular/core';\n\nimport {ErrorMessage, ErrorType} from '@dbg-riskit/common';\n\nexport class ErrorMessageWrapper {\n private readonly _error: ErrorMessage;\n private readonly _date: Date = new Date();\n private _read: boolean = false;\n\n public readonly readStateChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n public constructor(error: ErrorMessage) {\n this._error = error;\n }\n\n public get message(): string {\n return this._error.message;\n }\n\n public get type(): ErrorType {\n return this._error.errorType;\n }\n\n public get statusCode(): number {\n return this._error.status;\n }\n\n public get date(): Date {\n return this._date;\n }\n\n public get read(): boolean {\n return this._read;\n }\n\n public markRead(): void {\n if (!this._read) {\n this._read = true;\n this.readStateChanged.emit(this._read);\n this.readStateChanged.complete();\n }\n }\n}\n","import {\n animate,\n AnimationAnimateMetadata,\n AnimationEvent,\n keyframes,\n state,\n style,\n transition,\n trigger\n} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n Optional,\n QueryList,\n ViewChildren,\n Input\n} from '@angular/core';\nimport {AUTH_PROVIDER, MatColorTheme} from '@dbg-riskit/angular-common';\nimport {BaseComponent} from '@dbg-riskit/angular-view';\nimport {AuthProvider, ErrorMessage} from '@dbg-riskit/common';\nimport {merge, Observable, Subject, timer} from 'rxjs';\nimport {filter, map, takeUntil} from 'rxjs/operators';\nimport {ErrorCollectorService} from './error.collector';\nimport {ErrorMessageComponent} from './error.message.component';\nimport {ErrorMessageWrapper} from './error.message.wrapper';\n\nexport const JIGGLE_ANIMATION: AnimationAnimateMetadata = animate('1s ease-in', keyframes([\n style({\n transform: 'scale(0.8) translateX(-1px) rotate(0)',\n offset : 0.1\n }),\n style({\n transform: 'scale(1) translateX(2px) rotate(4deg)',\n offset : 0.2\n }),\n style({\n transform: 'scale(1.2) translateX(-4px) rotate(0)',\n offset : 0.3\n }),\n style({\n transform: 'scale(1.5) translateX(4px) rotate(0)',\n offset : 0.4\n }),\n style({\n transform: 'scale(1.5) translateX(-4px) rotate(-8deg)',\n offset : 0.5\n }),\n style({\n transform: 'scale(1.5) translateX(4px) rotate(0)',\n offset : 0.6\n }),\n style({\n transform: 'scale(1.2) translateX(-4px) rotate(0)',\n offset : 0.7\n }),\n style({\n transform: 'scale(1) translateX(2px) rotate(4deg)',\n offset : 0.8\n }),\n style({\n transform: 'scale(1) translateX(-1px) rotate(0)',\n offset : 0.9\n })\n]));\n\n@Component({\n selector : 'risk-error-menu',\n templateUrl : 'error.menu.component.html',\n styleUrls : [\n '../../../component.scss',\n 'error.menu.component.scss'\n ],\n animations : [\n trigger('buttonState', [\n state('inactive', style({transform: 'translateX(0) scale(0)'})),\n state('active', style({transform: 'translateX(0) scale(1)'})),\n state('newError', style({transform: 'translateX(0) scale(1)'})),\n transition('void => active', [\n style({transform: 'scale(0) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ]),\n transition('void => newError', [\n style({transform: 'scale(0) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ]),\n transition('active => newError', [\n style({transform: 'scale(1) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ])\n ])\n ],\n host : {\n '[class.risk-error-menu]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n})\nexport class ErrorComponent extends BaseComponent implements OnInit {\n\n public state: 'active' | 'newError' | null = null;\n\n @Input() public keepVisibleOnClick?: boolean;\n\n private readonly _errors: ErrorMessageWrapper[] = [];\n\n private readonly _menuState: Subject<boolean> = new Subject();\n\n @ViewChildren(ErrorMessageComponent)\n public errorMessages?: QueryList<ErrorMessageComponent>;\n\n public constructor(private readonly errorCollector: ErrorCollectorService,\n @Optional() @Inject(AUTH_PROVIDER) private readonly authProvider: AuthProvider,\n private readonly changeDetectorRef: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n // Init Jiggle animation loop\n this.initAnimation();\n\n // Subscribe to error stream\n this.subscribeToErrors();\n\n // Once opened animate messages and set as read after animation\n this._menuState.pipe(\n filter((opened: boolean) => opened),\n takeUntil(this.destroyed)\n ).subscribe(() => this.animateOnMenuOpened());\n\n // Refresh on \"logged-in\" state changes\n if (this.authProvider) {\n this.authProvider.loggedInStream.pipe(\n takeUntil(this.destroyed)\n ).subscribe((auth: boolean) => this.loggedInChanged(auth));\n }\n }\n\n private animateOnMenuOpened() {\n const animateMessages = () => this.errorMessages!.forEach(\n (message: ErrorMessageComponent) => message.animate());\n animateMessages();\n this.errorMessages!.changes.pipe(\n takeUntil(merge(this.destroyed, this._menuState))\n ).subscribe(() => animateMessages());\n }\n\n private loggedInChanged(auth: boolean) {\n // Subscribe to errors once logged in again\n if (auth) {\n this.subscribeToErrors();\n } else {\n while (this._errors.length > 0) {\n this._errors.pop();\n }\n }\n this.changeDetectorRef.markForCheck();\n }\n\n private subscribeToErrors() {\n let until: Observable<void> = this.destroyed;\n // Stop receiving errors once user was logged out\n if (this.authProvider) {\n until = merge(\n until,\n this.authProvider.loggedInStream.pipe(\n filter((auth: boolean) => !auth),\n map(() => undefined)\n )\n );\n }\n this.errorCollector.errorStream.pipe(\n takeUntil(until)\n ).subscribe((error: ErrorMessage) => this.errorReceived(error, until));\n }\n\n private errorReceived(error: ErrorMessage, until: Observable<unknown>) {\n const errorMessageWrapper = new ErrorMessageWrapper(error);\n\n // Subscribe for state changes\n errorMessageWrapper.readStateChanged.pipe(\n takeUntil(until)\n ).subscribe(() => this.changeDetectorRef.detectChanges());\n\n this._errors.unshift(errorMessageWrapper);\n while (this._errors.length > 10) {\n this._errors.pop();\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n public get color(): MatColorTheme {\n if (this.errors.some((error: ErrorMessageWrapper) => !error.read)) {\n return 'warn';\n }\n return null;\n }\n\n public menuOpened(): void {\n this._menuState.next(true);\n }\n\n public menuClosed(): void {\n this._menuState.next(false);\n }\n\n public get errors(): ErrorMessageWrapper[] {\n return this._errors;\n }\n\n // <editor-fold desc=\"Animation control\" defaultstate=\"collapsed\">\n public animationDone(event: AnimationEvent): void {\n if (event.toState === 'newError') {\n // Reset after annimation\n this.state = 'active';\n\n // Called from animation controller we need to re-check\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private initAnimation(): void {\n timer(100, 2000).pipe(\n // Run animation everytime we have non-read errors\n filter(() => this.errors.some((error: ErrorMessageWrapper) => !error.read)),\n takeUntil(this.destroyed)\n ).subscribe(() => {\n switch (this.state) {\n case null:\n this.state = 'active';\n break;\n case 'active':\n this.state = 'newError';\n break;\n }\n this.changeDetectorRef.markForCheck();\n });\n }\n\n // </editor-fold>\n}\n","import {CommonModule} from '@angular/common';\nimport {ErrorHandler, NgModule} from '@angular/core';\nimport {CommonViewModule} from '@dbg-riskit/angular-view';\nimport {ErrorCollectorService} from './error.collector';\nimport {ErrorComponent} from './error.menu.component';\nimport {ErrorMessageComponent} from './error.message.component';\n\n@NgModule({\n imports : [\n CommonModule,\n CommonViewModule\n ],\n exports : [\n ErrorComponent\n ],\n declarations: [\n ErrorComponent,\n ErrorMessageComponent\n ],\n providers : [\n ErrorCollectorService,\n {\n provide : ErrorHandler,\n useExisting: ErrorCollectorService\n }\n ]\n})\nexport class ErrorModule {\n}\n","import {MonoTypeOperatorFunction, Observable} from 'rxjs';\nimport {catchError, defaultIfEmpty} from 'rxjs/operators';\nimport {ErrorCollectorService} from './error.collector';\n\n/**\n * Collects all error using error collector and returns the \"otherwise\" error instead.\n * @param errorCollector Error collector service.\n * @param otherwise Value to be returned in case of error.\n */\nexport function collectErrors<T>(errorCollector: ErrorCollectorService, otherwise: T): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) => source.pipe(\n catchError((err) => errorCollector.handleStreamError<T>(err)),\n defaultIfEmpty(otherwise)\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {ErrorComponent as ɵb,JIGGLE_ANIMATION as ɵa} from './lib/error.menu.component';\nexport {ErrorMessageComponent as ɵc} from './lib/error.message.component';"],"names":[],"mappings":"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"}