@dsivd/prestations-ng 14.5.16 → 14.5.17-beta1

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
@@ -26,6 +26,22 @@ A change is considered **breaking** if you have to change your code or update yo
26
26
 
27
27
  ---
28
28
 
29
+ ## [14.5.17]
30
+
31
+ ### Updated
32
+
33
+ - [session-info.service.ts](projects/prestations-ng/src/sdk-session-info/session-info.service.ts)
34
+ - `SessionInfoData` data getter now depends on `neverConnected` attribute to avoid unnecessary calls to sessionInfo api (PRESTAKIT-364).
35
+ - To retrieve `SessionInfoData` data from api url, you need to explicitly set `neverConnected` attribute to `false`.
36
+
37
+ - [foehn-page.component.ts](projects/prestations-ng/src/foehn-page/foehn-page.component.ts)
38
+ - `@Input() neverConnected` is now set to `false` by default to retrieve `SessionInfoData` data for backwards compatibility purposes.
39
+
40
+ - [support-alert.service.ts](projects/prestations-ng/src/sdk-support-alert/support-alert.service.ts)
41
+ - removed `setRefreshIntervalInSeconds(refreshIntervalsInSeconds: number)`, support alerts are now refreshed on every NavigationStart event from the Angular Router, but at most every 3 minutes.
42
+ - [foehn-page.component.html](projects/prestations-ng/src/foehn-page/foehn-page.component.html)
43
+ - added `@Input() supportAlertRefreshIntervalsInSeconds: number`, support alerts are now refreshed on every NavigationStart event from the Angular Router, but at most every 3 minutes.
44
+
29
45
  ## [14.5.16]
30
46
 
31
47
  ### Updated
package/CONTRIBUTING.md CHANGED
@@ -188,3 +188,34 @@ export NODE_OPTIONS=--max_old_space_size=4096
188
188
  ```
189
189
 
190
190
  Use at your own risks.
191
+
192
+ ## E2E testing
193
+
194
+ `Protractor` is no longer included in new Angular projects as of Angular 12.
195
+ We have decided to remove it from `prestations-ng` and use instead `Cypress`.
196
+
197
+ For more informations, please visit :
198
+ https://github.com/angular/protractor/issues/5502
199
+ https://docs.cypress.io/guides/migrating-to-cypress/protractor#Introduction
200
+
201
+ **DO NOT FORGET TO BUILD THE LIBRARY BEFORE RUNNING E2E TESTS**
202
+
203
+ ### Running e2e in headless mode
204
+
205
+ When launching Cypress in headless mode, execute:
206
+ ```bash
207
+ yarn e2e
208
+ ```
209
+ When a test fails, a screenshot will be added in `e2e/cypress/screenshots` folder.
210
+
211
+ ### Running e2e using Cypress visual interface
212
+
213
+ When launching Cypress visual interface for running tests files individually in `watch` mode, execute:
214
+ ```bash
215
+ yarn e2e:open
216
+ ```
217
+ To execute a test, just click on your integration test file listed in the newly open window.
218
+ A new window will open showing your e2e test execution.
219
+ To show back your test list window, just click on `Tests` button in the top left corner.
220
+ Click the `Stop` button to close your e2e test execution window.
221
+ Then click on an other test in the list and so on...
package/UPGRADING_V12.md CHANGED
@@ -216,18 +216,3 @@ In your `package.json` located at the root of your application, add `start:symli
216
216
  }
217
217
  }
