ngx-cho-common 0.0.1

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 (76) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/guards/feature-guard.service.mjs +32 -0
  3. package/esm2022/lib/guards/unsaved-changes.guard.mjs +13 -0
  4. package/esm2022/lib/logging/console-logger.sink.mjs +27 -0
  5. package/esm2022/lib/logging/logger-sink-configuration.interface.mjs +2 -0
  6. package/esm2022/lib/logging/logger-sink.interface.mjs +2 -0
  7. package/esm2022/lib/logging/logger.model.mjs +3 -0
  8. package/esm2022/lib/logging/logger.service.mjs +127 -0
  9. package/esm2022/lib/logging/models/client-log-entry.interface.mjs +2 -0
  10. package/esm2022/lib/logging/models/severity-level.enum.mjs +9 -0
  11. package/esm2022/lib/logging/server-logger.sink.mjs +51 -0
  12. package/esm2022/lib/models/deactivatable.interface.mjs +2 -0
  13. package/esm2022/lib/models/uuid.model.mjs +32 -0
  14. package/esm2022/lib/security/auth-callback/auth-callback.component.mjs +18 -0
  15. package/esm2022/lib/security/models/auth-user.model.mjs +84 -0
  16. package/esm2022/lib/security/models/authorization-context.model.mjs +6 -0
  17. package/esm2022/lib/security/models/security-policy.model.mjs +15 -0
  18. package/esm2022/lib/security/security-policies.mjs +3 -0
  19. package/esm2022/lib/security/services/auth-guard.service.mjs +32 -0
  20. package/esm2022/lib/security/services/auth.service.mjs +131 -0
  21. package/esm2022/lib/security/signin/signin.component.mjs +18 -0
  22. package/esm2022/lib/security/signout/signout.component.mjs +18 -0
  23. package/esm2022/lib/services/date.service.mjs +40 -0
  24. package/esm2022/lib/services/download.service.mjs +49 -0
  25. package/esm2022/lib/services/feature.service.mjs +66 -0
  26. package/esm2022/lib/services/interval.service.mjs +115 -0
  27. package/esm2022/lib/services/local-storage.service.mjs +29 -0
  28. package/esm2022/lib/services/modal.service.mjs +34 -0
  29. package/esm2022/lib/services/navigation.service.mjs +45 -0
  30. package/esm2022/lib/services/object.service.mjs +33 -0
  31. package/esm2022/lib/services/rest-client.service.mjs +136 -0
  32. package/esm2022/lib/services/route-param.service.mjs +53 -0
  33. package/esm2022/lib/services/session-storage.service.mjs +29 -0
  34. package/esm2022/lib/types/indexable.type.mjs +2 -0
  35. package/esm2022/lib/types/name-value-item.type.mjs +2 -0
  36. package/esm2022/ngx-cho-common.mjs +5 -0
  37. package/esm2022/public-api.mjs +32 -0
  38. package/fesm2022/ngx-cho-common.mjs +1196 -0
  39. package/fesm2022/ngx-cho-common.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/guards/feature-guard.service.d.ts +14 -0
  42. package/lib/guards/unsaved-changes.guard.d.ts +11 -0
  43. package/lib/logging/console-logger.sink.d.ts +10 -0
  44. package/lib/logging/logger-sink-configuration.interface.d.ts +14 -0
  45. package/lib/logging/logger-sink.interface.d.ts +7 -0
  46. package/lib/logging/logger.model.d.ts +10 -0
  47. package/lib/logging/logger.service.d.ts +29 -0
  48. package/lib/logging/models/client-log-entry.interface.d.ts +10 -0
  49. package/lib/logging/models/severity-level.enum.d.ts +7 -0
  50. package/lib/logging/server-logger.sink.d.ts +27 -0
  51. package/lib/models/deactivatable.interface.d.ts +4 -0
  52. package/lib/models/uuid.model.d.ts +4 -0
  53. package/lib/security/auth-callback/auth-callback.component.d.ts +10 -0
  54. package/lib/security/models/auth-user.model.d.ts +57 -0
  55. package/lib/security/models/authorization-context.model.d.ts +5 -0
  56. package/lib/security/models/security-policy.model.d.ts +9 -0
  57. package/lib/security/security-policies.d.ts +3 -0
  58. package/lib/security/services/auth-guard.service.d.ts +12 -0
  59. package/lib/security/services/auth.service.d.ts +60 -0
  60. package/lib/security/signin/signin.component.d.ts +10 -0
  61. package/lib/security/signout/signout.component.d.ts +10 -0
  62. package/lib/services/date.service.d.ts +11 -0
  63. package/lib/services/download.service.d.ts +13 -0
  64. package/lib/services/feature.service.d.ts +40 -0
  65. package/lib/services/interval.service.d.ts +37 -0
  66. package/lib/services/local-storage.service.d.ts +9 -0
  67. package/lib/services/modal.service.d.ts +12 -0
  68. package/lib/services/navigation.service.d.ts +14 -0
  69. package/lib/services/object.service.d.ts +14 -0
  70. package/lib/services/rest-client.service.d.ts +88 -0
  71. package/lib/services/route-param.service.d.ts +17 -0
  72. package/lib/services/session-storage.service.d.ts +9 -0
  73. package/lib/types/indexable.type.d.ts +6 -0
  74. package/lib/types/name-value-item.type.d.ts +5 -0
  75. package/package.json +30 -0
  76. package/public-api.d.ts +33 -0
