@newheap/platform-common 1.3.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/fesm2022/newheap-platform-common-two-factor.mjs +896 -0
- package/fesm2022/newheap-platform-common-two-factor.mjs.map +1 -0
- package/fesm2022/newheap-platform-common.mjs +1221 -252
- package/fesm2022/newheap-platform-common.mjs.map +1 -1
- package/index.d.ts +441 -4
- package/package.json +18 -11
- package/two-factor/i18n/en.json +93 -0
- package/two-factor/i18n/nl.json +93 -0
- package/two-factor/index.d.ts +261 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as i2$1 from '@angular/common/http';
|
|
2
|
-
import { HttpErrorResponse, HttpParams, HttpClient, HttpHeaders, HttpResponse, HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi, withFetch } from '@angular/common/http';
|
|
2
|
+
import { HttpErrorResponse, HttpParams, HttpContextToken, HttpClient, HttpHeaders, HttpContext, HttpResponse, HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi, withFetch } from '@angular/common/http';
|
|
3
3
|
import * as i1$4 from '@angular/forms';
|
|
4
4
|
import { UntypedFormGroup, UntypedFormArray, AbstractControl, NG_VALUE_ACCESSOR, UntypedFormControl, NgForm, FormsModule } from '@angular/forms';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
6
6
|
import { Injectable, PLATFORM_ID, REQUEST_CONTEXT, Inject, Optional, inject, NgZone, forwardRef, InjectionToken, afterNextRender, makeStateKey, Directive, input, Input, Component, viewChild, output, HostListener, EventEmitter, Pipe, HostBinding, ChangeDetectionStrategy, Output, ViewChild, ViewEncapsulation, model, ErrorHandler, provideAppInitializer, SkipSelf, NgModule } from '@angular/core';
|
|
7
7
|
import * as i1$3 from '@angular/common';
|
|
8
8
|
import { isPlatformServer, DOCUMENT, isPlatformBrowser, DatePipe, CommonModule } from '@angular/common';
|
|
9
|
-
import { BehaviorSubject, lastValueFrom, tap, filter, map, Subject, share, switchMap, EMPTY, timer, exhaustMap, from, Subscription, defer, finalize as finalize$1,
|
|
9
|
+
import { BehaviorSubject, lastValueFrom, tap, catchError, throwError, filter, map, Subject, share, switchMap, EMPTY, timer, exhaustMap, from, Subscription, defer, finalize as finalize$1, of, Observable } from 'rxjs';
|
|
10
10
|
import * as i1 from 'ngx-cookie-service';
|
|
11
11
|
import { DateTime } from 'luxon';
|
|
12
12
|
import { Base64 } from 'js-base64';
|
|
@@ -33,6 +33,32 @@ class EndpointsAuthenticationNhCommonModuleConfig {
|
|
|
33
33
|
this.impersonate = '/authentication/impersonate';
|
|
34
34
|
this.revertImpersonate = '/authentication/ImpersonateRevert';
|
|
35
35
|
this.accountInformation = '/account';
|
|
36
|
+
this.twoFactorVerify = '/authentication/two-factor/verify';
|
|
37
|
+
this.twoFactorStatus = '/account/two-factor';
|
|
38
|
+
this.twoFactorAuthenticator = '/account/two-factor/authenticator';
|
|
39
|
+
this.twoFactorAuthenticatorConfirm = '/account/two-factor/authenticator/confirm';
|
|
40
|
+
this.twoFactorRecoveryCodes = '/account/two-factor/recovery-codes';
|
|
41
|
+
this.twoFactorDisable = '/account/two-factor/disable';
|
|
42
|
+
this.twoFactorForgetDevices = '/account/two-factor/forget-devices';
|
|
43
|
+
this.twoFactorEmailSetup = '/account/two-factor/email';
|
|
44
|
+
this.twoFactorEmailConfirm = '/account/two-factor/email/confirm';
|
|
45
|
+
this.twoFactorEmail = '/authentication/two-factor/email';
|
|
46
|
+
this.twoFactorPasskeyOptions = '/authentication/two-factor/passkey/options';
|
|
47
|
+
this.twoFactorPasskey = '/authentication/two-factor/passkey';
|
|
48
|
+
this.twoFactorEnrollmentAuthenticator = '/authentication/two-factor/enrollment/authenticator';
|
|
49
|
+
this.twoFactorEnrollmentAuthenticatorConfirm = '/authentication/two-factor/enrollment/authenticator/confirm';
|
|
50
|
+
this.twoFactorEnrollmentEmail = '/authentication/two-factor/enrollment/email';
|
|
51
|
+
this.twoFactorEnrollmentEmailConfirm = '/authentication/two-factor/enrollment/email/confirm';
|
|
52
|
+
this.twoFactorEnrollmentPasskeyOptions = '/authentication/two-factor/enrollment/passkey/options';
|
|
53
|
+
this.twoFactorEnrollmentPasskey = '/authentication/two-factor/enrollment/passkey';
|
|
54
|
+
/** Administration route; `{userId}` is replaced with the user ID. */
|
|
55
|
+
this.twoFactorUserReset = '/authentication/two-factor/users/{userId}/reset';
|
|
56
|
+
this.twoFactorEnrollmentReminders = '/authentication/two-factor/operations/enrollment-reminders';
|
|
57
|
+
this.twoFactorSessionRevocation = '/authentication/two-factor/operations/session-revocation';
|
|
58
|
+
this.passkeySignInOptions = '/authentication/passkey/options';
|
|
59
|
+
this.passkeySignIn = '/authentication/passkey/login';
|
|
60
|
+
this.passkeys = '/account/passkeys';
|
|
61
|
+
this.passkeyRegistrationOptions = '/account/passkeys/options';
|
|
36
62
|
Object.assign(this, init);
|
|
37
63
|
}
|
|
38
64
|
}
|
|
@@ -43,6 +69,11 @@ class AuthenticationNhCommonModuleConfig {
|
|
|
43
69
|
this.additionalDivisionClaimPermissionTypes = [];
|
|
44
70
|
this.endpoints = new EndpointsAuthenticationNhCommonModuleConfig();
|
|
45
71
|
this.loginPath = '/';
|
|
72
|
+
/**
|
|
73
|
+
* Ends the local session when the API answers 401 and the account endpoint confirms that the
|
|
74
|
+
* server no longer accepts the session, for example after a password change on another device.
|
|
75
|
+
*/
|
|
76
|
+
this.endSessionRejectedByServer = true;
|
|
46
77
|
Object.assign(this, init);
|
|
47
78
|
}
|
|
48
79
|
}
|
|
@@ -543,6 +574,8 @@ class AuthSessionExpirationInformation {
|
|
|
543
574
|
this.isAuthenticated = false;
|
|
544
575
|
this.expiresWithin15MinutesOrExpired = false;
|
|
545
576
|
this.displayMinutesSecondsUntilExpiration = '00:00';
|
|
577
|
+
/** The server rejected the session before it expired; it stays set until the next sign-in. */
|
|
578
|
+
this.rejectedByServer = false;
|
|
546
579
|
Object.assign(this, init);
|
|
547
580
|
}
|
|
548
581
|
}
|
|
@@ -617,6 +650,174 @@ class RevertImpersonateAuthenticateModel {
|
|
|
617
650
|
Object.assign(this, init);
|
|
618
651
|
}
|
|
619
652
|
}
|
|
653
|
+
/**
|
|
654
|
+
* Second-factor methods a user can present after the first factor succeeded.
|
|
655
|
+
*/
|
|
656
|
+
const NhTwoFactorMethods = {
|
|
657
|
+
authenticator: 'authenticator',
|
|
658
|
+
recoveryCode: 'recovery-code',
|
|
659
|
+
email: 'email',
|
|
660
|
+
passkey: 'passkey'
|
|
661
|
+
};
|
|
662
|
+
/**
|
|
663
|
+
* Safe failure codes returned by the two-factor endpoints. Each error item uses the code as
|
|
664
|
+
* its name and `nh-two-factor.<suffix>` as its translation key.
|
|
665
|
+
*/
|
|
666
|
+
var NhTwoFactorFailureCodes;
|
|
667
|
+
(function (NhTwoFactorFailureCodes) {
|
|
668
|
+
NhTwoFactorFailureCodes["Required"] = "two-factor-required";
|
|
669
|
+
NhTwoFactorFailureCodes["EnrollmentRequired"] = "two-factor-enrollment-required";
|
|
670
|
+
NhTwoFactorFailureCodes["InvalidCode"] = "two-factor-invalid-code";
|
|
671
|
+
NhTwoFactorFailureCodes["ChallengeExpired"] = "two-factor-challenge-expired";
|
|
672
|
+
NhTwoFactorFailureCodes["LockedOut"] = "two-factor-locked-out";
|
|
673
|
+
NhTwoFactorFailureCodes["MethodNotAllowed"] = "two-factor-method-not-allowed";
|
|
674
|
+
NhTwoFactorFailureCodes["NotEnabled"] = "two-factor-not-enabled";
|
|
675
|
+
NhTwoFactorFailureCodes["AlreadyEnabled"] = "two-factor-already-enabled";
|
|
676
|
+
NhTwoFactorFailureCodes["SetupNotStarted"] = "two-factor-setup-not-started";
|
|
677
|
+
NhTwoFactorFailureCodes["ReauthenticationRequired"] = "two-factor-reauthentication-required";
|
|
678
|
+
NhTwoFactorFailureCodes["ReauthenticationFailed"] = "two-factor-reauthentication-failed";
|
|
679
|
+
NhTwoFactorFailureCodes["RequiredByPolicy"] = "two-factor-required-by-policy";
|
|
680
|
+
NhTwoFactorFailureCodes["NotAllowedWhileImpersonating"] = "two-factor-not-allowed-while-impersonating";
|
|
681
|
+
NhTwoFactorFailureCodes["ConfigurationInvalid"] = "two-factor-configuration-invalid";
|
|
682
|
+
NhTwoFactorFailureCodes["EmailCooldown"] = "two-factor-email-cooldown";
|
|
683
|
+
NhTwoFactorFailureCodes["EmailUnavailable"] = "two-factor-email-unavailable";
|
|
684
|
+
NhTwoFactorFailureCodes["UserNotFound"] = "two-factor-user-not-found";
|
|
685
|
+
NhTwoFactorFailureCodes["PasskeyInvalid"] = "two-factor-passkey-invalid";
|
|
686
|
+
NhTwoFactorFailureCodes["PasskeyNotFound"] = "two-factor-passkey-not-found";
|
|
687
|
+
/** The browser does not support passkeys or the user cancelled the passkey prompt. */
|
|
688
|
+
NhTwoFactorFailureCodes["PasskeyUnavailable"] = "two-factor-passkey-unavailable";
|
|
689
|
+
})(NhTwoFactorFailureCodes || (NhTwoFactorFailureCodes = {}));
|
|
690
|
+
/**
|
|
691
|
+
* Status values of a pending authentication step.
|
|
692
|
+
*/
|
|
693
|
+
const NhAuthenticationStepStatuses = {
|
|
694
|
+
twoFactorRequired: 'two-factor-required',
|
|
695
|
+
enrollmentRequired: 'enrollment-required'
|
|
696
|
+
};
|
|
697
|
+
/**
|
|
698
|
+
* A pending sign-in step. With status `two-factor-required` the user presents a second
|
|
699
|
+
* factor; with `enrollment-required` the policy requires the user to enroll one first, and
|
|
700
|
+
* `challengeToken` is the enrollment token.
|
|
701
|
+
*/
|
|
702
|
+
class NhTwoFactorChallenge {
|
|
703
|
+
constructor(init) {
|
|
704
|
+
this.status = NhAuthenticationStepStatuses.twoFactorRequired;
|
|
705
|
+
this.challengeToken = '';
|
|
706
|
+
this.expiresAt = '';
|
|
707
|
+
this.methods = [];
|
|
708
|
+
/** Whether completing the challenge can remember this device for later sign-ins. */
|
|
709
|
+
this.rememberDeviceAvailable = false;
|
|
710
|
+
Object.assign(this, init);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
/**
|
|
714
|
+
* Outcome of an interactive sign-in step: the stored authorization, a second-factor
|
|
715
|
+
* challenge or a required enrollment.
|
|
716
|
+
*/
|
|
717
|
+
class NhAuthenticationStep {
|
|
718
|
+
constructor(init) {
|
|
719
|
+
this.status = 'authenticated';
|
|
720
|
+
Object.assign(this, init);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
class NhTwoFactorVerifyModel {
|
|
724
|
+
constructor(init) {
|
|
725
|
+
this.challengeToken = '';
|
|
726
|
+
this.method = NhTwoFactorMethods.authenticator;
|
|
727
|
+
this.code = '';
|
|
728
|
+
Object.assign(this, init);
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* Proof that the signed-in user is present before a sensitive change: the current password
|
|
733
|
+
* or a valid second-factor code.
|
|
734
|
+
*/
|
|
735
|
+
class NhTwoFactorReauthentication {
|
|
736
|
+
constructor(init) {
|
|
737
|
+
Object.assign(this, init);
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
class NhTwoFactorStatus {
|
|
741
|
+
constructor(init) {
|
|
742
|
+
this.enabled = false;
|
|
743
|
+
this.required = false;
|
|
744
|
+
this.methods = [];
|
|
745
|
+
this.availableMethods = [];
|
|
746
|
+
this.recoveryCodesLeft = 0;
|
|
747
|
+
this.authenticatorSetupPending = false;
|
|
748
|
+
this.emailSetupPending = false;
|
|
749
|
+
this.rememberDeviceAvailable = false;
|
|
750
|
+
this.passkeyCount = 0;
|
|
751
|
+
Object.assign(this, init);
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* Pending authenticator enrollment. `qrCodeDataUri` is a PNG data URI rendered by the server.
|
|
756
|
+
*/
|
|
757
|
+
class NhAuthenticatorSetup {
|
|
758
|
+
constructor(init) {
|
|
759
|
+
this.sharedKey = '';
|
|
760
|
+
this.authenticatorUri = '';
|
|
761
|
+
Object.assign(this, init);
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Result of a two-factor change. Recovery codes are returned once. When the change ended
|
|
766
|
+
* every session, the service has already stored the renewed session for this device.
|
|
767
|
+
*/
|
|
768
|
+
class NhTwoFactorChange {
|
|
769
|
+
constructor(init) {
|
|
770
|
+
this.sessionRenewed = false;
|
|
771
|
+
Object.assign(this, init);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
/**
|
|
775
|
+
* Confirmation that the server e-mailed a code.
|
|
776
|
+
*/
|
|
777
|
+
class NhTwoFactorEmailCodeSent {
|
|
778
|
+
constructor(init) {
|
|
779
|
+
this.expiresAt = '';
|
|
780
|
+
/** When another code can be requested. */
|
|
781
|
+
this.resendAvailableAt = '';
|
|
782
|
+
Object.assign(this, init);
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
/**
|
|
786
|
+
* Result of an enrollment that the policy required during sign-in. The session is already
|
|
787
|
+
* stored; the recovery codes are returned once.
|
|
788
|
+
*/
|
|
789
|
+
class NhTwoFactorEnrollmentResult {
|
|
790
|
+
constructor(init) {
|
|
791
|
+
Object.assign(this, init);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
/**
|
|
795
|
+
* WebAuthn options from the server for one passkey ceremony. `options` is the JSON form of
|
|
796
|
+
* the creation or request options; `ceremonyToken` goes back with the credential.
|
|
797
|
+
*/
|
|
798
|
+
class NhPasskeyOptions {
|
|
799
|
+
constructor(init) {
|
|
800
|
+
this.options = {};
|
|
801
|
+
this.ceremonyToken = '';
|
|
802
|
+
this.expiresAt = '';
|
|
803
|
+
Object.assign(this, init);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
/**
|
|
807
|
+
* A registered passkey. The public key is never returned.
|
|
808
|
+
*/
|
|
809
|
+
class NhPasskey {
|
|
810
|
+
constructor(init) {
|
|
811
|
+
/** Credential ID, base64url encoded. */
|
|
812
|
+
this.id = '';
|
|
813
|
+
this.name = '';
|
|
814
|
+
this.createdAt = '';
|
|
815
|
+
/** Whether a passkey provider, such as a password manager, syncs the passkey. */
|
|
816
|
+
this.isBackedUp = false;
|
|
817
|
+
this.transports = [];
|
|
818
|
+
Object.assign(this, init);
|
|
819
|
+
}
|
|
820
|
+
}
|
|
620
821
|
|
|
621
822
|
class NhUserNotificationCollectionHttpRequestOptions extends CollectionHttpRequestOptions {
|
|
622
823
|
constructor(init) {
|
|
@@ -1045,10 +1246,10 @@ class NhEncodeHttpParamsInterceptor {
|
|
|
1045
1246
|
const params = new HttpParams({ encoder: new CustomEncoder(), fromString: req.params.toString() });
|
|
1046
1247
|
return next.handle(req.clone({ params }));
|
|
1047
1248
|
}
|
|
1048
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
1049
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
1249
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhEncodeHttpParamsInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1250
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhEncodeHttpParamsInterceptor }); }
|
|
1050
1251
|
}
|
|
1051
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
1252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhEncodeHttpParamsInterceptor, decorators: [{
|
|
1052
1253
|
type: Injectable
|
|
1053
1254
|
}] });
|
|
1054
1255
|
class CustomEncoder {
|
|
@@ -2322,10 +2523,10 @@ class NhCookieService {
|
|
|
2322
2523
|
}
|
|
2323
2524
|
}
|
|
2324
2525
|
}
|
|
2325
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2326
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
2526
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCookieService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }, { token: i1.CookieService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2527
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCookieService }); }
|
|
2327
2528
|
}
|
|
2328
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
2529
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCookieService, decorators: [{
|
|
2329
2530
|
type: Injectable
|
|
2330
2531
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
2331
2532
|
type: Inject,
|
|
@@ -2340,18 +2541,146 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImpo
|
|
|
2340
2541
|
args: [REQUEST_CONTEXT]
|
|
2341
2542
|
}] }, { type: i1.CookieService }] });
|
|
2342
2543
|
|
|
2544
|
+
/**
|
|
2545
|
+
* Runs WebAuthn ceremonies in the browser. The server returns the options in their JSON form
|
|
2546
|
+
* and expects the credential in its JSON form; this client converts both, with a fallback for
|
|
2547
|
+
* browsers without `PublicKeyCredential.parseCreationOptionsFromJSON` and `toJSON()`.
|
|
2548
|
+
*/
|
|
2549
|
+
class NhPasskeyClient {
|
|
2550
|
+
constructor() {
|
|
2551
|
+
this.platformId = inject(PLATFORM_ID);
|
|
2552
|
+
}
|
|
2553
|
+
/**
|
|
2554
|
+
* Whether the browser supports passkeys. Always false during server-side rendering.
|
|
2555
|
+
*/
|
|
2556
|
+
isSupported() {
|
|
2557
|
+
return isPlatformBrowser(this.platformId)
|
|
2558
|
+
&& typeof window !== 'undefined'
|
|
2559
|
+
&& typeof window.PublicKeyCredential !== 'undefined'
|
|
2560
|
+
&& !!navigator.credentials;
|
|
2561
|
+
}
|
|
2562
|
+
/**
|
|
2563
|
+
* Creates a passkey for WebAuthn creation options and returns the credential JSON.
|
|
2564
|
+
* Rejects when the user cancels the prompt or the browser refuses the request.
|
|
2565
|
+
*/
|
|
2566
|
+
async create(options) {
|
|
2567
|
+
this.ensureSupported();
|
|
2568
|
+
const parse = PublicKeyCredential.parseCreationOptionsFromJSON;
|
|
2569
|
+
const publicKey = typeof parse === 'function'
|
|
2570
|
+
? parse.call(PublicKeyCredential, options)
|
|
2571
|
+
: this.creationOptionsFromJSON(options);
|
|
2572
|
+
const credential = await navigator.credentials.create({ publicKey: publicKey });
|
|
2573
|
+
return this.credentialToJSON(this.requireCredential(credential));
|
|
2574
|
+
}
|
|
2575
|
+
/**
|
|
2576
|
+
* Signs WebAuthn request options with a passkey and returns the credential JSON.
|
|
2577
|
+
* Rejects when the user cancels the prompt or the browser refuses the request.
|
|
2578
|
+
*/
|
|
2579
|
+
async get(options) {
|
|
2580
|
+
this.ensureSupported();
|
|
2581
|
+
const parse = PublicKeyCredential.parseRequestOptionsFromJSON;
|
|
2582
|
+
const publicKey = typeof parse === 'function'
|
|
2583
|
+
? parse.call(PublicKeyCredential, options)
|
|
2584
|
+
: this.requestOptionsFromJSON(options);
|
|
2585
|
+
const credential = await navigator.credentials.get({ publicKey: publicKey });
|
|
2586
|
+
return this.credentialToJSON(this.requireCredential(credential));
|
|
2587
|
+
}
|
|
2588
|
+
ensureSupported() {
|
|
2589
|
+
if (!this.isSupported()) {
|
|
2590
|
+
throw new Error('Passkeys are not supported in this browser.');
|
|
2591
|
+
}
|
|
2592
|
+
}
|
|
2593
|
+
requireCredential(credential) {
|
|
2594
|
+
if (!credential || credential.type !== 'public-key') {
|
|
2595
|
+
throw new Error('No passkey was selected.');
|
|
2596
|
+
}
|
|
2597
|
+
return credential;
|
|
2598
|
+
}
|
|
2599
|
+
creationOptionsFromJSON(json) {
|
|
2600
|
+
return {
|
|
2601
|
+
...json,
|
|
2602
|
+
challenge: NhPasskeyClient.fromBase64Url(json.challenge),
|
|
2603
|
+
user: { ...json.user, id: NhPasskeyClient.fromBase64Url(json.user.id) },
|
|
2604
|
+
excludeCredentials: (json.excludeCredentials ?? []).map((descriptor) => ({
|
|
2605
|
+
...descriptor,
|
|
2606
|
+
id: NhPasskeyClient.fromBase64Url(descriptor.id)
|
|
2607
|
+
}))
|
|
2608
|
+
};
|
|
2609
|
+
}
|
|
2610
|
+
requestOptionsFromJSON(json) {
|
|
2611
|
+
return {
|
|
2612
|
+
...json,
|
|
2613
|
+
challenge: NhPasskeyClient.fromBase64Url(json.challenge),
|
|
2614
|
+
allowCredentials: (json.allowCredentials ?? []).map((descriptor) => ({
|
|
2615
|
+
...descriptor,
|
|
2616
|
+
id: NhPasskeyClient.fromBase64Url(descriptor.id)
|
|
2617
|
+
}))
|
|
2618
|
+
};
|
|
2619
|
+
}
|
|
2620
|
+
credentialToJSON(credential) {
|
|
2621
|
+
const toJSON = credential.toJSON;
|
|
2622
|
+
if (typeof toJSON === 'function') {
|
|
2623
|
+
return toJSON.call(credential);
|
|
2624
|
+
}
|
|
2625
|
+
const response = credential.response;
|
|
2626
|
+
const json = {
|
|
2627
|
+
id: credential.id,
|
|
2628
|
+
rawId: NhPasskeyClient.toBase64Url(credential.rawId),
|
|
2629
|
+
type: credential.type,
|
|
2630
|
+
authenticatorAttachment: credential.authenticatorAttachment ?? undefined,
|
|
2631
|
+
clientExtensionResults: credential.getClientExtensionResults?.() ?? {},
|
|
2632
|
+
response: {
|
|
2633
|
+
clientDataJSON: NhPasskeyClient.toBase64Url(response.clientDataJSON)
|
|
2634
|
+
}
|
|
2635
|
+
};
|
|
2636
|
+
if (response.attestationObject) {
|
|
2637
|
+
json.response.attestationObject = NhPasskeyClient.toBase64Url(response.attestationObject);
|
|
2638
|
+
json.response.transports = typeof response.getTransports === 'function' ? response.getTransports() : [];
|
|
2639
|
+
}
|
|
2640
|
+
if (response.authenticatorData) {
|
|
2641
|
+
json.response.authenticatorData = NhPasskeyClient.toBase64Url(response.authenticatorData);
|
|
2642
|
+
json.response.signature = NhPasskeyClient.toBase64Url(response.signature);
|
|
2643
|
+
json.response.userHandle = response.userHandle ? NhPasskeyClient.toBase64Url(response.userHandle) : null;
|
|
2644
|
+
}
|
|
2645
|
+
return json;
|
|
2646
|
+
}
|
|
2647
|
+
static fromBase64Url(value) {
|
|
2648
|
+
const bytes = Base64.toUint8Array(value);
|
|
2649
|
+
return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
2650
|
+
}
|
|
2651
|
+
static toBase64Url(buffer) {
|
|
2652
|
+
return Base64.fromUint8Array(new Uint8Array(buffer), true);
|
|
2653
|
+
}
|
|
2654
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPasskeyClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2655
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPasskeyClient, providedIn: 'root' }); }
|
|
2656
|
+
}
|
|
2657
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPasskeyClient, decorators: [{
|
|
2658
|
+
type: Injectable,
|
|
2659
|
+
args: [{ providedIn: 'root' }]
|
|
2660
|
+
}] });
|
|
2661
|
+
|
|
2662
|
+
/** Marks a request whose 401 must not start a server session check, such as the check itself. */
|
|
2663
|
+
const NH_SKIP_SERVER_SESSION_CHECK = new HttpContextToken(() => false);
|
|
2343
2664
|
class BaseNhAuthService {
|
|
2665
|
+
static { this.pendingTwoFactorChallengeStorageKey = 'nh-two-factor-challenge'; }
|
|
2666
|
+
static { this.externalTwoFactorChallengePrefix = 'nh-two-factor='; }
|
|
2667
|
+
static { this.rememberDeviceStorageKey = 'nh-two-factor-device'; }
|
|
2668
|
+
static { this.serverSessionConfirmationMilliseconds = 30_000; }
|
|
2344
2669
|
constructor() {
|
|
2345
2670
|
this.authorization = undefined;
|
|
2671
|
+
this.pendingTwoFactorChallenge = undefined;
|
|
2346
2672
|
this.authSession = undefined;
|
|
2347
2673
|
this.authSubject = new BehaviorSubject(this.getAuthorization());
|
|
2348
2674
|
this._sessionExpirationInformation = new BehaviorSubject(this.getSessionExpirationInformation());
|
|
2349
2675
|
this.sessionExpirationInformationChanged = this._sessionExpirationInformation.asObservable();
|
|
2676
|
+
this.serverSessionConfirmedAt = 0;
|
|
2677
|
+
this.sessionRejectedByServer = false;
|
|
2350
2678
|
this.zone = inject(NgZone);
|
|
2351
2679
|
this.moduleConfig = inject(NhCommonModuleConfig);
|
|
2352
2680
|
this.httpClient = inject(HttpClient);
|
|
2353
2681
|
this.platformId = inject(PLATFORM_ID);
|
|
2354
2682
|
this.requestContext = inject(REQUEST_CONTEXT, { optional: true });
|
|
2683
|
+
this.passkeyClient = inject(NhPasskeyClient);
|
|
2355
2684
|
this.authReady = new Promise(resolve => {
|
|
2356
2685
|
this.onReady = resolve;
|
|
2357
2686
|
});
|
|
@@ -2408,6 +2737,7 @@ class BaseNhAuthService {
|
|
|
2408
2737
|
else {
|
|
2409
2738
|
result.expiresWithin15MinutesOrExpired = true;
|
|
2410
2739
|
result.displayMinutesSecondsUntilExpiration = `00:00`;
|
|
2740
|
+
result.rejectedByServer = this.sessionRejectedByServer;
|
|
2411
2741
|
}
|
|
2412
2742
|
return result;
|
|
2413
2743
|
}
|
|
@@ -2428,6 +2758,8 @@ class BaseNhAuthService {
|
|
|
2428
2758
|
setAuthorization(auth, noEvent = false) {
|
|
2429
2759
|
localStorage.setItem('at', Base64.encode(JSON.stringify(auth)));
|
|
2430
2760
|
this.authorization = auth;
|
|
2761
|
+
this.sessionRejectedByServer = false;
|
|
2762
|
+
this.serverSessionConfirmedAt = 0;
|
|
2431
2763
|
if (!noEvent) {
|
|
2432
2764
|
this.authSubject.next(this.authorization);
|
|
2433
2765
|
}
|
|
@@ -2590,23 +2922,44 @@ class BaseNhAuthService {
|
|
|
2590
2922
|
withCredentials: true
|
|
2591
2923
|
}).taskResultLastValueFrom();
|
|
2592
2924
|
}
|
|
2925
|
+
/**
|
|
2926
|
+
* Signs in with username and password and stores the complete session.
|
|
2927
|
+
*
|
|
2928
|
+
* When the server requires a second factor this method fails with
|
|
2929
|
+
* `NhTwoFactorFailureCodes.Required` and stores nothing. Use `authenticateInteractive`
|
|
2930
|
+
* to receive the challenge, or read it with `getPendingTwoFactorChallenge()`.
|
|
2931
|
+
*/
|
|
2593
2932
|
async authenticate(model, loginAsUser = false) {
|
|
2594
2933
|
const result = new TaskResult();
|
|
2595
|
-
|
|
2596
|
-
if (
|
|
2597
|
-
|
|
2934
|
+
const stepResult = await this.authenticateInteractive(model);
|
|
2935
|
+
if (!stepResult.isSuccess) {
|
|
2936
|
+
stepResult.copyTo(result);
|
|
2937
|
+
return result;
|
|
2938
|
+
}
|
|
2939
|
+
if (stepResult.data?.status === 'two-factor-required') {
|
|
2940
|
+
return result.withError(NhTwoFactorFailureCodes.Required, 'nh-two-factor.required');
|
|
2941
|
+
}
|
|
2942
|
+
if (stepResult.data?.status === 'enrollment-required') {
|
|
2943
|
+
return result.withError(NhTwoFactorFailureCodes.EnrollmentRequired, 'nh-two-factor.enrollment-required');
|
|
2598
2944
|
}
|
|
2945
|
+
result.data = stepResult.data?.authorization;
|
|
2946
|
+
return result;
|
|
2947
|
+
}
|
|
2948
|
+
/**
|
|
2949
|
+
* Signs in with username and password. Returns the stored authorization, the
|
|
2950
|
+
* second-factor challenge or the required enrollment. A pending step is never stored as
|
|
2951
|
+
* an authorization.
|
|
2952
|
+
*/
|
|
2953
|
+
async authenticateInteractive(model) {
|
|
2954
|
+
const result = new TaskResult();
|
|
2599
2955
|
model.realm = this.moduleConfig.authenticationRealm;
|
|
2956
|
+
model.rememberDeviceToken = model.rememberDeviceToken ?? this.getRememberDeviceToken();
|
|
2600
2957
|
const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + this.moduleConfig.authentication.endpoints.login, model, {
|
|
2601
|
-
params:
|
|
2958
|
+
params: this.languageParams(),
|
|
2602
2959
|
withCredentials: true
|
|
2603
2960
|
});
|
|
2604
2961
|
try {
|
|
2605
|
-
result.data = await lastValueFrom(request$);
|
|
2606
|
-
if (result.isSuccess) {
|
|
2607
|
-
result.data.realm = this.moduleConfig.authenticationRealm;
|
|
2608
|
-
}
|
|
2609
|
-
this.setAuthorization(result.data);
|
|
2962
|
+
result.data = this.completeAuthenticationStep(await lastValueFrom(request$));
|
|
2610
2963
|
}
|
|
2611
2964
|
catch (ex) {
|
|
2612
2965
|
if (this.isAuthenticated()) {
|
|
@@ -2617,6 +2970,523 @@ class BaseNhAuthService {
|
|
|
2617
2970
|
}
|
|
2618
2971
|
return result;
|
|
2619
2972
|
}
|
|
2973
|
+
/**
|
|
2974
|
+
* Completes a second-factor challenge and stores the session.
|
|
2975
|
+
*/
|
|
2976
|
+
async verifyTwoFactor(model) {
|
|
2977
|
+
const result = new TaskResult();
|
|
2978
|
+
const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + this.twoFactorEndpoints().twoFactorVerify, model, {
|
|
2979
|
+
params: this.languageParams(),
|
|
2980
|
+
withCredentials: true
|
|
2981
|
+
});
|
|
2982
|
+
try {
|
|
2983
|
+
result.data = this.completeAuthenticationStep(await lastValueFrom(request$)).authorization;
|
|
2984
|
+
}
|
|
2985
|
+
catch (ex) {
|
|
2986
|
+
this.pendingStepFailed(ex).copyTo(result);
|
|
2987
|
+
}
|
|
2988
|
+
return result;
|
|
2989
|
+
}
|
|
2990
|
+
/**
|
|
2991
|
+
* E-mails a sign-in code for the pending challenge when the user enrolled the e-mail factor.
|
|
2992
|
+
*/
|
|
2993
|
+
sendTwoFactorEmailCode(challengeToken) {
|
|
2994
|
+
return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEmail), { challengeToken: challengeToken }, this.twoFactorStepRequestOptions()), response => new NhTwoFactorEmailCodeSent(response));
|
|
2995
|
+
}
|
|
2996
|
+
/**
|
|
2997
|
+
* Whether this browser can use passkeys.
|
|
2998
|
+
*/
|
|
2999
|
+
isPasskeySupported() {
|
|
3000
|
+
return this.passkeyClient.isSupported();
|
|
3001
|
+
}
|
|
3002
|
+
/**
|
|
3003
|
+
* Completes the pending challenge with a passkey and stores the session.
|
|
3004
|
+
*/
|
|
3005
|
+
async verifyTwoFactorWithPasskey(challengeToken, rememberDevice = false) {
|
|
3006
|
+
const result = new TaskResult();
|
|
3007
|
+
const endpoints = this.twoFactorEndpoints();
|
|
3008
|
+
const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.twoFactorPasskeyOptions), { challengeToken: challengeToken }, this.twoFactorStepRequestOptions()), response => new NhPasskeyOptions(response));
|
|
3009
|
+
if (!options.isSuccess) {
|
|
3010
|
+
options.copyTo(result);
|
|
3011
|
+
return result;
|
|
3012
|
+
}
|
|
3013
|
+
const credential = await this.runPasskeyCeremony(() => this.passkeyClient.get(options.data.options));
|
|
3014
|
+
if (!credential.isSuccess) {
|
|
3015
|
+
credential.copyTo(result);
|
|
3016
|
+
return result;
|
|
3017
|
+
}
|
|
3018
|
+
const request$ = this.httpClient.post(this.twoFactorUrl(endpoints.twoFactorPasskey), {
|
|
3019
|
+
challengeToken: challengeToken,
|
|
3020
|
+
ceremonyToken: options.data.ceremonyToken,
|
|
3021
|
+
credential: credential.data,
|
|
3022
|
+
rememberDevice: rememberDevice
|
|
3023
|
+
}, this.twoFactorStepRequestOptions());
|
|
3024
|
+
try {
|
|
3025
|
+
result.data = this.completeAuthenticationStep(await lastValueFrom(request$)).authorization;
|
|
3026
|
+
}
|
|
3027
|
+
catch (ex) {
|
|
3028
|
+
this.pendingStepFailed(ex).copyTo(result);
|
|
3029
|
+
}
|
|
3030
|
+
return result;
|
|
3031
|
+
}
|
|
3032
|
+
/**
|
|
3033
|
+
* Signs in with a discoverable passkey, without a username or password. Returns the
|
|
3034
|
+
* stored authorization, or a pending step when the server's policy asks for more.
|
|
3035
|
+
*/
|
|
3036
|
+
async signInWithPasskey() {
|
|
3037
|
+
const result = new TaskResult();
|
|
3038
|
+
const endpoints = this.twoFactorEndpoints();
|
|
3039
|
+
const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.passkeySignInOptions), {}, this.twoFactorStepRequestOptions()), response => new NhPasskeyOptions(response));
|
|
3040
|
+
if (!options.isSuccess) {
|
|
3041
|
+
options.copyTo(result);
|
|
3042
|
+
return result;
|
|
3043
|
+
}
|
|
3044
|
+
const credential = await this.runPasskeyCeremony(() => this.passkeyClient.get(options.data.options));
|
|
3045
|
+
if (!credential.isSuccess) {
|
|
3046
|
+
credential.copyTo(result);
|
|
3047
|
+
return result;
|
|
3048
|
+
}
|
|
3049
|
+
const request$ = this.httpClient.post(this.twoFactorUrl(endpoints.passkeySignIn), {
|
|
3050
|
+
ceremonyToken: options.data.ceremonyToken,
|
|
3051
|
+
credential: credential.data,
|
|
3052
|
+
rememberDeviceToken: this.getRememberDeviceToken()
|
|
3053
|
+
}, this.twoFactorStepRequestOptions());
|
|
3054
|
+
try {
|
|
3055
|
+
result.data = this.completeAuthenticationStep(await lastValueFrom(request$));
|
|
3056
|
+
}
|
|
3057
|
+
catch (ex) {
|
|
3058
|
+
NhApiUtil.taskResultFromResponse(ex).copyTo(result);
|
|
3059
|
+
}
|
|
3060
|
+
return result;
|
|
3061
|
+
}
|
|
3062
|
+
/**
|
|
3063
|
+
* Starts authenticator enrollment for a user whom the policy requires to enroll during
|
|
3064
|
+
* sign-in. `enrollmentToken` is the `challengeToken` of the enrollment step.
|
|
3065
|
+
*/
|
|
3066
|
+
beginEnrollmentAuthenticatorSetup(enrollmentToken) {
|
|
3067
|
+
return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEnrollmentAuthenticator), { enrollmentToken: enrollmentToken }, this.twoFactorStepRequestOptions()), response => new NhAuthenticatorSetup(response));
|
|
3068
|
+
}
|
|
3069
|
+
/**
|
|
3070
|
+
* Confirms the authenticator during a required enrollment and stores the session.
|
|
3071
|
+
*/
|
|
3072
|
+
confirmEnrollmentAuthenticator(enrollmentToken, code) {
|
|
3073
|
+
return this.sendEnrollmentCompletion(this.twoFactorEndpoints().twoFactorEnrollmentAuthenticatorConfirm, { enrollmentToken: enrollmentToken, code: code });
|
|
3074
|
+
}
|
|
3075
|
+
/**
|
|
3076
|
+
* E-mails a confirmation code during a required enrollment.
|
|
3077
|
+
*/
|
|
3078
|
+
sendEnrollmentEmailCode(enrollmentToken) {
|
|
3079
|
+
return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEnrollmentEmail), { enrollmentToken: enrollmentToken }, this.twoFactorStepRequestOptions()), response => new NhTwoFactorEmailCodeSent(response));
|
|
3080
|
+
}
|
|
3081
|
+
/**
|
|
3082
|
+
* Confirms the e-mail factor during a required enrollment and stores the session.
|
|
3083
|
+
*/
|
|
3084
|
+
confirmEnrollmentEmail(enrollmentToken, code) {
|
|
3085
|
+
return this.sendEnrollmentCompletion(this.twoFactorEndpoints().twoFactorEnrollmentEmailConfirm, { enrollmentToken: enrollmentToken, code: code });
|
|
3086
|
+
}
|
|
3087
|
+
/**
|
|
3088
|
+
* Registers a passkey during a required enrollment and stores the session.
|
|
3089
|
+
*/
|
|
3090
|
+
async enrollPasskey(enrollmentToken, name) {
|
|
3091
|
+
const result = new TaskResult();
|
|
3092
|
+
const endpoints = this.twoFactorEndpoints();
|
|
3093
|
+
const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.twoFactorEnrollmentPasskeyOptions), { enrollmentToken: enrollmentToken }, this.twoFactorStepRequestOptions()), response => new NhPasskeyOptions(response));
|
|
3094
|
+
if (!options.isSuccess) {
|
|
3095
|
+
options.copyTo(result);
|
|
3096
|
+
return result;
|
|
3097
|
+
}
|
|
3098
|
+
const credential = await this.runPasskeyCeremony(() => this.passkeyClient.create(options.data.options));
|
|
3099
|
+
if (!credential.isSuccess) {
|
|
3100
|
+
credential.copyTo(result);
|
|
3101
|
+
return result;
|
|
3102
|
+
}
|
|
3103
|
+
return this.sendEnrollmentCompletion(endpoints.twoFactorEnrollmentPasskey, {
|
|
3104
|
+
enrollmentToken: enrollmentToken,
|
|
3105
|
+
ceremonyToken: options.data.ceremonyToken,
|
|
3106
|
+
credential: credential.data,
|
|
3107
|
+
name: name
|
|
3108
|
+
});
|
|
3109
|
+
}
|
|
3110
|
+
/**
|
|
3111
|
+
* Returns the pending second-factor challenge of this browser tab, if it has not expired.
|
|
3112
|
+
*/
|
|
3113
|
+
getPendingTwoFactorChallenge() {
|
|
3114
|
+
const challenge = this.pendingTwoFactorChallenge ?? this.readStoredTwoFactorChallenge();
|
|
3115
|
+
if (!challenge) {
|
|
3116
|
+
return undefined;
|
|
3117
|
+
}
|
|
3118
|
+
if (challenge.expiresAt && DateTime.fromISO(challenge.expiresAt) <= DateTime.now()) {
|
|
3119
|
+
this.clearPendingTwoFactorChallenge();
|
|
3120
|
+
return undefined;
|
|
3121
|
+
}
|
|
3122
|
+
this.pendingTwoFactorChallenge = challenge;
|
|
3123
|
+
return challenge;
|
|
3124
|
+
}
|
|
3125
|
+
clearPendingTwoFactorChallenge() {
|
|
3126
|
+
this.pendingTwoFactorChallenge = undefined;
|
|
3127
|
+
if (isPlatformServer(this.platformId)) {
|
|
3128
|
+
return;
|
|
3129
|
+
}
|
|
3130
|
+
try {
|
|
3131
|
+
sessionStorage.removeItem(BaseNhAuthService.pendingTwoFactorChallengeStorageKey);
|
|
3132
|
+
}
|
|
3133
|
+
catch {
|
|
3134
|
+
// Storage can be unavailable in private browsing; the in-memory challenge is cleared.
|
|
3135
|
+
}
|
|
3136
|
+
}
|
|
3137
|
+
/**
|
|
3138
|
+
* Reads a challenge that an external sign-in (Microsoft OAuth) passed back in the URL
|
|
3139
|
+
* fragment, stores it as the pending challenge and removes it from the address bar.
|
|
3140
|
+
*/
|
|
3141
|
+
consumeExternalTwoFactorChallenge(fragment) {
|
|
3142
|
+
const browser = !isPlatformServer(this.platformId);
|
|
3143
|
+
const source = fragment ?? (browser ? window.location.hash : '');
|
|
3144
|
+
const value = source.startsWith('#') ? source.substring(1) : source;
|
|
3145
|
+
if (!value.startsWith(BaseNhAuthService.externalTwoFactorChallengePrefix)) {
|
|
3146
|
+
return undefined;
|
|
3147
|
+
}
|
|
3148
|
+
let challenge;
|
|
3149
|
+
try {
|
|
3150
|
+
const payload = value.substring(BaseNhAuthService.externalTwoFactorChallengePrefix.length);
|
|
3151
|
+
challenge = new NhTwoFactorChallenge(JSON.parse(Base64.decode(payload)));
|
|
3152
|
+
}
|
|
3153
|
+
catch {
|
|
3154
|
+
return undefined;
|
|
3155
|
+
}
|
|
3156
|
+
if (!challenge.challengeToken) {
|
|
3157
|
+
return undefined;
|
|
3158
|
+
}
|
|
3159
|
+
this.setPendingTwoFactorChallenge(challenge);
|
|
3160
|
+
if (browser && fragment === undefined) {
|
|
3161
|
+
window.history.replaceState(window.history.state, '', window.location.pathname + window.location.search);
|
|
3162
|
+
}
|
|
3163
|
+
return challenge;
|
|
3164
|
+
}
|
|
3165
|
+
async getTwoFactorStatus() {
|
|
3166
|
+
const result = new TaskResult();
|
|
3167
|
+
const request$ = this.httpClient.get(this.moduleConfig.authApiBaseUrl + this.twoFactorEndpoints().twoFactorStatus, this.twoFactorAccountRequestOptions());
|
|
3168
|
+
try {
|
|
3169
|
+
result.data = new NhTwoFactorStatus(await lastValueFrom(request$));
|
|
3170
|
+
}
|
|
3171
|
+
catch (ex) {
|
|
3172
|
+
const errResult = NhApiUtil.taskResultFromResponse(ex);
|
|
3173
|
+
errResult.copyTo(result);
|
|
3174
|
+
}
|
|
3175
|
+
return result;
|
|
3176
|
+
}
|
|
3177
|
+
/**
|
|
3178
|
+
* Starts authenticator enrollment. Restarting enrollment while two-factor authentication
|
|
3179
|
+
* is enabled requires reauthentication.
|
|
3180
|
+
*/
|
|
3181
|
+
async beginAuthenticatorSetup(reauthentication) {
|
|
3182
|
+
const result = new TaskResult();
|
|
3183
|
+
const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + this.twoFactorEndpoints().twoFactorAuthenticator, { reauthentication: reauthentication }, this.twoFactorAccountRequestOptions());
|
|
3184
|
+
try {
|
|
3185
|
+
result.data = new NhAuthenticatorSetup(await lastValueFrom(request$));
|
|
3186
|
+
}
|
|
3187
|
+
catch (ex) {
|
|
3188
|
+
const errResult = NhApiUtil.taskResultFromResponse(ex);
|
|
3189
|
+
errResult.copyTo(result);
|
|
3190
|
+
}
|
|
3191
|
+
return result;
|
|
3192
|
+
}
|
|
3193
|
+
/**
|
|
3194
|
+
* Confirms authenticator enrollment. The server ends every other session; the renewed
|
|
3195
|
+
* session for this device is stored before the promise resolves.
|
|
3196
|
+
*/
|
|
3197
|
+
confirmAuthenticator(code) {
|
|
3198
|
+
return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorAuthenticatorConfirm, { code: code });
|
|
3199
|
+
}
|
|
3200
|
+
regenerateRecoveryCodes(reauthentication) {
|
|
3201
|
+
return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorRecoveryCodes, { reauthentication: reauthentication });
|
|
3202
|
+
}
|
|
3203
|
+
disableTwoFactor(reauthentication) {
|
|
3204
|
+
return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorDisable, { reauthentication: reauthentication });
|
|
3205
|
+
}
|
|
3206
|
+
/**
|
|
3207
|
+
* E-mails a code that confirms the user's e-mail address as a second factor. Requires
|
|
3208
|
+
* reauthentication while two-factor authentication is enabled.
|
|
3209
|
+
*/
|
|
3210
|
+
beginEmailSetup(reauthentication) {
|
|
3211
|
+
return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEmailSetup), { reauthentication: reauthentication }, this.twoFactorAccountRequestOptions()), response => new NhTwoFactorEmailCodeSent(response));
|
|
3212
|
+
}
|
|
3213
|
+
confirmEmailSetup(code) {
|
|
3214
|
+
return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorEmailConfirm, { code: code });
|
|
3215
|
+
}
|
|
3216
|
+
/**
|
|
3217
|
+
* Forgets every remembered device, including this one, and ends every other session.
|
|
3218
|
+
*/
|
|
3219
|
+
async forgetTwoFactorDevices(reauthentication) {
|
|
3220
|
+
const result = await this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorForgetDevices, { reauthentication: reauthentication });
|
|
3221
|
+
if (result.isSuccess) {
|
|
3222
|
+
this.storeRememberDeviceToken(undefined);
|
|
3223
|
+
}
|
|
3224
|
+
return result;
|
|
3225
|
+
}
|
|
3226
|
+
getPasskeys() {
|
|
3227
|
+
return this.sendTwoFactorRequest(this.httpClient.get(this.twoFactorUrl(this.twoFactorEndpoints().passkeys), this.twoFactorAccountRequestOptions()), response => (response ?? []).map(passkey => new NhPasskey(passkey)));
|
|
3228
|
+
}
|
|
3229
|
+
/**
|
|
3230
|
+
* Registers a passkey on this device. Adding a passkey while two-factor authentication is
|
|
3231
|
+
* enabled requires reauthentication. The server ends every other session; the renewed
|
|
3232
|
+
* session for this device is stored before the promise resolves.
|
|
3233
|
+
*/
|
|
3234
|
+
async registerPasskey(name, reauthentication) {
|
|
3235
|
+
const result = new TaskResult();
|
|
3236
|
+
const endpoints = this.twoFactorEndpoints();
|
|
3237
|
+
const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.passkeyRegistrationOptions), { reauthentication: reauthentication }, this.twoFactorAccountRequestOptions()), response => new NhPasskeyOptions(response));
|
|
3238
|
+
if (!options.isSuccess) {
|
|
3239
|
+
options.copyTo(result);
|
|
3240
|
+
return result;
|
|
3241
|
+
}
|
|
3242
|
+
const credential = await this.runPasskeyCeremony(() => this.passkeyClient.create(options.data.options));
|
|
3243
|
+
if (!credential.isSuccess) {
|
|
3244
|
+
credential.copyTo(result);
|
|
3245
|
+
return result;
|
|
3246
|
+
}
|
|
3247
|
+
return this.sendTwoFactorChange(endpoints.passkeys, {
|
|
3248
|
+
ceremonyToken: options.data.ceremonyToken,
|
|
3249
|
+
credential: credential.data,
|
|
3250
|
+
name: name
|
|
3251
|
+
});
|
|
3252
|
+
}
|
|
3253
|
+
renamePasskey(passkeyId, name) {
|
|
3254
|
+
return this.sendTwoFactorRequest(this.httpClient.put(this.twoFactorUrl(this.twoFactorEndpoints().passkeys) + '/' + encodeURIComponent(passkeyId), { name: name }, this.twoFactorAccountRequestOptions()), () => undefined);
|
|
3255
|
+
}
|
|
3256
|
+
/**
|
|
3257
|
+
* Removes a passkey. Removing the last second factor disables two-factor authentication,
|
|
3258
|
+
* which fails when the policy requires it.
|
|
3259
|
+
*/
|
|
3260
|
+
removePasskey(passkeyId, reauthentication) {
|
|
3261
|
+
return this.sendTwoFactorChange(this.twoFactorEndpoints().passkeys + '/' + encodeURIComponent(passkeyId) + '/remove', { reauthentication: reauthentication });
|
|
3262
|
+
}
|
|
3263
|
+
/**
|
|
3264
|
+
* Removes every second factor of another user who lost access to them. Requires the
|
|
3265
|
+
* server's two-factor administration policy.
|
|
3266
|
+
*/
|
|
3267
|
+
resetUserTwoFactor(userId) {
|
|
3268
|
+
const endpoint = this.twoFactorEndpoints().twoFactorUserReset.replace('{userId}', encodeURIComponent(userId));
|
|
3269
|
+
return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoint), {}, this.twoFactorAccountRequestOptions()), () => undefined);
|
|
3270
|
+
}
|
|
3271
|
+
/**
|
|
3272
|
+
* Starts a background operation that reminds every user whom the policy requires to
|
|
3273
|
+
* enroll. A repeated idempotency key returns the operation that was already started.
|
|
3274
|
+
*/
|
|
3275
|
+
startTwoFactorEnrollmentReminders(idempotencyKey) {
|
|
3276
|
+
return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEnrollmentReminders), { idempotencyKey: idempotencyKey }, this.twoFactorAccountRequestOptions()), response => response);
|
|
3277
|
+
}
|
|
3278
|
+
/**
|
|
3279
|
+
* Starts a background operation that ends the sessions of every user whom the policy
|
|
3280
|
+
* requires to enroll, so their next sign-in enrolls them.
|
|
3281
|
+
*/
|
|
3282
|
+
startTwoFactorSessionRevocation(idempotencyKey) {
|
|
3283
|
+
return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorSessionRevocation), { idempotencyKey: idempotencyKey }, this.twoFactorAccountRequestOptions()), response => response);
|
|
3284
|
+
}
|
|
3285
|
+
async sendTwoFactorChange(endpoint, body) {
|
|
3286
|
+
const result = new TaskResult();
|
|
3287
|
+
const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + endpoint, body, this.twoFactorAccountRequestOptions());
|
|
3288
|
+
try {
|
|
3289
|
+
const response = await lastValueFrom(request$);
|
|
3290
|
+
const sessionRenewed = this.applyRenewedSession(response?.session);
|
|
3291
|
+
result.data = new NhTwoFactorChange({
|
|
3292
|
+
recoveryCodes: response?.recoveryCodes ?? undefined,
|
|
3293
|
+
sessionRenewed: sessionRenewed
|
|
3294
|
+
});
|
|
3295
|
+
}
|
|
3296
|
+
catch (ex) {
|
|
3297
|
+
const errResult = NhApiUtil.taskResultFromResponse(ex);
|
|
3298
|
+
errResult.copyTo(result);
|
|
3299
|
+
}
|
|
3300
|
+
return result;
|
|
3301
|
+
}
|
|
3302
|
+
/**
|
|
3303
|
+
* Stores the session that the server issued for this device after a change that ended
|
|
3304
|
+
* every session. The user, claims and divisions of the current authorization are kept.
|
|
3305
|
+
*/
|
|
3306
|
+
applyRenewedSession(session) {
|
|
3307
|
+
const authorization = this.getAuthorization();
|
|
3308
|
+
if (!session?.token || !authorization) {
|
|
3309
|
+
return false;
|
|
3310
|
+
}
|
|
3311
|
+
authorization.token = session.token;
|
|
3312
|
+
authorization.validTo = session.validTo ?? authorization.validTo;
|
|
3313
|
+
authorization.refreshToken = session.refreshToken ?? undefined;
|
|
3314
|
+
authorization.refreshTokenExpires = session.refreshValidTo ?? undefined;
|
|
3315
|
+
this.setAuthorization(authorization);
|
|
3316
|
+
return true;
|
|
3317
|
+
}
|
|
3318
|
+
toAuthorization(response) {
|
|
3319
|
+
const authorization = response;
|
|
3320
|
+
delete authorization.twoFactor;
|
|
3321
|
+
delete authorization.rememberDeviceToken;
|
|
3322
|
+
authorization.realm = this.moduleConfig.authenticationRealm;
|
|
3323
|
+
return authorization;
|
|
3324
|
+
}
|
|
3325
|
+
/**
|
|
3326
|
+
* Stores a complete session, or keeps a second-factor challenge or enrollment as the
|
|
3327
|
+
* pending step of this browser tab.
|
|
3328
|
+
*/
|
|
3329
|
+
completeAuthenticationStep(response) {
|
|
3330
|
+
if (response?.twoFactor) {
|
|
3331
|
+
const challenge = new NhTwoFactorChallenge(response.twoFactor);
|
|
3332
|
+
this.setPendingTwoFactorChallenge(challenge);
|
|
3333
|
+
return new NhAuthenticationStep({
|
|
3334
|
+
status: challenge.status === NhAuthenticationStepStatuses.enrollmentRequired ? 'enrollment-required' : 'two-factor-required',
|
|
3335
|
+
challenge: challenge
|
|
3336
|
+
});
|
|
3337
|
+
}
|
|
3338
|
+
if (response?.rememberDeviceToken) {
|
|
3339
|
+
this.storeRememberDeviceToken(response.rememberDeviceToken);
|
|
3340
|
+
}
|
|
3341
|
+
const authorization = this.toAuthorization(response);
|
|
3342
|
+
this.setAuthorization(authorization);
|
|
3343
|
+
this.clearPendingTwoFactorChallenge();
|
|
3344
|
+
return new NhAuthenticationStep({ status: 'authenticated', authorization: authorization });
|
|
3345
|
+
}
|
|
3346
|
+
/**
|
|
3347
|
+
* Converts a failed challenge or enrollment request and forgets the pending step when the
|
|
3348
|
+
* server ended it.
|
|
3349
|
+
*/
|
|
3350
|
+
pendingStepFailed(ex) {
|
|
3351
|
+
const errResult = NhApiUtil.taskResultFromResponse(ex);
|
|
3352
|
+
const stepEnded = errResult.items.some(item => item.name === NhTwoFactorFailureCodes.ChallengeExpired || item.name === NhTwoFactorFailureCodes.LockedOut);
|
|
3353
|
+
if (stepEnded) {
|
|
3354
|
+
this.clearPendingTwoFactorChallenge();
|
|
3355
|
+
}
|
|
3356
|
+
return errResult;
|
|
3357
|
+
}
|
|
3358
|
+
async sendEnrollmentCompletion(endpoint, body) {
|
|
3359
|
+
const result = new TaskResult();
|
|
3360
|
+
const request$ = this.httpClient.post(this.twoFactorUrl(endpoint), body, this.twoFactorStepRequestOptions());
|
|
3361
|
+
try {
|
|
3362
|
+
const response = await lastValueFrom(request$);
|
|
3363
|
+
const authorization = response?.session ? this.completeAuthenticationStep(response.session).authorization : undefined;
|
|
3364
|
+
result.data = new NhTwoFactorEnrollmentResult({
|
|
3365
|
+
authorization: authorization,
|
|
3366
|
+
recoveryCodes: response?.recoveryCodes ?? undefined
|
|
3367
|
+
});
|
|
3368
|
+
}
|
|
3369
|
+
catch (ex) {
|
|
3370
|
+
this.pendingStepFailed(ex).copyTo(result);
|
|
3371
|
+
}
|
|
3372
|
+
return result;
|
|
3373
|
+
}
|
|
3374
|
+
async sendTwoFactorRequest(request$, map) {
|
|
3375
|
+
const result = new TaskResult();
|
|
3376
|
+
try {
|
|
3377
|
+
result.data = map(await lastValueFrom(request$, { defaultValue: undefined }));
|
|
3378
|
+
}
|
|
3379
|
+
catch (ex) {
|
|
3380
|
+
NhApiUtil.taskResultFromResponse(ex).copyTo(result);
|
|
3381
|
+
}
|
|
3382
|
+
return result;
|
|
3383
|
+
}
|
|
3384
|
+
/**
|
|
3385
|
+
* Runs a WebAuthn prompt. A cancelled prompt or an unsupported browser becomes a failed
|
|
3386
|
+
* result with `NhTwoFactorFailureCodes.PasskeyUnavailable`.
|
|
3387
|
+
*/
|
|
3388
|
+
async runPasskeyCeremony(ceremony) {
|
|
3389
|
+
const result = new TaskResult();
|
|
3390
|
+
try {
|
|
3391
|
+
result.data = await ceremony();
|
|
3392
|
+
}
|
|
3393
|
+
catch {
|
|
3394
|
+
return result.withError(NhTwoFactorFailureCodes.PasskeyUnavailable, 'nh-two-factor.passkey-unavailable');
|
|
3395
|
+
}
|
|
3396
|
+
return result;
|
|
3397
|
+
}
|
|
3398
|
+
/**
|
|
3399
|
+
* Returns the remember-device token of header clients. Cookie clients receive it as an
|
|
3400
|
+
* HttpOnly cookie, so nothing is stored in the browser.
|
|
3401
|
+
*/
|
|
3402
|
+
getRememberDeviceToken() {
|
|
3403
|
+
if (this.moduleConfig.authType !== 'header' || isPlatformServer(this.platformId)) {
|
|
3404
|
+
return undefined;
|
|
3405
|
+
}
|
|
3406
|
+
try {
|
|
3407
|
+
return localStorage.getItem(this.rememberDeviceStorageKey()) ?? undefined;
|
|
3408
|
+
}
|
|
3409
|
+
catch {
|
|
3410
|
+
return undefined;
|
|
3411
|
+
}
|
|
3412
|
+
}
|
|
3413
|
+
storeRememberDeviceToken(token) {
|
|
3414
|
+
if (this.moduleConfig.authType !== 'header' || isPlatformServer(this.platformId)) {
|
|
3415
|
+
return;
|
|
3416
|
+
}
|
|
3417
|
+
try {
|
|
3418
|
+
if (token) {
|
|
3419
|
+
localStorage.setItem(this.rememberDeviceStorageKey(), token);
|
|
3420
|
+
}
|
|
3421
|
+
else {
|
|
3422
|
+
localStorage.removeItem(this.rememberDeviceStorageKey());
|
|
3423
|
+
}
|
|
3424
|
+
}
|
|
3425
|
+
catch {
|
|
3426
|
+
// Storage can be unavailable in private browsing; the device is then not remembered.
|
|
3427
|
+
}
|
|
3428
|
+
}
|
|
3429
|
+
rememberDeviceStorageKey() {
|
|
3430
|
+
return BaseNhAuthService.rememberDeviceStorageKey + ':' + this.moduleConfig.authenticationRealm;
|
|
3431
|
+
}
|
|
3432
|
+
setPendingTwoFactorChallenge(challenge) {
|
|
3433
|
+
this.pendingTwoFactorChallenge = challenge;
|
|
3434
|
+
if (isPlatformServer(this.platformId)) {
|
|
3435
|
+
return;
|
|
3436
|
+
}
|
|
3437
|
+
try {
|
|
3438
|
+
sessionStorage.setItem(BaseNhAuthService.pendingTwoFactorChallengeStorageKey, JSON.stringify(challenge));
|
|
3439
|
+
}
|
|
3440
|
+
catch {
|
|
3441
|
+
// Storage can be unavailable in private browsing; the in-memory challenge still works.
|
|
3442
|
+
}
|
|
3443
|
+
}
|
|
3444
|
+
readStoredTwoFactorChallenge() {
|
|
3445
|
+
if (isPlatformServer(this.platformId)) {
|
|
3446
|
+
return undefined;
|
|
3447
|
+
}
|
|
3448
|
+
try {
|
|
3449
|
+
const stored = sessionStorage.getItem(BaseNhAuthService.pendingTwoFactorChallengeStorageKey);
|
|
3450
|
+
if (!stored) {
|
|
3451
|
+
return undefined;
|
|
3452
|
+
}
|
|
3453
|
+
return new NhTwoFactorChallenge(JSON.parse(stored));
|
|
3454
|
+
}
|
|
3455
|
+
catch {
|
|
3456
|
+
return undefined;
|
|
3457
|
+
}
|
|
3458
|
+
}
|
|
3459
|
+
twoFactorEndpoints() {
|
|
3460
|
+
// Consumers that passed a plain endpoints object keep working with the default routes.
|
|
3461
|
+
return new EndpointsAuthenticationNhCommonModuleConfig({
|
|
3462
|
+
...new EndpointsAuthenticationNhCommonModuleConfig(),
|
|
3463
|
+
...this.moduleConfig.authentication.endpoints
|
|
3464
|
+
});
|
|
3465
|
+
}
|
|
3466
|
+
twoFactorUrl(endpoint) {
|
|
3467
|
+
return this.moduleConfig.authApiBaseUrl + endpoint;
|
|
3468
|
+
}
|
|
3469
|
+
twoFactorStepRequestOptions() {
|
|
3470
|
+
return {
|
|
3471
|
+
params: this.languageParams(),
|
|
3472
|
+
withCredentials: true
|
|
3473
|
+
};
|
|
3474
|
+
}
|
|
3475
|
+
twoFactorAccountRequestOptions() {
|
|
3476
|
+
let headers = new HttpHeaders();
|
|
3477
|
+
const authorization = this.getAuthorization();
|
|
3478
|
+
if (this.moduleConfig.authType === 'header' && authorization?.token) {
|
|
3479
|
+
headers = headers.set('Authorization', `Bearer ${authorization.token}`);
|
|
3480
|
+
}
|
|
3481
|
+
return {
|
|
3482
|
+
params: this.languageParams(),
|
|
3483
|
+
headers: headers,
|
|
3484
|
+
withCredentials: true
|
|
3485
|
+
};
|
|
3486
|
+
}
|
|
3487
|
+
languageParams() {
|
|
3488
|
+
return new HttpParams().set('language', this.moduleConfig.language);
|
|
3489
|
+
}
|
|
2620
3490
|
async reloadAuthorizationProfile() {
|
|
2621
3491
|
const result = new TaskResult();
|
|
2622
3492
|
const auth = this.getAuthorization();
|
|
@@ -2665,6 +3535,53 @@ class BaseNhAuthService {
|
|
|
2665
3535
|
}
|
|
2666
3536
|
return result;
|
|
2667
3537
|
}
|
|
3538
|
+
/**
|
|
3539
|
+
* Asks the account information endpoint whether the server still accepts the current session.
|
|
3540
|
+
* When the server answers 401, for example after a password change on another device, the local
|
|
3541
|
+
* session ends and the session expiration information reports `rejectedByServer`. Concurrent
|
|
3542
|
+
* checks share one request, and a confirmed session is not checked again for 30 seconds.
|
|
3543
|
+
* @returns `false` only when there is no session or the server rejected it.
|
|
3544
|
+
*/
|
|
3545
|
+
verifyServerSession() {
|
|
3546
|
+
if (!this.isAuthenticated()) {
|
|
3547
|
+
return Promise.resolve(false);
|
|
3548
|
+
}
|
|
3549
|
+
if (Date.now() - this.serverSessionConfirmedAt < BaseNhAuthService.serverSessionConfirmationMilliseconds) {
|
|
3550
|
+
return Promise.resolve(true);
|
|
3551
|
+
}
|
|
3552
|
+
this.serverSessionCheck ??= this.checkServerSession().finally(() => {
|
|
3553
|
+
this.serverSessionCheck = undefined;
|
|
3554
|
+
});
|
|
3555
|
+
return this.serverSessionCheck;
|
|
3556
|
+
}
|
|
3557
|
+
async checkServerSession() {
|
|
3558
|
+
const checkedAuthorization = this.getAuthorization();
|
|
3559
|
+
let httpHeaders = new HttpHeaders();
|
|
3560
|
+
if (this.moduleConfig.authType === 'header' && (checkedAuthorization?.token?.length ?? 0) > 0) {
|
|
3561
|
+
httpHeaders = httpHeaders.set('Authorization', `Bearer ${checkedAuthorization.token}`);
|
|
3562
|
+
}
|
|
3563
|
+
const request$ = this.httpClient.get(this.moduleConfig.authApiBaseUrl + this.moduleConfig.authentication.endpoints.accountInformation, {
|
|
3564
|
+
params: new HttpParams().set('language', this.moduleConfig.language),
|
|
3565
|
+
headers: httpHeaders,
|
|
3566
|
+
withCredentials: true,
|
|
3567
|
+
context: new HttpContext().set(NH_SKIP_SERVER_SESSION_CHECK, true)
|
|
3568
|
+
});
|
|
3569
|
+
try {
|
|
3570
|
+
await lastValueFrom(request$);
|
|
3571
|
+
this.serverSessionConfirmedAt = Date.now();
|
|
3572
|
+
return true;
|
|
3573
|
+
}
|
|
3574
|
+
catch (ex) {
|
|
3575
|
+
const rejected = ex instanceof HttpErrorResponse && ex.status === 401;
|
|
3576
|
+
// Other failures say nothing about the session, and a sign-in during the check replaced it.
|
|
3577
|
+
if (!rejected || this.getAuthorization() !== checkedAuthorization) {
|
|
3578
|
+
return true;
|
|
3579
|
+
}
|
|
3580
|
+
this.sessionRejectedByServer = true;
|
|
3581
|
+
this.clearAuthorization();
|
|
3582
|
+
return false;
|
|
3583
|
+
}
|
|
3584
|
+
}
|
|
2668
3585
|
async logout() {
|
|
2669
3586
|
const result = new TaskResult();
|
|
2670
3587
|
const refreshToken = this.getAuthorization()?.refreshToken ?? null;
|
|
@@ -2756,10 +3673,10 @@ class BaseNhAuthService {
|
|
|
2756
3673
|
}
|
|
2757
3674
|
return result;
|
|
2758
3675
|
}
|
|
2759
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2760
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
3676
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: BaseNhAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3677
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: BaseNhAuthService }); }
|
|
2761
3678
|
}
|
|
2762
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3679
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: BaseNhAuthService, decorators: [{
|
|
2763
3680
|
type: Injectable
|
|
2764
3681
|
}], ctorParameters: () => [] });
|
|
2765
3682
|
class NhAuthService extends BaseNhAuthService {
|
|
@@ -2769,10 +3686,10 @@ class NhAuthService extends BaseNhAuthService {
|
|
|
2769
3686
|
constructor() {
|
|
2770
3687
|
super();
|
|
2771
3688
|
}
|
|
2772
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2773
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
3689
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3690
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAuthService }); }
|
|
2774
3691
|
}
|
|
2775
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAuthService, decorators: [{
|
|
2776
3693
|
type: Injectable
|
|
2777
3694
|
}], ctorParameters: () => [] });
|
|
2778
3695
|
|
|
@@ -2783,10 +3700,10 @@ class NhRequestScopedServerHttpInterceptorService {
|
|
|
2783
3700
|
this.requestContext = requestContext;
|
|
2784
3701
|
this.didSetCookies = false;
|
|
2785
3702
|
}
|
|
2786
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2787
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
3703
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, deps: [{ token: NhCommonModuleConfig }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3704
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, providedIn: 'root' }); }
|
|
2788
3705
|
}
|
|
2789
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3706
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, decorators: [{
|
|
2790
3707
|
type: Injectable,
|
|
2791
3708
|
args: [{
|
|
2792
3709
|
providedIn: 'root'
|
|
@@ -2870,10 +3787,10 @@ class NhServerHttpInterceptor {
|
|
|
2870
3787
|
}
|
|
2871
3788
|
}));
|
|
2872
3789
|
}
|
|
2873
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2874
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
3790
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerHttpInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: PLATFORM_ID }, { token: DOCUMENT }, { token: NhRequestScopedServerHttpInterceptorService }, { token: NhCookieService }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3791
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerHttpInterceptor }); }
|
|
2875
3792
|
}
|
|
2876
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3793
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerHttpInterceptor, decorators: [{
|
|
2877
3794
|
type: Injectable
|
|
2878
3795
|
}], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: Object, decorators: [{
|
|
2879
3796
|
type: Inject,
|
|
@@ -2910,13 +3827,51 @@ class NhDeduplicateGetRequestsInterceptor {
|
|
|
2910
3827
|
.join('|');
|
|
2911
3828
|
return `${req.method.toUpperCase()} ${req.urlWithParams} ${headerKey}`;
|
|
2912
3829
|
}
|
|
2913
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2914
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
3830
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3831
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor }); }
|
|
2915
3832
|
}
|
|
2916
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3833
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor, decorators: [{
|
|
2917
3834
|
type: Injectable
|
|
2918
3835
|
}], ctorParameters: () => [{ type: NhCommonModuleConfig }] });
|
|
2919
3836
|
|
|
3837
|
+
/**
|
|
3838
|
+
* Ends a session that the NewHeap API no longer accepts. A 401 from the API while the browser
|
|
3839
|
+
* still holds a session asks the auth service to check that session with the server. Only a 401
|
|
3840
|
+
* from the account endpoint ends it, so an endpoint that answers 401 for another reason never
|
|
3841
|
+
* signs the user out. The original error still reaches the caller.
|
|
3842
|
+
*/
|
|
3843
|
+
class NhSessionRejectionInterceptor {
|
|
3844
|
+
constructor(moduleConfig, authService) {
|
|
3845
|
+
this.moduleConfig = moduleConfig;
|
|
3846
|
+
this.authService = authService;
|
|
3847
|
+
}
|
|
3848
|
+
intercept(req, next) {
|
|
3849
|
+
if (!this.appliesTo(req)) {
|
|
3850
|
+
return next.handle(req);
|
|
3851
|
+
}
|
|
3852
|
+
return next.handle(req).pipe(catchError((error) => {
|
|
3853
|
+
if (error instanceof HttpErrorResponse && error.status === 401 && this.authService.isAuthenticated()) {
|
|
3854
|
+
void this.authService.verifyServerSession();
|
|
3855
|
+
}
|
|
3856
|
+
return throwError(() => error);
|
|
3857
|
+
}));
|
|
3858
|
+
}
|
|
3859
|
+
appliesTo(req) {
|
|
3860
|
+
if (this.moduleConfig.authentication?.endSessionRejectedByServer === false || req.context.get(NH_SKIP_SERVER_SESSION_CHECK)) {
|
|
3861
|
+
return false;
|
|
3862
|
+
}
|
|
3863
|
+
return this.isUnder(req.url, this.moduleConfig.apiBaseUrl) || this.isUnder(req.url, this.moduleConfig.authApiBaseUrl);
|
|
3864
|
+
}
|
|
3865
|
+
isUnder(url, baseUrl) {
|
|
3866
|
+
return (baseUrl?.length ?? 0) > 0 && url.startsWith(baseUrl);
|
|
3867
|
+
}
|
|
3868
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSessionRejectionInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3869
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSessionRejectionInterceptor }); }
|
|
3870
|
+
}
|
|
3871
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSessionRejectionInterceptor, decorators: [{
|
|
3872
|
+
type: Injectable
|
|
3873
|
+
}], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }] });
|
|
3874
|
+
|
|
2920
3875
|
class AbstractValueAccessor {
|
|
2921
3876
|
constructor() {
|
|
2922
3877
|
this._value = '';
|
|
@@ -2972,10 +3927,10 @@ class NhErrorHandlerService {
|
|
|
2972
3927
|
}
|
|
2973
3928
|
}
|
|
2974
3929
|
}
|
|
2975
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2976
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
3930
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorHandlerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3931
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorHandlerService, providedIn: 'root' }); }
|
|
2977
3932
|
}
|
|
2978
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3933
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorHandlerService, decorators: [{
|
|
2979
3934
|
type: Injectable,
|
|
2980
3935
|
args: [{ providedIn: 'root' }]
|
|
2981
3936
|
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
@@ -3060,10 +4015,10 @@ class NhAppService {
|
|
|
3060
4015
|
}
|
|
3061
4016
|
return this.transferState.get(stateKey, undefined);
|
|
3062
4017
|
}
|
|
3063
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3064
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4018
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAppService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ApplicationRef }, { token: i0.TransferState }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4019
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAppService, providedIn: 'root' }); }
|
|
3065
4020
|
}
|
|
3066
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4021
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAppService, decorators: [{
|
|
3067
4022
|
type: Injectable,
|
|
3068
4023
|
args: [{
|
|
3069
4024
|
providedIn: 'root',
|
|
@@ -3182,10 +4137,10 @@ class NhJsonLdService {
|
|
|
3182
4137
|
item.data = { ...item.data, ...placeholderItem.data };
|
|
3183
4138
|
}
|
|
3184
4139
|
}
|
|
3185
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3186
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4140
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4141
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdService, providedIn: 'root' }); }
|
|
3187
4142
|
}
|
|
3188
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdService, decorators: [{
|
|
3189
4144
|
type: Injectable,
|
|
3190
4145
|
args: [{
|
|
3191
4146
|
providedIn: 'root'
|
|
@@ -3334,10 +4289,10 @@ class NhConfigCommonService {
|
|
|
3334
4289
|
this.setConfig(this.config);
|
|
3335
4290
|
await lastValueFrom(this.translateService.use(newLanguageCode));
|
|
3336
4291
|
}
|
|
3337
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3338
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4292
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhConfigCommonService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }, { token: NhAuthService }, { token: i2.TranslateService }, { token: NhCookieService }, { token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4293
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhConfigCommonService, providedIn: 'root' }); }
|
|
3339
4294
|
}
|
|
3340
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhConfigCommonService, decorators: [{
|
|
3341
4296
|
type: Injectable,
|
|
3342
4297
|
args: [{
|
|
3343
4298
|
providedIn: 'root',
|
|
@@ -3364,10 +4319,10 @@ class NhTitleService {
|
|
|
3364
4319
|
this.titleService.setTitle(title);
|
|
3365
4320
|
this.title.next(title);
|
|
3366
4321
|
}
|
|
3367
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3368
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4322
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTitleService, deps: [{ token: i1$2.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4323
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTitleService, providedIn: 'root' }); }
|
|
3369
4324
|
}
|
|
3370
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTitleService, decorators: [{
|
|
3371
4326
|
type: Injectable,
|
|
3372
4327
|
args: [{
|
|
3373
4328
|
providedIn: 'root',
|
|
@@ -3425,10 +4380,10 @@ class NhMetaService {
|
|
|
3425
4380
|
}
|
|
3426
4381
|
}
|
|
3427
4382
|
}
|
|
3428
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3429
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4383
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMetaService, deps: [{ token: i1$2.Meta }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4384
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMetaService, providedIn: 'root' }); }
|
|
3430
4385
|
}
|
|
3431
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMetaService, decorators: [{
|
|
3432
4387
|
type: Injectable,
|
|
3433
4388
|
args: [{
|
|
3434
4389
|
providedIn: 'root'
|
|
@@ -3629,10 +4584,10 @@ class NhRouterSetupService {
|
|
|
3629
4584
|
}
|
|
3630
4585
|
return activatedRoute;
|
|
3631
4586
|
}
|
|
3632
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3633
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4587
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterSetupService, deps: [{ token: NhCommonModuleConfig }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4588
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterSetupService, providedIn: 'root' }); }
|
|
3634
4589
|
}
|
|
3635
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4590
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterSetupService, decorators: [{
|
|
3636
4591
|
type: Injectable,
|
|
3637
4592
|
args: [{
|
|
3638
4593
|
providedIn: 'root',
|
|
@@ -3916,10 +4871,10 @@ class NhRouterService {
|
|
|
3916
4871
|
processRoute(rootRoute);
|
|
3917
4872
|
return sitemap;
|
|
3918
4873
|
}
|
|
3919
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3920
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4874
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterService, deps: [{ token: NhCommonModuleConfig }, { token: i2.TranslateService }, { token: NhRouterSetupService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: NH_ROUTER_ROOT_ROUTES, optional: true }, { token: NH_ROUTER_LANGUAGE_CHANGE_METHOD, optional: true }, { token: REQUEST_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4875
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterService, providedIn: 'root' }); }
|
|
3921
4876
|
}
|
|
3922
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4877
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterService, decorators: [{
|
|
3923
4878
|
type: Injectable,
|
|
3924
4879
|
args: [{
|
|
3925
4880
|
providedIn: 'root',
|
|
@@ -4090,10 +5045,10 @@ class NhPageService {
|
|
|
4090
5045
|
navigateTo404NotFound(navigationExtras) {
|
|
4091
5046
|
return this.routerService.navigate({ id: 'root.home.not-found' }, navigationExtras);
|
|
4092
5047
|
}
|
|
4093
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4094
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
5048
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: NhCommonModuleConfig }, { token: i0.ApplicationRef }, { token: NhAppService }, { token: NhConfigCommonService }, { token: NhAuthService }, { token: i2.TranslateService }, { token: NhTitleService }, { token: NhMetaService }, { token: NhJsonLdService }, { token: NhRouterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5049
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageService, providedIn: 'root' }); }
|
|
4095
5050
|
}
|
|
4096
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5051
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageService, decorators: [{
|
|
4097
5052
|
type: Injectable,
|
|
4098
5053
|
args: [{
|
|
4099
5054
|
providedIn: 'root'
|
|
@@ -4579,10 +5534,10 @@ class NhApiService {
|
|
|
4579
5534
|
withCredentials: requestOptions.withCredentials
|
|
4580
5535
|
}).pipe(share());
|
|
4581
5536
|
}
|
|
4582
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4583
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
5537
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiService, deps: [{ token: NhCommonModuleConfig }, { token: i2$1.HttpClient }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5538
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiService, providedIn: 'root' }); }
|
|
4584
5539
|
}
|
|
4585
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5540
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiService, decorators: [{
|
|
4586
5541
|
type: Injectable,
|
|
4587
5542
|
args: [{
|
|
4588
5543
|
providedIn: 'root',
|
|
@@ -4593,10 +5548,10 @@ class NhModalContentDirective {
|
|
|
4593
5548
|
constructor(viewContainerRef) {
|
|
4594
5549
|
this.viewContainerRef = viewContainerRef;
|
|
4595
5550
|
}
|
|
4596
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4597
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
5551
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalContentDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
5552
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhModalContentDirective, isStandalone: false, selector: "[nhModalContent]", ngImport: i0 }); }
|
|
4598
5553
|
}
|
|
4599
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5554
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalContentDirective, decorators: [{
|
|
4600
5555
|
type: Directive,
|
|
4601
5556
|
args: [{
|
|
4602
5557
|
selector: '[nhModalContent]',
|
|
@@ -4620,10 +5575,10 @@ class NhLoaderComponent {
|
|
|
4620
5575
|
this.backdropTransparent = input(true, ...(ngDevMode ? [{ debugName: "backdropTransparent" }] : []));
|
|
4621
5576
|
this._containerClass = '';
|
|
4622
5577
|
}
|
|
4623
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4624
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.
|
|
5578
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5579
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhLoaderComponent, isStandalone: false, selector: "nh-loader", inputs: { dark: { classPropertyName: "dark", publicName: "dark", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, backdropTransparent: { classPropertyName: "backdropTransparent", publicName: "backdropTransparent", isSignal: true, isRequired: false, transformFunction: null }, containerClass: { classPropertyName: "containerClass", publicName: "containerClass", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div #loader [class]=\"containerClass\" [class.dark]=\"dark()\" [class.backdrop]=\"hasBackdrop()\" [class.noTrans]=\"!backdropTransparent()\">\n <div class=\"spinner\"></div>\n</div>\n", styles: [".backdrop{position:absolute;width:100%;height:100%;text-align:center;z-index:15;background-color:#fff6;top:0;left:0;display:flex;align-items:center;justify-content:space-around;border-radius:5px}.backdrop.noTrans{background-color:#fff}.spinner{display:inline-block;position:relative;width:44px;height:44px;border-radius:50%;border:4px solid transparent;border-top:4px solid #FF5722;animation:spin 1.5s linear infinite;box-shadow:inset 0 0 25px 25px #fff,0 0 0 5px #fff;background-color:#d8d8d8}.dark .spinner{box-shadow:inset 0 0 25px 25px #071e2b,0 0 0 5px #061a25;background-color:#000}\n"] }); }
|
|
4625
5580
|
}
|
|
4626
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5581
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhLoaderComponent, decorators: [{
|
|
4627
5582
|
type: Component,
|
|
4628
5583
|
args: [{ selector: 'nh-loader', standalone: false, template: "<div #loader [class]=\"containerClass\" [class.dark]=\"dark()\" [class.backdrop]=\"hasBackdrop()\" [class.noTrans]=\"!backdropTransparent()\">\n <div class=\"spinner\"></div>\n</div>\n", styles: [".backdrop{position:absolute;width:100%;height:100%;text-align:center;z-index:15;background-color:#fff6;top:0;left:0;display:flex;align-items:center;justify-content:space-around;border-radius:5px}.backdrop.noTrans{background-color:#fff}.spinner{display:inline-block;position:relative;width:44px;height:44px;border-radius:50%;border:4px solid transparent;border-top:4px solid #FF5722;animation:spin 1.5s linear infinite;box-shadow:inset 0 0 25px 25px #fff,0 0 0 5px #fff;background-color:#d8d8d8}.dark .spinner{box-shadow:inset 0 0 25px 25px #071e2b,0 0 0 5px #061a25;background-color:#000}\n"] }]
|
|
4629
5584
|
}], ctorParameters: () => [], propDecorators: { dark: [{ type: i0.Input, args: [{ isSignal: true, alias: "dark", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], backdropTransparent: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdropTransparent", required: false }] }], containerClass: [{
|
|
@@ -4672,10 +5627,10 @@ class NhModalComponentImpl {
|
|
|
4672
5627
|
appOnDestroy() {
|
|
4673
5628
|
return Promise.resolve();
|
|
4674
5629
|
}
|
|
4675
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4676
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
5630
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponentImpl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
5631
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhModalComponentImpl, isStandalone: true, usesOnChanges: true, ngImport: i0 }); }
|
|
4677
5632
|
}
|
|
4678
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5633
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponentImpl, decorators: [{
|
|
4679
5634
|
type: Directive
|
|
4680
5635
|
}] });
|
|
4681
5636
|
class NhModalComponent {
|
|
@@ -4762,10 +5717,10 @@ class NhModalComponent {
|
|
|
4762
5717
|
}
|
|
4763
5718
|
modalScrollMove(y) {
|
|
4764
5719
|
}
|
|
4765
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4766
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
5720
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5721
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhModalComponent, isStandalone: false, selector: "nh-modal", outputs: { closed: "closed" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: NhModalContentDirective, descendants: true, isSignal: true }, { propertyName: "modalHolder", first: true, predicate: ["modalHolder"], descendants: true, isSignal: true }, { propertyName: "modalBackdrop", first: true, predicate: ["modalBackdrop"], descendants: true, isSignal: true }, { propertyName: "modal", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #modalHolder (touchmove)=\"modalTouchMove($event)\" (touchcancel)=\"modalTouchEnd($event)\"\n (touchend)=\"modalTouchEnd($event)\" (mousemove)=\"modalMouseMove($event)\" (mouseup)=\"modalMouseUp($event)\"\n role=\"dialog\" class=\"nh-modal-holder\" [ngClass]=\"modalHolderClasses\">\n <div #modalBackdrop class=\"nh-modal-backdrop\"></div>\n <div #modal class=\"nh-modal\" [ngClass]=\"modalClasses\" style=\"transform: translateY(100vh);\">\n <div class=\"nh-modal-header\" [ngClass]=\"modalHeaderClasses\">\n <h3>{{ title }}</h3>\n @if (closeable) {\n <button (click)=\"close()\" class=\"close-nh-modal bg-white small font-grey\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path fill=\"black\"\n d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/>\n </svg>\n </button>\n }\n </div>\n <div class=\"nh-modal-body\" [ngClass]=\"modalBodyClasses\">\n @if (isLoading) {\n <nh-loader></nh-loader>\n }\n <div (touchstart)=\"modalTouchStart($event)\" (mousedown)=\"modalSlideStart($event)\" class=\"nh-modal-slider\"></div>\n <ng-template nhModalContent></ng-template>\n </div>\n </div>\n </div>\n", styles: [".nh-modal hr{height:2px;border:0;margin:10px 0;padding:0;background-color:#bababa;display:block;width:calc(100% + 40px);border-radius:2px}.nh-modal-body{padding:0;margin:0;background-color:transparent}.nh-modal-body.p-0,.nh-modal-body .container-text{padding:0!important}.nh-modal-holder{overflow:auto;position:fixed;top:0;left:0;width:100%;height:100%;z-index:250000;display:grid;place-items:center;overscroll-behavior:none}@media all and (max-width:768px){.nh-modal-holder{max-width:calc(100% - 30px);margin:0 auto}}.nh-modal-backdrop{content:\" \";background-color:#000000d9;opacity:0;transition:opacity .5s;will-change:opacity;position:fixed;left:0;top:0;width:100%;height:100%}.nh-modal{background-color:var(--color-background-white);border-radius:5px;max-width:95vw;width:600px;position:relative;margin:100px auto}.nh-modal .nh-modal-body{padding:20px;border-top:2px solid #dcdcdc;border-top-left-radius:5px;border-top-right-radius:5px}.nh-modal .nh-modal-body ::ng-deep h1.header{background-color:#255a34;color:#fff;border-radius:15px;text-align:center}.nh-modal.large{width:1000px!important}.nh-modal.large .nh-modal-header{margin-top:-72px}.nh-modal>strong{text-align:center;font-size:1.5em}.nh-modal button{font-size:1em}.nh-modal .nh-modal-header{margin-top:-67px}.nh-modal .nh-modal-header h3{margin-bottom:0;padding:10px 20px;border-top-left-radius:5px;border-top-right-radius:5px;color:#fff;min-height:48px}.nh-modal .large .nh-modal-header h3{min-height:51px}.nh-modal .close-nh-modal{position:absolute;right:6px;top:-45px;font-size:13px;background-color:transparent;height:40px;border:2px solid #255A34;padding:0 15px}.nh-modal .close-nh-modal svg{height:10px;fill:#000}.nh-modal .nh-modal-slider{display:none}@media all and (max-width:768px){.nh-modal{max-width:calc(100vw - 30px)!important;margin:0 auto}}@media all and (max-width:768px){.nh-modal .large-padding{padding-left:3em;padding-right:3em}}@media only screen and (max-width:920px){.nh-modal-holder{place-items:end}.nh-modal-holder .nh-modal{border-bottom-left-radius:0;border-bottom-right-radius:0;max-width:100vw;transition:transform .5s}.nh-modal-holder .nh-modal-body{padding:0 20px 15px}.nh-modal-holder .nh-modal-slider{width:100%;display:block}.nh-modal-holder.slidable .nh-modal-slider{cursor:pointer}.nh-modal-holder.slidable .nh-modal-slider:before{content:\" \";width:40px;border-radius:2px;display:block;margin:0 auto;height:3px;background-color:#bababa}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NhLoaderComponent, selector: "nh-loader", inputs: ["dark", "hasBackdrop", "backdropTransparent", "containerClass"] }, { kind: "directive", type: NhModalContentDirective, selector: "[nhModalContent]" }] }); }
|
|
4767
5722
|
}
|
|
4768
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5723
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponent, decorators: [{
|
|
4769
5724
|
type: Component,
|
|
4770
5725
|
args: [{ selector: 'nh-modal', standalone: false, template: "<div #modalHolder (touchmove)=\"modalTouchMove($event)\" (touchcancel)=\"modalTouchEnd($event)\"\n (touchend)=\"modalTouchEnd($event)\" (mousemove)=\"modalMouseMove($event)\" (mouseup)=\"modalMouseUp($event)\"\n role=\"dialog\" class=\"nh-modal-holder\" [ngClass]=\"modalHolderClasses\">\n <div #modalBackdrop class=\"nh-modal-backdrop\"></div>\n <div #modal class=\"nh-modal\" [ngClass]=\"modalClasses\" style=\"transform: translateY(100vh);\">\n <div class=\"nh-modal-header\" [ngClass]=\"modalHeaderClasses\">\n <h3>{{ title }}</h3>\n @if (closeable) {\n <button (click)=\"close()\" class=\"close-nh-modal bg-white small font-grey\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path fill=\"black\"\n d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/>\n </svg>\n </button>\n }\n </div>\n <div class=\"nh-modal-body\" [ngClass]=\"modalBodyClasses\">\n @if (isLoading) {\n <nh-loader></nh-loader>\n }\n <div (touchstart)=\"modalTouchStart($event)\" (mousedown)=\"modalSlideStart($event)\" class=\"nh-modal-slider\"></div>\n <ng-template nhModalContent></ng-template>\n </div>\n </div>\n </div>\n", styles: [".nh-modal hr{height:2px;border:0;margin:10px 0;padding:0;background-color:#bababa;display:block;width:calc(100% + 40px);border-radius:2px}.nh-modal-body{padding:0;margin:0;background-color:transparent}.nh-modal-body.p-0,.nh-modal-body .container-text{padding:0!important}.nh-modal-holder{overflow:auto;position:fixed;top:0;left:0;width:100%;height:100%;z-index:250000;display:grid;place-items:center;overscroll-behavior:none}@media all and (max-width:768px){.nh-modal-holder{max-width:calc(100% - 30px);margin:0 auto}}.nh-modal-backdrop{content:\" \";background-color:#000000d9;opacity:0;transition:opacity .5s;will-change:opacity;position:fixed;left:0;top:0;width:100%;height:100%}.nh-modal{background-color:var(--color-background-white);border-radius:5px;max-width:95vw;width:600px;position:relative;margin:100px auto}.nh-modal .nh-modal-body{padding:20px;border-top:2px solid #dcdcdc;border-top-left-radius:5px;border-top-right-radius:5px}.nh-modal .nh-modal-body ::ng-deep h1.header{background-color:#255a34;color:#fff;border-radius:15px;text-align:center}.nh-modal.large{width:1000px!important}.nh-modal.large .nh-modal-header{margin-top:-72px}.nh-modal>strong{text-align:center;font-size:1.5em}.nh-modal button{font-size:1em}.nh-modal .nh-modal-header{margin-top:-67px}.nh-modal .nh-modal-header h3{margin-bottom:0;padding:10px 20px;border-top-left-radius:5px;border-top-right-radius:5px;color:#fff;min-height:48px}.nh-modal .large .nh-modal-header h3{min-height:51px}.nh-modal .close-nh-modal{position:absolute;right:6px;top:-45px;font-size:13px;background-color:transparent;height:40px;border:2px solid #255A34;padding:0 15px}.nh-modal .close-nh-modal svg{height:10px;fill:#000}.nh-modal .nh-modal-slider{display:none}@media all and (max-width:768px){.nh-modal{max-width:calc(100vw - 30px)!important;margin:0 auto}}@media all and (max-width:768px){.nh-modal .large-padding{padding-left:3em;padding-right:3em}}@media only screen and (max-width:920px){.nh-modal-holder{place-items:end}.nh-modal-holder .nh-modal{border-bottom-left-radius:0;border-bottom-right-radius:0;max-width:100vw;transition:transform .5s}.nh-modal-holder .nh-modal-body{padding:0 20px 15px}.nh-modal-holder .nh-modal-slider{width:100%;display:block}.nh-modal-holder.slidable .nh-modal-slider{cursor:pointer}.nh-modal-holder.slidable .nh-modal-slider:before{content:\" \";width:40px;border-radius:2px;display:block;margin:0 auto;height:3px;background-color:#bababa}}\n"] }]
|
|
4771
5726
|
}], propDecorators: { modalContent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NhModalContentDirective), { isSignal: true }] }], modalHolder: [{ type: i0.ViewChild, args: ['modalHolder', { isSignal: true }] }], modalBackdrop: [{ type: i0.ViewChild, args: ['modalBackdrop', { isSignal: true }] }], modal: [{ type: i0.ViewChild, args: ['modal', { isSignal: true }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
@@ -4817,10 +5772,10 @@ class NhModalConfirmComponent {
|
|
|
4817
5772
|
}
|
|
4818
5773
|
}
|
|
4819
5774
|
}
|
|
4820
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4821
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
5775
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5776
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhModalConfirmComponent, isStandalone: false, selector: "nh-confirm-modal", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, btnConfirmText: { classPropertyName: "btnConfirmText", publicName: "btnConfirmText", isSignal: false, isRequired: false, transformFunction: null }, btnCancelText: { classPropertyName: "btnCancelText", publicName: "btnCancelText", isSignal: false, isRequired: false, transformFunction: null }, modalClass: { classPropertyName: "modalClass", publicName: "modalClass", isSignal: false, isRequired: false, transformFunction: null }, btnConfirmDisabled: { classPropertyName: "btnConfirmDisabled", publicName: "btnConfirmDisabled", isSignal: false, isRequired: false, transformFunction: null }, btnCancelDisabled: { classPropertyName: "btnCancelDisabled", publicName: "btnCancelDisabled", isSignal: false, isRequired: false, transformFunction: null }, allBtnsDisabled: { classPropertyName: "allBtnsDisabled", publicName: "allBtnsDisabled", isSignal: false, isRequired: false, transformFunction: null }, showLoader: { classPropertyName: "showLoader", publicName: "showLoader", isSignal: false, isRequired: false, transformFunction: null }, errorResult: { classPropertyName: "errorResult", publicName: "errorResult", isSignal: false, isRequired: false, transformFunction: null }, onConfirm: { classPropertyName: "onConfirm", publicName: "onConfirm", isSignal: false, isRequired: false, transformFunction: null }, onCancel: { classPropertyName: "onCancel", publicName: "onCancel", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { confirmed: "confirmed" }, host: { listeners: { "document:keyup": "onKeyUp($event)" } }, ngImport: i0, template: "<div class=\"{{modalClass}}\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [innerHTML]=\"message\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n @if (errorResult && !errorResult?.isSuccess) {\n <div class=\"alert alert-danger\" role=\"alert\">\n <b>Er is een fout opgetreden</b>\n <ul>\n @for (resultItem of errorResult.items; track resultItem) {\n @for (resultItemErrorMsg of resultItem.errorMessages; track resultItemErrorMsg) {\n <li>{{ resultItemErrorMsg }}</li>\n }\n }\n </ul>\n </div>\n }\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <button [disabled]=\"allBtnsDisabled || btnCancelDisabled\" class=\"btn btn-danger me-2\" (click)=\"cancel()\">{{ btnCancelText | translate }}</button>\n <button [disabled]=\"allBtnsDisabled || btnConfirmDisabled\" class=\"btn btn-success\" (click)=\"confirm()\">{{ btnConfirmText | translate }}</button>\n </div>\n </div>\n</div>\n", styles: [".icon-bg svg{display:inline-block;width:1.5em}\n"], dependencies: [{ kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
4822
5777
|
}
|
|
4823
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5778
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalConfirmComponent, decorators: [{
|
|
4824
5779
|
type: Component,
|
|
4825
5780
|
args: [{ selector: 'nh-confirm-modal', standalone: false, template: "<div class=\"{{modalClass}}\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [innerHTML]=\"message\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n @if (errorResult && !errorResult?.isSuccess) {\n <div class=\"alert alert-danger\" role=\"alert\">\n <b>Er is een fout opgetreden</b>\n <ul>\n @for (resultItem of errorResult.items; track resultItem) {\n @for (resultItemErrorMsg of resultItem.errorMessages; track resultItemErrorMsg) {\n <li>{{ resultItemErrorMsg }}</li>\n }\n }\n </ul>\n </div>\n }\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <button [disabled]=\"allBtnsDisabled || btnCancelDisabled\" class=\"btn btn-danger me-2\" (click)=\"cancel()\">{{ btnCancelText | translate }}</button>\n <button [disabled]=\"allBtnsDisabled || btnConfirmDisabled\" class=\"btn btn-success\" (click)=\"confirm()\">{{ btnConfirmText | translate }}</button>\n </div>\n </div>\n</div>\n", styles: [".icon-bg svg{display:inline-block;width:1.5em}\n"] }]
|
|
4826
5781
|
}], propDecorators: { message: [{
|
|
@@ -4976,10 +5931,10 @@ class NhModalService {
|
|
|
4976
5931
|
const latestModalRef = this.modalRefs[this.modalRefs.length - 1];
|
|
4977
5932
|
this.close(latestModalRef);
|
|
4978
5933
|
}
|
|
4979
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4980
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
5934
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5935
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalService, providedIn: 'root' }); }
|
|
4981
5936
|
}
|
|
4982
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5937
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalService, decorators: [{
|
|
4983
5938
|
type: Injectable,
|
|
4984
5939
|
args: [{
|
|
4985
5940
|
providedIn: 'root'
|
|
@@ -5039,10 +5994,10 @@ class NhTaskResultFormValidationService {
|
|
|
5039
5994
|
}
|
|
5040
5995
|
return formControl;
|
|
5041
5996
|
}
|
|
5042
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5043
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
5997
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTaskResultFormValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5998
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTaskResultFormValidationService }); }
|
|
5044
5999
|
}
|
|
5045
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTaskResultFormValidationService, decorators: [{
|
|
5046
6001
|
type: Injectable
|
|
5047
6002
|
}] });
|
|
5048
6003
|
|
|
@@ -5085,10 +6040,10 @@ class NhHeadService {
|
|
|
5085
6040
|
addElementToHead(element) {
|
|
5086
6041
|
this.renderer.appendChild(this.document.head, element);
|
|
5087
6042
|
}
|
|
5088
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5089
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6043
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhHeadService, deps: [{ token: DOCUMENT }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6044
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhHeadService, providedIn: 'root' }); }
|
|
5090
6045
|
}
|
|
5091
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6046
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhHeadService, decorators: [{
|
|
5092
6047
|
type: Injectable,
|
|
5093
6048
|
args: [{
|
|
5094
6049
|
providedIn: 'root'
|
|
@@ -5114,10 +6069,10 @@ class NhInternetConnectionService {
|
|
|
5114
6069
|
});
|
|
5115
6070
|
});
|
|
5116
6071
|
}
|
|
5117
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5118
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6072
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhInternetConnectionService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6073
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhInternetConnectionService }); }
|
|
5119
6074
|
}
|
|
5120
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6075
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhInternetConnectionService, decorators: [{
|
|
5121
6076
|
type: Injectable
|
|
5122
6077
|
}], ctorParameters: () => [{ type: i0.NgZone }] });
|
|
5123
6078
|
|
|
@@ -5136,10 +6091,10 @@ class NhServerService {
|
|
|
5136
6091
|
&& this.transferState.hasKey(NhServerService.DID_INIT_BY_SERVER_STATE_KEY)
|
|
5137
6092
|
&& this.transferState.get(NhServerService.DID_INIT_BY_SERVER_STATE_KEY, false);
|
|
5138
6093
|
}
|
|
5139
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5140
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6094
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerService, deps: [{ token: PLATFORM_ID }, { token: NhCommonModuleConfig }, { token: i0.TransferState }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6095
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerService, providedIn: 'root' }); }
|
|
5141
6096
|
}
|
|
5142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6097
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerService, decorators: [{
|
|
5143
6098
|
type: Injectable,
|
|
5144
6099
|
args: [{
|
|
5145
6100
|
providedIn: 'root',
|
|
@@ -5187,10 +6142,10 @@ class NhServerSideFormValidationService {
|
|
|
5187
6142
|
}
|
|
5188
6143
|
}
|
|
5189
6144
|
}
|
|
5190
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5191
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6145
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerSideFormValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6146
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerSideFormValidationService }); }
|
|
5192
6147
|
}
|
|
5193
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerSideFormValidationService, decorators: [{
|
|
5194
6149
|
type: Injectable
|
|
5195
6150
|
}] });
|
|
5196
6151
|
class AspMvcFormServerSideFormValidator {
|
|
@@ -5403,7 +6358,8 @@ class NhUserNotificationService {
|
|
|
5403
6358
|
}
|
|
5404
6359
|
}
|
|
5405
6360
|
async doWork() {
|
|
5406
|
-
|
|
6361
|
+
// Notifications belong to a user; without a session every poll would only answer 401.
|
|
6362
|
+
if (!this.isRunning() || !this.authService.isAuthenticated()) {
|
|
5407
6363
|
return;
|
|
5408
6364
|
}
|
|
5409
6365
|
await this.loadState();
|
|
@@ -5415,7 +6371,10 @@ class NhUserNotificationService {
|
|
|
5415
6371
|
this.userNotificationState.overview = await this.getOverview().lastValueFrom();
|
|
5416
6372
|
}
|
|
5417
6373
|
catch (error) {
|
|
5418
|
-
|
|
6374
|
+
// The session rejection interceptor handles a 401; it is not a notification failure.
|
|
6375
|
+
if (!(error instanceof HttpErrorResponse && error.status === 401)) {
|
|
6376
|
+
console.error('Error fetching user notification overview:', error);
|
|
6377
|
+
}
|
|
5419
6378
|
}
|
|
5420
6379
|
}
|
|
5421
6380
|
getOverview() {
|
|
@@ -5437,10 +6396,10 @@ class NhUserNotificationService {
|
|
|
5437
6396
|
archiveAll() {
|
|
5438
6397
|
return this.apiService.put(`${this.baseUrl}/ArchiveAll`, {});
|
|
5439
6398
|
}
|
|
5440
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5441
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6399
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationService, deps: [{ token: NhAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6400
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationService, providedIn: 'root' }); }
|
|
5442
6401
|
}
|
|
5443
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6402
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationService, decorators: [{
|
|
5444
6403
|
type: Injectable,
|
|
5445
6404
|
args: [{
|
|
5446
6405
|
providedIn: 'root',
|
|
@@ -5475,10 +6434,10 @@ class NhBackgroundOperationService {
|
|
|
5475
6434
|
joinUrl(base, suffix) {
|
|
5476
6435
|
return `${base.replace(/\/$/, '')}/${suffix.replace(/^\//, '')}`;
|
|
5477
6436
|
}
|
|
5478
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5479
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6437
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6438
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationService, providedIn: 'root' }); }
|
|
5480
6439
|
}
|
|
5481
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6440
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationService, decorators: [{
|
|
5482
6441
|
type: Injectable,
|
|
5483
6442
|
args: [{ providedIn: 'root' }]
|
|
5484
6443
|
}] });
|
|
@@ -5518,10 +6477,10 @@ class NhBackgroundOperationAdministrationService {
|
|
|
5518
6477
|
joinUrl(base, suffix) {
|
|
5519
6478
|
return `${base.replace(/\/$/, '')}/${suffix.replace(/^\//, '')}`;
|
|
5520
6479
|
}
|
|
5521
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5522
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6480
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationAdministrationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6481
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationAdministrationService, providedIn: 'root' }); }
|
|
5523
6482
|
}
|
|
5524
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6483
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationAdministrationService, decorators: [{
|
|
5525
6484
|
type: Injectable,
|
|
5526
6485
|
args: [{ providedIn: 'root' }]
|
|
5527
6486
|
}] });
|
|
@@ -5686,10 +6645,10 @@ class NhBackgroundOperationLiveUpdateService {
|
|
|
5686
6645
|
const authorization = this.auth.getAuthorization();
|
|
5687
6646
|
return `${authorization?.user?.id ?? 'anonymous'}:${authorization?.activeDivision?.id ?? 'global'}`;
|
|
5688
6647
|
}
|
|
5689
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5690
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6648
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }, { token: NhAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6649
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, providedIn: 'root' }); }
|
|
5691
6650
|
}
|
|
5692
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6651
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, decorators: [{
|
|
5693
6652
|
type: Injectable,
|
|
5694
6653
|
args: [{ providedIn: 'root' }]
|
|
5695
6654
|
}], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }, { type: NhAppService }] });
|
|
@@ -5955,10 +6914,10 @@ class NhBackgroundOperationStore {
|
|
|
5955
6914
|
operations.delete(operationId);
|
|
5956
6915
|
this.operationsSubject.next(operations);
|
|
5957
6916
|
}
|
|
5958
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5959
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6917
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationStore, deps: [{ token: NhBackgroundOperationService }, { token: NhBackgroundOperationLiveUpdateService }, { token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6918
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationStore, providedIn: 'root' }); }
|
|
5960
6919
|
}
|
|
5961
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6920
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationStore, decorators: [{
|
|
5962
6921
|
type: Injectable,
|
|
5963
6922
|
args: [{ providedIn: 'root' }]
|
|
5964
6923
|
}], ctorParameters: () => [{ type: NhBackgroundOperationService }, { type: NhBackgroundOperationLiveUpdateService }, { type: NhCommonModuleConfig }, { type: NhAuthService }] });
|
|
@@ -6103,10 +7062,10 @@ class NhContextMenuService {
|
|
|
6103
7062
|
}
|
|
6104
7063
|
this.renderer.appendChild(contextMenuElement, menuItemElement);
|
|
6105
7064
|
}
|
|
6106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6107
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
7065
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhContextMenuService, deps: [{ token: PLATFORM_ID }, { token: NhAppService }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7066
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhContextMenuService, providedIn: 'root' }); }
|
|
6108
7067
|
}
|
|
6109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7068
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhContextMenuService, decorators: [{
|
|
6110
7069
|
type: Injectable,
|
|
6111
7070
|
args: [{
|
|
6112
7071
|
providedIn: 'root'
|
|
@@ -6235,10 +7194,10 @@ class NhUrlEncodePipe {
|
|
|
6235
7194
|
}
|
|
6236
7195
|
return encodeURIComponent(value ?? '');
|
|
6237
7196
|
}
|
|
6238
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6239
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7197
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUrlEncodePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7198
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhUrlEncodePipe, isStandalone: false, name: "nhUrlEncode" }); }
|
|
6240
7199
|
}
|
|
6241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7200
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUrlEncodePipe, decorators: [{
|
|
6242
7201
|
type: Pipe,
|
|
6243
7202
|
args: [{
|
|
6244
7203
|
name: 'nhUrlEncode',
|
|
@@ -6255,10 +7214,10 @@ class NhDatePipe {
|
|
|
6255
7214
|
const datePipe = new DatePipe(this.moduleConfig.language);
|
|
6256
7215
|
return datePipe.transform(value, pattern);
|
|
6257
7216
|
}
|
|
6258
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6259
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7217
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDatePipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7218
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhDatePipe, isStandalone: false, name: "nhDate", pure: false }); }
|
|
6260
7219
|
}
|
|
6261
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7220
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDatePipe, decorators: [{
|
|
6262
7221
|
type: Pipe,
|
|
6263
7222
|
args: [{
|
|
6264
7223
|
name: 'nhDate',
|
|
@@ -6275,10 +7234,10 @@ class NhDateTimePipe {
|
|
|
6275
7234
|
const datePipe = new NhDatePipe(this.moduleConfig);
|
|
6276
7235
|
return datePipe.transform(value, pattern);
|
|
6277
7236
|
}
|
|
6278
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6279
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateTimePipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7238
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhDateTimePipe, isStandalone: false, name: "nhDateTime", pure: false }); }
|
|
6280
7239
|
}
|
|
6281
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateTimePipe, decorators: [{
|
|
6282
7241
|
type: Pipe,
|
|
6283
7242
|
args: [{
|
|
6284
7243
|
name: 'nhDateTime',
|
|
@@ -6297,10 +7256,10 @@ class NhDateUtcPipe {
|
|
|
6297
7256
|
const datePipe = new DatePipe(this.moduleConfig.language);
|
|
6298
7257
|
return datePipe.transform(value, pattern);
|
|
6299
7258
|
}
|
|
6300
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6301
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7259
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateUtcPipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7260
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhDateUtcPipe, isStandalone: false, name: "nhDateUtc", pure: false }); }
|
|
6302
7261
|
}
|
|
6303
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateUtcPipe, decorators: [{
|
|
6304
7263
|
type: Pipe,
|
|
6305
7264
|
args: [{
|
|
6306
7265
|
name: 'nhDateUtc',
|
|
@@ -6316,10 +7275,10 @@ class IsOnePermissionGrantedPipe {
|
|
|
6316
7275
|
transform(permissions) {
|
|
6317
7276
|
return this.authService.isOnePermissionGranted(permissions);
|
|
6318
7277
|
}
|
|
6319
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6320
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7278
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOnePermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7279
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOnePermissionGrantedPipe, isStandalone: false, name: "isOnePermissionGranted" }); }
|
|
6321
7280
|
}
|
|
6322
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7281
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOnePermissionGrantedPipe, decorators: [{
|
|
6323
7282
|
type: Pipe,
|
|
6324
7283
|
args: [{
|
|
6325
7284
|
name: 'isOnePermissionGranted',
|
|
@@ -6333,10 +7292,10 @@ class IsAllPermissionsGrantedPipe {
|
|
|
6333
7292
|
transform(permissions) {
|
|
6334
7293
|
return this.authService.isAllPermissionsGranted(permissions);
|
|
6335
7294
|
}
|
|
6336
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6337
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7295
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAllPermissionsGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7296
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsAllPermissionsGrantedPipe, isStandalone: false, name: "isAllPermissionsGranted" }); }
|
|
6338
7297
|
}
|
|
6339
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7298
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAllPermissionsGrantedPipe, decorators: [{
|
|
6340
7299
|
type: Pipe,
|
|
6341
7300
|
args: [{
|
|
6342
7301
|
name: "isAllPermissionsGranted",
|
|
@@ -6350,10 +7309,10 @@ class IsGrantedRolePipe {
|
|
|
6350
7309
|
transform(roles) {
|
|
6351
7310
|
return this.authService.isGrantedRole(roles);
|
|
6352
7311
|
}
|
|
6353
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6354
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7312
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsGrantedRolePipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7313
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsGrantedRolePipe, isStandalone: false, name: "isGrantedRole" }); }
|
|
6355
7314
|
}
|
|
6356
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsGrantedRolePipe, decorators: [{
|
|
6357
7316
|
type: Pipe,
|
|
6358
7317
|
args: [{
|
|
6359
7318
|
name: 'isGrantedRole',
|
|
@@ -6367,10 +7326,10 @@ class IsAuthenticatedPipe {
|
|
|
6367
7326
|
transform() {
|
|
6368
7327
|
return this.authService.isAuthenticated();
|
|
6369
7328
|
}
|
|
6370
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6371
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7329
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAuthenticatedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7330
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsAuthenticatedPipe, isStandalone: false, name: "isAuthenticated" }); }
|
|
6372
7331
|
}
|
|
6373
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7332
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAuthenticatedPipe, decorators: [{
|
|
6374
7333
|
type: Pipe,
|
|
6375
7334
|
args: [{
|
|
6376
7335
|
name: 'isAuthenticated',
|
|
@@ -6384,10 +7343,10 @@ class IsClaimGrantedPipe {
|
|
|
6384
7343
|
transform(claim) {
|
|
6385
7344
|
return this.authService.isClaimGranted(claim);
|
|
6386
7345
|
}
|
|
6387
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6388
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsClaimGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7347
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsClaimGrantedPipe, isStandalone: false, name: "isClaimGranted" }); }
|
|
6389
7348
|
}
|
|
6390
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsClaimGrantedPipe, decorators: [{
|
|
6391
7350
|
type: Pipe,
|
|
6392
7351
|
args: [{
|
|
6393
7352
|
name: 'isClaimGranted',
|
|
@@ -6401,10 +7360,10 @@ class IsOneClaimGrantedPipe {
|
|
|
6401
7360
|
transform(claims) {
|
|
6402
7361
|
return this.authService.isOneClaimGranted(claims);
|
|
6403
7362
|
}
|
|
6404
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6405
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7363
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneClaimGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7364
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneClaimGrantedPipe, isStandalone: false, name: "isOneClaimGranted" }); }
|
|
6406
7365
|
}
|
|
6407
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7366
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneClaimGrantedPipe, decorators: [{
|
|
6408
7367
|
type: Pipe,
|
|
6409
7368
|
args: [{
|
|
6410
7369
|
name: 'isOneClaimGranted',
|
|
@@ -6418,10 +7377,10 @@ class IsOneRoleGrantedPipe {
|
|
|
6418
7377
|
transform(roles) {
|
|
6419
7378
|
return this.authService.isOneRoleGranted(roles);
|
|
6420
7379
|
}
|
|
6421
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6422
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7380
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7381
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneRoleGrantedPipe, isStandalone: false, name: "isOneRoleGranted" }); }
|
|
6423
7382
|
}
|
|
6424
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7383
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneRoleGrantedPipe, decorators: [{
|
|
6425
7384
|
type: Pipe,
|
|
6426
7385
|
args: [{
|
|
6427
7386
|
name: 'isOneRoleGranted',
|
|
@@ -6435,10 +7394,10 @@ class IsOneDivisionPermissionGrantedPipe {
|
|
|
6435
7394
|
transform(divisionId, permissions) {
|
|
6436
7395
|
return this.authService.isOneDivisionPermissionGranted(divisionId, permissions);
|
|
6437
7396
|
}
|
|
6438
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6439
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7397
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7398
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, isStandalone: false, name: "isOneDivisionPermissionGranted" }); }
|
|
6440
7399
|
}
|
|
6441
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, decorators: [{
|
|
6442
7401
|
type: Pipe,
|
|
6443
7402
|
args: [{
|
|
6444
7403
|
name: 'isOneDivisionPermissionGranted',
|
|
@@ -6452,10 +7411,10 @@ class IsOneDivisionRoleGrantedPipe {
|
|
|
6452
7411
|
transform(divisionId, roles) {
|
|
6453
7412
|
return this.authService.isOneDivisionRoleGranted(divisionId, roles);
|
|
6454
7413
|
}
|
|
6455
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6456
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7414
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7415
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, isStandalone: false, name: "isOneDivisionRoleGranted" }); }
|
|
6457
7416
|
}
|
|
6458
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7417
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, decorators: [{
|
|
6459
7418
|
type: Pipe,
|
|
6460
7419
|
args: [{
|
|
6461
7420
|
name: 'isOneDivisionRoleGranted',
|
|
@@ -6469,10 +7428,10 @@ class IsOneActiveDivisionPermissionGrantedPipe {
|
|
|
6469
7428
|
transform(permissions) {
|
|
6470
7429
|
return this.authService.isOneActiveDivisionPermissionGranted(permissions);
|
|
6471
7430
|
}
|
|
6472
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6473
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7431
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7432
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, isStandalone: false, name: "isOneActiveDivisionPermissionGranted" }); }
|
|
6474
7433
|
}
|
|
6475
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, decorators: [{
|
|
6476
7435
|
type: Pipe,
|
|
6477
7436
|
args: [{
|
|
6478
7437
|
name: 'isOneActiveDivisionPermissionGranted',
|
|
@@ -6486,10 +7445,10 @@ class IsOneActiveDivisionRoleGrantedPipe {
|
|
|
6486
7445
|
transform(roles) {
|
|
6487
7446
|
return this.authService.isOneActiveDivisionRoleGranted(roles);
|
|
6488
7447
|
}
|
|
6489
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6490
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7448
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7449
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, isStandalone: false, name: "isOneActiveDivisionRoleGranted" }); }
|
|
6491
7450
|
}
|
|
6492
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7451
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, decorators: [{
|
|
6493
7452
|
type: Pipe,
|
|
6494
7453
|
args: [{
|
|
6495
7454
|
name: 'isOneActiveDivisionRoleGranted',
|
|
@@ -6509,10 +7468,10 @@ class NhBooleanToStringPipe {
|
|
|
6509
7468
|
? this.translateService.instant('Yes')
|
|
6510
7469
|
: this.translateService.instant('No');
|
|
6511
7470
|
}
|
|
6512
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6513
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7471
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBooleanToStringPipe, deps: [{ token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7472
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhBooleanToStringPipe, isStandalone: false, name: "nhBooleanToString" }); }
|
|
6514
7473
|
}
|
|
6515
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7474
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBooleanToStringPipe, decorators: [{
|
|
6516
7475
|
type: Pipe,
|
|
6517
7476
|
args: [{
|
|
6518
7477
|
name: 'nhBooleanToString',
|
|
@@ -6527,10 +7486,10 @@ class SafeHtmlPipe {
|
|
|
6527
7486
|
transform(value) {
|
|
6528
7487
|
return this.sanitized.bypassSecurityTrustHtml(value);
|
|
6529
7488
|
}
|
|
6530
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6531
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7489
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7490
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: SafeHtmlPipe, isStandalone: false, name: "safeHtml" }); }
|
|
6532
7491
|
}
|
|
6533
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7492
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeHtmlPipe, decorators: [{
|
|
6534
7493
|
type: Pipe,
|
|
6535
7494
|
args: [{
|
|
6536
7495
|
name: 'safeHtml',
|
|
@@ -6544,10 +7503,10 @@ class SafeUrlPipe {
|
|
|
6544
7503
|
transform(value) {
|
|
6545
7504
|
return this.sanitizer.bypassSecurityTrustUrl(value);
|
|
6546
7505
|
}
|
|
6547
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6548
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7506
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7507
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: SafeUrlPipe, isStandalone: false, name: "safeUrl" }); }
|
|
6549
7508
|
}
|
|
6550
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7509
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeUrlPipe, decorators: [{
|
|
6551
7510
|
type: Pipe,
|
|
6552
7511
|
args: [{
|
|
6553
7512
|
name: 'safeUrl',
|
|
@@ -6561,10 +7520,10 @@ class SafeResourceUrlPipe {
|
|
|
6561
7520
|
transform(value) {
|
|
6562
7521
|
return this.sanitizer.bypassSecurityTrustResourceUrl(value);
|
|
6563
7522
|
}
|
|
6564
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6565
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
7523
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeResourceUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
7524
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: SafeResourceUrlPipe, isStandalone: false, name: "safeResourceUrl" }); }
|
|
6566
7525
|
}
|
|
6567
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7526
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeResourceUrlPipe, decorators: [{
|
|
6568
7527
|
type: Pipe,
|
|
6569
7528
|
args: [{
|
|
6570
7529
|
name: 'safeResourceUrl',
|
|
@@ -6586,10 +7545,10 @@ class NhToHeadDirective {
|
|
|
6586
7545
|
ngOnDestroy() {
|
|
6587
7546
|
this._renderer.removeChild(this._document.head, this._elementRef.nativeElement);
|
|
6588
7547
|
}
|
|
6589
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6590
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
7548
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhToHeadDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
7549
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhToHeadDirective, isStandalone: false, selector: "[nhToHead]", exportAs: ["nhToHead"], ngImport: i0 }); }
|
|
6591
7550
|
}
|
|
6592
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhToHeadDirective, decorators: [{
|
|
6593
7552
|
type: Directive,
|
|
6594
7553
|
args: [{
|
|
6595
7554
|
selector: `[nhToHead]`,
|
|
@@ -6636,10 +7595,10 @@ class NhDebounceDirective {
|
|
|
6636
7595
|
this.ngUnsubscribe.next();
|
|
6637
7596
|
this.ngUnsubscribe.complete();
|
|
6638
7597
|
}
|
|
6639
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6640
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
7598
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDebounceDirective, deps: [{ token: i1$4.NgControl }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
7599
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: NhDebounceDirective, isStandalone: false, selector: "[ngModel][nhDebounce]", inputs: { debounceTime: { classPropertyName: "debounceTime", publicName: "nhDebounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDebounce: "onDebounce", preDebounce: "preDebounce" }, ngImport: i0 }); }
|
|
6641
7600
|
}
|
|
6642
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7601
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDebounceDirective, decorators: [{
|
|
6643
7602
|
type: Directive,
|
|
6644
7603
|
args: [{
|
|
6645
7604
|
selector: '[ngModel][nhDebounce]',
|
|
@@ -6664,10 +7623,10 @@ class NhButtonDebounceDirective {
|
|
|
6664
7623
|
this.clicks.complete();
|
|
6665
7624
|
this.subscription?.unsubscribe();
|
|
6666
7625
|
}
|
|
6667
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6668
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
7626
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhButtonDebounceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
7627
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: NhButtonDebounceDirective, isStandalone: false, selector: "[nhButtonDebounce]", inputs: { debounceTime: { classPropertyName: "debounceTime", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDebounce: "onDebounce" }, host: { listeners: { "click": "clickEvent($event)" } }, ngImport: i0 }); }
|
|
6669
7628
|
}
|
|
6670
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7629
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhButtonDebounceDirective, decorators: [{
|
|
6671
7630
|
type: Directive,
|
|
6672
7631
|
args: [{
|
|
6673
7632
|
selector: '[nhButtonDebounce]',
|
|
@@ -6723,10 +7682,10 @@ class NhRouterLinkDirective {
|
|
|
6723
7682
|
}
|
|
6724
7683
|
return this.hostRouterLink.onClick(button, ctrlKey, shiftKey, altKey, metaKey);
|
|
6725
7684
|
}
|
|
6726
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6727
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
7685
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterLinkDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1$1.RouterLink }, { token: i1$1.Router }, { token: NhRouterService }, { token: i2.TranslateService }, { token: NH_ROUTER_LANGUAGE_CHANGE_METHOD, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
7686
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhRouterLinkDirective, isStandalone: false, selector: "[nhRouterLink]", inputs: { nhRouterLink: "nhRouterLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" } }, exportAs: ["nhRouterLink"], hostDirectives: [{ directive: i1$1.RouterLink, inputs: ["target", "target", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "info", "info", "relativeTo", "relativeTo", "preserveFragment", "preserveFragment", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl"] }], ngImport: i0 }); }
|
|
6728
7687
|
}
|
|
6729
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7688
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterLinkDirective, decorators: [{
|
|
6730
7689
|
type: Directive,
|
|
6731
7690
|
args: [{
|
|
6732
7691
|
selector: `[nhRouterLink]`,
|
|
@@ -6783,10 +7742,10 @@ class NhJsonLdComponent {
|
|
|
6783
7742
|
const html = `<script type="application/ld+json">${json}</script>`;
|
|
6784
7743
|
return this._sanitizer.bypassSecurityTrustHtml(html);
|
|
6785
7744
|
}
|
|
6786
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6787
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
7745
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdComponent, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7746
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhJsonLdComponent, isStandalone: false, selector: "nh-json-ld", inputs: { json: "json" }, host: { properties: { "innerHTML": "this._jsonLD" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6788
7747
|
}
|
|
6789
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7748
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdComponent, decorators: [{
|
|
6790
7749
|
type: Component,
|
|
6791
7750
|
args: [{
|
|
6792
7751
|
selector: 'nh-json-ld',
|
|
@@ -6808,10 +7767,10 @@ class NhModalLoadingComponent {
|
|
|
6808
7767
|
setModalComponentRef(ref) {
|
|
6809
7768
|
this.modalComponentRef = ref;
|
|
6810
7769
|
}
|
|
6811
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6812
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.
|
|
7770
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7771
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhModalLoadingComponent, isStandalone: false, selector: "nh-loading-modal", inputs: { information: { classPropertyName: "information", publicName: "information", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"grid center\">\n <nh-loader [hasBackdrop]=\"false\"></nh-loader>\n {{ information() }}\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: NhLoaderComponent, selector: "nh-loader", inputs: ["dark", "hasBackdrop", "backdropTransparent", "containerClass"] }] }); }
|
|
6813
7772
|
}
|
|
6814
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7773
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalLoadingComponent, decorators: [{
|
|
6815
7774
|
type: Component,
|
|
6816
7775
|
args: [{ selector: 'nh-loading-modal', standalone: false, template: "<div class=\"grid center\">\n <nh-loader [hasBackdrop]=\"false\"></nh-loader>\n {{ information() }}\n</div>\n" }]
|
|
6817
7776
|
}], propDecorators: { information: [{ type: i0.Input, args: [{ isSignal: true, alias: "information", required: false }] }] } });
|
|
@@ -6976,10 +7935,10 @@ class NhPageTypeBaseComponent {
|
|
|
6976
7935
|
appOnDestroy() {
|
|
6977
7936
|
return Promise.resolve();
|
|
6978
7937
|
}
|
|
6979
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6980
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
7938
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7939
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhPageTypeBaseComponent, isStandalone: false, selector: "nh-page-base-component-type", usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
|
|
6981
7940
|
}
|
|
6982
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7941
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageTypeBaseComponent, decorators: [{
|
|
6983
7942
|
type: Component,
|
|
6984
7943
|
args: [{
|
|
6985
7944
|
selector: 'nh-page-base-component-type',
|
|
@@ -6991,10 +7950,10 @@ class NhPageBaseComponent extends NhPageTypeBaseComponent {
|
|
|
6991
7950
|
constructor() {
|
|
6992
7951
|
super(NhAuthService);
|
|
6993
7952
|
}
|
|
6994
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6995
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
7953
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7954
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhPageBaseComponent, isStandalone: false, selector: "nh-page-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
6996
7955
|
}
|
|
6997
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7956
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageBaseComponent, decorators: [{
|
|
6998
7957
|
type: Component,
|
|
6999
7958
|
args: [{
|
|
7000
7959
|
selector: 'nh-page-base-component',
|
|
@@ -7017,10 +7976,10 @@ class NhTypedPageTypeBaseComponent extends NhPageTypeBaseComponent {
|
|
|
7017
7976
|
constructor(authServiceType) {
|
|
7018
7977
|
super(authServiceType);
|
|
7019
7978
|
}
|
|
7020
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7021
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
7979
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7980
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhTypedPageTypeBaseComponent, isStandalone: false, selector: "nh-page-base-component-type-typed", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7022
7981
|
}
|
|
7023
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7982
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageTypeBaseComponent, decorators: [{
|
|
7024
7983
|
type: Component,
|
|
7025
7984
|
args: [{
|
|
7026
7985
|
selector: 'nh-page-base-component-type-typed',
|
|
@@ -7032,10 +7991,10 @@ class NhTypedPageBaseComponent extends NhTypedPageTypeBaseComponent {
|
|
|
7032
7991
|
constructor() {
|
|
7033
7992
|
super(NhAuthService);
|
|
7034
7993
|
}
|
|
7035
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7036
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
7994
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7995
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhTypedPageBaseComponent, isStandalone: false, selector: "nh-page-base-component-typed", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7037
7996
|
}
|
|
7038
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7997
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageBaseComponent, decorators: [{
|
|
7039
7998
|
type: Component,
|
|
7040
7999
|
args: [{
|
|
7041
8000
|
selector: 'nh-page-base-component-typed',
|
|
@@ -7473,10 +8432,10 @@ class NhFormDropDownComponent extends AbstractValueAccessor {
|
|
|
7473
8432
|
}
|
|
7474
8433
|
this.options = newSelectedOptions.concat(this.options);
|
|
7475
8434
|
}
|
|
7476
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7477
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
8435
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormDropDownComponent, deps: [{ token: i2.TranslateService }, { token: i0.ChangeDetectorRef }, { token: NhCommonModuleConfig, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8436
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhFormDropDownComponent, isStandalone: false, selector: "nh-form-dropdown", inputs: { disabled: "disabled", settings: "settings" }, outputs: { onLazyLoadError: "onLazyLoadError", closed: "closed", opened: "opened" }, providers: [MakeProvider(NhFormDropDownComponent)], viewQueries: [{ propertyName: "lazyLoadComponent", first: true, predicate: ["lazyLoadComponent"], descendants: true }, { propertyName: "noLazyLoadComponent", first: true, predicate: ["noLazyLoadComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div>\n @if (settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #lazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"onDropdownOpened()\"\n (ngModelChange)=\"onModelChange($event)\"\n (lazyLoad)=\"lazyLoadData($event)\"\n ></ngx-bootstrap-multiselect>\n }\n @if (!settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #noLazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"opened.emit()\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n ></ngx-bootstrap-multiselect>\n }\n</div>\n", styles: ["app-form-dropdown ngx-bootstrap-multiselect>div.dropdown{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>button.dropdown-toggle{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>div.dropdown-menu{width:100%}\n"], dependencies: [{ kind: "component", type: i2$2.NgxDropdownMultiselectComponent, selector: "ngx-bootstrap-multiselect", inputs: ["options", "settings", "texts", "disabled", "disabledSelection", "searchFunction"], outputs: ["selectionLimitReached", "dropdownClosed", "dropdownOpened", "added", "removed", "lazyLoad", "filter"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
7478
8437
|
}
|
|
7479
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8438
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormDropDownComponent, decorators: [{
|
|
7480
8439
|
type: Component,
|
|
7481
8440
|
args: [{ selector: 'nh-form-dropdown', encapsulation: ViewEncapsulation.None, providers: [MakeProvider(NhFormDropDownComponent)], standalone: false, template: "<div>\n @if (settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #lazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"onDropdownOpened()\"\n (ngModelChange)=\"onModelChange($event)\"\n (lazyLoad)=\"lazyLoadData($event)\"\n ></ngx-bootstrap-multiselect>\n }\n @if (!settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #noLazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"opened.emit()\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n ></ngx-bootstrap-multiselect>\n }\n</div>\n", styles: ["app-form-dropdown ngx-bootstrap-multiselect>div.dropdown{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>button.dropdown-toggle{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>div.dropdown-menu{width:100%}\n"] }]
|
|
7482
8441
|
}], ctorParameters: () => [{ type: i2.TranslateService }, { type: i0.ChangeDetectorRef }, { type: NhCommonModuleConfig, decorators: [{
|
|
@@ -7514,10 +8473,10 @@ class NhFormErrorMessageComponent {
|
|
|
7514
8473
|
}
|
|
7515
8474
|
return errors;
|
|
7516
8475
|
}
|
|
7517
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7518
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
8476
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8477
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhFormErrorMessageComponent, isStandalone: false, selector: "nh-form-error-message", inputs: { control: "control" }, ngImport: i0, template: "@if (getErrors().length > 0) {\n <div class=\"error-list\">\n @for (error of this.getErrors(); track error) {\n <div>\n <p class=\"text-danger m-0\"><i>{{ error|translate }}</i></p>\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
7519
8478
|
}
|
|
7520
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8479
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormErrorMessageComponent, decorators: [{
|
|
7521
8480
|
type: Component,
|
|
7522
8481
|
args: [{ selector: 'nh-form-error-message', encapsulation: ViewEncapsulation.None, standalone: false, template: "@if (getErrors().length > 0) {\n <div class=\"error-list\">\n @for (error of this.getErrors(); track error) {\n <div>\n <p class=\"text-danger m-0\"><i>{{ error|translate }}</i></p>\n </div>\n }\n </div>\n}\n" }]
|
|
7523
8482
|
}], ctorParameters: () => [], propDecorators: { control: [{
|
|
@@ -7731,10 +8690,10 @@ class NhCollectionTypeBaseComponent {
|
|
|
7731
8690
|
this.requestOptions.page = 1;
|
|
7732
8691
|
await this.load();
|
|
7733
8692
|
}
|
|
7734
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7735
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.
|
|
8693
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8694
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhCollectionTypeBaseComponent, isStandalone: false, selector: "nh-shared-collection-base-component", inputs: { queryParamUpdates: { classPropertyName: "queryParamUpdates", publicName: "queryParamUpdates", isSignal: true, isRequired: false, transformFunction: null }, localStorageUpdates: { classPropertyName: "localStorageUpdates", publicName: "localStorageUpdates", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryParamUpdates: "queryParamUpdatesChange", localStorageUpdates: "localStorageUpdatesChange" }, usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7736
8695
|
}
|
|
7737
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8696
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionTypeBaseComponent, decorators: [{
|
|
7738
8697
|
type: Component,
|
|
7739
8698
|
args: [{
|
|
7740
8699
|
selector: 'nh-shared-collection-base-component',
|
|
@@ -7746,10 +8705,10 @@ class NhCollectionBaseComponent extends NhCollectionTypeBaseComponent {
|
|
|
7746
8705
|
constructor() {
|
|
7747
8706
|
super(NhAuthService);
|
|
7748
8707
|
}
|
|
7749
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7750
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
8708
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8709
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhCollectionBaseComponent, isStandalone: false, selector: "nh-shared-collection-type-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7751
8710
|
}
|
|
7752
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8711
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionBaseComponent, decorators: [{
|
|
7753
8712
|
type: Component,
|
|
7754
8713
|
args: [{
|
|
7755
8714
|
selector: 'nh-shared-collection-type-base-component',
|
|
@@ -7909,10 +8868,10 @@ class NhMutateBaseTypeComponent {
|
|
|
7909
8868
|
this.isSubmitting = false;
|
|
7910
8869
|
}
|
|
7911
8870
|
}
|
|
7912
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7913
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
8871
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseTypeComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8872
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhMutateBaseTypeComponent, isStandalone: false, selector: "nh-mutate-base-type-component", outputs: { created: "created", updated: "updated" }, viewQueries: [{ propertyName: "form", first: true, predicate: NgForm, descendants: true }], usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7914
8873
|
}
|
|
7915
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8874
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseTypeComponent, decorators: [{
|
|
7916
8875
|
type: Component,
|
|
7917
8876
|
args: [{
|
|
7918
8877
|
selector: 'nh-mutate-base-type-component',
|
|
@@ -7931,10 +8890,10 @@ class NhMutateBaseComponent extends NhMutateBaseTypeComponent {
|
|
|
7931
8890
|
constructor() {
|
|
7932
8891
|
super(NhAuthService);
|
|
7933
8892
|
}
|
|
7934
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7935
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
8893
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8894
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhMutateBaseComponent, isStandalone: false, selector: "nh-mutate-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7936
8895
|
}
|
|
7937
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8896
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseComponent, decorators: [{
|
|
7938
8897
|
type: Component,
|
|
7939
8898
|
args: [{
|
|
7940
8899
|
selector: 'nh-mutate-base-component',
|
|
@@ -7960,10 +8919,10 @@ class NhModalMutateBaseTypeComponent extends NhMutateBaseTypeComponent {
|
|
|
7960
8919
|
closeDialog(event) {
|
|
7961
8920
|
this.modalComponentRef?.close();
|
|
7962
8921
|
}
|
|
7963
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7964
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
8922
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseTypeComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8923
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhModalMutateBaseTypeComponent, isStandalone: false, selector: "nh-modal-mutate-base-type-component", host: { listeners: { "document:keyup": "onKeyUp($event)" } }, usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7965
8924
|
}
|
|
7966
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8925
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseTypeComponent, decorators: [{
|
|
7967
8926
|
type: Component,
|
|
7968
8927
|
args: [{
|
|
7969
8928
|
selector: 'nh-modal-mutate-base-type-component',
|
|
@@ -7978,10 +8937,10 @@ class NhModalMutateBaseComponent extends NhModalMutateBaseTypeComponent {
|
|
|
7978
8937
|
constructor() {
|
|
7979
8938
|
super(NhAuthService);
|
|
7980
8939
|
}
|
|
7981
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7982
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
8940
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8941
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhModalMutateBaseComponent, isStandalone: false, selector: "nh-modal-mutate-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
7983
8942
|
}
|
|
7984
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8943
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseComponent, decorators: [{
|
|
7985
8944
|
type: Component,
|
|
7986
8945
|
args: [{
|
|
7987
8946
|
selector: 'nh-modal-mutate-base-component',
|
|
@@ -8001,10 +8960,10 @@ class NhErrorComponent {
|
|
|
8001
8960
|
}
|
|
8002
8961
|
return this.errors()?.items.find(x => x.name?.toLowerCase() === this.key()?.toLowerCase())?.errorMessages || [];
|
|
8003
8962
|
}
|
|
8004
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8005
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
8963
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8964
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhErrorComponent, isStandalone: false, selector: "nh-error", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "\n@if(displayErrors.length > 0) {\n <ul class=\"text-danger validation-errors\">\n @for(error of displayErrors; track $index) {\n <li>{{error}}</li>\n }\n </ul>\n}\n\n", styles: [""] }); }
|
|
8006
8965
|
}
|
|
8007
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8966
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorComponent, decorators: [{
|
|
8008
8967
|
type: Component,
|
|
8009
8968
|
args: [{ selector: 'nh-error', standalone: false, template: "\n@if(displayErrors.length > 0) {\n <ul class=\"text-danger validation-errors\">\n @for(error of displayErrors; track $index) {\n <li>{{error}}</li>\n }\n </ul>\n}\n\n" }]
|
|
8010
8969
|
}], propDecorators: { key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: true }] }] } });
|
|
@@ -8151,10 +9110,10 @@ class NhUserNotificationsAbstractComponent extends NhCollectionBaseComponent {
|
|
|
8151
9110
|
this.lastNotificationCount = state.overview.totalCount;
|
|
8152
9111
|
this.lastUnreadNotificationCount = state.overview.unreadCount;
|
|
8153
9112
|
}
|
|
8154
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8155
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.
|
|
9113
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationsAbstractComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9114
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhUserNotificationsAbstractComponent, isStandalone: false, selector: "nh-user-notifications-abstract", inputs: { allowStart: { classPropertyName: "allowStart", publicName: "allowStart", isSignal: false, isRequired: false, transformFunction: null }, allowStop: { classPropertyName: "allowStop", publicName: "allowStop", isSignal: false, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: false, isRequired: false, transformFunction: null }, autoLoadNotificationChanges: { classPropertyName: "autoLoadNotificationChanges", publicName: "autoLoadNotificationChanges", isSignal: false, isRequired: false, transformFunction: null }, partialLocalStorageKey: { classPropertyName: "partialLocalStorageKey", publicName: "partialLocalStorageKey", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
|
|
8156
9115
|
}
|
|
8157
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationsAbstractComponent, decorators: [{
|
|
8158
9117
|
type: Component,
|
|
8159
9118
|
args: [{
|
|
8160
9119
|
selector: 'nh-user-notifications-abstract',
|
|
@@ -8218,10 +9177,10 @@ class NhBackgroundOperationProgressComponent {
|
|
|
8218
9177
|
return !operation.sensitiveDataRedactedAt
|
|
8219
9178
|
&& ['Failed', 'Cancelled', 'TimedOut'].includes(nhBackgroundOperationStatusName(operation.status));
|
|
8220
9179
|
}
|
|
8221
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8222
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhBackgroundOperationProgressComponent, isStandalone: true, selector: "nh-background-operation-progress", inputs: { operation: "operation", showEvents: "showEvents", showActions: "showActions" }, outputs: { cancelRequested: "cancelRequested", retryRequested: "retryRequested" }, ngImport: i0, template: "<section class=\"nh-operation\" [attr.data-status]=\"statusKey(operation.status)\">\n <header class=\"nh-operation__header\">\n <div>\n <p class=\"nh-operation__eyebrow\">{{ 'nh-background-operations.operation' | translate }}</p>\n <h2>{{ operation.operationType }}</h2>\n </div>\n <span class=\"nh-operation__status\">{{ statusKey(operation.status) | translate }}</span>\n </header>\n\n <div class=\"nh-operation__overall\">\n <div class=\"nh-operation__progress-label\">\n <span>{{ operation.progressMessageKey ? (operation.progressMessageKey | translate: arguments(operation.progressMessageArgumentsJson)) : ('nh-background-operations.progress' | translate) }}</span>\n <strong>{{ percentage(operation.progressPercentage) | number:'1.0-1' }}%</strong>\n </div>\n <div class=\"nh-operation__progress\" role=\"progressbar\"\n [attr.aria-label]=\"'nh-background-operations.overall-progress' | translate\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(operation.progressPercentage)\">\n <span [style.width.%]=\"percentage(operation.progressPercentage)\"></span>\n </div>\n </div>\n\n @if (showActions && (canCancel(operation.status) || canRetry(operation))) {\n <div class=\"nh-operation__actions\">\n @if (canCancel(operation.status)) {\n <button type=\"button\" (click)=\"cancelRequested.emit(operation.id)\">\n {{ 'nh-background-operations.cancel' | translate }}\n </button>\n }\n @if (canRetry(operation)) {\n <button type=\"button\" (click)=\"retryRequested.emit(operation.id)\">\n {{ 'nh-background-operations.retry' | translate }}\n </button>\n }\n </div>\n }\n\n <div class=\"nh-operation__steps\" role=\"list\" [attr.aria-label]=\"'nh-background-operations.steps' | translate\">\n <ng-template #renderStep let-step let-depth=\"depth\">\n <article class=\"nh-step\" role=\"listitem\" [style.--nh-step-depth]=\"depth\">\n <div class=\"nh-step__heading\">\n <div>\n <strong>{{ stepTitle(step) | translate: arguments(step.titleArgumentsJson) }}</strong>\n @if (step.messageKey) {\n <span>{{ step.messageKey | translate: arguments(step.messageArgumentsJson) }}</span>\n }\n </div>\n <span class=\"nh-step__status\">{{ stepStatusKey(step.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"stepTitle(step) | translate: arguments(step.titleArgumentsJson)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(step.percentage)\">\n <span [style.width.%]=\"percentage(step.percentage)\"></span>\n </div>\n @if (hasBatch(step)) {\n <dl class=\"nh-step__batch\">\n <div><dt>{{ 'nh-background-operations.batch.processed' | translate }}</dt><dd>{{ step.processedItems }} / {{ step.discoveredItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.succeeded' | translate }}</dt><dd>{{ step.succeededItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.failed' | translate }}</dt><dd>{{ step.failedItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.skipped' | translate }}</dt><dd>{{ step.skippedItems }}</dd></div>\n @if (step.retriedItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.retried' | translate }}</dt><dd>{{ step.retriedItems }}</dd></div>\n }\n @if (step.activeItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.active' | translate }}</dt><dd>{{ step.activeItems }}</dd></div>\n }\n </dl>\n }\n </article>\n @for (child of step.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: child, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (step of operation.steps; track step.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: step, depth: 0}\"></ng-container>\n } @empty {\n <p class=\"nh-operation__empty\">{{ 'nh-background-operations.no-steps' | translate }}</p>\n }\n </div>\n\n @if (operation.children.length > 0) {\n <section class=\"nh-operation__children\">\n <h3>{{ 'nh-background-operations.children' | translate }}</h3>\n <div role=\"list\" [attr.aria-label]=\"'nh-background-operations.children' | translate\">\n <ng-template #renderChild let-child let-depth=\"depth\">\n <article class=\"nh-child\" role=\"listitem\" [style.--nh-child-depth]=\"depth\">\n <div class=\"nh-child__heading\">\n <div>\n <strong>{{ childLabel(child) }}</strong>\n <span>{{ child.operationType }}</span>\n </div>\n <span class=\"nh-child__status\">{{ statusKey(child.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"childLabel(child)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(child.progressPercentage)\">\n <span [style.width.%]=\"percentage(child.progressPercentage)\"></span>\n </div>\n @if (child.resultUrl) {\n <a [href]=\"child.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </article>\n @for (nestedChild of child.children; track nestedChild.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: nestedChild, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (child of operation.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: child, depth: 0}\"></ng-container>\n }\n </div>\n </section>\n }\n\n @if (showEvents && operation.events.length > 0) {\n <section class=\"nh-operation__events\">\n <h3>{{ 'nh-background-operations.activity' | translate }}</h3>\n <ol>\n @for (event of operation.events; track event.id) {\n @if (event.messageKey) {\n <li [class.nh-operation__event--operator]=\"event.isOperatorOnly\">\n <time [attr.datetime]=\"event.creationDateTime\">{{ event.creationDateTime | date:'short' }}</time>\n <span>\n {{ event.messageKey | translate: arguments(event.messageArgumentsJson) }}\n @if (event.isOperatorOnly) {\n <small class=\"nh-operation__event-badge\">{{ 'nh-background-operations.operator-only' | translate }}</small>\n }\n </span>\n @if (event.resultUrl) {\n <a [href]=\"event.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </li>\n }\n }\n </ol>\n </section>\n }\n</section>\n", styles: [":host{display:block;color:var(--nh-color-text, #fff)}.nh-operation{display:grid;gap:1rem;padding:1rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:1rem;background:var(--nh-color-surface, #101827)}.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__progress-label,.nh-operation__actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-operation__header h2,.nh-operation__events h3,.nh-operation__children h3,.nh-operation__eyebrow,.nh-step__heading span,.nh-step__batch,.nh-operation__events ol{margin:0}.nh-operation__eyebrow{color:var(--nh-color-muted, #9aa8bc);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}.nh-operation__status,.nh-step__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));font-size:.75rem}.nh-operation__progress,.nh-step__progress{overflow:hidden;height:.5rem;border-radius:.25rem;background:var(--nh-color-progress-track, rgba(255, 255, 255, .1))}.nh-operation__progress span,.nh-step__progress span{display:block;height:100%;background:var(--nh-color-progress, #ff6700);transition:width .18s ease-out}.nh-operation__steps{display:grid;gap:.625rem}.nh-operation__children,.nh-operation__children>div{display:grid;gap:.625rem}.nh-child{display:grid;gap:.5rem;margin-inline-start:min(var(--nh-child-depth) * 1rem,3rem);padding:.75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:.5rem;background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-child__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-child__heading>div{display:grid;gap:.125rem}.nh-child__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-child__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));color:var(--nh-color-text, #fff);font-size:.75rem}.nh-child a{justify-self:start}.nh-step{display:grid;gap:.5rem;margin-inline-start:calc(var(--nh-step-depth) * 1rem);padding:.75rem;border-inline-start:2px solid var(--nh-color-progress, #ff6700);background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-step__heading>div{display:grid;gap:.125rem}.nh-step__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-step__batch{display:flex;flex-wrap:wrap;gap:.5rem 1rem;color:var(--nh-color-muted, #9aa8bc);font-size:.75rem}.nh-step__batch div{display:flex;gap:.25rem}.nh-step__batch dd{margin:0;color:var(--nh-color-text, #fff)}.nh-operation__actions{justify-content:flex-end}.nh-operation__actions button{min-height:2.25rem;padding:.4rem .75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.5rem;color:inherit;background:transparent}.nh-operation__actions button:focus-visible,.nh-child a:focus-visible,.nh-operation__events a:focus-visible{outline:2px solid var(--nh-color-progress, #ff6700);outline-offset:2px}.nh-operation__events ol{display:grid;gap:.5rem;padding:0;list-style:none}.nh-operation__events li{display:grid;grid-template-columns:minmax(7rem,auto) 1fr auto;gap:.75rem;color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-operation__events li span{color:var(--nh-color-text, #fff)}.nh-operation__event-badge{margin-left:.5rem;padding:.125rem .375rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.4rem;color:var(--nh-color-muted, #9aa8bc);font-size:.7rem;white-space:nowrap}@media(prefers-reduced-motion:reduce){.nh-operation__progress span,.nh-step__progress span{transition:none}}@media(max-width:40rem){.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__events li{align-items:flex-start;grid-template-columns:1fr}.nh-operation__header,.nh-step__heading{flex-direction:column}.nh-child__heading{align-items:flex-start;flex-direction:column}.nh-step{margin-inline-start:min(var(--nh-step-depth) * .5rem,1.5rem)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$3.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9180
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9181
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhBackgroundOperationProgressComponent, isStandalone: true, selector: "nh-background-operation-progress", inputs: { operation: "operation", showEvents: "showEvents", showActions: "showActions" }, outputs: { cancelRequested: "cancelRequested", retryRequested: "retryRequested" }, ngImport: i0, template: "<section class=\"nh-operation\" [attr.data-status]=\"statusKey(operation.status)\">\n <header class=\"nh-operation__header\">\n <div>\n <p class=\"nh-operation__eyebrow\">{{ 'nh-background-operations.operation' | translate }}</p>\n <h2>{{ operation.operationType }}</h2>\n </div>\n <span class=\"nh-operation__status\">{{ statusKey(operation.status) | translate }}</span>\n </header>\n\n <div class=\"nh-operation__overall\">\n <div class=\"nh-operation__progress-label\">\n <span>{{ operation.progressMessageKey ? (operation.progressMessageKey | translate: arguments(operation.progressMessageArgumentsJson)) : ('nh-background-operations.progress' | translate) }}</span>\n <strong>{{ percentage(operation.progressPercentage) | number:'1.0-1' }}%</strong>\n </div>\n <div class=\"nh-operation__progress\" role=\"progressbar\"\n [attr.aria-label]=\"'nh-background-operations.overall-progress' | translate\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(operation.progressPercentage)\">\n <span [style.width.%]=\"percentage(operation.progressPercentage)\"></span>\n </div>\n </div>\n\n @if (showActions && (canCancel(operation.status) || canRetry(operation))) {\n <div class=\"nh-operation__actions\">\n @if (canCancel(operation.status)) {\n <button type=\"button\" (click)=\"cancelRequested.emit(operation.id)\">\n {{ 'nh-background-operations.cancel' | translate }}\n </button>\n }\n @if (canRetry(operation)) {\n <button type=\"button\" (click)=\"retryRequested.emit(operation.id)\">\n {{ 'nh-background-operations.retry' | translate }}\n </button>\n }\n </div>\n }\n\n <div class=\"nh-operation__steps\" role=\"list\" [attr.aria-label]=\"'nh-background-operations.steps' | translate\">\n <ng-template #renderStep let-step let-depth=\"depth\">\n <article class=\"nh-step\" role=\"listitem\" [style.--nh-step-depth]=\"depth\">\n <div class=\"nh-step__heading\">\n <div>\n <strong>{{ stepTitle(step) | translate: arguments(step.titleArgumentsJson) }}</strong>\n @if (step.messageKey) {\n <span>{{ step.messageKey | translate: arguments(step.messageArgumentsJson) }}</span>\n }\n </div>\n <span class=\"nh-step__status\">{{ stepStatusKey(step.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"stepTitle(step) | translate: arguments(step.titleArgumentsJson)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(step.percentage)\">\n <span [style.width.%]=\"percentage(step.percentage)\"></span>\n </div>\n @if (hasBatch(step)) {\n <dl class=\"nh-step__batch\">\n <div><dt>{{ 'nh-background-operations.batch.processed' | translate }}</dt><dd>{{ step.processedItems }} / {{ step.discoveredItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.succeeded' | translate }}</dt><dd>{{ step.succeededItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.failed' | translate }}</dt><dd>{{ step.failedItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.skipped' | translate }}</dt><dd>{{ step.skippedItems }}</dd></div>\n @if (step.retriedItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.retried' | translate }}</dt><dd>{{ step.retriedItems }}</dd></div>\n }\n @if (step.activeItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.active' | translate }}</dt><dd>{{ step.activeItems }}</dd></div>\n }\n </dl>\n }\n </article>\n @for (child of step.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: child, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (step of operation.steps; track step.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: step, depth: 0}\"></ng-container>\n } @empty {\n <p class=\"nh-operation__empty\">{{ 'nh-background-operations.no-steps' | translate }}</p>\n }\n </div>\n\n @if (operation.children.length > 0) {\n <section class=\"nh-operation__children\">\n <h3>{{ 'nh-background-operations.children' | translate }}</h3>\n <div role=\"list\" [attr.aria-label]=\"'nh-background-operations.children' | translate\">\n <ng-template #renderChild let-child let-depth=\"depth\">\n <article class=\"nh-child\" role=\"listitem\" [style.--nh-child-depth]=\"depth\">\n <div class=\"nh-child__heading\">\n <div>\n <strong>{{ childLabel(child) }}</strong>\n <span>{{ child.operationType }}</span>\n </div>\n <span class=\"nh-child__status\">{{ statusKey(child.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"childLabel(child)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(child.progressPercentage)\">\n <span [style.width.%]=\"percentage(child.progressPercentage)\"></span>\n </div>\n @if (child.resultUrl) {\n <a [href]=\"child.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </article>\n @for (nestedChild of child.children; track nestedChild.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: nestedChild, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (child of operation.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: child, depth: 0}\"></ng-container>\n }\n </div>\n </section>\n }\n\n @if (showEvents && operation.events.length > 0) {\n <section class=\"nh-operation__events\">\n <h3>{{ 'nh-background-operations.activity' | translate }}</h3>\n <ol>\n @for (event of operation.events; track event.id) {\n @if (event.messageKey) {\n <li [class.nh-operation__event--operator]=\"event.isOperatorOnly\">\n <time [attr.datetime]=\"event.creationDateTime\">{{ event.creationDateTime | date:'short' }}</time>\n <span>\n {{ event.messageKey | translate: arguments(event.messageArgumentsJson) }}\n @if (event.isOperatorOnly) {\n <small class=\"nh-operation__event-badge\">{{ 'nh-background-operations.operator-only' | translate }}</small>\n }\n </span>\n @if (event.resultUrl) {\n <a [href]=\"event.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </li>\n }\n }\n </ol>\n </section>\n }\n</section>\n", styles: [":host{display:block;color:var(--nh-color-text, #fff)}.nh-operation{display:grid;gap:1rem;padding:1rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:1rem;background:var(--nh-color-surface, #101827)}.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__progress-label,.nh-operation__actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-operation__header h2,.nh-operation__events h3,.nh-operation__children h3,.nh-operation__eyebrow,.nh-step__heading span,.nh-step__batch,.nh-operation__events ol{margin:0}.nh-operation__eyebrow{color:var(--nh-color-muted, #9aa8bc);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}.nh-operation__status,.nh-step__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));font-size:.75rem}.nh-operation__progress,.nh-step__progress{overflow:hidden;height:.5rem;border-radius:.25rem;background:var(--nh-color-progress-track, rgba(255, 255, 255, .1))}.nh-operation__progress span,.nh-step__progress span{display:block;height:100%;background:var(--nh-color-progress, #ff6700);transition:width .18s ease-out}.nh-operation__steps{display:grid;gap:.625rem}.nh-operation__children,.nh-operation__children>div{display:grid;gap:.625rem}.nh-child{display:grid;gap:.5rem;margin-inline-start:min(var(--nh-child-depth) * 1rem,3rem);padding:.75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:.5rem;background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-child__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-child__heading>div{display:grid;gap:.125rem}.nh-child__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-child__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));color:var(--nh-color-text, #fff);font-size:.75rem}.nh-child a{justify-self:start}.nh-step{display:grid;gap:.5rem;margin-inline-start:calc(var(--nh-step-depth) * 1rem);padding:.75rem;border-inline-start:2px solid var(--nh-color-progress, #ff6700);background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-step__heading>div{display:grid;gap:.125rem}.nh-step__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-step__batch{display:flex;flex-wrap:wrap;gap:.5rem 1rem;color:var(--nh-color-muted, #9aa8bc);font-size:.75rem}.nh-step__batch div{display:flex;gap:.25rem}.nh-step__batch dd{margin:0;color:var(--nh-color-text, #fff)}.nh-operation__actions{justify-content:flex-end}.nh-operation__actions button{min-height:2.25rem;padding:.4rem .75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.5rem;color:inherit;background:transparent}.nh-operation__actions button:focus-visible,.nh-child a:focus-visible,.nh-operation__events a:focus-visible{outline:2px solid var(--nh-color-progress, #ff6700);outline-offset:2px}.nh-operation__events ol{display:grid;gap:.5rem;padding:0;list-style:none}.nh-operation__events li{display:grid;grid-template-columns:minmax(7rem,auto) 1fr auto;gap:.75rem;color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-operation__events li span{color:var(--nh-color-text, #fff)}.nh-operation__event-badge{margin-left:.5rem;padding:.125rem .375rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.4rem;color:var(--nh-color-muted, #9aa8bc);font-size:.7rem;white-space:nowrap}@media(prefers-reduced-motion:reduce){.nh-operation__progress span,.nh-step__progress span{transition:none}}@media(max-width:40rem){.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__events li{align-items:flex-start;grid-template-columns:1fr}.nh-operation__header,.nh-step__heading{flex-direction:column}.nh-child__heading{align-items:flex-start;flex-direction:column}.nh-step{margin-inline-start:min(var(--nh-step-depth) * .5rem,1.5rem)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$3.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8223
9182
|
}
|
|
8224
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationProgressComponent, decorators: [{
|
|
8225
9184
|
type: Component,
|
|
8226
9185
|
args: [{ selector: 'nh-background-operation-progress', standalone: true, imports: [CommonModule, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"nh-operation\" [attr.data-status]=\"statusKey(operation.status)\">\n <header class=\"nh-operation__header\">\n <div>\n <p class=\"nh-operation__eyebrow\">{{ 'nh-background-operations.operation' | translate }}</p>\n <h2>{{ operation.operationType }}</h2>\n </div>\n <span class=\"nh-operation__status\">{{ statusKey(operation.status) | translate }}</span>\n </header>\n\n <div class=\"nh-operation__overall\">\n <div class=\"nh-operation__progress-label\">\n <span>{{ operation.progressMessageKey ? (operation.progressMessageKey | translate: arguments(operation.progressMessageArgumentsJson)) : ('nh-background-operations.progress' | translate) }}</span>\n <strong>{{ percentage(operation.progressPercentage) | number:'1.0-1' }}%</strong>\n </div>\n <div class=\"nh-operation__progress\" role=\"progressbar\"\n [attr.aria-label]=\"'nh-background-operations.overall-progress' | translate\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(operation.progressPercentage)\">\n <span [style.width.%]=\"percentage(operation.progressPercentage)\"></span>\n </div>\n </div>\n\n @if (showActions && (canCancel(operation.status) || canRetry(operation))) {\n <div class=\"nh-operation__actions\">\n @if (canCancel(operation.status)) {\n <button type=\"button\" (click)=\"cancelRequested.emit(operation.id)\">\n {{ 'nh-background-operations.cancel' | translate }}\n </button>\n }\n @if (canRetry(operation)) {\n <button type=\"button\" (click)=\"retryRequested.emit(operation.id)\">\n {{ 'nh-background-operations.retry' | translate }}\n </button>\n }\n </div>\n }\n\n <div class=\"nh-operation__steps\" role=\"list\" [attr.aria-label]=\"'nh-background-operations.steps' | translate\">\n <ng-template #renderStep let-step let-depth=\"depth\">\n <article class=\"nh-step\" role=\"listitem\" [style.--nh-step-depth]=\"depth\">\n <div class=\"nh-step__heading\">\n <div>\n <strong>{{ stepTitle(step) | translate: arguments(step.titleArgumentsJson) }}</strong>\n @if (step.messageKey) {\n <span>{{ step.messageKey | translate: arguments(step.messageArgumentsJson) }}</span>\n }\n </div>\n <span class=\"nh-step__status\">{{ stepStatusKey(step.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"stepTitle(step) | translate: arguments(step.titleArgumentsJson)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(step.percentage)\">\n <span [style.width.%]=\"percentage(step.percentage)\"></span>\n </div>\n @if (hasBatch(step)) {\n <dl class=\"nh-step__batch\">\n <div><dt>{{ 'nh-background-operations.batch.processed' | translate }}</dt><dd>{{ step.processedItems }} / {{ step.discoveredItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.succeeded' | translate }}</dt><dd>{{ step.succeededItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.failed' | translate }}</dt><dd>{{ step.failedItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.skipped' | translate }}</dt><dd>{{ step.skippedItems }}</dd></div>\n @if (step.retriedItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.retried' | translate }}</dt><dd>{{ step.retriedItems }}</dd></div>\n }\n @if (step.activeItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.active' | translate }}</dt><dd>{{ step.activeItems }}</dd></div>\n }\n </dl>\n }\n </article>\n @for (child of step.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: child, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (step of operation.steps; track step.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: step, depth: 0}\"></ng-container>\n } @empty {\n <p class=\"nh-operation__empty\">{{ 'nh-background-operations.no-steps' | translate }}</p>\n }\n </div>\n\n @if (operation.children.length > 0) {\n <section class=\"nh-operation__children\">\n <h3>{{ 'nh-background-operations.children' | translate }}</h3>\n <div role=\"list\" [attr.aria-label]=\"'nh-background-operations.children' | translate\">\n <ng-template #renderChild let-child let-depth=\"depth\">\n <article class=\"nh-child\" role=\"listitem\" [style.--nh-child-depth]=\"depth\">\n <div class=\"nh-child__heading\">\n <div>\n <strong>{{ childLabel(child) }}</strong>\n <span>{{ child.operationType }}</span>\n </div>\n <span class=\"nh-child__status\">{{ statusKey(child.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"childLabel(child)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(child.progressPercentage)\">\n <span [style.width.%]=\"percentage(child.progressPercentage)\"></span>\n </div>\n @if (child.resultUrl) {\n <a [href]=\"child.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </article>\n @for (nestedChild of child.children; track nestedChild.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: nestedChild, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (child of operation.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: child, depth: 0}\"></ng-container>\n }\n </div>\n </section>\n }\n\n @if (showEvents && operation.events.length > 0) {\n <section class=\"nh-operation__events\">\n <h3>{{ 'nh-background-operations.activity' | translate }}</h3>\n <ol>\n @for (event of operation.events; track event.id) {\n @if (event.messageKey) {\n <li [class.nh-operation__event--operator]=\"event.isOperatorOnly\">\n <time [attr.datetime]=\"event.creationDateTime\">{{ event.creationDateTime | date:'short' }}</time>\n <span>\n {{ event.messageKey | translate: arguments(event.messageArgumentsJson) }}\n @if (event.isOperatorOnly) {\n <small class=\"nh-operation__event-badge\">{{ 'nh-background-operations.operator-only' | translate }}</small>\n }\n </span>\n @if (event.resultUrl) {\n <a [href]=\"event.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </li>\n }\n }\n </ol>\n </section>\n }\n</section>\n", styles: [":host{display:block;color:var(--nh-color-text, #fff)}.nh-operation{display:grid;gap:1rem;padding:1rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:1rem;background:var(--nh-color-surface, #101827)}.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__progress-label,.nh-operation__actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-operation__header h2,.nh-operation__events h3,.nh-operation__children h3,.nh-operation__eyebrow,.nh-step__heading span,.nh-step__batch,.nh-operation__events ol{margin:0}.nh-operation__eyebrow{color:var(--nh-color-muted, #9aa8bc);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}.nh-operation__status,.nh-step__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));font-size:.75rem}.nh-operation__progress,.nh-step__progress{overflow:hidden;height:.5rem;border-radius:.25rem;background:var(--nh-color-progress-track, rgba(255, 255, 255, .1))}.nh-operation__progress span,.nh-step__progress span{display:block;height:100%;background:var(--nh-color-progress, #ff6700);transition:width .18s ease-out}.nh-operation__steps{display:grid;gap:.625rem}.nh-operation__children,.nh-operation__children>div{display:grid;gap:.625rem}.nh-child{display:grid;gap:.5rem;margin-inline-start:min(var(--nh-child-depth) * 1rem,3rem);padding:.75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:.5rem;background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-child__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-child__heading>div{display:grid;gap:.125rem}.nh-child__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-child__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));color:var(--nh-color-text, #fff);font-size:.75rem}.nh-child a{justify-self:start}.nh-step{display:grid;gap:.5rem;margin-inline-start:calc(var(--nh-step-depth) * 1rem);padding:.75rem;border-inline-start:2px solid var(--nh-color-progress, #ff6700);background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-step__heading>div{display:grid;gap:.125rem}.nh-step__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-step__batch{display:flex;flex-wrap:wrap;gap:.5rem 1rem;color:var(--nh-color-muted, #9aa8bc);font-size:.75rem}.nh-step__batch div{display:flex;gap:.25rem}.nh-step__batch dd{margin:0;color:var(--nh-color-text, #fff)}.nh-operation__actions{justify-content:flex-end}.nh-operation__actions button{min-height:2.25rem;padding:.4rem .75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.5rem;color:inherit;background:transparent}.nh-operation__actions button:focus-visible,.nh-child a:focus-visible,.nh-operation__events a:focus-visible{outline:2px solid var(--nh-color-progress, #ff6700);outline-offset:2px}.nh-operation__events ol{display:grid;gap:.5rem;padding:0;list-style:none}.nh-operation__events li{display:grid;grid-template-columns:minmax(7rem,auto) 1fr auto;gap:.75rem;color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-operation__events li span{color:var(--nh-color-text, #fff)}.nh-operation__event-badge{margin-left:.5rem;padding:.125rem .375rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.4rem;color:var(--nh-color-muted, #9aa8bc);font-size:.7rem;white-space:nowrap}@media(prefers-reduced-motion:reduce){.nh-operation__progress span,.nh-step__progress span{transition:none}}@media(max-width:40rem){.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__events li{align-items:flex-start;grid-template-columns:1fr}.nh-operation__header,.nh-step__heading{flex-direction:column}.nh-child__heading{align-items:flex-start;flex-direction:column}.nh-step{margin-inline-start:min(var(--nh-step-depth) * .5rem,1.5rem)}}\n"] }]
|
|
8227
9186
|
}], propDecorators: { operation: [{
|
|
@@ -8249,10 +9208,10 @@ class NhSearchInputComponent {
|
|
|
8249
9208
|
onDebounceEvent(val) {
|
|
8250
9209
|
this.onDebounce.emit(val?.toString());
|
|
8251
9210
|
}
|
|
8252
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8253
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
9211
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9212
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhSearchInputComponent, isStandalone: false, selector: "nh-search-input", inputs: { value: "value" }, outputs: { onDebounce: "onDebounce" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"filter search-filter\" [class.open]=\"open || value\">\n <div class=\" mb-2\" (click)=\"focusInput()\">\n <input #searchInput (focusin)=\"open = true\" (focusout)=\"open = false\" class=\"form-control\" type=\"text\" placeholder=\"{{ 'general.search' | translate }}...\"\n [ngModel]=\"value\" [nhDebounce]=\"500\" (onDebounce)=\"onDebounceEvent($event)\" />\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NhDebounceDirective, selector: "[ngModel][nhDebounce]", inputs: ["nhDebounce"], outputs: ["onDebounce", "preDebounce"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
8254
9213
|
}
|
|
8255
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSearchInputComponent, decorators: [{
|
|
8256
9215
|
type: Component,
|
|
8257
9216
|
args: [{ selector: 'nh-search-input', standalone: false, template: "<div class=\"filter search-filter\" [class.open]=\"open || value\">\n <div class=\" mb-2\" (click)=\"focusInput()\">\n <input #searchInput (focusin)=\"open = true\" (focusout)=\"open = false\" class=\"form-control\" type=\"text\" placeholder=\"{{ 'general.search' | translate }}...\"\n [ngModel]=\"value\" [nhDebounce]=\"500\" (onDebounce)=\"onDebounceEvent($event)\" />\n </div>\n</div>\n" }]
|
|
8258
9217
|
}], propDecorators: { value: [{
|
|
@@ -8286,10 +9245,10 @@ class NhPageSizeComponent extends AbstractValueAccessor {
|
|
|
8286
9245
|
// optional: disable your input
|
|
8287
9246
|
this.isDisabled = isDisabled;
|
|
8288
9247
|
}
|
|
8289
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8290
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
9248
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageSizeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
9249
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhPageSizeComponent, isStandalone: false, selector: "nh-page-size", inputs: { name: "name" }, providers: [MakeProvider(NhPageSizeComponent)], usesInheritance: true, ngImport: i0, template: "@if (pageSizeDropDownSettings) {\n <div class=\"filter dropdown-with-icon\">\n @if (value) {\n <nh-form-dropdown\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [settings]=\"pageSizeDropDownSettings\"></nh-form-dropdown>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NhFormDropDownComponent, selector: "nh-form-dropdown", inputs: ["disabled", "settings"], outputs: ["onLazyLoadError", "closed", "opened"] }] }); }
|
|
8291
9250
|
}
|
|
8292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageSizeComponent, decorators: [{
|
|
8293
9252
|
type: Component,
|
|
8294
9253
|
args: [{ selector: 'nh-page-size', standalone: false, providers: [MakeProvider(NhPageSizeComponent)], template: "@if (pageSizeDropDownSettings) {\n <div class=\"filter dropdown-with-icon\">\n @if (value) {\n <nh-form-dropdown\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [settings]=\"pageSizeDropDownSettings\"></nh-form-dropdown>\n }\n </div>\n}\n" }]
|
|
8295
9254
|
}], propDecorators: { name: [{
|
|
@@ -8341,10 +9300,10 @@ class NhActiveDivisionInterceptor {
|
|
|
8341
9300
|
}
|
|
8342
9301
|
return next.handle(req.clone({ headers }));
|
|
8343
9302
|
}
|
|
8344
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8345
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
9303
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhActiveDivisionInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9304
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhActiveDivisionInterceptor }); }
|
|
8346
9305
|
}
|
|
8347
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9306
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhActiveDivisionInterceptor, decorators: [{
|
|
8348
9307
|
type: Injectable
|
|
8349
9308
|
}], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }] });
|
|
8350
9309
|
|
|
@@ -8368,10 +9327,10 @@ class NhApiAuthInterceptor {
|
|
|
8368
9327
|
}
|
|
8369
9328
|
return next.handle(req.clone({ headers }));
|
|
8370
9329
|
}
|
|
8371
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8372
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
9330
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiAuthInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9331
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiAuthInterceptor }); }
|
|
8373
9332
|
}
|
|
8374
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9333
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiAuthInterceptor, decorators: [{
|
|
8375
9334
|
type: Injectable
|
|
8376
9335
|
}], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }] });
|
|
8377
9336
|
|
|
@@ -8390,8 +9349,8 @@ class NhCommonModule {
|
|
|
8390
9349
|
]
|
|
8391
9350
|
};
|
|
8392
9351
|
}
|
|
8393
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8394
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
9352
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, deps: [{ token: NhCommonModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9353
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, declarations: [
|
|
8395
9354
|
// Components
|
|
8396
9355
|
NhModalComponent,
|
|
8397
9356
|
NhLoaderComponent,
|
|
@@ -8469,7 +9428,7 @@ class NhCommonModule {
|
|
|
8469
9428
|
NhButtonDebounceDirective,
|
|
8470
9429
|
NhModalContentDirective,
|
|
8471
9430
|
NhRouterLinkDirective] }); }
|
|
8472
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
9431
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, providers: [
|
|
8473
9432
|
provideAppInitializer(() => {
|
|
8474
9433
|
const configService = inject(NhConfigCommonService);
|
|
8475
9434
|
return new Observable((observer) => {
|
|
@@ -8496,6 +9455,11 @@ class NhCommonModule {
|
|
|
8496
9455
|
useClass: NhApiAuthInterceptor,
|
|
8497
9456
|
multi: true
|
|
8498
9457
|
},
|
|
9458
|
+
{
|
|
9459
|
+
provide: HTTP_INTERCEPTORS,
|
|
9460
|
+
useClass: NhSessionRejectionInterceptor,
|
|
9461
|
+
multi: true
|
|
9462
|
+
},
|
|
8499
9463
|
{
|
|
8500
9464
|
provide: HTTP_INTERCEPTORS,
|
|
8501
9465
|
useClass: NhEncodeHttpParamsInterceptor,
|
|
@@ -8534,7 +9498,7 @@ class NhCommonModule {
|
|
|
8534
9498
|
NgxBootstrapMultiselectModule,
|
|
8535
9499
|
FormsModule] }); }
|
|
8536
9500
|
}
|
|
8537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9501
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, decorators: [{
|
|
8538
9502
|
type: NgModule,
|
|
8539
9503
|
args: [{
|
|
8540
9504
|
imports: [
|
|
@@ -8648,6 +9612,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImpo
|
|
|
8648
9612
|
useClass: NhApiAuthInterceptor,
|
|
8649
9613
|
multi: true
|
|
8650
9614
|
},
|
|
9615
|
+
{
|
|
9616
|
+
provide: HTTP_INTERCEPTORS,
|
|
9617
|
+
useClass: NhSessionRejectionInterceptor,
|
|
9618
|
+
multi: true
|
|
9619
|
+
},
|
|
8651
9620
|
{
|
|
8652
9621
|
provide: HTTP_INTERCEPTORS,
|
|
8653
9622
|
useClass: NhEncodeHttpParamsInterceptor,
|
|
@@ -8769,5 +9738,5 @@ function nhTranslateBrowserLoaderFactory(httpClient, transferState) {
|
|
|
8769
9738
|
* Generated bundle index. Do not edit.
|
|
8770
9739
|
*/
|
|
8771
9740
|
|
|
8772
|
-
export { AbstractValueAccessor, AspMvcFormServerSideFormValidator, AuthSessionExpirationInformation, AuthenticateModel, AuthenticationNhCommonModuleConfig, AuthenticationSessionCreateResponse, BackgroundOperationsNhCommonModuleConfig, BaseNhAuthService, CheckAuthenticateSessionModel, Claim, ClaimAuthenticateSessionAccountMutateModel, ClaimAuthenticateSessionAccountViewModel, ClaimTypes, CollectionHttpRequestOptions, CollectionHttpResponse, DefaultMultiSelectSettings, DefaultMultiSelectTexts, EndpointsAuthenticationNhCommonModuleConfig, FilterRequestOptions, FormError, FormValidationResult, HttpDownloadRequestOptions, HttpRequestOptions, HttpRequestOptionsArrayBuffer, HttpRequestOptionsText, ImpersonateAuthenticateModel, IsAllPermissionsGrantedPipe, IsAuthenticatedPipe, IsClaimGrantedPipe, IsDefined, IsGrantedRolePipe, IsOneActiveDivisionPermissionGrantedGuard, IsOneActiveDivisionPermissionGrantedPipe, IsOneActiveDivisionRoleGrantedGuard, IsOneActiveDivisionRoleGrantedPipe, IsOneClaimGrantedPipe, IsOneDivisionPermissionGrantedPipe, IsOneDivisionRoleGrantedPipe, IsOnePermissionGrantedPipe, IsOneRoleGrantedPipe, JsonLdDataChanged, ListSortDirection, MakeProvider, MutationType, NH_ERROR_HANDLERS, NH_ROUTER_LANGUAGE_CHANGE_METHOD, NH_ROUTER_ROOT_ROUTES, NhAccountInformationResponse, NhAngularUtil, NhApiService, NhApiUtil, NhAppService, NhAsyncLock, NhAuthService, NhAuthorization, NhBackgroundOperationAdministrationCollectionHttpRequestOptions, NhBackgroundOperationAdministrationService, NhBackgroundOperationCollectionHttpRequestOptions, NhBackgroundOperationLiveUpdateService, NhBackgroundOperationProgressComponent, NhBackgroundOperationService, NhBackgroundOperationStore, NhBaseApiService, NhBooleanToStringPipe, NhBreadCrumb, NhBreadCrumbItem, NhButtonDebounceDirective, NhCanCancelNavigationGuard, NhCollectionBaseComponent, NhCollectionTypeBaseComponent, NhCommonConfig, NhCommonConfigChanged, NhCommonModule, NhCommonModuleConfig, NhConfigCommonService, NhContextMenu, NhContextMenuItem, NhContextMenuService, NhContextMenuServiceConfig, NhCookieService, NhDatePipe, NhDateTimePipe, NhDateUtcPipe, NhDebounceDirective, NhDeduplicateGetRequestsInterceptor, NhDivision, NhDivisionRole, NhDivisionUser, NhEncodeHttpParamsInterceptor, NhEncodingUtil, NhErrorComponent, NhErrorHandlerService, NhFormDropDownComponent, NhFormDropDownNhCommonModuleConfig, NhFormDropDownSettings, NhFormErrorMessageComponent, NhFormHelper, NhHeadService, NhHttpNhCommonModuleConfig, NhHttpUtil, NhInternetConnectionService, NhIsAllPermissionsGrantedGuard, NhIsAuthenticatedGuard, NhIsOneClaimGrantedGuard, NhIsOnePermissionGrantedGuard, NhIsOneRoleGrantedGuard, NhJsonLdComponent, NhJsonLdData, NhJsonLdDataItem, NhJsonLdService, NhLoaderComponent, NhMetaService, NhModalComponent, NhModalComponentClosed, NhModalComponentImpl, NhModalComponentRef, NhModalConfirmComponent, NhModalContentDirective, NhModalLoadingComponent, NhModalMutateBaseComponent, NhModalMutateBaseTypeComponent, NhModalOptions, NhModalService, NhMutateBaseComponent, NhMutateBaseTypeComponent, NhMutex, NhPageBaseComponent, NhPageService, NhPageSettings, NhPageSizeComponent, NhPageTypeBaseComponent, NhRegisterRoute, NhRequestScopedServerHttpInterceptorService, NhRoute, NhRouteInfo, NhRouteNavigationItem, NhRouterLinkDirective, NhRouterService, NhRouterSetupService, NhSearchInputComponent, NhServerHttpInterceptor, NhServerService, NhServerSideFormValidationService, NhSitemap, NhSitemapEntry, NhSitemapEntryItem, NhStringUtil, NhTaskResultFormValidationService, NhTitleService, NhToHeadDirective, NhTranslateBrowserLoader, NhTranslationNhCommonModuleConfig, NhTypedPageBaseComponent, NhTypedPageTypeBaseComponent, NhUrlEncodePipe, NhUser, NhUserNotification, NhUserNotificationCollectionHttpRequestOptions, NhUserNotificationData, NhUserNotificationMessage, NhUserNotificationOverview, NhUserNotificationService, NhUserNotificationState, NhUserNotificationsAbstractComponent, OrderByRequestOptions, PreConnectUrlItem, PreLoadUrlItem, REVIEW_AGGREGATE_RATING_KEY, REVIEW_KEY, RefreshTokenLoginAccountMutateModel, RevertImpersonateAuthenticateModel, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SearchableCollectionHttpRequestOptions, SimpleCollectionHttpRequestOptions, SimpleCollectionHttpResponse, TaskResult, TaskResultItem, TypedNhPageSettings, UserNotificationNhCommonModuleConfig, enumIntValuesToArray, enumKeysToArray, enumStringValuesToArray, enumValuesToArray, getEmptyGuid, getRandomIdentifier, groupBy, languageToCultureMap, nameof, nhBackgroundOperationStatusName, nhBackgroundOperationStepStatusName, nhBackgroundOperationTranslationSegment, nhTranslateBrowserLoaderFactory, nhUserNotificationSeverityName, uppercaseFirst };
|
|
9741
|
+
export { AbstractValueAccessor, AspMvcFormServerSideFormValidator, AuthSessionExpirationInformation, AuthenticateModel, AuthenticationNhCommonModuleConfig, AuthenticationSessionCreateResponse, BackgroundOperationsNhCommonModuleConfig, BaseNhAuthService, CheckAuthenticateSessionModel, Claim, ClaimAuthenticateSessionAccountMutateModel, ClaimAuthenticateSessionAccountViewModel, ClaimTypes, CollectionHttpRequestOptions, CollectionHttpResponse, DefaultMultiSelectSettings, DefaultMultiSelectTexts, EndpointsAuthenticationNhCommonModuleConfig, FilterRequestOptions, FormError, FormValidationResult, HttpDownloadRequestOptions, HttpRequestOptions, HttpRequestOptionsArrayBuffer, HttpRequestOptionsText, ImpersonateAuthenticateModel, IsAllPermissionsGrantedPipe, IsAuthenticatedPipe, IsClaimGrantedPipe, IsDefined, IsGrantedRolePipe, IsOneActiveDivisionPermissionGrantedGuard, IsOneActiveDivisionPermissionGrantedPipe, IsOneActiveDivisionRoleGrantedGuard, IsOneActiveDivisionRoleGrantedPipe, IsOneClaimGrantedPipe, IsOneDivisionPermissionGrantedPipe, IsOneDivisionRoleGrantedPipe, IsOnePermissionGrantedPipe, IsOneRoleGrantedPipe, JsonLdDataChanged, ListSortDirection, MakeProvider, MutationType, NH_ERROR_HANDLERS, NH_ROUTER_LANGUAGE_CHANGE_METHOD, NH_ROUTER_ROOT_ROUTES, NH_SKIP_SERVER_SESSION_CHECK, NhAccountInformationResponse, NhAngularUtil, NhApiService, NhApiUtil, NhAppService, NhAsyncLock, NhAuthService, NhAuthenticationStep, NhAuthenticationStepStatuses, NhAuthenticatorSetup, NhAuthorization, NhBackgroundOperationAdministrationCollectionHttpRequestOptions, NhBackgroundOperationAdministrationService, NhBackgroundOperationCollectionHttpRequestOptions, NhBackgroundOperationLiveUpdateService, NhBackgroundOperationProgressComponent, NhBackgroundOperationService, NhBackgroundOperationStore, NhBaseApiService, NhBooleanToStringPipe, NhBreadCrumb, NhBreadCrumbItem, NhButtonDebounceDirective, NhCanCancelNavigationGuard, NhCollectionBaseComponent, NhCollectionTypeBaseComponent, NhCommonConfig, NhCommonConfigChanged, NhCommonModule, NhCommonModuleConfig, NhConfigCommonService, NhContextMenu, NhContextMenuItem, NhContextMenuService, NhContextMenuServiceConfig, NhCookieService, NhDatePipe, NhDateTimePipe, NhDateUtcPipe, NhDebounceDirective, NhDeduplicateGetRequestsInterceptor, NhDivision, NhDivisionRole, NhDivisionUser, NhEncodeHttpParamsInterceptor, NhEncodingUtil, NhErrorComponent, NhErrorHandlerService, NhFormDropDownComponent, NhFormDropDownNhCommonModuleConfig, NhFormDropDownSettings, NhFormErrorMessageComponent, NhFormHelper, NhHeadService, NhHttpNhCommonModuleConfig, NhHttpUtil, NhInternetConnectionService, NhIsAllPermissionsGrantedGuard, NhIsAuthenticatedGuard, NhIsOneClaimGrantedGuard, NhIsOnePermissionGrantedGuard, NhIsOneRoleGrantedGuard, NhJsonLdComponent, NhJsonLdData, NhJsonLdDataItem, NhJsonLdService, NhLoaderComponent, NhMetaService, NhModalComponent, NhModalComponentClosed, NhModalComponentImpl, NhModalComponentRef, NhModalConfirmComponent, NhModalContentDirective, NhModalLoadingComponent, NhModalMutateBaseComponent, NhModalMutateBaseTypeComponent, NhModalOptions, NhModalService, NhMutateBaseComponent, NhMutateBaseTypeComponent, NhMutex, NhPageBaseComponent, NhPageService, NhPageSettings, NhPageSizeComponent, NhPageTypeBaseComponent, NhPasskey, NhPasskeyClient, NhPasskeyOptions, NhRegisterRoute, NhRequestScopedServerHttpInterceptorService, NhRoute, NhRouteInfo, NhRouteNavigationItem, NhRouterLinkDirective, NhRouterService, NhRouterSetupService, NhSearchInputComponent, NhServerHttpInterceptor, NhServerService, NhServerSideFormValidationService, NhSessionRejectionInterceptor, NhSitemap, NhSitemapEntry, NhSitemapEntryItem, NhStringUtil, NhTaskResultFormValidationService, NhTitleService, NhToHeadDirective, NhTranslateBrowserLoader, NhTranslationNhCommonModuleConfig, NhTwoFactorChallenge, NhTwoFactorChange, NhTwoFactorEmailCodeSent, NhTwoFactorEnrollmentResult, NhTwoFactorFailureCodes, NhTwoFactorMethods, NhTwoFactorReauthentication, NhTwoFactorStatus, NhTwoFactorVerifyModel, NhTypedPageBaseComponent, NhTypedPageTypeBaseComponent, NhUrlEncodePipe, NhUser, NhUserNotification, NhUserNotificationCollectionHttpRequestOptions, NhUserNotificationData, NhUserNotificationMessage, NhUserNotificationOverview, NhUserNotificationService, NhUserNotificationState, NhUserNotificationsAbstractComponent, OrderByRequestOptions, PreConnectUrlItem, PreLoadUrlItem, REVIEW_AGGREGATE_RATING_KEY, REVIEW_KEY, RefreshTokenLoginAccountMutateModel, RevertImpersonateAuthenticateModel, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SearchableCollectionHttpRequestOptions, SimpleCollectionHttpRequestOptions, SimpleCollectionHttpResponse, TaskResult, TaskResultItem, TypedNhPageSettings, UserNotificationNhCommonModuleConfig, enumIntValuesToArray, enumKeysToArray, enumStringValuesToArray, enumValuesToArray, getEmptyGuid, getRandomIdentifier, groupBy, languageToCultureMap, nameof, nhBackgroundOperationStatusName, nhBackgroundOperationStepStatusName, nhBackgroundOperationTranslationSegment, nhTranslateBrowserLoaderFactory, nhUserNotificationSeverityName, uppercaseFirst };
|
|
8773
9742
|
//# sourceMappingURL=newheap-platform-common.mjs.map
|