@dsivd/prestations-ng 18.3.14 → 18.3.15
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/CHANGELOG.md +18 -0
- package/UPGRADING_V19.md +9 -5
- package/abstract-page-component.d.ts +9 -0
- package/dsivd-prestations-ng-18.3.15.tgz +0 -0
- package/fesm2022/dsivd-prestations-ng.mjs +114 -20
- package/fesm2022/dsivd-prestations-ng.mjs.map +1 -1
- package/foehn-navigation/abstract-foehn-navigation.component.d.ts +10 -1
- package/foehn-navigation/foehn-navigation.service.d.ts +8 -0
- package/foehn-upload/foehn-multi-upload/pending-upload.service.d.ts +2 -2
- package/package.json +1 -1
- package/dsivd-prestations-ng-18.3.14.tgz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,24 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## [18.3.15]
|
|
10
|
+
|
|
11
|
+
### Updated
|
|
12
|
+
|
|
13
|
+
- [foehn-navigation.component.html](projects/prestations-ng/src/foehn-navigation/foehn-navigation/foehn-navigation.component.html)
|
|
14
|
+
- [foehn-simple-navigation.component.html](projects/prestations-ng/src/foehn-navigation/foehn-simple-navigation/foehn-simple-navigation.component.html)
|
|
15
|
+
- while the page targeted by "next", "transmit" or "previous" is loading for more than 200 ms (e.g. lazy loaded route), the clicked button displays a spinner with the new `loadingLabel` input (dictionary key `foehn-navigation.loading.label`, "Chargement...") and the navigation buttons are disabled (`aria-disabled`; clicks are ignored from the start of the navigation); a `role="status"` region announces the loading to screen readers
|
|
16
|
+
- [foehn-navigation.service.ts](projects/prestations-ng/src/foehn-navigation/foehn-navigation.service.ts)
|
|
17
|
+
- new method `pendingNavigationDirection()`: direction of the navigation started with `next()` or `previous()` until it ends, `null` otherwise
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- [abstract-page-component.ts](projects/prestations-ng/src/abstract-page-component.ts)
|
|
22
|
+
- fixed a second click on "next" or "transmit" while the next page is loading (lazy loaded route, resolver, async guard) saving again and skipping the next page: `send()`, `sendAndTransmit()` and `transmit()` are now ignored until the navigation to the next page ends
|
|
23
|
+
- new protected method `navigateToNextPage()`: pages overriding `onFormSent()` should call it instead of `this._navigation.next()` to get this protection
|
|
24
|
+
- [abstract-page-from-menu.component.ts](projects/prestations-ng/src/foehn-menu-prestation/abstract-page-from-menu.component.ts)
|
|
25
|
+
- same fix when returning to the parent page
|
|
26
|
+
|
|
9
27
|
## [18.3.14]
|
|
10
28
|
|
|
11
29
|
### Fixed
|
package/UPGRADING_V19.md
CHANGED
|
@@ -11,8 +11,8 @@ From here on, we are in the root folder of your project, for example ~/git/cybsd
|
|
|
11
11
|
|
|
12
12
|
### Spring Boot 4
|
|
13
13
|
|
|
14
|
-
You can switch to Java 25 `jdk25` + change in IntelliJ: right-click on your project > Open Module Settings > Project > set "SDK" to `jdk25` from devtools and "Language
|
|
15
|
-
|
|
14
|
+
You can switch to Java 25 `jdk25` + change in IntelliJ: right-click on your project > Open Module Settings > Project > set "SDK" to `jdk25` from devtools and "Language
|
|
15
|
+
level" to `25` in "Modules"
|
|
16
16
|
|
|
17
17
|
Use the latest application-parent v15+ in your `pom.xml`.
|
|
18
18
|
|
|
@@ -53,6 +53,7 @@ If the following plugin with Lombok path was added by the recipe, remove this pl
|
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
If the code uses `AutoConfigureMockMvc`, add:
|
|
56
|
+
|
|
56
57
|
```xml
|
|
57
58
|
<dependency>
|
|
58
59
|
<groupId>org.springframework.boot</groupId>
|
|
@@ -60,9 +61,10 @@ If the code uses `AutoConfigureMockMvc`, add:
|
|
|
60
61
|
<scope>test</scope>
|
|
61
62
|
</dependency>
|
|
62
63
|
```
|
|
64
|
+
|
|
63
65
|
And replace the old `AutoConfigureMockMvc` import which is not recognized anymore by the new one.
|
|
64
66
|
|
|
65
|
-
If we use in pom.xml Spring/Hibernate dependencies (like hibernate-jpamodelgen), check the Spring Boot 4 migration
|
|
67
|
+
If we use in pom.xml Spring/Hibernate dependencies (like hibernate-jpamodelgen), check the Spring Boot 4 migration
|
|
66
68
|
guide to see if it has been replaced by another library: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide
|
|
67
69
|
|
|
68
70
|
### Jackson migration
|
|
@@ -72,14 +74,16 @@ Replace `com.fasterxml.jackson.databind.ObjectMapper` with `tools.jackson.databi
|
|
|
72
74
|
|
|
73
75
|
### Brave Tracer
|
|
74
76
|
|
|
75
|
-
If you are using Brave Tracer (search `brace.Tracer` in the code, usually in backoffices), you need to replace it with
|
|
77
|
+
If you are using Brave Tracer (search `brace.Tracer` in the code, usually in backoffices), you need to replace it with
|
|
76
78
|
OpenTelemetry by adding the following dependency:
|
|
79
|
+
|
|
77
80
|
```xml
|
|
78
81
|
<dependency>
|
|
79
82
|
<groupId>org.springframework.boot</groupId>
|
|
80
83
|
<artifactId>spring-boot-micrometer-tracing-brave</artifactId>
|
|
81
84
|
</dependency>
|
|
82
85
|
```
|
|
86
|
+
|
|
83
87
|
And replace `brave.Tracer` imports by `io.micrometer.tracing.Tracer`;
|
|
84
88
|
|
|
85
89
|
### Property migration
|
|
@@ -100,8 +104,8 @@ Look for logs that indicate property you should migrate (watch for WARN logs of
|
|
|
100
104
|
|
|
101
105
|
Spring boot 4 doesn't support calling a controller with a trailing slash, fix the url called (/api/ping != /api/ping**/**)
|
|
102
106
|
|
|
103
|
-
|
|
104
107
|
### Clean Sonar code smells
|
|
108
|
+
|
|
105
109
|
You can use the following OpenRewrite recipes to clean Sonar code smells. It is recommended to do it after the migration to avoid mixing the migration changes with code cleaning changes, and to make it easier to review.
|
|
106
110
|
|
|
107
111
|
```bash
|
|
@@ -38,6 +38,7 @@ export declare abstract class AbstractPageComponent<T extends I18nForm> implemen
|
|
|
38
38
|
private _currentLangSubscription;
|
|
39
39
|
private _transmitConcurrentSafe;
|
|
40
40
|
private _gesdemSaveSubscription;
|
|
41
|
+
private _isNavigatingToNextPage;
|
|
41
42
|
private readonly _registerNgModelService;
|
|
42
43
|
constructor(activatedRoute: ActivatedRoute);
|
|
43
44
|
ngOnInit(): void;
|
|
@@ -50,6 +51,14 @@ export declare abstract class AbstractPageComponent<T extends I18nForm> implemen
|
|
|
50
51
|
protected setPageTitle(pageTitle: string): void;
|
|
51
52
|
protected setPageTitleAsync(pageTitle: Observable<string>): void;
|
|
52
53
|
protected onFormSent(goToNextPage: boolean): void;
|
|
54
|
+
/**
|
|
55
|
+
* Navigates to the next page and ignores send(), sendAndTransmit() and transmit() until the navigation ends.
|
|
56
|
+
*
|
|
57
|
+
* The current page stays displayed and clickable while the next one is activated (e.g. lazy loaded route,
|
|
58
|
+
* resolver or async guard): a second click on "next" would save again, then navigate once more from the
|
|
59
|
+
* next page and skip it.
|
|
60
|
+
*/
|
|
61
|
+
protected navigateToNextPage(): Promise<void>;
|
|
53
62
|
private checkHasPendingsFilesBeforeTransmit;
|
|
54
63
|
private gotToTop;
|
|
55
64
|
abstract newForm(): T;
|
|
Binary file
|
|
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Optional, Inject, Injectable, EventEmitter, Input, HostBinding, Output, forwardRef, ViewChildren, ViewChild, Directive, Pipe, Component, ContentChildren, InjectionToken, HostListener, inject, ErrorHandler, NgModule, TemplateRef, ContentChild } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/router';
|
|
4
4
|
import { ActivatedRoute, NavigationStart, RouterModule, NavigationEnd, RouterLink } from '@angular/router';
|
|
5
|
-
import { of, Subject, BehaviorSubject, combineLatest, throwError, switchMap as switchMap$1, forkJoin, tap as tap$1, from, concatMap, toArray, EMPTY, takeUntil, startWith, filter as filter$1, merge, interval, withLatestFrom, map as map$1, debounceTime as debounceTime$1, concat } from 'rxjs';
|
|
6
|
-
import { map, shareReplay, filter, tap, debounceTime, catchError, switchMap, first, finalize, throttleTime, mergeMap, share, take, distinctUntilChanged } from 'rxjs/operators';
|
|
5
|
+
import { of, Subject, BehaviorSubject, combineLatest, throwError, switchMap as switchMap$1, forkJoin, tap as tap$1, from, concatMap, toArray, EMPTY, takeUntil, startWith, filter as filter$1, merge, interval, withLatestFrom, map as map$1, debounceTime as debounceTime$1, timer, concat } from 'rxjs';
|
|
6
|
+
import { map, shareReplay, filter, tap, debounceTime, catchError, switchMap, first, finalize, throttleTime, mergeMap, share, take, distinctUntilChanged, skip } from 'rxjs/operators';
|
|
7
7
|
import * as i1 from '@angular/common/http';
|
|
8
8
|
import { HttpStatusCode, HttpResponseBase, HttpErrorResponse, HttpParams, HttpEventType, HttpResponse, HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi, withInterceptors, HttpClient } from '@angular/common/http';
|
|
9
9
|
import * as i3 from '@angular/forms';
|
|
@@ -25,6 +25,7 @@ import * as i5 from '@angular/cdk/scrolling';
|
|
|
25
25
|
import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
|
|
26
26
|
import 'core-js/modules/es.array.includes';
|
|
27
27
|
import localeData from 'dayjs/plugin/localeData';
|
|
28
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
28
29
|
import * as i6 from 'ngx-image-cropper';
|
|
29
30
|
import { ImageCropperComponent } from 'ngx-image-cropper';
|
|
30
31
|
import * as iban from 'iban';
|
|
@@ -1215,6 +1216,7 @@ const DEFAULT_DICTIONARY = {
|
|
|
1215
1216
|
'foehn-navigation.next.label': 'Suivant',
|
|
1216
1217
|
'foehn-navigation.previous.label': 'Précédent',
|
|
1217
1218
|
'foehn-navigation.transmit.label': 'Transmettre',
|
|
1219
|
+
'foehn-navigation.loading.label': 'Chargement...',
|
|
1218
1220
|
'foehn-navigation.continue-later.label': 'Envoyer un lien pour reprendre cette demande plus tard',
|
|
1219
1221
|
'foehn-navigation.continue-later-already-registered.label': 'Modifier mes informations de reprise et envoyer un nouveau lien',
|
|
1220
1222
|
'foehn-navigation.continue-later-connected.label': 'Finir la demande plus tard',
|
|
@@ -2602,6 +2604,8 @@ class FoehnNavigationService {
|
|
|
2602
2604
|
this.isInit = false;
|
|
2603
2605
|
this.initializedAndRouteActivated = new BehaviorSubject(false);
|
|
2604
2606
|
this.linearRouting = true;
|
|
2607
|
+
this.pendingNavigationDirectionSubject = new BehaviorSubject(null);
|
|
2608
|
+
this.lastNavigationId = 0;
|
|
2605
2609
|
}
|
|
2606
2610
|
get initialized() {
|
|
2607
2611
|
return this.isInit;
|
|
@@ -2679,6 +2683,14 @@ class FoehnNavigationService {
|
|
|
2679
2683
|
hasBeenInitialized() {
|
|
2680
2684
|
return this.initializedAndRouteActivated.asObservable();
|
|
2681
2685
|
}
|
|
2686
|
+
/**
|
|
2687
|
+
* Direction of the navigation started with next() or previous() until it ends, null otherwise.
|
|
2688
|
+
* The current page stays displayed while the target one is activated (e.g. lazy loaded route).
|
|
2689
|
+
* @returns Observable<NavigationDirection>
|
|
2690
|
+
*/
|
|
2691
|
+
pendingNavigationDirection() {
|
|
2692
|
+
return this.pendingNavigationDirectionSubject.asObservable();
|
|
2693
|
+
}
|
|
2682
2694
|
getQueryParamsToForwardAsString() {
|
|
2683
2695
|
const params = this.getQueryParamsToForward() || [];
|
|
2684
2696
|
let stringParams = '';
|
|
@@ -2832,7 +2844,15 @@ class FoehnNavigationService {
|
|
|
2832
2844
|
? SdkEventType.NAVIGATION_FORWARD
|
|
2833
2845
|
: SdkEventType.NAVIGATION_BACKWARD;
|
|
2834
2846
|
this.eventsLoggerService.addEvent(eventType, route.path);
|
|
2835
|
-
|
|
2847
|
+
const navigation = this.redirect(route.path);
|
|
2848
|
+
const navigationId = ++this.lastNavigationId;
|
|
2849
|
+
this.pendingNavigationDirectionSubject.next(direction);
|
|
2850
|
+
return navigation.finally(() => {
|
|
2851
|
+
// A navigation replaced by a newer one ends first (cancelled).
|
|
2852
|
+
if (navigationId === this.lastNavigationId) {
|
|
2853
|
+
this.pendingNavigationDirectionSubject.next(null);
|
|
2854
|
+
}
|
|
2855
|
+
});
|
|
2836
2856
|
}
|
|
2837
2857
|
isRouteAvailable(route) {
|
|
2838
2858
|
const { canActivate } = route;
|
|
@@ -3044,10 +3064,6 @@ class PendingUploadService {
|
|
|
3044
3064
|
this.uploadPendingFilesAndSaveForm(form);
|
|
3045
3065
|
});
|
|
3046
3066
|
}
|
|
3047
|
-
ngOnDestroy() {
|
|
3048
|
-
this.destroy$.next();
|
|
3049
|
-
this.destroy$.complete();
|
|
3050
|
-
}
|
|
3051
3067
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3052
3068
|
get attachmentsUploaded() {
|
|
3053
3069
|
return this.attachmentsUploadedSubject.asObservable();
|
|
@@ -3055,6 +3071,10 @@ class PendingUploadService {
|
|
|
3055
3071
|
get pendingUploadedErrors() {
|
|
3056
3072
|
return this.pendingUploadedErrorsSubject.asObservable();
|
|
3057
3073
|
}
|
|
3074
|
+
ngOnDestroy() {
|
|
3075
|
+
this.destroy$.next();
|
|
3076
|
+
this.destroy$.complete();
|
|
3077
|
+
}
|
|
3058
3078
|
getPendingFiles(formKey) {
|
|
3059
3079
|
if (this.pendingFilesByFormKey.get(formKey)) {
|
|
3060
3080
|
return this.pendingFilesByFormKey.get(formKey).files;
|
|
@@ -3118,7 +3138,7 @@ class PendingUploadService {
|
|
|
3118
3138
|
.pipe(concatMap(([formKey, pendingFiles]) => this.executeSingleUpload(formKey, pendingFiles, form, mergedResponse)), toArray(), finalize(() => {
|
|
3119
3139
|
this.uploadProgressService.forceComplete();
|
|
3120
3140
|
this.uploadProgressService.showProgress.next(false);
|
|
3121
|
-
}), switchMap(() => this.gesdemService.save(form, false, false).pipe(catchError(err => {
|
|
3141
|
+
}), switchMap(() => this.gesdemService.save(form, false, false).pipe(catchError((err) => {
|
|
3122
3142
|
console.error('Gesdem save failed', err);
|
|
3123
3143
|
return EMPTY;
|
|
3124
3144
|
}))), takeUntil(this.destroy$))
|
|
@@ -3130,7 +3150,9 @@ class PendingUploadService {
|
|
|
3130
3150
|
}
|
|
3131
3151
|
});
|
|
3132
3152
|
}
|
|
3133
|
-
executeSingleUpload(formKey, pendingFiles,
|
|
3153
|
+
executeSingleUpload(formKey, pendingFiles,
|
|
3154
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3155
|
+
form, mergedResponse) {
|
|
3134
3156
|
const executor = this.uploadExecutors.get(formKey);
|
|
3135
3157
|
if (!executor) {
|
|
3136
3158
|
console.warn('No uploader registered for', formKey);
|
|
@@ -3139,7 +3161,7 @@ class PendingUploadService {
|
|
|
3139
3161
|
return executor().pipe(tap(response => {
|
|
3140
3162
|
this.mergePendingUploadedServerResult(mergedResponse, response);
|
|
3141
3163
|
this.setNestedValue(form, pendingFiles.formKey, response.documents);
|
|
3142
|
-
}), catchError(error => {
|
|
3164
|
+
}), catchError((error) => {
|
|
3143
3165
|
const documentError = new DocumentError();
|
|
3144
3166
|
documentError.formKey = pendingFiles.formKey;
|
|
3145
3167
|
documentError.key = pendingFiles.key;
|
|
@@ -3218,6 +3240,7 @@ function getConcurrentSafeCall(fn) {
|
|
|
3218
3240
|
class AbstractPageComponent {
|
|
3219
3241
|
constructor(activatedRoute) {
|
|
3220
3242
|
this.activatedRoute = activatedRoute;
|
|
3243
|
+
this._isNavigatingToNextPage = false;
|
|
3221
3244
|
this._gesdemService = ServiceLocator.injector.get(GesdemHandlerService);
|
|
3222
3245
|
this._gesdemEventService =
|
|
3223
3246
|
ServiceLocator.injector.get(GesdemEventService);
|
|
@@ -3308,6 +3331,9 @@ class AbstractPageComponent {
|
|
|
3308
3331
|
this.saveFormRequestSubscription?.unsubscribe();
|
|
3309
3332
|
}
|
|
3310
3333
|
send(goToNextPage = true, displaySuccessMessage = true) {
|
|
3334
|
+
if (this._isNavigatingToNextPage) {
|
|
3335
|
+
return;
|
|
3336
|
+
}
|
|
3311
3337
|
const hasPendingFiles = this._pendingUploadService.hasPendingFiles();
|
|
3312
3338
|
if (hasPendingFiles) {
|
|
3313
3339
|
goToNextPage = false;
|
|
@@ -3332,6 +3358,9 @@ class AbstractPageComponent {
|
|
|
3332
3358
|
}
|
|
3333
3359
|
}
|
|
3334
3360
|
transmit() {
|
|
3361
|
+
if (this._isNavigatingToNextPage) {
|
|
3362
|
+
return;
|
|
3363
|
+
}
|
|
3335
3364
|
this._validationHandlerService.shouldDisplayErrors(true);
|
|
3336
3365
|
this._transmitConcurrentSafe
|
|
3337
3366
|
.pipe(tap(() => this._eventsLoggerService.addEvent(SdkEventType.TRANSMIT)), catchError((error) => {
|
|
@@ -3343,11 +3372,14 @@ class AbstractPageComponent {
|
|
|
3343
3372
|
// Do not show warning alert on closing tab or navigator when form has been transmitted
|
|
3344
3373
|
this._registerNgModelService.setHasInteractions(false);
|
|
3345
3374
|
this._gesdemEventService.formTransmittedSubject.next(this._gesdemService.lastResponse);
|
|
3346
|
-
this.
|
|
3375
|
+
this.navigateToNextPage();
|
|
3347
3376
|
}
|
|
3348
3377
|
});
|
|
3349
3378
|
}
|
|
3350
3379
|
sendAndTransmit(displaySuccessMessage = true) {
|
|
3380
|
+
if (this._isNavigatingToNextPage) {
|
|
3381
|
+
return;
|
|
3382
|
+
}
|
|
3351
3383
|
this._gesdemEventService
|
|
3352
3384
|
.formSentObservable()
|
|
3353
3385
|
.pipe(first())
|
|
@@ -3393,13 +3425,33 @@ class AbstractPageComponent {
|
|
|
3393
3425
|
}
|
|
3394
3426
|
this._gesdemEventService.formSentSubject.next(this._gesdemService.lastResponse);
|
|
3395
3427
|
if (isValid && goToNextPage) {
|
|
3396
|
-
this.
|
|
3428
|
+
this.navigateToNextPage();
|
|
3397
3429
|
}
|
|
3398
3430
|
else if (!isValid && this.foehnFormComponent) {
|
|
3399
3431
|
this.foehnFormComponent.focusErrorSummary();
|
|
3400
3432
|
}
|
|
3401
3433
|
}, console.error);
|
|
3402
3434
|
}
|
|
3435
|
+
/**
|
|
3436
|
+
* Navigates to the next page and ignores send(), sendAndTransmit() and transmit() until the navigation ends.
|
|
3437
|
+
*
|
|
3438
|
+
* The current page stays displayed and clickable while the next one is activated (e.g. lazy loaded route,
|
|
3439
|
+
* resolver or async guard): a second click on "next" would save again, then navigate once more from the
|
|
3440
|
+
* next page and skip it.
|
|
3441
|
+
*/
|
|
3442
|
+
async navigateToNextPage() {
|
|
3443
|
+
if (this._isNavigatingToNextPage) {
|
|
3444
|
+
return;
|
|
3445
|
+
}
|
|
3446
|
+
this._isNavigatingToNextPage = true;
|
|
3447
|
+
try {
|
|
3448
|
+
await this._navigation.next();
|
|
3449
|
+
}
|
|
3450
|
+
finally {
|
|
3451
|
+
// Released when the navigation is cancelled or fails so that the user can try again.
|
|
3452
|
+
this._isNavigatingToNextPage = false;
|
|
3453
|
+
}
|
|
3454
|
+
}
|
|
3403
3455
|
checkHasPendingsFilesBeforeTransmit() {
|
|
3404
3456
|
if (this._pendingUploadService.hasPendingFiles()) {
|
|
3405
3457
|
const multiUploadAttachmentSubscription = this._pendingUploadService.attachmentsUploaded.subscribe(() => {
|
|
@@ -13790,34 +13842,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
13790
13842
|
}]
|
|
13791
13843
|
}] });
|
|
13792
13844
|
|
|
13845
|
+
// The loading state isn't displayed when the target page loads quickly, so that it doesn't flicker.
|
|
13846
|
+
const LOADING_DISPLAY_DELAY_MS = 200;
|
|
13793
13847
|
class AbstractFoehnNavigationComponent {
|
|
13794
13848
|
constructor() {
|
|
13795
13849
|
this.onNext = new EventEmitter();
|
|
13796
13850
|
this.onPrevious = new EventEmitter();
|
|
13797
13851
|
this.nextLabel = 'foehn-navigation.next.label';
|
|
13798
13852
|
this.prevLabel = 'foehn-navigation.previous.label';
|
|
13853
|
+
this.loadingLabel = 'foehn-navigation.loading.label';
|
|
13799
13854
|
this.continueLaterLabel = 'foehn-navigation.continue-later.label';
|
|
13800
13855
|
this.continueLaterAlreadyRegisteredLabel = 'foehn-navigation.continue-later-already-registered.label';
|
|
13801
13856
|
this.continueLaterConnectedLabel = 'foehn-navigation.continue-later-connected.label';
|
|
13802
13857
|
this.showContinueLaterButton = true;
|
|
13803
13858
|
this.showNextButton = true;
|
|
13804
13859
|
this.triggerRecoveryOnPageChange = false;
|
|
13860
|
+
this.pendingNavigationDirection = null;
|
|
13861
|
+
this.loadingDirection = null;
|
|
13862
|
+
const pendingNavigationDirection = inject(FoehnNavigationService)
|
|
13863
|
+
.pendingNavigationDirection()
|
|
13864
|
+
.pipe(
|
|
13865
|
+
// A navigation pending when the component is created is the one activating its page.
|
|
13866
|
+
skip(1));
|
|
13867
|
+
pendingNavigationDirection
|
|
13868
|
+
.pipe(takeUntilDestroyed())
|
|
13869
|
+
.subscribe(direction => {
|
|
13870
|
+
this.pendingNavigationDirection = direction;
|
|
13871
|
+
});
|
|
13872
|
+
pendingNavigationDirection
|
|
13873
|
+
.pipe(switchMap(direction => direction === null
|
|
13874
|
+
? of(null)
|
|
13875
|
+
: timer(LOADING_DISPLAY_DELAY_MS).pipe(map(() => direction))), takeUntilDestroyed())
|
|
13876
|
+
.subscribe(direction => {
|
|
13877
|
+
this.loadingDirection = direction;
|
|
13878
|
+
});
|
|
13805
13879
|
}
|
|
13806
13880
|
goToNext() {
|
|
13881
|
+
if (this.isNavigating()) {
|
|
13882
|
+
return;
|
|
13883
|
+
}
|
|
13807
13884
|
this.onNext.emit();
|
|
13808
13885
|
}
|
|
13809
13886
|
goToPrevious() {
|
|
13887
|
+
if (this.isNavigating()) {
|
|
13888
|
+
return;
|
|
13889
|
+
}
|
|
13810
13890
|
this.onPrevious.emit();
|
|
13811
13891
|
}
|
|
13812
13892
|
canShowNextButton() {
|
|
13813
13893
|
return this.showNextButton;
|
|
13814
13894
|
}
|
|
13895
|
+
isNavigating() {
|
|
13896
|
+
return this.pendingNavigationDirection !== null;
|
|
13897
|
+
}
|
|
13898
|
+
isLoading() {
|
|
13899
|
+
return this.loadingDirection !== null;
|
|
13900
|
+
}
|
|
13901
|
+
isLoadingNext() {
|
|
13902
|
+
return this.loadingDirection === NavigationDirection.FORWARD;
|
|
13903
|
+
}
|
|
13904
|
+
isLoadingPrevious() {
|
|
13905
|
+
return this.loadingDirection === NavigationDirection.BACKWARD;
|
|
13906
|
+
}
|
|
13815
13907
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AbstractFoehnNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
13816
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: AbstractFoehnNavigationComponent, isStandalone: true, inputs: { nextLabel: "nextLabel", prevLabel: "prevLabel", continueLaterLabel: "continueLaterLabel", continueLaterAlreadyRegisteredLabel: "continueLaterAlreadyRegisteredLabel", continueLaterConnectedLabel: "continueLaterConnectedLabel", showContinueLaterButton: "showContinueLaterButton", showNextButton: "showNextButton", triggerRecoveryOnPageChange: "triggerRecoveryOnPageChange" }, outputs: { onNext: "onNext", onPrevious: "onPrevious" }, ngImport: i0 }); }
|
|
13908
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: AbstractFoehnNavigationComponent, isStandalone: true, inputs: { nextLabel: "nextLabel", prevLabel: "prevLabel", loadingLabel: "loadingLabel", continueLaterLabel: "continueLaterLabel", continueLaterAlreadyRegisteredLabel: "continueLaterAlreadyRegisteredLabel", continueLaterConnectedLabel: "continueLaterConnectedLabel", showContinueLaterButton: "showContinueLaterButton", showNextButton: "showNextButton", triggerRecoveryOnPageChange: "triggerRecoveryOnPageChange" }, outputs: { onNext: "onNext", onPrevious: "onPrevious" }, ngImport: i0 }); }
|
|
13817
13909
|
}
|
|
13818
13910
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AbstractFoehnNavigationComponent, decorators: [{
|
|
13819
13911
|
type: Directive
|
|
13820
|
-
}], propDecorators: {
|
|
13912
|
+
}], ctorParameters: () => [], propDecorators: {
|
|
13821
13913
|
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
13822
13914
|
onNext: [{
|
|
13823
13915
|
type: Output
|
|
@@ -13829,6 +13921,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
13829
13921
|
type: Input
|
|
13830
13922
|
}], prevLabel: [{
|
|
13831
13923
|
type: Input
|
|
13924
|
+
}], loadingLabel: [{
|
|
13925
|
+
type: Input
|
|
13832
13926
|
}], continueLaterLabel: [{
|
|
13833
13927
|
type: Input
|
|
13834
13928
|
}], continueLaterAlreadyRegisteredLabel: [{
|
|
@@ -13890,11 +13984,11 @@ class FoehnNavigationComponent extends AbstractFoehnNavigationComponent {
|
|
|
13890
13984
|
return this.navigationService.isLinearRouting();
|
|
13891
13985
|
}
|
|
13892
13986
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FoehnNavigationComponent, deps: [{ token: FoehnNavigationService }, { token: i1$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13893
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FoehnNavigationComponent, isStandalone: false, selector: "foehn-navigation", inputs: { transmitLabel: "transmitLabel" }, usesInheritance: true, ngImport: i0, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<sdk-pending-payment\n *ngIf=\"isForcedOnRecapForPendingPayment()\"\n (onPay)=\"goToNext()\"\n></sdk-pending-payment>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <foehn-icon-chevron-left\n
|
|
13987
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FoehnNavigationComponent, isStandalone: false, selector: "foehn-navigation", inputs: { transmitLabel: "transmitLabel" }, usesInheritance: true, ngImport: i0, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<sdk-pending-payment\n *ngIf=\"isForcedOnRecapForPendingPayment()\"\n (onPay)=\"goToNext()\"\n></sdk-pending-payment>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingPrevious(); else loading\">\n <foehn-icon-chevron-left\n class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\n </ng-container>\n </span>\n <span class=\"visually-hidden\" *ngIf=\"isLinearRouting()\">:</span>\n <span class=\"vd-pagination__label\" *ngIf=\"isLinearRouting()\">\n {{ getPreviousRouteIndex() }}\n {{\n 'foehn-navigation.route.index.separator'\n | fromDictionary\n }}\n {{ getTotalRoutesSize() }}\n </span>\n </button>\n </li>\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n *ngIf=\"!isLastFormPage() && canShowNextButton()\"\n >\n <button\n id=\"nextButton\"\n type=\"submit\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingNext(); else loading\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\n </ng-container>\n </span>\n <span class=\"visually-hidden\" *ngIf=\"isLinearRouting()\">:</span>\n <span class=\"vd-pagination__label\" *ngIf=\"isLinearRouting()\">\n {{ getNextRouteIndex() }}\n {{\n 'foehn-navigation.route.index.separator'\n | fromDictionary\n }}\n {{ getTotalRoutesSize() }}\n </span>\n </button>\n </li>\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n *ngIf=\"isLastFormPage() && canShowNextButton()\"\n >\n <button\n *ngIf=\"isLastFormPage() && canShowNextButton()\"\n type=\"submit\"\n id=\"transmitButton\"\n (click)=\"goToNext()\"\n class=\"btn btn-success vd-btn-pagination-submit\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n >\n <ng-container *ngIf=\"!isLoadingNext(); else loading\">\n {{ transmitLabel | fromDictionary }}\n </ng-container>\n </button>\n </li>\n </ul>\n <span class=\"visually-hidden\" role=\"status\">\n <ng-container *ngIf=\"isLoading()\">\n {{ loadingLabel | fromDictionary }}\n </ng-container>\n </span>\n</nav>\n\n<ng-template #loading>\n <span\n class=\"spinner-border spinner-border-sm me-1\"\n aria-hidden=\"true\"\n ></span>\n {{ loadingLabel | fromDictionary }}\n</ng-template>\n", styles: [".vd-pagination__link-reset{background:none;border:none;font-weight:inherit;text-decoration-line:none;text-align:inherit;cursor:pointer}.vd-pagination__link-reset:focus{background-color:var(--vd-focus)}:host ::ng-deep .btn.btn-link .svg-inline--fa{color:var(--vd-primary-dark)}:host ::ng-deep .btn.btn-link:hover .svg-inline--fa{color:var(--vd-neutral-dark)}.btn.btn-link{text-transform:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FoehnIconChevronLeftComponent, selector: "foehn-icon-chevron-left" }, { kind: "component", type: FoehnIconChevronRightComponent, selector: "foehn-icon-chevron-right" }, { kind: "component", type: GesdemActionRecoveryRegistrationComponent, selector: "gesdem-action-recovery-registration", inputs: ["dispatchFormErrors", "continueLaterLabel", "continueLaterAlreadyRegisteredLabel", "continueLaterConnectedLabel", "triggerOnPageChange"] }, { kind: "component", type: PendingPaymentComponent, selector: "sdk-pending-payment", outputs: ["onPay"] }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
|
|
13894
13988
|
}
|
|
13895
13989
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FoehnNavigationComponent, decorators: [{
|
|
13896
13990
|
type: Component,
|
|
13897
|
-
args: [{ selector: 'foehn-navigation', standalone: false, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<sdk-pending-payment\n *ngIf=\"isForcedOnRecapForPendingPayment()\"\n (onPay)=\"goToNext()\"\n></sdk-pending-payment>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <foehn-icon-chevron-left\n
|
|
13991
|
+
args: [{ selector: 'foehn-navigation', standalone: false, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<sdk-pending-payment\n *ngIf=\"isForcedOnRecapForPendingPayment()\"\n (onPay)=\"goToNext()\"\n></sdk-pending-payment>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingPrevious(); else loading\">\n <foehn-icon-chevron-left\n class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\n </ng-container>\n </span>\n <span class=\"visually-hidden\" *ngIf=\"isLinearRouting()\">:</span>\n <span class=\"vd-pagination__label\" *ngIf=\"isLinearRouting()\">\n {{ getPreviousRouteIndex() }}\n {{\n 'foehn-navigation.route.index.separator'\n | fromDictionary\n }}\n {{ getTotalRoutesSize() }}\n </span>\n </button>\n </li>\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n *ngIf=\"!isLastFormPage() && canShowNextButton()\"\n >\n <button\n id=\"nextButton\"\n type=\"submit\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingNext(); else loading\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\n </ng-container>\n </span>\n <span class=\"visually-hidden\" *ngIf=\"isLinearRouting()\">:</span>\n <span class=\"vd-pagination__label\" *ngIf=\"isLinearRouting()\">\n {{ getNextRouteIndex() }}\n {{\n 'foehn-navigation.route.index.separator'\n | fromDictionary\n }}\n {{ getTotalRoutesSize() }}\n </span>\n </button>\n </li>\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n *ngIf=\"isLastFormPage() && canShowNextButton()\"\n >\n <button\n *ngIf=\"isLastFormPage() && canShowNextButton()\"\n type=\"submit\"\n id=\"transmitButton\"\n (click)=\"goToNext()\"\n class=\"btn btn-success vd-btn-pagination-submit\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n >\n <ng-container *ngIf=\"!isLoadingNext(); else loading\">\n {{ transmitLabel | fromDictionary }}\n </ng-container>\n </button>\n </li>\n </ul>\n <span class=\"visually-hidden\" role=\"status\">\n <ng-container *ngIf=\"isLoading()\">\n {{ loadingLabel | fromDictionary }}\n </ng-container>\n </span>\n</nav>\n\n<ng-template #loading>\n <span\n class=\"spinner-border spinner-border-sm me-1\"\n aria-hidden=\"true\"\n ></span>\n {{ loadingLabel | fromDictionary }}\n</ng-template>\n", styles: [".vd-pagination__link-reset{background:none;border:none;font-weight:inherit;text-decoration-line:none;text-align:inherit;cursor:pointer}.vd-pagination__link-reset:focus{background-color:var(--vd-focus)}:host ::ng-deep .btn.btn-link .svg-inline--fa{color:var(--vd-primary-dark)}:host ::ng-deep .btn.btn-link:hover .svg-inline--fa{color:var(--vd-neutral-dark)}.btn.btn-link{text-transform:none}\n"] }]
|
|
13898
13992
|
}], ctorParameters: () => [{ type: FoehnNavigationService }, { type: i1$1.ActivatedRoute }], propDecorators: { transmitLabel: [{
|
|
13899
13993
|
type: Input
|
|
13900
13994
|
}] } });
|
|
@@ -13908,11 +14002,11 @@ class FoehnSimpleNavigationComponent extends AbstractFoehnNavigationComponent {
|
|
|
13908
14002
|
return this.showPreviousButton;
|
|
13909
14003
|
}
|
|
13910
14004
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FoehnSimpleNavigationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
13911
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FoehnSimpleNavigationComponent, isStandalone: false, selector: "foehn-simple-navigation", inputs: { showPreviousButton: "showPreviousButton" }, usesInheritance: true, ngImport: i0, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <foehn-icon-chevron-left\n
|
|
14005
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FoehnSimpleNavigationComponent, isStandalone: false, selector: "foehn-simple-navigation", inputs: { showPreviousButton: "showPreviousButton" }, usesInheritance: true, ngImport: i0, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingPrevious(); else loading\">\n <foehn-icon-chevron-left\n class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\n </ng-container>\n </span>\n </button>\n </li>\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n *ngIf=\"canShowNextButton()\"\n >\n <button\n id=\"nextButton\"\n type=\"submit\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingNext(); else loading\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\n </ng-container>\n </span>\n </button>\n </li>\n </ul>\n <span class=\"visually-hidden\" role=\"status\">\n <ng-container *ngIf=\"isLoading()\">\n {{ loadingLabel | fromDictionary }}\n </ng-container>\n </span>\n</nav>\n\n<ng-template #loading>\n <span\n class=\"spinner-border spinner-border-sm me-1\"\n aria-hidden=\"true\"\n ></span>\n {{ loadingLabel | fromDictionary }}\n</ng-template>\n", styles: [".vd-pagination__link-reset{background:none;border:none;font-weight:inherit;text-decoration-line:none;text-align:inherit;cursor:pointer}.vd-pagination__link-reset:focus{background-color:var(--vd-focus)}:host ::ng-deep .btn.btn-link .svg-inline--fa{color:var(--vd-primary-dark)}:host ::ng-deep .btn.btn-link:hover .svg-inline--fa{color:var(--vd-neutral-dark)}.btn.btn-link{text-transform:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FoehnIconChevronLeftComponent, selector: "foehn-icon-chevron-left" }, { kind: "component", type: FoehnIconChevronRightComponent, selector: "foehn-icon-chevron-right" }, { kind: "component", type: GesdemActionRecoveryRegistrationComponent, selector: "gesdem-action-recovery-registration", inputs: ["dispatchFormErrors", "continueLaterLabel", "continueLaterAlreadyRegisteredLabel", "continueLaterConnectedLabel", "triggerOnPageChange"] }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
|
|
13912
14006
|
}
|
|
13913
14007
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FoehnSimpleNavigationComponent, decorators: [{
|
|
13914
14008
|
type: Component,
|
|
13915
|
-
args: [{ selector: 'foehn-simple-navigation', standalone: false, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <foehn-icon-chevron-left\n
|
|
14009
|
+
args: [{ selector: 'foehn-simple-navigation', standalone: false, template: "<gesdem-action-recovery-registration\n *ngIf=\"showContinueLaterButton\"\n [continueLaterLabel]=\"continueLaterLabel\"\n [continueLaterAlreadyRegisteredLabel]=\"continueLaterAlreadyRegisteredLabel\"\n [continueLaterConnectedLabel]=\"continueLaterConnectedLabel\"\n [triggerOnPageChange]=\"triggerRecoveryOnPageChange\"\n></gesdem-action-recovery-registration>\n\n<nav class=\"vd-pagination\" id=\"foehn_navContainer\" aria-label=\"Pagination\">\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n *ngIf=\"canShowPreviousButton()\"\n >\n <button\n id=\"prevButton\"\n type=\"button\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToPrevious()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingPrevious(); else loading\">\n <foehn-icon-chevron-left\n class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\n </ng-container>\n </span>\n </button>\n </li>\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n *ngIf=\"canShowNextButton()\"\n >\n <button\n id=\"nextButton\"\n type=\"submit\"\n class=\"btn btn-link vd-pagination__link vd-pagination__link-reset\"\n [class.disabled]=\"isLoading()\"\n [attr.aria-disabled]=\"isLoading() || null\"\n (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n <ng-container *ngIf=\"!isLoadingNext(); else loading\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\n </ng-container>\n </span>\n </button>\n </li>\n </ul>\n <span class=\"visually-hidden\" role=\"status\">\n <ng-container *ngIf=\"isLoading()\">\n {{ loadingLabel | fromDictionary }}\n </ng-container>\n </span>\n</nav>\n\n<ng-template #loading>\n <span\n class=\"spinner-border spinner-border-sm me-1\"\n aria-hidden=\"true\"\n ></span>\n {{ loadingLabel | fromDictionary }}\n</ng-template>\n", styles: [".vd-pagination__link-reset{background:none;border:none;font-weight:inherit;text-decoration-line:none;text-align:inherit;cursor:pointer}.vd-pagination__link-reset:focus{background-color:var(--vd-focus)}:host ::ng-deep .btn.btn-link .svg-inline--fa{color:var(--vd-primary-dark)}:host ::ng-deep .btn.btn-link:hover .svg-inline--fa{color:var(--vd-neutral-dark)}.btn.btn-link{text-transform:none}\n"] }]
|
|
13916
14010
|
}], propDecorators: { showPreviousButton: [{
|
|
13917
14011
|
type: Input
|
|
13918
14012
|
}] } });
|
|
@@ -16127,7 +16221,7 @@ class AbstractPageFromMenuComponent extends AbstractPageComponent {
|
|
|
16127
16221
|
.subscribe(breadCrumb => {
|
|
16128
16222
|
breadCrumb.breadcrumbItems.pop();
|
|
16129
16223
|
this._breadcrumbEventService.setBreadcrumb(breadCrumb);
|
|
16130
|
-
this.
|
|
16224
|
+
this.navigateToNextPage();
|
|
16131
16225
|
});
|
|
16132
16226
|
}
|
|
16133
16227
|
appendPageToBreadCrumb() {
|
|
@@ -16499,7 +16593,7 @@ class FoehnMenuItemComponent {
|
|
|
16499
16593
|
get nonApplicableId() {
|
|
16500
16594
|
const prefixValue = typeof this.errorPrefix === 'string'
|
|
16501
16595
|
? this.errorPrefix
|
|
16502
|
-
: this.errorPrefix?.source ?? '';
|
|
16596
|
+
: (this.errorPrefix?.source ?? '');
|
|
16503
16597
|
const safePrefix = prefixValue
|
|
16504
16598
|
.replace(/[^a-zA-Z0-9_-]+/g, '-')
|
|
16505
16599
|
.replace(/^-+|-+$/g, '');
|