@dsivd/prestations-ng 18.3.14 → 18.3.15-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
- level" to `25` in "Modules"
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;
@@ -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
- return this.redirect(route.path);
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, form, mergedResponse) {
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._navigation.next();
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._navigation.next();
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 class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\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 (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\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 >\n {{ transmitLabel | fromDictionary }}\n </button>\n </li>\n </ul>\n</nav>\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" }] }); }
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 class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\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 (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\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 >\n {{ transmitLabel | fromDictionary }}\n </button>\n </li>\n </ul>\n</nav>\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"] }]
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 class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\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 (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\n </span>\n </button>\n </li>\n </ul>\n</nav>\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" }] }); }
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 class=\"me-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-left>\n {{ prevLabel | fromDictionary }}\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 (click)=\"$event.preventDefault(); goToNext()\"\n >\n <span class=\"vd-pagination__title\">\n {{ nextLabel | fromDictionary }}\n <foehn-icon-chevron-right\n class=\"ms-1\"\n aria-hidden=\"true\"\n ></foehn-icon-chevron-right>\n </span>\n </button>\n </li>\n </ul>\n</nav>\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"] }]
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._navigation.next();
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, '');