218
218
  ```
219
-
220
- ## e2e tip
221
-
222
- When `e2e` test are broken due to `puppeteer` not having the same version between browser and driver, you can temporarily modify your `package.json` with:
223
-
224
- ```json
225
- {
226
- "scripts": {
227
- "pree2e": "node_modules/protractor/bin/webdriver-manager update --versions.chrome=[VERSION_OF_CHROME_MATCHING_DRIVER] --gecko false --standalone false",
228
- "e2e": "ng e2e --webdriverUpdate=false"
229
- }
230
- }
231
- ```
232
-
233
- **Be sure to rollback when `puppeteer` is up-to-date**
package/UPGRADING_V13.md CHANGED
@@ -29,18 +29,3 @@ yarn upgrade
29
29
  ## Migrating to ESLint
30
30
 
31
31
  - Follow [our migration guide](ESLINT_MIGRATION_GUIDE.md) to migrate your project from TSLint to ESLint
32
-
33
- ## e2e tip
34
-
35
- When `e2e` test are broken due to `puppeteer` not having the same version between browser and driver, you can temporarily modify your `package.json` with:
36
-
37
- ```json
38
- {
39
- "scripts": {
40
- "pree2e": "node_modules/protractor/bin/webdriver-manager update --versions.chrome=[VERSION_OF_CHROME_MATCHING_DRIVER] --gecko false --standalone false",
41
- "e2e": "ng e2e --webdriverUpdate=false"
42
- }
43
- }
44
- ```
45
-
46
- **Be sure to rollback when `puppeteer` is up-to-date**
package/UPGRADING_V14.md CHANGED
@@ -50,18 +50,3 @@ yarn upgrade
50
50
  ## Migrating to ESLint
51
51
 
52
52
  - Follow [our migration guide](ESLINT_MIGRATION_GUIDE.md) to migrate your project from TSLint to ESLint
53
-
54
- ## e2e tip
55
-
56
- When `e2e` test are broken due to `puppeteer` not having the same version between browser and driver, you can temporarily modify your `package.json` with:
57
-
58
- ```json
59
- {
60
- "scripts": {
61
- "pree2e": "node_modules/protractor/bin/webdriver-manager update --versions.chrome=[VERSION_OF_CHROME_MATCHING_DRIVER] --gecko false --standalone false",
62
- "e2e": "ng e2e --webdriverUpdate=false"
63
- }
64
- }
65
- ```
66
-
67
- **Be sure to rollback when `puppeteer` is up-to-date**
@@ -867,52 +867,79 @@
867
867
 
868
868
  var SESSION_INFO_API_URL = 'api/sessionInfo/data';
869
869
  var SessionInfo = /** @class */ (function () {
870
- function SessionInfo(http) {
870
+ function SessionInfo(http, growlService, ngZone) {
871
871
  this.http = http;
872
+ this.growlService = growlService;
873
+ this.ngZone = ngZone;
874
+ this.neverConnected_ = new rxjs.BehaviorSubject(undefined);
872
875
  }
873
876
  Object.defineProperty(SessionInfo.prototype, "data", {
874
877
  get: function () {
875
878
  var _this = this;
876
- if (this.neverConnected_) {
877
- return rxjs.of(null);
878
- }
879
- else {
880
- if (!this.pulling_) {
881
- this.pulling_ = this.http
882
- .get(SESSION_INFO_API_URL)
883
- .pipe(operators.map(function (r) {
884
- if (r) {
885
- return (_this.sessionData = r);
886
- }
887
- return null;
888
- }), operators.shareReplay(1));
879
+ return this.neverConnected_.asObservable().pipe(operators.tap(function () {
880
+ if (_this.timeoutLogError) {
881
+ clearTimeout(_this.timeoutLogError);
889
882
  }
890
- return this.pulling_;
891
- }
883
+ }), operators.switchMap(function (neverConnected) {
884
+ if (neverConnected !== false) {
885
+ if (neverConnected === undefined) {
886
+ _this.logErrorNeverConnectedIsNotSet();
887
+ }
888
+ if (!_this.onMicroTaskEmptyPulling_) {
889
+ // Need 'onMicrotaskEmpty' to avoid 'ExpressionChangedAfterItHasBeenCheckedError'
890
+ _this.onMicroTaskEmptyPulling_ = _this.ngZone.onMicrotaskEmpty.pipe(operators.first(), operators.map(function () { return null; }), operators.shareReplay(1));
891
+ }
892
+ return _this.onMicroTaskEmptyPulling_;
893
+ }
894
+ else {
895
+ if (!_this.pulling_) {
896
+ _this.pulling_ = _this.http
897
+ .get(SESSION_INFO_API_URL)
898
+ .pipe(operators.catchError(function () {
899
+ var message = 'Impossible de récupérer les informations de la personne connectée';
900
+ _this.growlService.addWithType(GrowlType.DANGER, message);
901
+ return rxjs.of(null);
902
+ }), operators.map(function (r) {
903
+ if (r) {
904
+ return (_this.sessionData = r);
905
+ }
906
+ return null;
907
+ }), operators.shareReplay(1));
908
+ }
909
+ return _this.pulling_;
910
+ }
911
+ }));
892
912
  },
893
913
  enumerable: false,
894
914
  configurable: true
895
915
  });
896
916
  Object.defineProperty(SessionInfo.prototype, "neverConnected", {
897
917
  get: function () {
898
- return this.neverConnected_;
918
+ return this.neverConnected_.getValue();
899
919
  },
900
920
  set: function (neverConnected) {
901
- this.neverConnected_ = neverConnected;
921
+ this.neverConnected_.next(neverConnected);
902
922
  },
903
923
  enumerable: false,
904
924
  configurable: true
905
925
  });
926
+ SessionInfo.prototype.logErrorNeverConnectedIsNotSet = function () {
927
+ // Use of setTimeout to avoid unnecessary error log
928
+ this.timeoutLogError = setTimeout(function () {
929
+ console.error("Error: 'neverConnected' is not set. " +
930
+ 'Find more at https://dsi-vd.github.io/prestations-ng/CHANGELOG.md#_14_5_16_');
931
+ }, 2000);
932
+ };
906
933
  return SessionInfo;
907
934
  }());
908
- SessionInfo.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SessionInfo, deps: [{ token: i1__namespace.HttpClient }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
935
+ SessionInfo.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SessionInfo, deps: [{ token: i1__namespace.HttpClient }, { token: GrowlBrokerService }, { token: i0__namespace.NgZone }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
909
936
  SessionInfo.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SessionInfo, providedIn: 'root' });
910
937
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SessionInfo, decorators: [{
911
938
  type: i0.Injectable,
912
939
  args: [{
913
940
  providedIn: 'root'
914
941
  }]
915
- }], ctorParameters: function () { return [{ type: i1__namespace.HttpClient }]; } });
942
+ }], ctorParameters: function () { return [{ type: i1__namespace.HttpClient }, { type: GrowlBrokerService }, { type: i0__namespace.NgZone }]; } });
916
943
 
917
944
  var GesdemHandlerService = /** @class */ (function () {
918
945
  function GesdemHandlerService(http, growlService, validationHandlerService, router, route, errorHandlerService, sessionInfo) {
@@ -3262,12 +3289,14 @@
3262
3289
  else {
3263
3290
  this._validationHandlerService.shouldDisplayErrors(true);
3264
3291
  }
3265
- this.sendForFormConcurrentSafe.subscribe(function () { return _this.onFormSent(goToNextPage); });
3292
+ this.sendForFormConcurrentSafe
3293
+ .pipe(operators.first())
3294
+ .subscribe(function () { return _this.onFormSent(goToNextPage); });
3266
3295
  };
3267
3296
  AbstractPageComponent.prototype.transmit = function () {
3268
3297
  var _this = this;
3269
3298
  this._validationHandlerService.shouldDisplayErrors(true);
3270
- this.transmitConcurrentSafe.subscribe(function () {
3299
+ this.transmitConcurrentSafe.pipe(operators.first()).subscribe(function () {
3271
3300
  if (!_this._gesdemService.lastResponse.errors.length) {
3272
3301
  _this._gesdemEventService.formTransmittedSubject.next(_this._gesdemService.lastResponse);
3273
3302
  _this._navigation.next();
@@ -3392,19 +3421,18 @@
3392
3421
  }
3393
3422
  };
3394
3423
  var SupportAlertService = /** @class */ (function () {
3395
- function SupportAlertService(http) {
3424
+ function SupportAlertService(http, router) {
3396
3425
  var _this = this;
3397
3426
  this.http = http;
3427
+ this.router = router;
3398
3428
  this.hiddenAlertIds = new rxjs.BehaviorSubject(getPersistedDismissedAlertIds());
3399
3429
  this.refreshTrigger = new rxjs.BehaviorSubject(true);
3400
- this.refreshIntervalInSeconds = new rxjs.BehaviorSubject(5 * 60);
3401
3430
  this.supportAlertUrl = new rxjs.BehaviorSubject('');
3402
- // This ensures that we load the alerts when the page loads and at every configured interval.
3403
- var refreshInterval = this.refreshIntervalInSeconds.pipe(operators.filter(function (valueInSeconds) { return !!valueInSeconds; }), operators.switchMap(function (valueInSeconds) { return rxjs.interval(valueInSeconds * 1000); }));
3404
- var refreshAlertsTriggerAndTimer = rxjs.merge(this.refreshTrigger, refreshInterval);
3431
+ var navigationTrigger = this.router.events.pipe(operators.filter(function (e) { return e instanceof i1$1.NavigationStart; }));
3432
+ var refreshAlertsTriggerAndNavigation = rxjs.merge(this.refreshTrigger, navigationTrigger).pipe(operators.throttleTime(3 * 60 * 1000));
3405
3433
  this.allAlerts = rxjs.combineLatest([
3406
3434
  this.supportAlertUrl,
3407
- refreshAlertsTriggerAndTimer
3435
+ refreshAlertsTriggerAndNavigation
3408
3436
  ]).pipe(
3409
3437
  // Only if an url is defined
3410
3438
  operators.filter(function (_a) {
@@ -3471,19 +3499,16 @@
3471
3499
  SupportAlertService.prototype.getHasAtLeastOneBlockingAlert = function () {
3472
3500
  return this.hasAtLeastOneBlockingAlert;
3473
3501
  };
3474
- SupportAlertService.prototype.setRefreshIntervalInSeconds = function (refreshIntervalsInSeconds) {
3475
- this.refreshIntervalInSeconds.next(refreshIntervalsInSeconds);
3476
- };
3477
3502
  return SupportAlertService;
3478
3503
  }());
3479
- SupportAlertService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SupportAlertService, deps: [{ token: i1__namespace.HttpClient }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
3504
+ SupportAlertService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SupportAlertService, deps: [{ token: i1__namespace.HttpClient }, { token: i1__namespace$1.Router }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
3480
3505
  SupportAlertService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SupportAlertService, providedIn: 'root' });
3481
3506
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SupportAlertService, decorators: [{
3482
3507
  type: i0.Injectable,
3483
3508
  args: [{
3484
3509
  providedIn: 'root'
3485
3510
  }]
3486
- }], ctorParameters: function () { return [{ type: i1__namespace.HttpClient }]; } });
3511
+ }], ctorParameters: function () { return [{ type: i1__namespace.HttpClient }, { type: i1__namespace$1.Router }]; } });
3487
3512
 
3488
3513
  var FoehnDisplayAddressComponent = /** @class */ (function () {
3489
3514
  function FoehnDisplayAddressComponent() {
@@ -5322,7 +5347,6 @@
5322
5347
  this.alertsToDisplay = this.supportAlertService.getDisplayableAlerts();
5323
5348
  this.hasAlerts = this.supportAlertService.getHasAlerts();
5324
5349
  this.hasHiddenAlerts = this.supportAlertService.getHasHiddenAlerts();
5325
- this.supportAlertService.setRefreshIntervalInSeconds(this.refreshIntervalsInSeconds);
5326
5350
  };
5327
5351
  SupportAlertContainerComponent.prototype.restoreAllAlerts = function () {
5328
5352
  this.supportAlertService.restoreAllAlerts();
@@ -5349,7 +5373,7 @@
5349
5373
  return SupportAlertContainerComponent;
5350
5374
  }());
5351
5375
  SupportAlertContainerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SupportAlertContainerComponent, deps: [{ token: SupportAlertService }], target: i0__namespace.ɵɵFactoryTarget.Component });
5352
- SupportAlertContainerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: SupportAlertContainerComponent, selector: "sdk-support-alert-container", inputs: { etapeId: "etapeId", supportAlertUrl: "supportAlertUrl", refreshIntervalsInSeconds: "refreshIntervalsInSeconds" }, usesOnChanges: true, ngImport: i0__namespace, template: "<div class=\"d-flex flex-column container mt-2\" *ngIf=\"hasAlerts | async\">\n <h2 class=\"sr-only\">Messages de support</h2>\n <div class=\"mb-2 mt-2\" *ngIf=\"hasHiddenAlerts | async\">\n <button class=\"btn btn-link pr-0 pl-0\" (click)=\"restoreAllAlerts()\">\n Afficher tous les messages\n </button>\n </div>\n <sdk-support-alert\n *ngFor=\"let alert of alertsToDisplay | async\"\n [alert]=\"alert\"\n ></sdk-support-alert>\n</div>\n", components: [{ type: SupportAlertComponent, selector: "sdk-support-alert", inputs: ["alert"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i3__namespace.AsyncPipe } });
5376
+ SupportAlertContainerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: SupportAlertContainerComponent, selector: "sdk-support-alert-container", inputs: { etapeId: "etapeId", supportAlertUrl: "supportAlertUrl" }, usesOnChanges: true, ngImport: i0__namespace, template: "<div class=\"d-flex flex-column container mt-2\" *ngIf=\"hasAlerts | async\">\n <h2 class=\"sr-only\">Messages de support</h2>\n <div class=\"mb-2 mt-2\" *ngIf=\"hasHiddenAlerts | async\">\n <button class=\"btn btn-link pr-0 pl-0\" (click)=\"restoreAllAlerts()\">\n Afficher tous les messages\n </button>\n </div>\n <sdk-support-alert\n *ngFor=\"let alert of alertsToDisplay | async\"\n [alert]=\"alert\"\n ></sdk-support-alert>\n</div>\n", components: [{ type: SupportAlertComponent, selector: "sdk-support-alert", inputs: ["alert"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i3__namespace.AsyncPipe } });
5353
5377
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: SupportAlertContainerComponent, decorators: [{
5354
5378
  type: i0.Component,
5355
5379
  args: [{
@@ -5361,8 +5385,6 @@
5361
5385
  type: i0.Input
5362
5386
  }], supportAlertUrl: [{
5363
5387
  type: i0.Input
5364
- }], refreshIntervalsInSeconds: [{
5365
- type: i0.Input
5366
5388
  }] } });
5367
5389
 
5368
5390
  var FoehnUserConnectedAsComponent = /** @class */ (function () {
@@ -5744,6 +5766,7 @@
5744
5766
  this.sessionInfo = sessionInfo;
5745
5767
  this.foehnPageModalService = foehnPageModalService;
5746
5768
  this.sdkDictionaryService = sdkDictionaryService;
5769
+ this.neverConnected = false;
5747
5770
  this.supportAlertEnabled = true;
5748
5771
  this.userConnectedAsDisplayed = true;
5749
5772
  this.confirmLeavingAlert = {
@@ -5883,7 +5906,7 @@
5883
5906
  return FoehnPageComponent;
5884
5907
  }());
5885
5908
  FoehnPageComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPageComponent, deps: [{ token: i1__namespace$3.Title }, { token: FoehnPageService }, { token: SupportAlertService }, { token: FoehnNavigationService }, { token: ApplicationInfoService }, { token: GesdemEventService }, { token: BreadcrumbEventService }, { token: i1__namespace$1.Router }, { token: SessionInfo }, { token: FoehnPageModalService }, { token: SdkDictionaryService }], target: i0__namespace.ɵɵFactoryTarget.Component });
5886
- FoehnPageComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnPageComponent, selector: "foehn-page", inputs: { appTitle: "appTitle", footerLinks: "footerLinks", neverConnected: "neverConnected", supportAlertEnabled: "supportAlertEnabled", supportAlertUrl: "supportAlertUrl", supportAlertRefreshIntervalsInSeconds: "supportAlertRefreshIntervalsInSeconds", etapeId: "etapeId", userConnectedAsDisplayed: "userConnectedAsDisplayed", confirmLeavingAlert: "confirmLeavingAlert", showDefaultContactFooterLink: "showDefaultContactFooterLink", showDefaultGuideFooterLink: "showDefaultGuideFooterLink", showDefaultTermOfUseLink: "showDefaultTermOfUseLink", showDefaultSecurityBestPracticeLink: "showDefaultSecurityBestPracticeLink" }, usesOnChanges: true, ngImport: i0__namespace, template: "<foehn-header\n id=\"foehn_header\"\n [title]=\"appTitle\"\n [neverConnected]=\"neverConnected\"\n></foehn-header>\n<foehn-growl id=\"foehn_growl\"></foehn-growl>\n<div class=\"vd-bg-pattern-gray\">\n <div class=\"container\">\n <foehn-breadcrumb\n [neverConnected]=\"neverConnected\"\n [confirmLeavingAlert]=\"confirmLeavingAlert\"\n ></foehn-breadcrumb>\n </div>\n</div>\n<main id=\"main\">\n <div class=\"vd-bg-pattern-gray\">\n <div class=\"container\">\n <!-- Fix annoying flickering when the page loads -->\n <div class=\"h1 mt-0\" *ngIf=\"!pageTitle\">&nbsp;</div>\n <h1\n [tabIndex]=\"-1\"\n class=\"mt-0\"\n id=\"page-title\"\n *ngIf=\"!!pageTitle\"\n [innerHTML]=\"pageTitle\"\n ></h1>\n </div>\n </div>\n\n <section\n *ngIf=\"!isBrowserSupported\"\n class=\"container alert alert-danger\"\n id=\"browser_not_supported_block\"\n role=\"alert\"\n >\n <p class=\"alert-heading\">\n <strong>\n Cette prestation n\u2019est pas compatible avec votre navigateur.\n </strong>\n </p>\n <p class=\"mb-0\">\n Nous vous invitons \u00E0 utiliser une version r\u00E9cente de\n <ng-container *ngIf=\"!isApplePlatform\">\n <a\n [title]=\"browserLinkTitlePrefix + ' Edge'\"\n href=\"https://www.microsoft.com/fr-ch/windows/microsoft-edge\"\n target=\"_blank\"\n >\n Edge\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ,\n </ng-container>\n <ng-container *ngIf=\"isApplePlatform\">\n <a\n [title]=\"browserLinkTitlePrefix + ' Safari'\"\n href=\"https://support.apple.com/downloads/safari\"\n target=\"_blank\"\n >\n Safari\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ,\n </ng-container>\n <a\n [title]=\"browserLinkTitlePrefix + ' Firefox'\"\n href=\"https://www.mozilla.org/fr/firefox/\"\n target=\"_blank\"\n >\n Firefox\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ou\n <a\n [title]=\"browserLinkTitlePrefix + ' Chrome'\"\n href=\"https://www.google.com/intl/fr/chrome/\"\n target=\"_blank\"\n >\n Chrome\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n .\n </p>\n <div class=\"row mt-3\">\n <div class=\"col-md-12\">\n <button\n id=\"browser_not_supported_bypass\"\n class=\"float-right btn btn-danger\"\n *ngIf=\"!browserNotSupportedBypass\"\n (click)=\"browserNotSupportedBypass = true\"\n >\n Continuer avec ce navigateur\n </button>\n </div>\n </div>\n </section>\n\n <sdk-support-alert-container\n *ngIf=\"supportAlertEnabled\"\n [etapeId]=\"etapeId\"\n [supportAlertUrl]=\"supportAlertUrl\"\n [refreshIntervalsInSeconds]=\"supportAlertRefreshIntervalsInSeconds\"\n ></sdk-support-alert-container>\n <ng-container\n *ngIf=\"\n !(hasBlockingSupportAlert | async) &&\n (isBrowserSupported || browserNotSupportedBypass)\n \"\n >\n <div class=\"container mt-5\" id=\"page_content\">\n <foehn-user-connected-as\n *ngIf=\"displayUserCategory | async\"\n ></foehn-user-connected-as>\n <ng-container\n *ngIf=\"displayLoginMessages | async as displayLoginMessagesData\"\n >\n <div\n *ngIf=\"displayLoginMessagesData.displayShouldLoginMessage\"\n class=\"alert alert-info\"\n id=\"displayLoginMessage\"\n >\n <p\n [innerHTML]=\"\n getFullLoginMessage(\n displayLoginMessagesData.decisionElectroniqueAvailable\n ) | async\n \"\n ></p>\n <div class=\"d-flex justify-content-start mr-2 mb-2 mt-2\">\n <a\n class=\"btn btn-primary\"\n [href]=\"getFullLoginUrl() | async\"\n >\n {{ 'use-login.button.text' | fromDictionary }}\n </a>\n </div>\n </div>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </ng-container>\n</main>\n<foehn-footer\n id=\"foehn_footer\"\n [links]=\"footerLinks\"\n [showDefaultContactLink]=\"showDefaultContactFooterLink\"\n [showDefaultGuideLink]=\"showDefaultGuideFooterLink\"\n [showDefaultTermOfUseLink]=\"showDefaultTermOfUseLink\"\n [showDefaultSecurityBestPracticeLink]=\"showDefaultSecurityBestPracticeLink\"\n></foehn-footer>\n<foehn-page-modal></foehn-page-modal>\n<foehn-confirm-modal></foehn-confirm-modal>\n", components: [{ type: FoehnHeaderComponent, selector: "foehn-header", inputs: ["userInfo", "title", "neverConnected"] }, { type: FoehnGrowlComponent, selector: "foehn-growl" }, { type: FoehnBreadcrumbComponent, selector: "foehn-breadcrumb", inputs: ["breadcrumbItems", "currentNav", "neverConnected", "confirmLeavingAlert"] }, { type: FoehnIconExternalLinkAltComponent, selector: "foehn-icon-external-link-alt" }, { type: SupportAlertContainerComponent, selector: "sdk-support-alert-container", inputs: ["etapeId", "supportAlertUrl", "refreshIntervalsInSeconds"] }, { type: FoehnUserConnectedAsComponent, selector: "foehn-user-connected-as" }, { type: FoehnFooterComponent, selector: "foehn-footer", inputs: ["links", "showDefaultContactLink", "showDefaultGuideLink", "showDefaultTermOfUseLink", "showDefaultSecurityBestPracticeLink"] }, { type: FoehnPageModalComponent, selector: "foehn-page-modal" }, { type: FoehnConfirmModalComponent, selector: "foehn-confirm-modal" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe, "fromDictionary": SdkDictionaryPipe } });
5909
+ FoehnPageComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnPageComponent, selector: "foehn-page", inputs: { appTitle: "appTitle", footerLinks: "footerLinks", neverConnected: "neverConnected", supportAlertEnabled: "supportAlertEnabled", supportAlertUrl: "supportAlertUrl", etapeId: "etapeId", userConnectedAsDisplayed: "userConnectedAsDisplayed", confirmLeavingAlert: "confirmLeavingAlert", showDefaultContactFooterLink: "showDefaultContactFooterLink", showDefaultGuideFooterLink: "showDefaultGuideFooterLink", showDefaultTermOfUseLink: "showDefaultTermOfUseLink", showDefaultSecurityBestPracticeLink: "showDefaultSecurityBestPracticeLink" }, usesOnChanges: true, ngImport: i0__namespace, template: "<foehn-header\n id=\"foehn_header\"\n [title]=\"appTitle\"\n [neverConnected]=\"neverConnected\"\n></foehn-header>\n<foehn-growl id=\"foehn_growl\"></foehn-growl>\n<div class=\"vd-bg-pattern-gray\">\n <div class=\"container\">\n <foehn-breadcrumb\n [neverConnected]=\"neverConnected\"\n [confirmLeavingAlert]=\"confirmLeavingAlert\"\n ></foehn-breadcrumb>\n </div>\n</div>\n<main id=\"main\">\n <div class=\"vd-bg-pattern-gray\">\n <div class=\"container\">\n <!-- Fix annoying flickering when the page loads -->\n <div class=\"h1 mt-0\" *ngIf=\"!pageTitle\">&nbsp;</div>\n <h1\n [tabIndex]=\"-1\"\n class=\"mt-0\"\n id=\"page-title\"\n *ngIf=\"!!pageTitle\"\n [innerHTML]=\"pageTitle\"\n ></h1>\n </div>\n </div>\n\n <section\n *ngIf=\"!isBrowserSupported\"\n class=\"container alert alert-danger\"\n id=\"browser_not_supported_block\"\n role=\"alert\"\n >\n <p class=\"alert-heading\">\n <strong>\n Cette prestation n\u2019est pas compatible avec votre navigateur.\n </strong>\n </p>\n <p class=\"mb-0\">\n Nous vous invitons \u00E0 utiliser une version r\u00E9cente de\n <ng-container *ngIf=\"!isApplePlatform\">\n <a\n [title]=\"browserLinkTitlePrefix + ' Edge'\"\n href=\"https://www.microsoft.com/fr-ch/windows/microsoft-edge\"\n target=\"_blank\"\n >\n Edge\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ,\n </ng-container>\n <ng-container *ngIf=\"isApplePlatform\">\n <a\n [title]=\"browserLinkTitlePrefix + ' Safari'\"\n href=\"https://support.apple.com/downloads/safari\"\n target=\"_blank\"\n >\n Safari\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ,\n </ng-container>\n <a\n [title]=\"browserLinkTitlePrefix + ' Firefox'\"\n href=\"https://www.mozilla.org/fr/firefox/\"\n target=\"_blank\"\n >\n Firefox\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ou\n <a\n [title]=\"browserLinkTitlePrefix + ' Chrome'\"\n href=\"https://www.google.com/intl/fr/chrome/\"\n target=\"_blank\"\n >\n Chrome\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n .\n </p>\n <div class=\"row mt-3\">\n <div class=\"col-md-12\">\n <button\n id=\"browser_not_supported_bypass\"\n class=\"float-right btn btn-danger\"\n *ngIf=\"!browserNotSupportedBypass\"\n (click)=\"browserNotSupportedBypass = true\"\n >\n Continuer avec ce navigateur\n </button>\n </div>\n </div>\n </section>\n\n <sdk-support-alert-container\n *ngIf=\"supportAlertEnabled\"\n [etapeId]=\"etapeId\"\n [supportAlertUrl]=\"supportAlertUrl\"\n ></sdk-support-alert-container>\n <ng-container\n *ngIf=\"\n !(hasBlockingSupportAlert | async) &&\n (isBrowserSupported || browserNotSupportedBypass)\n \"\n >\n <div class=\"container mt-5\" id=\"page_content\">\n <foehn-user-connected-as\n *ngIf=\"displayUserCategory | async\"\n ></foehn-user-connected-as>\n <ng-container\n *ngIf=\"displayLoginMessages | async as displayLoginMessagesData\"\n >\n <div\n *ngIf=\"displayLoginMessagesData.displayShouldLoginMessage\"\n class=\"alert alert-info\"\n id=\"displayLoginMessage\"\n >\n <p\n [innerHTML]=\"\n getFullLoginMessage(\n displayLoginMessagesData.decisionElectroniqueAvailable\n ) | async\n \"\n ></p>\n <div class=\"d-flex justify-content-start mr-2 mb-2 mt-2\">\n <a\n class=\"btn btn-primary\"\n [href]=\"getFullLoginUrl() | async\"\n >\n {{ 'use-login.button.text' | fromDictionary }}\n </a>\n </div>\n </div>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </ng-container>\n</main>\n<foehn-footer\n id=\"foehn_footer\"\n [links]=\"footerLinks\"\n [showDefaultContactLink]=\"showDefaultContactFooterLink\"\n [showDefaultGuideLink]=\"showDefaultGuideFooterLink\"\n [showDefaultTermOfUseLink]=\"showDefaultTermOfUseLink\"\n [showDefaultSecurityBestPracticeLink]=\"showDefaultSecurityBestPracticeLink\"\n></foehn-footer>\n<foehn-page-modal></foehn-page-modal>\n<foehn-confirm-modal></foehn-confirm-modal>\n", components: [{ type: FoehnHeaderComponent, selector: "foehn-header", inputs: ["userInfo", "title", "neverConnected"] }, { type: FoehnGrowlComponent, selector: "foehn-growl" }, { type: FoehnBreadcrumbComponent, selector: "foehn-breadcrumb", inputs: ["breadcrumbItems", "currentNav", "neverConnected", "confirmLeavingAlert"] }, { type: FoehnIconExternalLinkAltComponent, selector: "foehn-icon-external-link-alt" }, { type: SupportAlertContainerComponent, selector: "sdk-support-alert-container", inputs: ["etapeId", "supportAlertUrl"] }, { type: FoehnUserConnectedAsComponent, selector: "foehn-user-connected-as" }, { type: FoehnFooterComponent, selector: "foehn-footer", inputs: ["links", "showDefaultContactLink", "showDefaultGuideLink", "showDefaultTermOfUseLink", "showDefaultSecurityBestPracticeLink"] }, { type: FoehnPageModalComponent, selector: "foehn-page-modal" }, { type: FoehnConfirmModalComponent, selector: "foehn-confirm-modal" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3__namespace.AsyncPipe, "fromDictionary": SdkDictionaryPipe } });
5887
5910
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPageComponent, decorators: [{
5888
5911
  type: i0.Component,
5889
5912
  args: [{
@@ -5900,8 +5923,6 @@
5900
5923
  type: i0.Input
5901
5924
  }], supportAlertUrl: [{
5902
5925
  type: i0.Input
5903
- }], supportAlertRefreshIntervalsInSeconds: [{
5904
- type: i0.Input
5905
5926
  }], etapeId: [{
5906
5927
  type: i0.Input
5907
5928
  }], userConnectedAsDisplayed: [{