@@ -0,0 +1,131 @@
1
+ import { AuthUser } from '../models/auth-user.model';
2
+ import { AuthorizationContext } from '../models/authorization-context.model';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { Inject, Injectable } from '@angular/core';
5
+ import { SECURITY_POLICIES } from '../security-policies';
6
+ import { UserManager } from 'oidc-client';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/router";
9
+ import * as i2 from "../../services/session-storage.service";
10
+ import * as i3 from "ngx-spinner";
11
+ // function getClientSettings(): UserManagerSettings {
12
+ // return {
13
+ // authority: environment.auth.authority,
14
+ // client_id: environment.auth.clientId,
15
+ // redirect_uri: `${environment.webApp}/auth-callback`,
16
+ // post_logout_redirect_uri: environment.webApp,
17
+ // response_type: 'id_token token',
18
+ // scope: `openid profile ${environment.auth.resourceId}`,
19
+ // filterProtocolClaims: true,
20
+ // loadUserInfo: true,
21
+ // automaticSilentRenew: true,
22
+ // silent_redirect_uri: `${environment.webApp}/silent-refresh.html`,
23
+ // //extraQueryParams: { resource: environment.auth.resourceId }
24
+ // // This is useful for testing silent refresh. Don't set this any lower, otherwise
25
+ // // the token authority will likely block you.
26
+ // //accessTokenExpiringNotificationTime: 3545
27
+ // };
28
+ // }
29
+ export class AuthService {
30
+ constructor(securityPolicies, webAppUrl, userManagerSettings, router, sessionStorage, spinnerService) {
31
+ this.securityPolicies = securityPolicies;
32
+ this.webAppUrl = webAppUrl;
33
+ this.userManagerSettings = userManagerSettings;
34
+ this.router = router;
35
+ this.sessionStorage = sessionStorage;
36
+ this.spinnerService = spinnerService;
37
+ this.returnUrlKey = 'AuthService.returnUrl';
38
+ this.userManager = new UserManager(this.userManagerSettings);
39
+ this._currentUser = AuthUser.anonymous;
40
+ this.userStream = new BehaviorSubject(AuthUser.anonymous);
41
+ this.userManager.events.addSilentRenewError(err => {
42
+ console.error(err);
43
+ });
44
+ this.checkIsAuthenticated();
45
+ }
46
+ /**
47
+ * Gets the current user.
48
+ */
49
+ get currentUser() {
50
+ return this._currentUser;
51
+ }
52
+ /**
53
+ * Sets the current user.
54
+ */
55
+ set currentUser(user) {
56
+ this._currentUser = user;
57
+ const authContext = new AuthorizationContext(user);
58
+ this.securityPolicies.forEach(p => p.evaluate(authContext));
59
+ this.userStream.next(user);
60
+ }
61
+ /**
62
+ * Checks that the specified security policy is satisfied.
63
+ *
64
+ * @param name
65
+ * @returns
66
+ */
67
+ checkPolicy(name) {
68
+ return this.securityPolicies.some(p => p.name === name && p.succeeded);
69
+ }
70
+ /**
71
+ * Completes the authentication process, redirecting to the return URL if specified
72
+ * in the start authentication call.
73
+ *
74
+ * @returns A void promise.
75
+ */
76
+ async completeAuthentication() {
77
+ this.currentUser = AuthUser.from(await this.userManager.signinRedirectCallback());
78
+ let returnUrl = this.sessionStorage.getItem(this.returnUrlKey) || this.webAppUrl;
79
+ this.sessionStorage.removeItem(this.returnUrlKey);
80
+ if (returnUrl.endsWith('login')) {
81
+ returnUrl = this.webAppUrl;
82
+ }
83
+ this.router.navigateByUrl(returnUrl, { replaceUrl: true });
84
+ }
85
+ /**
86
+ * Determines whether the user is authenticated.
87
+ */
88
+ async checkIsAuthenticated() {
89
+ this.currentUser = AuthUser.from(await this.userManager.getUser());
90
+ return this.currentUser.isAuthenticated;
91
+ }
92
+ /**
93
+ * Signs the current user out of the sytem.
94
+ */
95
+ async signout() {
96
+ await this.userManager.signoutRedirect();
97
+ this.userManager.removeUser();
98
+ this.currentUser = AuthUser.anonymous;
99
+ }
100
+ /**
101
+ * Begins the authentication process.
102
+ *
103
+ * @param returnUrl Optional. Destination after authentication is complete.
104
+ * @returns A void promise.
105
+ */
106
+ startAuthentication(returnUrl) {
107
+ if (returnUrl) {
108
+ this.sessionStorage.setItem(this.returnUrlKey, returnUrl);
109
+ }
110
+ this.spinnerService.show();
111
+ return this.userManager.signinRedirect().then(() => {
112
+ this.spinnerService.hide();
113
+ });
114
+ }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token: SECURITY_POLICIES }, { token: 'webAppUrl' }, { token: 'userManagerSettings' }, { token: i1.Router }, { token: i2.SessionStorageService }, { token: i3.NgxSpinnerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
116
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
117
+ }
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, decorators: [{
119
+ type: Injectable,
120
+ args: [{ providedIn: 'root' }]
121
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
122
+ type: Inject,
123
+ args: [SECURITY_POLICIES]
124
+ }] }, { type: undefined, decorators: [{
125
+ type: Inject,
126
+ args: ['webAppUrl']
127
+ }] }, { type: undefined, decorators: [{
128
+ type: Inject,
129
+ args: ['userManagerSettings']
130
+ }] }, { type: i1.Router }, { type: i2.SessionStorageService }, { type: i3.NgxSpinnerService }] });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZWN1cml0eS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxhQUFhLENBQUM7Ozs7O0FBRy9ELHNEQUFzRDtBQUN0RCxlQUFlO0FBQ2YsaURBQWlEO0FBQ2pELGdEQUFnRDtBQUNoRCwrREFBK0Q7QUFDL0Qsd0RBQXdEO0FBQ3hELDJDQUEyQztBQUMzQyxrRUFBa0U7QUFDbEUsc0NBQXNDO0FBQ3RDLDhCQUE4QjtBQUM5QixzQ0FBc0M7QUFDdEMsNEVBQTRFO0FBQzVFLHdFQUF3RTtBQUN4RSw2RkFBNkY7QUFDN0Ysd0RBQXdEO0FBQ3hELHNEQUFzRDtBQUN0RCxTQUFTO0FBQ1QsSUFBSTtBQUdKLE1BQU0sT0FBTyxXQUFXO0lBT3BCLFlBRW9CLGdCQUFrQyxFQUNaLFNBQWlCLEVBQ1AsbUJBQXdDLEVBQ3ZFLE1BQWMsRUFDZCxjQUFxQyxFQUNyQyxjQUFpQztRQUxsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDdkUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FB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QUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQXpHUSxXQUFXLGtCQVFSLGlCQUFpQixhQUVqQixXQUFXLGFBQ1gscUJBQXFCO21IQVh4QixXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9hdXRob3JpemF0aW9uLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXNwaW5uZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNFQ1VSSVRZX1BPTElDSUVTIH0gZnJvbSAnLi4vc2VjdXJpdHktcG9saWNpZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlQb2xpY3kgfSBmcm9tICcuLi9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyLCBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnb2lkYy1jbGllbnQnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuXG4vLyBmdW5jdGlvbiBnZXRDbGllbnRTZXR0aW5ncygpOiBVc2VyTWFuYWdlclNldHRpbmdzIHtcbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAgICBhdXRob3JpdHk6IGVudmlyb25tZW50LmF1dGguYXV0aG9yaXR5LFxuLy8gICAgICAgICBjbGllbnRfaWQ6IGVudmlyb25tZW50LmF1dGguY2xpZW50SWQsXG4vLyAgICAgICAgIHJlZGlyZWN0X3VyaTogYCR7ZW52aXJvbm1lbnQud2ViQXBwfS9hdXRoLWNhbGxiYWNrYCxcbi8vICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpOiBlbnZpcm9ubWVudC53ZWJBcHAsXG4vLyAgICAgICAgIHJlc3BvbnNlX3R5cGU6ICdpZF90b2tlbiB0b2tlbicsXG4vLyAgICAgICAgIHNjb3BlOiBgb3BlbmlkIHByb2ZpbGUgJHtlbnZpcm9ubWVudC5hdXRoLnJlc291cmNlSWR9YCxcbi8vICAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHRydWUsXG4vLyAgICAgICAgIGxvYWRVc2VySW5mbzogdHJ1ZSxcbi8vICAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXc6IHRydWUsXG4vLyAgICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmk6IGAke2Vudmlyb25tZW50LndlYkFwcH0vc2lsZW50LXJlZnJlc2guaHRtbGAsXG4vLyAgICAgICAgIC8vZXh0cmFRdWVyeVBhcmFtczogeyByZXNvdXJjZTogZW52aXJvbm1lbnQuYXV0aC5yZXNvdXJjZUlkIH1cbi8vICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgc2lsZW50IHJlZnJlc2guICBEb24ndCBzZXQgdGhpcyBhbnkgbG93ZXIsIG90aGVyd2lzZVxuLy8gICAgICAgICAvLyB0aGUgdG9rZW4gYXV0aG9yaXR5IHdpbGwgbGlrZWx5IGJsb2NrIHlvdS5cbi8vICAgICAgICAgLy9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTogMzU0NVxuLy8gICAgIH07XG4vLyB9XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmV0dXJuVXJsS2V5ID0gJ0F1dGhTZXJ2aWNlLnJldHVyblVybCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcih0aGlzLnVzZXJNYW5hZ2VyU2V0dGluZ3MpO1xuXG4gICAgcHJpdmF0ZSBfY3VycmVudFVzZXIgPSBBdXRoVXNlci5hbm9ueW1vdXM7XG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXJTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhVc2VyPihBdXRoVXNlci5hbm9ueW1vdXMpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VDVVJJVFlfUE9MSUNJRVMpXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZWN1cml0eVBvbGljaWVzOiBTZWN1cml0eVBvbGljeVtdLFxuICAgICAgICBASW5qZWN0KCd3ZWJBcHBVcmwnKSBwcml2YXRlIHJlYWRvbmx5IHdlYkFwcFVybDogc3RyaW5nLFxuICAgICAgICBASW5qZWN0KCd1c2VyTWFuYWdlclNldHRpbmdzJykgcHJpdmF0ZSByZWFkb25seSB1c2VyTWFuYWdlclNldHRpbmdzOiBVc2VyTWFuYWdlclNldHRpbmdzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3Bpbm5lclNlcnZpY2U6IE5neFNwaW5uZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlck1hbmFnZXIuZXZlbnRzLmFkZFNpbGVudFJlbmV3RXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tJc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHVzZXIuXG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRVc2VyKCk6IEF1dGhVc2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVc2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldCBjdXJyZW50VXNlcih1c2VyOiBBdXRoVXNlcikge1xuICAgICAgICB0aGlzLl9jdXJyZW50VXNlciA9IHVzZXI7XG5cbiAgICAgICAgY29uc3QgYXV0aENvbnRleHQgPSBuZXcgQXV0aG9yaXphdGlvbkNvbnRleHQodXNlcik7XG4gICAgICAgIHRoaXMuc2VjdXJpdHlQb2xpY2llcy5mb3JFYWNoKHAgPT4gcC5ldmFsdWF0ZShhdXRoQ29udGV4dCkpO1xuXG4gICAgICAgIHRoaXMudXNlclN0cmVhbS5uZXh0KHVzZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGF0IHRoZSBzcGVjaWZpZWQgc2VjdXJpdHkgcG9saWN5IGlzIHNhdGlzZmllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBjaGVja1BvbGljeShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdXJpdHlQb2xpY2llcy5zb21lKHAgPT4gcC5uYW1lID09PSBuYW1lICYmIHAuc3VjY2VlZGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIHJlZGlyZWN0aW5nIHRvIHRoZSByZXR1cm4gVVJMIGlmIHNwZWNpZmllZFxuICAgICAqIGluIHRoZSBzdGFydCBhdXRoZW50aWNhdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2b2lkIHByb21pc2UuXG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGVBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrKCkpO1xuXG4gICAgICAgIGxldCByZXR1cm5VcmwgPVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtPHN0cmluZz4odGhpcy5yZXR1cm5VcmxLZXkpIHx8IHRoaXMud2ViQXBwVXJsO1xuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5yZXR1cm5VcmxLZXkpO1xuXG4gICAgICAgIGlmIChyZXR1cm5VcmwuZW5kc1dpdGgoJ2xvZ2luJykpIHtcbiAgICAgICAgICAgIHJldHVyblVybCA9IHRoaXMud2ViQXBwVXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZXR1cm5VcmwsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0lzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5nZXRVc2VyKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlci5pc0F1dGhlbnRpY2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2lnbnMgdGhlIGN1cnJlbnQgdXNlciBvdXQgb2YgdGhlIHN5dGVtLlxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25vdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0KCk7XG5cbiAgICAgICAgdGhpcy51c2VyTWFuYWdlci5yZW1vdmVVc2VyKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSBBdXRoVXNlci5hbm9ueW1vdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVnaW5zIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJldHVyblVybCBPcHRpb25hbC4gIERlc3RpbmF0aW9uIGFmdGVyIGF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqIEByZXR1cm5zIEEgdm9pZCBwcm9taXNlLlxuICAgICAqL1xuICAgIHN0YXJ0QXV0aGVudGljYXRpb24ocmV0dXJuVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChyZXR1cm5VcmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnJldHVyblVybEtleSwgcmV0dXJuVXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,18 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../services/auth.service";
4
+ export class SigninComponent {
5
+ constructor(authService) {
6
+ this.authService = authService;
7
+ }
8
+ ngOnInit() {
9
+ this.authService.startAuthentication('/');
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SigninComponent, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SigninComponent, selector: "app-signin", ngImport: i0, template: "<section class=\"container-fluid\">\n <p>Redirecting to sign in page...</p>\n</section>\n" }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SigninComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'app-signin', template: "<section class=\"container-fluid\">\n <p>Redirecting to sign in page...</p>\n</section>\n" }]
17
+ }], ctorParameters: () => [{ type: i1.AuthService }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmluLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9saWIvc2VjdXJpdHkvc2lnbmluL3NpZ25pbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY2hvLWNvbW1vbi9zcmMvbGliL3NlY3VyaXR5L3NpZ25pbi9zaWduaW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBT2xELE1BQU0sT0FBTyxlQUFlO0lBQ3hCLFlBQTZCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUV6RCxRQUFRO1FBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDOytHQUxRLGVBQWU7bUdBQWYsZUFBZSxrRENQNUIsOEZBR0E7OzRGRElhLGVBQWU7a0JBSjNCLFNBQVM7K0JBQ0ksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXNpZ25pbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NpZ25pbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNpZ25pbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5zdGFydEF1dGhlbnRpY2F0aW9uKCcvJyk7XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8cD5SZWRpcmVjdGluZyB0byBzaWduIGluIHBhZ2UuLi48L3A+XG48L3NlY3Rpb24+XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../services/auth.service";
4
+ export class SignoutComponent {
5
+ constructor(authService) {
6
+ this.authService = authService;
7
+ }
8
+ ngOnInit() {
9
+ this.authService.signout();
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignoutComponent, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SignoutComponent, selector: "app-signout", ngImport: i0, template: "<section class=\"container-fluid\">\n <p>Signing out...</p>\n</section>\n" }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignoutComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'app-signout', template: "<section class=\"container-fluid\">\n <p>Signing out...</p>\n</section>\n" }]
17
+ }], ctorParameters: () => [{ type: i1.AuthService }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbm91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY2hvLWNvbW1vbi9zcmMvbGliL3NlY3VyaXR5L3NpZ25vdXQvc2lnbm91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY2hvLWNvbW1vbi9zcmMvbGliL3NlY3VyaXR5L3NpZ25vdXQvc2lnbm91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFPbEQsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixZQUE2QixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFHLENBQUM7SUFFekQsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQzsrR0FMUSxnQkFBZ0I7bUdBQWhCLGdCQUFnQixtRENQN0IsOEVBR0E7OzRGRElhLGdCQUFnQjtrQkFKNUIsU0FBUzsrQkFDSSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtc2lnbm91dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NpZ25vdXQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTaWdub3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25vdXQoKTtcbiAgICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxwPlNpZ25pbmcgb3V0Li4uPC9wPlxuPC9zZWN0aW9uPlxuIl19
@@ -0,0 +1,40 @@
1
+ import { Injectable } from '@angular/core';
2
+ import moment from 'moment';
3
+ import * as i0 from "@angular/core";
4
+ export class DateService {
5
+ getMonthItems(startMonth = 1, endMonth = 12) {
6
+ const items = [];
7
+ const d = moment().startOf('year');
8
+ let i = startMonth;
9
+ while (i <= endMonth) {
10
+ d.set('month', i - 1);
11
+ items.push({ value: i, name: d.format('MMMM') });
12
+ i++;
13
+ }
14
+ return items;
15
+ }
16
+ getYearItems(startYear, endYear) {
17
+ startYear = startYear || moment().year();
18
+ endYear = endYear || moment().year();
19
+ const items = [];
20
+ let i = startYear;
21
+ while (i <= endYear) {
22
+ items.push({ value: i, name: i.toString() });
23
+ i++;
24
+ }
25
+ return items;
26
+ }
27
+ toDateString(input) {
28
+ return moment(input).format('yyyy-MM-DD');
29
+ }
30
+ toISOString(input) {
31
+ return moment(input).toISOString();
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateService, providedIn: 'root' }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateService, decorators: [{
37
+ type: Injectable,
38
+ args: [{ providedIn: 'root' }]
39
+ }] });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9kYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7O0FBSzVCLE1BQU0sT0FBTyxXQUFXO0lBQ2IsYUFBYSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLEVBQUU7UUFDOUMsTUFBTSxLQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBRW5CLE9BQU8sQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakQsQ0FBQyxFQUFFLENBQUM7UUFDUixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUFrQixFQUFFLE9BQWdCO1FBQ3BELFNBQVMsR0FBRyxTQUFTLElBQUksTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsT0FBTyxHQUFHLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVyQyxNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUVsQixPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDLEVBQUUsQ0FBQztRQUNSLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQXlCO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXlCO1FBQ3hDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7K0dBcENRLFdBQVc7bUhBQVgsV0FBVyxjQURFLE1BQU07OzRGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTmFtZVZhbHVlSXRlbSB9IGZyb20gJy4uL3R5cGVzL25hbWUtdmFsdWUtaXRlbS50eXBlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEYXRlU2VydmljZSB7XG4gICAgcHVibGljIGdldE1vbnRoSXRlbXMoc3RhcnRNb250aCA9IDEsIGVuZE1vbnRoID0gMTIpOiBOYW1lVmFsdWVJdGVtPG51bWJlcj5bXSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBOYW1lVmFsdWVJdGVtPG51bWJlcj5bXSA9IFtdO1xuICAgICAgICBjb25zdCBkID0gbW9tZW50KCkuc3RhcnRPZigneWVhcicpO1xuICAgICAgICBsZXQgaSA9IHN0YXJ0TW9udGg7XG5cbiAgICAgICAgd2hpbGUgKGkgPD0gZW5kTW9udGgpIHtcbiAgICAgICAgICAgIGQuc2V0KCdtb250aCcsIGkgLSAxKTtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goeyB2YWx1ZTogaSwgbmFtZTogZC5mb3JtYXQoJ01NTU0nKSB9KTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0WWVhckl0ZW1zKHN0YXJ0WWVhcj86IG51bWJlciwgZW5kWWVhcj86IG51bWJlcik6IE5hbWVWYWx1ZUl0ZW08bnVtYmVyPltdIHtcbiAgICAgICAgc3RhcnRZZWFyID0gc3RhcnRZZWFyIHx8IG1vbWVudCgpLnllYXIoKTtcbiAgICAgICAgZW5kWWVhciA9IGVuZFllYXIgfHwgbW9tZW50KCkueWVhcigpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBOYW1lVmFsdWVJdGVtPG51bWJlcj5bXSA9IFtdO1xuICAgICAgICBsZXQgaSA9IHN0YXJ0WWVhcjtcblxuICAgICAgICB3aGlsZSAoaSA8PSBlbmRZZWFyKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHsgdmFsdWU6IGksIG5hbWU6IGkudG9TdHJpbmcoKSB9KTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9EYXRlU3RyaW5nKGlucHV0OiBtb21lbnQuTW9tZW50SW5wdXQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbW9tZW50KGlucHV0KS5mb3JtYXQoJ3l5eXktTU0tREQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9JU09TdHJpbmcoaW5wdXQ6IG1vbWVudC5Nb21lbnRJbnB1dCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtb21lbnQoaW5wdXQpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,49 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { shareReplay } from 'rxjs';
3
+ import { saveAs } from 'file-saver';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ export class DownloadService {
7
+ constructor(httpClient) {
8
+ this.httpClient = httpClient;
9
+ this.octetStreamMime = 'application/octet-stream';
10
+ }
11
+ downloadFile(url, params) {
12
+ const download$ = this.httpClient
13
+ .get(url, {
14
+ responseType: 'arraybuffer',
15
+ observe: 'response',
16
+ params: params,
17
+ })
18
+ .pipe(shareReplay());
19
+ download$.subscribe(r => this.processDownload(r));
20
+ return download$;
21
+ }
22
+ processDownload(response) {
23
+ const filename = this.getFileNameFromResponse(response);
24
+ const contentType = response.headers.get('content-type') || this.octetStreamMime;
25
+ if (response.body) {
26
+ const blob = new Blob([response.body], { type: contentType });
27
+ saveAs(blob, filename);
28
+ }
29
+ }
30
+ getFileNameFromResponse(response) {
31
+ // attempt to get from response headers
32
+ let fileName = response.headers.get('x-filename') || response.headers.get('filename');
33
+ if (!fileName) {
34
+ // attempt to get from content disposition
35
+ const disposition = response.headers.get('content-disposition');
36
+ if (disposition) {
37
+ fileName = disposition.split(';')[1].split('=')[1].replace(/"/g, '');
38
+ }
39
+ }
40
+ return fileName || 'download.bin';
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DownloadService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
43
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DownloadService, providedIn: 'any' }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DownloadService, decorators: [{
46
+ type: Injectable,
47
+ args: [{ providedIn: 'any' }]
48
+ }], ctorParameters: () => [{ type: i1.HttpClient }] });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9saWIvc2VydmljZXMvZG93bmxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBR3BDLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFFbEMsb0JBQWUsR0FBRywwQkFBMEIsQ0FBQztJQUZSLENBQUM7SUFJdkMsWUFBWSxDQUFDLEdBQVcsRUFBRSxNQUFtQjtRQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVTthQUM1QixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sWUFBWSxFQUFFLGFBQWE7WUFDM0IsT0FBTyxFQUFFLFVBQVU7WUFDbkIsTUFBTSxFQUFFLE1BQU07U0FDakIsQ0FBQzthQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRXpCLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFtQztRQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUVqRixJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlELE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxRQUFtQztRQUMvRCx1Q0FBdUM7UUFDdkMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ1osMENBQTBDO1lBQzFDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFFaEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDZCxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RSxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sUUFBUSxJQUFJLGNBQWMsQ0FBQztJQUN0QyxDQUFDOytHQTNDUSxlQUFlO21IQUFmLGVBQWUsY0FERixLQUFLOzs0RkFDbEIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ2FueScgfSlcbmV4cG9ydCBjbGFzcyBEb3dubG9hZFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCkge31cblxuICAgIHByaXZhdGUgb2N0ZXRTdHJlYW1NaW1lID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlKHVybDogc3RyaW5nLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXlCdWZmZXI+PiB7XG4gICAgICAgIGNvbnN0IGRvd25sb2FkJCA9IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh1cmwsIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShzaGFyZVJlcGxheSgpKTtcblxuICAgICAgICBkb3dubG9hZCQuc3Vic2NyaWJlKHIgPT4gdGhpcy5wcm9jZXNzRG93bmxvYWQocikpO1xuXG4gICAgICAgIHJldHVybiBkb3dubG9hZCQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzRG93bmxvYWQocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheUJ1ZmZlcj4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVOYW1lRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgdGhpcy5vY3RldFN0cmVhbU1pbWU7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2UuYm9keV0sIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gICAgICAgICAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWxlTmFtZUZyb21SZXNwb25zZShyZXNwb25zZTogSHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPik6IHN0cmluZyB7XG4gICAgICAgIC8vIGF0dGVtcHQgdG8gZ2V0IGZyb20gcmVzcG9uc2UgaGVhZGVyc1xuICAgICAgICBsZXQgZmlsZU5hbWUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1maWxlbmFtZScpIHx8IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdmaWxlbmFtZScpO1xuXG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIGF0dGVtcHQgdG8gZ2V0IGZyb20gY29udGVudCBkaXNwb3NpdGlvblxuICAgICAgICAgICAgY29uc3QgZGlzcG9zaXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuXG4gICAgICAgICAgICBpZiAoZGlzcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGRpc3Bvc2l0aW9uLnNwbGl0KCc7JylbMV0uc3BsaXQoJz0nKVsxXS5yZXBsYWNlKC9cIi9nLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsZU5hbWUgfHwgJ2Rvd25sb2FkLmJpbic7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,66 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./rest-client.service";
5
+ export class FeatureService {
6
+ constructor(webApiUrl, restClient) {
7
+ this.webApiUrl = webApiUrl;
8
+ this.restClient = restClient;
9
+ this.featureStream = new BehaviorSubject([]);
10
+ this._enabledFeatures = [];
11
+ this._isInitialized = false;
12
+ this.routePrefix = `${this.webApiUrl}/common/features`;
13
+ this.checkEnabledFeatures();
14
+ }
15
+ /**
16
+ * Gets the enabled features.
17
+ */
18
+ get enabledFeatures() {
19
+ return this._enabledFeatures;
20
+ }
21
+ /**
22
+ * Sets the enabled features.
23
+ */
24
+ set enabledFeatures(enabledFeatures) {
25
+ this._enabledFeatures = enabledFeatures;
26
+ this._isInitialized = true;
27
+ this.featureStream.next(enabledFeatures);
28
+ }
29
+ /**
30
+ * Gets whether features have been initialized
31
+ */
32
+ get isInitialized() {
33
+ return this._isInitialized;
34
+ }
35
+ /**
36
+ * Checks that the enabled features are set and returns the list.
37
+ *
38
+ * @param name
39
+ * @returns
40
+ */
41
+ async checkEnabledFeatures() {
42
+ if (!this._enabledFeatures) {
43
+ this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);
44
+ }
45
+ return this.enabledFeatures;
46
+ }
47
+ /**
48
+ * Checks that the specified feature is enabled.
49
+ *
50
+ * @param name
51
+ * @returns
52
+ */
53
+ checkFeatureIsEnabled(name) {
54
+ return this._enabledFeatures?.some(p => p === name);
55
+ }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token: 'webApiUrl' }, { token: i1.RestClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
57
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, providedIn: 'root' }); }
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, decorators: [{
60
+ type: Injectable,
61
+ args: [{ providedIn: 'root' }]
62
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
63
+ type: Inject,
64
+ args: ['webApiUrl']
65
+ }] }, { type: i1.RestClient }] });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9mZWF0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSXZDLE1BQU0sT0FBTyxjQUFjO0lBT3ZCLFlBQ2lDLFNBQWlCLEVBQzdCLFVBQXNCO1FBRFYsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUjNCLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFMUQscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBTzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxrQkFBa0IsQ0FBQztRQUN2RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFZLGVBQWUsQ0FBQyxlQUF5QjtRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxVQUFVLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBN0RRLGNBQWMsa0JBUVgsV0FBVzttSEFSZCxjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc3RDbGllbnQgfSBmcm9tICcuL3Jlc3QtY2xpZW50LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZlYXR1cmVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmVhdHVyZVN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcblxuICAgIHByaXZhdGUgX2VuYWJsZWRGZWF0dXJlczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZVByZWZpeDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KCd3ZWJBcGlVcmwnKSBwcml2YXRlIHdlYkFwaVVybDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RDbGllbnQ6IFJlc3RDbGllbnRcbiAgICApIHtcbiAgICAgICAgdGhpcy5yb3V0ZVByZWZpeCA9IGAke3RoaXMud2ViQXBpVXJsfS9jb21tb24vZmVhdHVyZXNgO1xuICAgICAgICB0aGlzLmNoZWNrRW5hYmxlZEZlYXR1cmVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZW5hYmxlZCBmZWF0dXJlcy5cbiAgICAgKi9cbiAgICBnZXQgZW5hYmxlZEZlYXR1cmVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRGZWF0dXJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbmFibGVkIGZlYXR1cmVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0IGVuYWJsZWRGZWF0dXJlcyhlbmFibGVkRmVhdHVyZXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWRGZWF0dXJlcyA9IGVuYWJsZWRGZWF0dXJlcztcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5mZWF0dXJlU3RyZWFtLm5leHQoZW5hYmxlZEZlYXR1cmVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgZmVhdHVyZXMgaGF2ZSBiZWVuIGluaXRpYWxpemVkXG4gICAgICovXG4gICAgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGF0IHRoZSBlbmFibGVkIGZlYXR1cmVzIGFyZSBzZXQgYW5kIHJldHVybnMgdGhlIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgY2hlY2tFbmFibGVkRmVhdHVyZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2VuYWJsZWRGZWF0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkRmVhdHVyZXMgPSBhd2FpdCB0aGlzLnJlc3RDbGllbnQuZ2V0KGAke3RoaXMucm91dGVQcmVmaXh9L2VuYWJsZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWRGZWF0dXJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhhdCB0aGUgc3BlY2lmaWVkIGZlYXR1cmUgaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBjaGVja0ZlYXR1cmVJc0VuYWJsZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkRmVhdHVyZXM/LnNvbWUocCA9PiBwID09PSBuYW1lKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,115 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export var FireImmediately;
4
+ (function (FireImmediately) {
5
+ FireImmediately[FireImmediately["never"] = 0] = "never";
6
+ FireImmediately[FireImmediately["whenShown"] = 1] = "whenShown";
7
+ FireImmediately[FireImmediately["whenFocused"] = 2] = "whenFocused";
8
+ })(FireImmediately || (FireImmediately = {}));
9
+ export class IntervalService {
10
+ static { this.defaultOptions = { fireImmediately: FireImmediately.never }; }
11
+ create(action, interval, options = IntervalService.defaultOptions) {
12
+ const timer = new IntervalTimer(action, interval, options);
13
+ timer.initialize();
14
+ return timer;
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IntervalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
17
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IntervalService, providedIn: 'root' }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IntervalService, decorators: [{
20
+ type: Injectable,
21
+ args: [{ providedIn: 'root' }]
22
+ }] });
23
+ export class IntervalTimer {
24
+ constructor(action, interval, options) {
25
+ this.action = action;
26
+ this.interval = interval;
27
+ this.options = options;
28
+ this.currentInterval = 0;
29
+ this.isStopped = true;
30
+ }
31
+ initialize() {
32
+ if (this.options.hiddenInterval != null) {
33
+ document.addEventListener('visibilitychange', () => {
34
+ if (document.hidden) {
35
+ this.onHidden();
36
+ }
37
+ else {
38
+ this.onShown();
39
+ }
40
+ });
41
+ }
42
+ if (this.options.blurInterval != null) {
43
+ window.addEventListener('blur', () => this.onBlur());
44
+ window.addEventListener('focus', () => this.onFocus());
45
+ }
46
+ }
47
+ start() {
48
+ if (this.isStopped) {
49
+ if (!document.hidden) {
50
+ this.isStopped = false;
51
+ this.onShown();
52
+ }
53
+ else {
54
+ this.setInterval(this.interval);
55
+ this.isStopped = false;
56
+ }
57
+ }
58
+ }
59
+ stop() {
60
+ this.setInterval(0);
61
+ this.isStopped = true;
62
+ }
63
+ async callActionAndScheduleNext(nextInterval) {
64
+ this.setInterval(0); // pause while the action runs
65
+ await this.action();
66
+ this.setInterval(nextInterval);
67
+ }
68
+ onBlur() {
69
+ if (this.isStopped) {
70
+ return;
71
+ }
72
+ this.setInterval(this.options?.blurInterval);
73
+ }
74
+ onFocus() {
75
+ if (this.isStopped) {
76
+ return;
77
+ }
78
+ if (this.options?.fireImmediately === FireImmediately.whenFocused) {
79
+ this.callActionAndScheduleNext(this.interval);
80
+ return;
81
+ }
82
+ this.setInterval(this.interval);
83
+ }
84
+ onHidden() {
85
+ if (this.isStopped) {
86
+ return;
87
+ }
88
+ this.setInterval(this.options?.hiddenInterval);
89
+ }
90
+ onShown() {
91
+ if (this.isStopped) {
92
+ return;
93
+ }
94
+ if (this.options.fireImmediately === FireImmediately.whenShown) {
95
+ this.callActionAndScheduleNext(this.interval);
96
+ return;
97
+ }
98
+ this.setInterval(this.interval);
99
+ }
100
+ setInterval(interval) {
101
+ if (this.$handle) {
102
+ if (interval === this.currentInterval) {
103
+ return;
104
+ }
105
+ window.clearTimeout(this.$handle);
106
+ this.$handle = undefined;
107
+ }
108
+ if (!interval) {
109
+ return;
110
+ }
111
+ this.$handle = window.setTimeout(() => this.callActionAndScheduleNext(interval), interval);
112
+ this.currentInterval = interval;
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9saWIvc2VydmljZXMvaW50ZXJ2YWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVUzQyxNQUFNLENBQU4sSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3ZCLHVEQUFLLENBQUE7SUFDTCwrREFBUyxDQUFBO0lBQ1QsbUVBQVcsQ0FBQTtBQUNmLENBQUMsRUFKVyxlQUFlLEtBQWYsZUFBZSxRQUkxQjtBQUdELE1BQU0sT0FBTyxlQUFlO2FBQ1IsbUJBQWMsR0FBb0IsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxBQUE5RCxDQUErRDtJQUU3RixNQUFNLENBQ0YsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLFVBQTJCLGVBQWUsQ0FBQyxjQUFjO1FBRXpELE1BQU0sS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0QsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRW5CLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7K0dBWlEsZUFBZTttSEFBZixlQUFlLGNBREYsTUFBTTs7NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQWdCbEMsTUFBTSxPQUFPLGFBQWE7SUFLdEIsWUFDcUIsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLE9BQXdCO1FBRnhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBTjdDLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxJQUFJLENBQUM7SUFN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Q0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxXQUFXLENBQUMsUUFBaUI7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3BDLE9BQU87WUFDWCxDQUFDO1lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIEludGVydmFsT3B0aW9ucyA9IHtcbiAgICBmaXJlSW1tZWRpYXRlbHk6IEZpcmVJbW1lZGlhdGVseTtcbiAgICBibHVySW50ZXJ2YWw/OiBudW1iZXI7XG4gICAgaGlkZGVuSW50ZXJ2YWw/OiBudW1iZXI7XG59O1xuXG50eXBlIEFjdGlvbiA9ICgpID0+IFByb21pc2U8dW5rbm93bj47XG5cbmV4cG9ydCBlbnVtIEZpcmVJbW1lZGlhdGVseSB7XG4gICAgbmV2ZXIsXG4gICAgd2hlblNob3duLFxuICAgIHdoZW5Gb2N1c2VkLFxufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEludGVydmFsU2VydmljZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRPcHRpb25zOiBJbnRlcnZhbE9wdGlvbnMgPSB7IGZpcmVJbW1lZGlhdGVseTogRmlyZUltbWVkaWF0ZWx5Lm5ldmVyIH07XG5cbiAgICBjcmVhdGUoXG4gICAgICAgIGFjdGlvbjogQWN0aW9uLFxuICAgICAgICBpbnRlcnZhbDogbnVtYmVyLFxuICAgICAgICBvcHRpb25zOiBJbnRlcnZhbE9wdGlvbnMgPSBJbnRlcnZhbFNlcnZpY2UuZGVmYXVsdE9wdGlvbnNcbiAgICApOiBJbnRlcnZhbFRpbWVyIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSBuZXcgSW50ZXJ2YWxUaW1lcihhY3Rpb24sIGludGVydmFsLCBvcHRpb25zKTtcbiAgICAgICAgdGltZXIuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcnZhbFRpbWVyIHtcbiAgICAkaGFuZGxlPzogbnVtYmVyO1xuICAgIGN1cnJlbnRJbnRlcnZhbCA9IDA7XG4gICAgaXNTdG9wcGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGludGVydmFsOiBudW1iZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogSW50ZXJ2YWxPcHRpb25zXG4gICAgKSB7fVxuXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oaWRkZW5JbnRlcnZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkhpZGRlbigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TaG93bigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ibHVySW50ZXJ2YWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB0aGlzLm9uQmx1cigpKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsICgpID0+IHRoaXMub25Gb2N1cygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2hvd24oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RvcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnRlcnZhbCgwKTtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2FsbEFjdGlvbkFuZFNjaGVkdWxlTmV4dChuZXh0SW50ZXJ2YWw6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnNldEludGVydmFsKDApOyAvLyBwYXVzZSB3aGlsZSB0aGUgYWN0aW9uIHJ1bnNcbiAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb24oKTtcbiAgICAgICAgdGhpcy5zZXRJbnRlcnZhbChuZXh0SW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SW50ZXJ2YWwodGhpcy5vcHRpb25zPy5ibHVySW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5maXJlSW1tZWRpYXRlbHkgPT09IEZpcmVJbW1lZGlhdGVseS53aGVuRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5jYWxsQWN0aW9uQW5kU2NoZWR1bGVOZXh0KHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSGlkZGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SW50ZXJ2YWwodGhpcy5vcHRpb25zPy5oaWRkZW5JbnRlcnZhbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNob3duKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlyZUltbWVkaWF0ZWx5ID09PSBGaXJlSW1tZWRpYXRlbHkud2hlblNob3duKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxBY3Rpb25BbmRTY2hlZHVsZU5leHQodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW50ZXJ2YWwoaW50ZXJ2YWw/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuJGhhbmRsZSkge1xuICAgICAgICAgICAgaWYgKGludGVydmFsID09PSB0aGlzLmN1cnJlbnRJbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLiRoYW5kbGUpO1xuICAgICAgICAgICAgdGhpcy4kaGFuZGxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kaGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5jYWxsQWN0aW9uQW5kU2NoZWR1bGVOZXh0KGludGVydmFsKSwgaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbnRlcnZhbCA9IGludGVydmFsO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LocalStorageService {
4
+ checkIfKeyExists(key) {
5
+ return globalThis.localStorage.getItem(key) !== null;
6
+ }
7
+ getItem(key) {
8
+ const valueString = globalThis.localStorage.getItem(key);
9
+ if (valueString === null) {
10
+ return undefined;
11
+ }
12
+ const value = JSON.parse(valueString);
13
+ return value;
14
+ }
15
+ setItem(key, value) {
16
+ const valueString = JSON.stringify(value);
17
+ globalThis.localStorage.setItem(key, valueString);
18
+ }
19
+ removeItem(key) {
20
+ globalThis.localStorage.removeItem(key);
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
23
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocalStorageService, providedIn: 'root' }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocalStorageService, decorators: [{
26
+ type: Injectable,
27
+ args: [{ providedIn: 'root' }]
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixnQkFBZ0IsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3pELENBQUM7SUFFRCxPQUFPLENBQUksR0FBVztRQUNsQixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6RCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2QixPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTyxDQUFJLEdBQVcsRUFBRSxLQUFRO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNsQixVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQXZCUSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUROLE1BQU07OzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZVNlcnZpY2Uge1xuICAgIGNoZWNrSWZLZXlFeGlzdHMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRJdGVtPFQ+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZVN0cmluZyk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXRJdGVtPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlU3RyaW5nKTtcbiAgICB9XG5cbiAgICByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
4
+ export class ModalService {
5
+ constructor(ngbModal) {
6
+ this.ngbModal = ngbModal;
7
+ }
8
+ async showModal(component, componentParameters, modalOptions = { backdrop: 'static' }) {
9
+ const modal = this.ngbModal.open(component, modalOptions);
10
+ const componentInstance = modal.componentInstance;
11
+ Object.assign(componentInstance, componentParameters);
12
+ let result;
13
+ try {
14
+ result = await modal.result;
15
+ }
16
+ catch (error) {
17
+ result = null;
18
+ if (error === undefined) {
19
+ throw 'modal dismiss';
20
+ }
21
+ throw error;
22
+ }
23
+ return { result, componentInstance };
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalService, deps: [{ token: i1.NgbModal }], target: i0.ɵɵFactoryTarget.Injectable }); }
26
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalService, providedIn: 'root' }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalService, decorators: [{
29
+ type: Injectable,
30
+ args: [{
31
+ providedIn: 'root',
32
+ }]
33
+ }], ctorParameters: () => [{ type: i1.NgbModal }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9saWIvc2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNM0MsTUFBTSxPQUFPLFlBQVk7SUFDckIsWUFBNkIsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFFNUMsS0FBSyxDQUFDLFNBQVMsQ0FDbEIsU0FBa0IsRUFDbEIsbUJBQTZCLEVBQzdCLGVBQWdDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtRQUV0RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFFbEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRXRELElBQUksTUFBUyxDQUFDO1FBRWQsSUFBSSxDQUFDO1lBQ0QsTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE1BQU0sR0FBRyxJQUFvQixDQUFDO1lBQzlCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLGVBQWUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDaEIsQ0FBQztRQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQTFCUSxZQUFZO21IQUFaLFlBQVksY0FGVCxNQUFNOzs0RkFFVCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JNb2RhbE9wdGlvbnMgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBuZ2JNb2RhbDogTmdiTW9kYWwpIHt9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2hvd01vZGFsPFQ+KFxuICAgICAgICBjb21wb25lbnQ6IHVua25vd24sXG4gICAgICAgIGNvbXBvbmVudFBhcmFtZXRlcnM/OiB1bmtub3duLFxuICAgICAgICBtb2RhbE9wdGlvbnM6IE5nYk1vZGFsT3B0aW9ucyA9IHsgYmFja2Ryb3A6ICdzdGF0aWMnIH1cbiAgICApOiBQcm9taXNlPHsgcmVzdWx0OiBUOyBjb21wb25lbnRJbnN0YW5jZTogdW5rbm93biB9PiB7XG4gICAgICAgIGNvbnN0IG1vZGFsID0gdGhpcy5uZ2JNb2RhbC5vcGVuKGNvbXBvbmVudCwgbW9kYWxPcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SW5zdGFuY2UgPSBtb2RhbC5jb21wb25lbnRJbnN0YW5jZTtcblxuICAgICAgICBPYmplY3QuYXNzaWduKGNvbXBvbmVudEluc3RhbmNlLCBjb21wb25lbnRQYXJhbWV0ZXJzKTtcblxuICAgICAgICBsZXQgcmVzdWx0OiBUO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RhbC5yZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBudWxsIGFzIHVua25vd24gYXMgVDtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgJ21vZGFsIGRpc21pc3MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyByZXN1bHQsIGNvbXBvbmVudEluc3RhbmNlIH07XG4gICAgfVxufVxuIl19
@@ -0,0 +1,45 @@
1
+ // from https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page
2
+ import { Injectable } from '@angular/core';
3
+ import { NavigationEnd } from '@angular/router';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "@angular/common";
7
+ export class NavigationService {
8
+ constructor(router, location) {
9
+ this.router = router;
10
+ this.location = location;
11
+ this.history = [];
12
+ this.router.events.subscribe(event => {
13
+ if (event instanceof NavigationEnd) {
14
+ this.history.push(event.urlAfterRedirects);
15
+ }
16
+ });
17
+ }
18
+ goBack() {
19
+ this.goBackOrDefault('/');
20
+ }
21
+ goBackOrDefault(defaultUrl) {
22
+ if (this.history.length > 0) {
23
+ this.history.pop();
24
+ this.location.back();
25
+ }
26
+ else {
27
+ this.router.navigateByUrl(defaultUrl);
28
+ }
29
+ }
30
+ setQueryParams(params) {
31
+ this.router.navigate([], {
32
+ queryParams: params,
33
+ queryParamsHandling: 'merge',
34
+ });
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavigationService, deps: [{ token: i1.Router }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
37
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavigationService, decorators: [{
40
+ type: Injectable,
41
+ args: [{
42
+ providedIn: 'root',
43
+ }]
44
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i2.Location }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUtoRSxNQUFNLE9BQU8saUJBQWlCO0lBRzFCLFlBQW9CLE1BQWMsRUFBVSxRQUFrQjtRQUExQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUZ0RCxZQUFPLEdBQWEsRUFBRSxDQUFDO1FBRzNCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxJQUFJLEtBQUssWUFBWSxhQUFhLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE1BQU07UUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxlQUFlLENBQUMsVUFBa0I7UUFDckMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FBQyxNQUFjO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUNyQixXQUFXLEVBQUUsTUFBTTtZQUNuQixtQkFBbUIsRUFBRSxPQUFPO1NBQy9CLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBN0JRLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmQsTUFBTTs7NEZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGZyb20gaHR0cHM6Ly9uaWxzLW1laGxob3JuLmRlL3Bvc3RzL2FuZ3VsYXItbmF2aWdhdGUtYmFjay1wcmV2aW91cy1wYWdlXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwcml2YXRlIGhpc3Rvcnk6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChldmVudC51cmxBZnRlclJlZGlyZWN0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnb0JhY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29CYWNrT3JEZWZhdWx0KCcvJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdvQmFja09yRGVmYXVsdChkZWZhdWx0VXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGlzdG9yeS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucG9wKCk7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZGVmYXVsdFVybCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UXVlcnlQYXJhbXMocGFyYW1zOiBQYXJhbXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=