@dsivd/prestations-ng 18.1.2-beta.1 → 18.2.0-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 +21 -0
- package/UPGRADING_V18.md +86 -86
- package/dsivd-prestations-ng-18.2.0-beta.1.tgz +0 -0
- package/fesm2022/dsivd-prestations-ng.mjs +102 -7
- package/fesm2022/dsivd-prestations-ng.mjs.map +1 -1
- package/foehn-address/foehn-display-address.component.d.ts +2 -1
- package/foehn-page/foehn-app-version-mismatch/app-info-headers-interceptor.d.ts +12 -0
- package/foehn-page/foehn-app-version-mismatch/foehn-app-version-mis-match-modal.component.d.ts +15 -0
- package/foehn-page/foehn-page.component.d.ts +2 -1
- package/foehn-page/foehn-page.module.d.ts +15 -14
- package/foehn-page/foehn-page.service.d.ts +3 -0
- package/package.json +1 -1
- package/dsivd-prestations-ng-18.1.2-beta.1.tgz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## [18.2.0] - should be aligned with prestations-be 18.2.x
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- [app-info-headers-interceptor.ts](projects/prestations-ng/src/foehn-page/foehn-app-version-mismatch/app-info-headers-interceptor.ts)
|
|
14
|
+
|
|
15
|
+
- read new header `app-version` and trigger new `foehnPageService.onAppVersionMismatch()` when application has been updated
|
|
16
|
+
|
|
17
|
+
- [foehn-app-version-mis-match-modal.component.ts](projects/prestations-ng/src/foehn-page/foehn-app-version-mismatch/foehn-app-version-mis-match-modal.component.ts)
|
|
18
|
+
- warn the user that the app has been updated and that the application will be reloaded
|
|
19
|
+
- added in `<foehn-page>`, can be deactivated with `[showAppVersionMismatchAlert]="false"`
|
|
20
|
+
|
|
21
|
+
### Updated
|
|
22
|
+
|
|
23
|
+
- [default-dictionary.ts](projects/prestations-ng/src/sdk-dictionary/default-dictionary.ts)
|
|
24
|
+
- added new keys for `foehn-app-version-mis-match-modal` :
|
|
25
|
+
- `foehn-app-version-mismatch-modal.title` : Mise à jour détectée
|
|
26
|
+
- `foehn-app-version-mismatch-modal.content` : Cette application à été mise à jour. Avant de continuer votre saisie, merci de recharger la page.
|
|
27
|
+
- `foehn-app-version-mismatch-modal.btn.save-and-reload` : Sauver et recharger
|
|
28
|
+
- `foehn-app-version-mismatch-modal.btn.reload` : Recharger
|
|
29
|
+
|
|
9
30
|
## [18.1.1]
|
|
10
31
|
|
|
11
32
|
### Fixed
|
package/UPGRADING_V18.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# PRESTAKIT : Upgrading from v17 to v18
|
|
2
2
|
|
|
3
3
|
To migrate your project from `prestakit` v17 to v18, you need to migrate prestations-ng and prestations-be, as usual.
|
|
4
|
-
But to migrate to prestations-be v18, you need to migrate your project to spring boot 3 / java 21. And to be able to do
|
|
4
|
+
But to migrate to prestations-be v18, you need to migrate your project to spring boot 3 / java 21. And to be able to do
|
|
5
5
|
that, you need to migrate your project to openshift.
|
|
6
6
|
|
|
7
7
|
Let's start by migrating to openshift / spring boot 3 / prestations-be v18.
|
|
@@ -10,27 +10,27 @@ Let's start by migrating to openshift / spring boot 3 / prestations-be v18.
|
|
|
10
10
|
|
|
11
11
|
### Mise à jour du darch
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
modèle de "[ARCH-1120](https://issuetracker.etat-de-vaud.ch/outils/issuetracker/browse/ARCH-1120) - ClearPass Enroll, migration
|
|
15
|
-
openshift - Mise à jour DARCH" pour demander un accompagnement et pour savoir qui sera le point de contact) afin de relocaliser
|
|
16
|
-
l'applicatif dans openshift. Il met également à jour (ou s'assure que c'est fait par un architecte technique) la **matrice des flux**.
|
|
17
|
-
(exemple de matrice, lien Fred : [ClearpassEnroll - Matrice des flux.xlsx](fred://930d2fd4-4be5-4f70-9dec-5d1e8ba13851/browse/id/workspace/SpacesStore/573a7cda-9507-46e0-9dbc-7dfdb3b4cedc))
|
|
13
|
+
- Pour ce qui doit aller hors d'un namespace existant : Le GA met à jour, ou fait mettre à jour le **DARCH** (Ouvrir un Jira sur le
|
|
14
|
+
modèle de "[ARCH-1120](https://issuetracker.etat-de-vaud.ch/outils/issuetracker/browse/ARCH-1120) - ClearPass Enroll, migration
|
|
15
|
+
openshift - Mise à jour DARCH" pour demander un accompagnement et pour savoir qui sera le point de contact) afin de relocaliser
|
|
16
|
+
l'applicatif dans openshift. Il met également à jour (ou s'assure que c'est fait par un architecte technique) la **matrice des flux**.
|
|
17
|
+
(exemple de matrice, lien Fred : [ClearpassEnroll - Matrice des flux.xlsx](fred://930d2fd4-4be5-4f70-9dec-5d1e8ba13851/browse/id/workspace/SpacesStore/573a7cda-9507-46e0-9dbc-7dfdb3b4cedc))
|
|
18
18
|
|
|
19
19
|
### Demande de namespace (Back-office ou pas de pool d'application existant pour l'équipe de déploiement)
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
Easyvista → Nouveau changement → WEB → 030 - Création d'un nouvel environnement WEB (IIS, Apache, Tomcat...), pour chaque environnement
|
|
23
|
-
|
|
21
|
+
- Demander un namespace visible dans tesserakt (ex : https://portail.etat-de-vaud.ch/outils/tesserakt/namespace-groups/146420/),
|
|
22
|
+
Easyvista → Nouveau changement → WEB → 030 - Création d'un nouvel environnement WEB (IIS, Apache, Tomcat...), pour chaque environnement
|
|
23
|
+
- Si BO, demander à ajouter la network policy "allow-from-cybercloud" au namespace
|
|
24
24
|
|
|
25
25
|
### Demande de liaison à un pool d'application
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
- Si vous avez déjà un pool d'application pour votre équipe dans tesserakt (ex : cyberimtpublic/cyberimtsecurise), il suffit de faire une DC **030 - Création d'un nouvel environnement WEB** :
|
|
28
28
|
|
|
29
|
-
>Merci de lier la DU https://portail.etat-de-vaud.ch/outils/agref/deploy-unit/897
|
|
30
|
-
>
|
|
31
|
-
>au pool d'application "cyberimtpublic"
|
|
32
|
-
>
|
|
33
|
-
>Charts : ssh://git@bitbucket.etat-de-vaud.ch/pee/imt-charts.git / prestation
|
|
29
|
+
> Merci de lier la DU https://portail.etat-de-vaud.ch/outils/agref/deploy-unit/897
|
|
30
|
+
>
|
|
31
|
+
> au pool d'application "cyberimtpublic"
|
|
32
|
+
>
|
|
33
|
+
> Charts : ssh://git@bitbucket.etat-de-vaud.ch/pee/imt-charts.git / prestation
|
|
34
34
|
|
|
35
35
|
## PRESTATIONS-BE (via parent - Spring boot 3 / java 21)
|
|
36
36
|
|
|
@@ -135,8 +135,8 @@ with these properties :
|
|
|
135
135
|
|
|
136
136
|
### APPLICATION-PARENT
|
|
137
137
|
|
|
138
|
-
- set parent version to `14.x.x`, check the important changes that happened since the previous version :
|
|
139
|
-
https://dgnsiwiki.etat-de-vaud.ch/outils/dgnsiwiki/spaces/PCYBER/pages/1094779109/Correspondance+versions+prestakit+libs+cyber+changelog
|
|
138
|
+
- set parent version to `14.x.x`, check the important changes that happened since the previous version :
|
|
139
|
+
https://dgnsiwiki.etat-de-vaud.ch/outils/dgnsiwiki/spaces/PCYBER/pages/1094779109/Correspondance+versions+prestakit+libs+cyber+changelog
|
|
140
140
|
- remove property `java.version` (already set to `21` in the parent)
|
|
141
141
|
- if existing, remove exclusion `spring-cloud-starter-netflix-eureka-client` from `starter-prestation`
|
|
142
142
|
- remove dependency `spring-boot-starter-validation` (already in `starter-prestation`)
|
|
@@ -193,18 +193,18 @@ run your application with this dependency :
|
|
|
193
193
|
</dependency>
|
|
194
194
|
```
|
|
195
195
|
|
|
196
|
-
look for logs that indicate property you should migrate (watch for WARN logs of class PropertiesMigrationListener), update them and remove the
|
|
196
|
+
look for logs that indicate property you should migrate (watch for WARN logs of class PropertiesMigrationListener), update them and remove the
|
|
197
197
|
dependency
|
|
198
198
|
|
|
199
199
|
### Captcha configuration
|
|
200
200
|
|
|
201
201
|
- As stated in the migration guide from v16 to v17, Cybercache is responsible for the captcha turnstile verify call.
|
|
202
202
|
- Therefore, you can remove properties related to this configuration :
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
203
|
+
- `recaptcha.byPassUUID`
|
|
204
|
+
- `recaptcha.proxyUrl`
|
|
205
|
+
- `recaptcha.proxyPort`
|
|
206
|
+
- `recaptcha.secretkey`
|
|
207
|
+
- `recaptcha.publickey`
|
|
208
208
|
- If your application was not using Refinf through property `cyber-cache.configuration.enabled=false` and you still need the Recaptcha, you can replace this property with `cyber-cache.refinf-v5.enabled=false`, remove duplicated properties as before, add `cyber-cache.base-url` in your configuration and add your deployment unit in Mizo (Cybercache) for role `user`.
|
|
209
209
|
|
|
210
210
|
Cookie storage is kept as before, therefore you can keep cookie related properties that starts with `recaptcha.cookie.YYY` in your properties.
|
|
@@ -274,95 +274,95 @@ Spring boot 3 doesn't support calling a controller with a trailing slash, fix th
|
|
|
274
274
|
|
|
275
275
|
## Openshift
|
|
276
276
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
277
|
+
- Supprimer le fichier `assembly.xml`
|
|
278
|
+
- Supprimer le répertoire `addons`
|
|
279
|
+
- Supprimer le répertoire `scripts`
|
|
280
|
+
- Supprimer le répertoire `jenkins/devex`
|
|
281
|
+
- Supprimer l'annotation `@EnableDiscoveryClient` dans `Application.java`
|
|
282
|
+
- Remplacer `tomcat.port=1640` par `port.http=16400` (ou adapter le port si différent) dans les fichiers `environment.
|
|
283
283
|
properties`
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
284
|
+
- Remplacer `server.port=${tomcat.port}0` par `server.port=${port.http}` dans `application.properties`
|
|
285
|
+
- Adapter `pom.xml` :
|
|
286
|
+
- Modifier le packaging : `<packaging>jar</packaging>`
|
|
287
|
+
- Ajouter le finalName (sous `build`) : `<finalName>${project.artifactId}</finalName>`
|
|
288
|
+
- Ajouter les properties t6kt. 'NOM TECHNIQUE DANS AGREF' est le nom de l'application listée dans tesserakt,
|
|
289
|
+
exemple : cyberimtpublic
|
|
290
|
+
- `<t6kt-maven-plugin.application>NOM TECHNIQUE DANS AGREF</t6kt-maven-plugin.application>`
|
|
291
|
+
- `<t6kt-maven-plugin.configurationVersion>master</t6kt-maven-plugin.configurationVersion>`
|
|
292
|
+
- `<t6kt-maven-plugin.chartVersion>master</t6kt-maven-plugin.chartVersion>`
|
|
293
|
+
- `<t6kt-maven-plugin.cluster>int01 ou extint01</t6kt-maven-plugin.cluster>`
|
|
294
|
+
- Si parent `spring-boot-starter-parent`
|
|
295
|
+
- Ajouter `tesserakt-maven-plugin` :
|
|
296
|
+
- ```
|
|
297
|
+
<!-- used by snap2t6kt (https://dsigit.etat-de-vaud.ch/outils/git/projects/DEVSUP/repos/jenkins-library/browse/vars/snap2t6kt.groovy)-->
|
|
298
|
+
<plugin>
|
|
299
|
+
<groupId>ch.vd.devsupport</groupId>
|
|
300
|
+
<artifactId>tesserakt-maven-plugin</artifactId>
|
|
301
|
+
<version>${t6kt-maven-plugin.version}</version>
|
|
302
|
+
<configuration>
|
|
303
|
+
<username>${T6KT_USERNAME}</username>
|
|
304
|
+
<password>${T6KT_PASSWORD}</password>
|
|
305
|
+
<application>${t6kt-maven-plugin.application}</application>
|
|
306
|
+
<deployUnit>${t6kt-maven-plugin.deployUnit}</deployUnit>
|
|
307
|
+
<applicationVersion>${t6kt-maven-plugin.applicationVersion}</applicationVersion>
|
|
308
|
+
<chartVersion>${t6kt-maven-plugin.chartVersion}</chartVersion>
|
|
309
|
+
<configurationVersion>${t6kt-maven-plugin.configurationVersion}</configurationVersion>
|
|
310
|
+
<environment>${t6kt-maven-plugin.environment}</environment>
|
|
311
|
+
<cluster>${t6kt-maven-plugin.cluster}</cluster>
|
|
312
|
+
</configuration>
|
|
313
|
+
</plugin>
|
|
314
|
+
```
|
|
316
315
|
|
|
317
316
|
### Move the configs (if it is a fo and it goes into an application pool like cyberimtpublic)
|
|
318
317
|
|
|
319
|
-
Move the files from your configuration repository into the target repository.
|
|
318
|
+
Move the files from your configuration repository into the target repository.
|
|
320
319
|
Example : skeleton-configuration (https://dsigit.etat-de-vaud.ch/outils/git/projects/CYBSDK/repos/skeleton-configuration/browse)
|
|
321
|
-
into
|
|
320
|
+
into
|
|
322
321
|
cyberimt-configuration (https://dsigit.etat-de-vaud.ch/outils/git/projects/PEE/repos/cyberimt-configuration/browse)
|
|
323
322
|
and leave a README.md file in the old repository to tell where it has been moved.
|
|
324
323
|
|
|
325
|
-
Clean the moved files by removing what is already defined in the application
|
|
324
|
+
Clean the moved files by removing what is already defined in the application\*.properties files.
|
|
326
325
|
|
|
327
|
-
If you had folders by environment (IN / VA / PR) in your repo, move them into the vault folder of the target
|
|
326
|
+
If you had folders by environment (IN / VA / PR) in your repo, move them into the vault folder of the target
|
|
328
327
|
repository. The subfolder name must correspond to the deployUnit name.
|
|
329
328
|
|
|
330
|
-
Define `deployUnit.groupId` et `deployUnit.name` in your moved base properties file.
|
|
329
|
+
Define `deployUnit.groupId` et `deployUnit.name` in your moved base properties file.
|
|
331
330
|
|
|
332
|
-
In the helm folder, add a subfolder with the deployUnit name and fill it with a values.yaml file (copy-paste-replace
|
|
331
|
+
In the helm folder, add a subfolder with the deployUnit name and fill it with a values.yaml file (copy-paste-replace
|
|
333
332
|
from another similar)
|
|
334
|
-
NB : if your application is using a `${ch.vd.dataDir}` that must survive a restart, your can mount a persistent
|
|
333
|
+
NB : if your application is using a `${ch.vd.dataDir}` that must survive a restart, your can mount a persistent
|
|
335
334
|
volume by adding `dataDirSize: 10Mi` (pick the right size) in the values.yaml file.
|
|
336
335
|
|
|
337
336
|
### Deployment of the first snapshot in IN
|
|
338
337
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
https://dsigit.etat-de-vaud.ch/outils/git/projects/PEE/repos/jenkins-libs/browse/vars/getImtPortailApplications.groovy
|
|
342
|
-
(the name must correspond with the deployUnit name)
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
338
|
+
- **Equipe IMT-Portail** Ajouter le projet à jenkins
|
|
339
|
+
- ajouter l'application à la liste :
|
|
340
|
+
https://dsigit.etat-de-vaud.ch/outils/git/projects/PEE/repos/jenkins-libs/browse/vars/getImtPortailApplications.groovy
|
|
341
|
+
(the name must correspond with the deployUnit name)
|
|
342
|
+
- https://validation.portail.etat-de-vaud.ch/outils/jenkinsdgnsi/view/METIMT/job/000_Portail_SNAP_2t6kt/ => lancer un DRY_RUN
|
|
343
|
+
- https://validation.portail.etat-de-vaud.ch/outils/jenkinsdgnsi/view/METIMT/job/000_Portail_STABLE_2t6kt/ => lancer un DRY_RUN
|
|
344
|
+
- Supprimer l'applications des jobs "2Devex":
|
|
345
|
+
- https://validation.portail.etat-de-vaud.ch/outils/jenkinsdgnsi/view/METIMT/job/000_Portail_SNAP_2Devex/
|
|
346
|
+
- https://validation.portail.etat-de-vaud.ch/outils/jenkinsdgnsi/view/METIMT/job/000_Portail_STABLE_2Devex/
|
|
348
347
|
|
|
349
348
|
Once your changes are merged, you can launch the job to deploy the first snapshot in IN using 000_Portail_SNAP_2t6kt
|
|
350
349
|
|
|
351
350
|
Check the logs of the job to see if it is successful, and check the logs of your pod to see if it is running fine.
|
|
352
351
|
|
|
353
|
-
You can now change the access configuration of your application to use the openshift route in the configuration
|
|
354
|
-
repository (https://dsigit.etat-de-vaud.ch/outils/git/projects/CYBER/repos/configuration/browse/cyberzuul-IN.yml)
|
|
355
|
-
for a fo. For a BO you need to make a DS to ask the WEB team to change the route. Once done and merged, restart zuul
|
|
356
|
-
(https://portail.etat-de-vaud.ch/outils/devex/deployunit-sub/1322/containers?target=EmbeddedRHEL7) and stop your old
|
|
352
|
+
You can now change the access configuration of your application to use the openshift route in the configuration
|
|
353
|
+
repository (https://dsigit.etat-de-vaud.ch/outils/git/projects/CYBER/repos/configuration/browse/cyberzuul-IN.yml)
|
|
354
|
+
for a fo. For a BO you need to make a DS to ask the WEB team to change the route. Once done and merged, restart zuul
|
|
355
|
+
(https://portail.etat-de-vaud.ch/outils/devex/deployunit-sub/1322/containers?target=EmbeddedRHEL7) and stop your old
|
|
357
356
|
application.
|
|
358
357
|
|
|
359
358
|
Create a DS to desactivate the old containers in the IN vms.
|
|
360
359
|
|
|
361
|
-
Check that your application is running fine in IN, that you can see it properly in the monitoring
|
|
362
|
-
https://validation.portail.etat-de-vaud.ch/cyberadmin/int-consolesupport/springbootadmin/wallboard and that the
|
|
360
|
+
Check that your application is running fine in IN, that you can see it properly in the monitoring
|
|
361
|
+
https://validation.portail.etat-de-vaud.ch/cyberadmin/int-consolesupport/springbootadmin/wallboard and that the
|
|
363
362
|
sensitive data are not exposed in the property configuration listing.
|
|
364
363
|
|
|
365
364
|
## PRESTATIONS-NG
|
|
365
|
+
|
|
366
366
|
For the commands in this guide, it is supposed that your are in the `front` folder of your project.
|
|
367
367
|
|
|
368
368
|
The main feature in `prestations-ng` v18 is the update of the `@angular/*` peer dependencies
|
|
@@ -680,10 +680,10 @@ npm run lint
|
|
|
680
680
|
|
|
681
681
|
Fix manually all errors **Components, Directives and Pipes should not opt out of standalone @angular-eslint/prefer-standalone** by either:
|
|
682
682
|
|
|
683
|
-
- Adding `// eslint-disable-next-line @angular-eslint/prefer-standalone` above `standalone: false` (recommended by
|
|
683
|
+
- Adding `// eslint-disable-next-line @angular-eslint/prefer-standalone` above `standalone: false` (recommended by
|
|
684
684
|
IMT team, to focus on the current migration)
|
|
685
|
-
- Transforming your component into a `standalone` component by changing `standalone: false` into `standalone: true`
|
|
686
|
-
(recommended by angular, but implies to make a standalone migration for each component, cf
|
|
685
|
+
- Transforming your component into a `standalone` component by changing `standalone: false` into `standalone: true`
|
|
686
|
+
(recommended by angular, but implies to make a standalone migration for each component, cf
|
|
687
687
|
- https://v19.angular.dev/reference/migrations/standalone, then check that your application is compiling/running well after that)
|
|
688
688
|
|
|
689
689
|
Then run again:
|
|
Binary file
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Optional, Inject, Injectable, EventEmitter, Input, HostBinding, Output, forwardRef, ViewChildren, ViewChild, Directive, Pipe, Component, ContentChildren, HostListener, NgModule, TemplateRef, ContentChild } from '@angular/core';
|
|
2
|
+
import { Optional, Inject, Injectable, EventEmitter, Input, HostBinding, Output, forwardRef, ViewChildren, ViewChild, Directive, Pipe, Component, ContentChildren, HostListener, NgModule, inject, 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
5
|
import { of, Subject, BehaviorSubject, combineLatest, throwError, switchMap as switchMap$1, forkJoin, tap as tap$1, concat, toArray, EMPTY, startWith, filter as filter$1, merge, withLatestFrom, debounceTime as debounceTime$1, map as map$1 } from 'rxjs';
|
|
@@ -132,11 +132,18 @@ class FoehnPageService {
|
|
|
132
132
|
this._foehnPageSubject = new Subject();
|
|
133
133
|
this._saveFormRequestSubject = new Subject();
|
|
134
134
|
this._currentEtapeId = new BehaviorSubject(null);
|
|
135
|
+
this._appVersionMismatch = new BehaviorSubject(false);
|
|
135
136
|
this.currentEtapeIdObs = this._currentEtapeId.asObservable();
|
|
136
137
|
}
|
|
137
138
|
foehnPageObservable() {
|
|
138
139
|
return this._foehnPageSubject.asObservable();
|
|
139
140
|
}
|
|
141
|
+
setAppVersionMismatch() {
|
|
142
|
+
this._appVersionMismatch.next(true);
|
|
143
|
+
}
|
|
144
|
+
onAppVersionMismatch() {
|
|
145
|
+
return this._appVersionMismatch.asObservable();
|
|
146
|
+
}
|
|
140
147
|
setPageTitle(title) {
|
|
141
148
|
this._foehnPageSubject.next(title);
|
|
142
149
|
}
|
|
@@ -1120,6 +1127,11 @@ const DEFAULT_DICTIONARY = {
|
|
|
1120
1127
|
'draft-container.list.referenceInterne.label': 'Votre référence',
|
|
1121
1128
|
'draft-container.list.details-in-es.label': 'Détails',
|
|
1122
1129
|
'draft-container.list.details-in-es.link': "Consulter la demande {reference} dans l'espace sécurisé",
|
|
1130
|
+
'foehn-app-version-mismatch-modal.title': 'Mise à jour détectée',
|
|
1131
|
+
'foehn-app-version-mismatch-modal.content': '<strong>Cette application à été mise à jour.</strong><br/><br/>' +
|
|
1132
|
+
'Avant de continuer votre saisie, merci de recharger la page.',
|
|
1133
|
+
'foehn-app-version-mismatch-modal.btn.save-and-reload': 'Sauver et recharger',
|
|
1134
|
+
'foehn-app-version-mismatch-modal.btn.reload': 'Recharger',
|
|
1123
1135
|
'foehn-decision-electronique.title': 'Autorisation de notification des décisions par voie électronique',
|
|
1124
1136
|
'foehn-decision-electronique.info': 'Votre demande est sur le point d’être envoyée. ' +
|
|
1125
1137
|
'Conformément à l’art. 44a LPA-VD, l’autorité peut notifier ses décisions par voie électronique ' +
|
|
@@ -3762,8 +3774,7 @@ class FoehnDisplayAddressComponent {
|
|
|
3762
3774
|
* @param address as Address
|
|
3763
3775
|
* @returns any[]
|
|
3764
3776
|
*/
|
|
3765
|
-
|
|
3766
|
-
getLines(address) {
|
|
3777
|
+
static getLines(address) {
|
|
3767
3778
|
if (!address) {
|
|
3768
3779
|
return [];
|
|
3769
3780
|
}
|
|
@@ -3809,6 +3820,9 @@ class FoehnDisplayAddressComponent {
|
|
|
3809
3820
|
}
|
|
3810
3821
|
return lines;
|
|
3811
3822
|
}
|
|
3823
|
+
getLines(address) {
|
|
3824
|
+
return FoehnDisplayAddressComponent.getLines(address);
|
|
3825
|
+
}
|
|
3812
3826
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FoehnDisplayAddressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3813
3827
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FoehnDisplayAddressComponent, isStandalone: false, selector: "foehn-display-address", inputs: { address: "address" }, ngImport: i0, template: "<address class=\"foehn-address\" *ngIf=\"address\">\n <div *ngFor=\"let addressLine of getLines(address)\">{{ addressLine }}</div>\n</address>\n", styles: [".foehn-address{margin:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
3814
3828
|
}
|
|
@@ -7888,6 +7902,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
7888
7902
|
args: [{ selector: 'foehn-transmit-waiting-modal', standalone: false, template: "<foehn-modal\n [id]=\"'foehn-transmit-waiting-modal'\"\n [modalHeaderText]=\"'foehn-transmit-waiting-modal.title' | fromDictionary\"\n modalSize=\"modal-md\"\n [isModalVisible]=\"isTransmit | async\"\n (isModalVisibleChange)=\"updateVisibilityStatus($event)\"\n [closeable]=\"false\"\n>\n <!-- Need to add a tabindex=\"0\" (here on modal-body) otherwise cdkTrapFocus will not work because no closing button -->\n <div class=\"modal-body-content\" tabindex=\"0\">\n <p\n [innerHTML]=\"\n 'foehn-transmit-waiting-modal.message' | fromDictionary\n \"\n ></p>\n <div class=\"progress\" aria-hidden=\"true\">\n <div\n role=\"progressbar\"\n class=\"progress-bar bg-success progress-bar-animated progress-bar-striped w-100\"\n ></div>\n </div>\n <small\n class=\"form-text text-secondary\"\n [innerHTML]=\"'foehn-transmit-waiting-modal.help' | fromDictionary\"\n ></small>\n </div>\n</foehn-modal>\n", styles: [":host ::ng-deep .modal{z-index:10000}:host ::ng-deep .modal-header{background-color:var(--vd-neutral-lighter)}:host ::ng-deep .modal-content{border:none}:host ::ng-deep .modal-title{margin:0!important}:host ::ng-deep .modal-body{padding:.5rem}:host ::ng-deep .modal-body-content{padding:.5rem}:host ::ng-deep .modal-footer{display:none!important}\n"] }]
|
|
7889
7903
|
}], ctorParameters: () => [{ type: FoehnTransmitWaitingModalService }] });
|
|
7890
7904
|
|
|
7905
|
+
class FoehnAppVersionMisMatchModalComponent {
|
|
7906
|
+
constructor(foehnPageService) {
|
|
7907
|
+
this.foehnPageService = foehnPageService;
|
|
7908
|
+
this.hasDemandeInProgress = false;
|
|
7909
|
+
this.gesdemService = inject(GesdemHandlerService);
|
|
7910
|
+
this.registerNgModelService = inject(RegisterNgModelService);
|
|
7911
|
+
this.isModalVisible = this.foehnPageService.onAppVersionMismatch().pipe(filter(mismatch => !!mismatch), first(), tap$1(() => {
|
|
7912
|
+
this.hasDemandeInProgress =
|
|
7913
|
+
!!this.gesdemService.lastResponse?.meta?.reference?.length;
|
|
7914
|
+
}));
|
|
7915
|
+
}
|
|
7916
|
+
saveAndReload() {
|
|
7917
|
+
if (this.hasDemandeInProgress) {
|
|
7918
|
+
this.gesdemService
|
|
7919
|
+
.save(this.gesdemService.lastResponse.form, false, true)
|
|
7920
|
+
// eslint-disable-next-line rxjs-angular/prefer-async-pipe
|
|
7921
|
+
.subscribe(() => this.reloadPage());
|
|
7922
|
+
}
|
|
7923
|
+
else {
|
|
7924
|
+
this.reloadPage();
|
|
7925
|
+
}
|
|
7926
|
+
}
|
|
7927
|
+
reloadPage() {
|
|
7928
|
+
this.registerNgModelService.setHasInteractions(false);
|
|
7929
|
+
const url = new URL(window.location.href);
|
|
7930
|
+
url.searchParams.set('t', Date.now().toString());
|
|
7931
|
+
window.location.href = url.toString();
|
|
7932
|
+
}
|
|
7933
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FoehnAppVersionMisMatchModalComponent, deps: [{ token: FoehnPageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7934
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FoehnAppVersionMisMatchModalComponent, isStandalone: false, selector: "foehn-app-version-mis-match-modal", ngImport: i0, template: "<foehn-modal\n [id]=\"'foehn-app-version-mismatch-modal'\"\n [modalHeaderText]=\"\n 'foehn-app-version-mismatch-modal.title' | fromDictionary\n \"\n modalSize=\"modal-md\"\n [isModalVisible]=\"isModalVisible | async\"\n [closeable]=\"false\"\n>\n <div\n id=\"foehn-app-version-mismatch-modal-body\"\n [innerHTML]=\"\n 'foehn-app-version-mismatch-modal.content' | fromDictionary\n \"\n ></div>\n\n <div modal-footer class=\"w-100\">\n <div class=\"d-flex\">\n <button\n id=\"saveAndReloadBtn\"\n type=\"button\"\n class=\"btn btn-primary ms-auto\"\n [innerHTML]=\"\n (hasDemandeInProgress\n ? 'foehn-app-version-mismatch-modal.btn.save-and-reload'\n : 'foehn-app-version-mismatch-modal.btn.reload'\n ) | fromDictionary\n \"\n (click)=\"saveAndReload()\"\n ></button>\n </div>\n </div>\n</foehn-modal>\n", styles: [":host ::ng-deep .modal{z-index:10000}\n"], dependencies: [{ kind: "component", type: FoehnModalComponent, selector: "foehn-modal", inputs: ["id", "name", "modalSize", "modalBodyText", "modalHeaderText", "closeable", "draggable", "hideable", "modalTriggerHtmlElement", "isModalVisible"], outputs: ["isModalVisibleChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
|
|
7935
|
+
}
|
|
7936
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FoehnAppVersionMisMatchModalComponent, decorators: [{
|
|
7937
|
+
type: Component,
|
|
7938
|
+
args: [{ selector: 'foehn-app-version-mis-match-modal', standalone: false, template: "<foehn-modal\n [id]=\"'foehn-app-version-mismatch-modal'\"\n [modalHeaderText]=\"\n 'foehn-app-version-mismatch-modal.title' | fromDictionary\n \"\n modalSize=\"modal-md\"\n [isModalVisible]=\"isModalVisible | async\"\n [closeable]=\"false\"\n>\n <div\n id=\"foehn-app-version-mismatch-modal-body\"\n [innerHTML]=\"\n 'foehn-app-version-mismatch-modal.content' | fromDictionary\n \"\n ></div>\n\n <div modal-footer class=\"w-100\">\n <div class=\"d-flex\">\n <button\n id=\"saveAndReloadBtn\"\n type=\"button\"\n class=\"btn btn-primary ms-auto\"\n [innerHTML]=\"\n (hasDemandeInProgress\n ? 'foehn-app-version-mismatch-modal.btn.save-and-reload'\n : 'foehn-app-version-mismatch-modal.btn.reload'\n ) | fromDictionary\n \"\n (click)=\"saveAndReload()\"\n ></button>\n </div>\n </div>\n</foehn-modal>\n", styles: [":host ::ng-deep .modal{z-index:10000}\n"] }]
|
|
7939
|
+
}], ctorParameters: () => [{ type: FoehnPageService }] });
|
|
7940
|
+
|
|
7891
7941
|
const LEAVING_ALERT_CONTENT = 'Ce changement de page entraine une perte des données non sauvegardées.<br/>Souhaitez-vous quand même continuer ?';
|
|
7892
7942
|
const LEAVING_ALERT_OK = 'Poursuivre sans sauvegarder';
|
|
7893
7943
|
const LEAVING_ALERT_CANCEL = 'Retourner à la prestation';
|
|
@@ -7939,6 +7989,7 @@ class FoehnPageComponent {
|
|
|
7939
7989
|
* reloading the page while having unsaved data.
|
|
7940
7990
|
*/
|
|
7941
7991
|
this.showBeforeUnloadNativeConfirmAlert = true;
|
|
7992
|
+
this.showAppVersionMismatchAlert = true;
|
|
7942
7993
|
this.loginMessagesHidden = false;
|
|
7943
7994
|
this.browserLinkTitlePrefix = 'Lien pour le téléchargement du navigateur internet';
|
|
7944
7995
|
this.browserNotSupportedBypass = false;
|
|
@@ -8062,11 +8113,11 @@ class FoehnPageComponent {
|
|
|
8062
8113
|
this.pageTitle = title;
|
|
8063
8114
|
}
|
|
8064
8115
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FoehnPageComponent, deps: [{ token: i1$3.Title }, { token: FoehnPageService }, { token: SupportAlertService }, { token: FoehnNavigationService }, { token: ApplicationInfoService }, { token: GesdemEventService }, { token: BreadcrumbEventService }, { token: i1$1.Router }, { token: SessionInfo }, { token: FoehnPageModalService }, { token: SdkDictionaryService }, { token: SdkStatisticsService }, { token: DemandeExpirationService }, { token: RegisterNgModelService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8065
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
8116
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FoehnPageComponent, isStandalone: false, selector: "foehn-page", inputs: { appTitle: "appTitle", footerLinks: "footerLinks", supportAlertEnabled: "supportAlertEnabled", draftsEnabled: "draftsEnabled", supportAlertUrl: "supportAlertUrl", draftsUrl: "draftsUrl", etapeId: "etapeId", userConnectedAsDisplayed: "userConnectedAsDisplayed", statusProgressBarHidden: "statusProgressBarHidden", confirmLeavingAlert: "confirmLeavingAlert", showDefaultContactFooterLink: "showDefaultContactFooterLink", showDefaultGuideFooterLink: "showDefaultGuideFooterLink", showDefaultTermOfUseLink: "showDefaultTermOfUseLink", showDefaultSecurityBestPracticeLink: "showDefaultSecurityBestPracticeLink", showBeforeUnloadNativeConfirmAlert: "showBeforeUnloadNativeConfirmAlert", showAppVersionMismatchAlert: "showAppVersionMismatchAlert", routerLinkAppTitle: "routerLinkAppTitle" }, host: { listeners: { "window:beforeunload": "unloadNotification($event)" } }, usesOnChanges: true, ngImport: i0, template: "<foehn-page-expiration-timer\n *ngIf=\"(displayDemandeExpirationTimer | async) === true\"\n id=\"foehn-page-expiration-timer\"\n></foehn-page-expiration-timer>\n<foehn-header\n id=\"foehn_header\"\n [title]=\"appTitle\"\n [routerLinkAppTitle]=\"routerLinkAppTitle\"\n [showSecuredAreaLoginButton]=\"showSecuredAreaLoginButton | async\"\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 [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\"> </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 <foehn-status-progress-bar\n [hidden]=\"\n statusProgressBarHidden || !!(hasBlockingSupportAlert | async)\n \"\n ></foehn-status-progress-bar>\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 {{ 'foehn-page.browser-not-supported' | fromDictionary }}\n </strong>\n </p>\n <p class=\"mb-0\">\n {{ 'foehn-page.browser-download-invitation' | fromDictionary }}\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 rel=\"noopener\"\n >\n Edge\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 rel=\"noopener\"\n >\n Safari\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 rel=\"noopener\"\n >\n Firefox\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n {{ 'foehn-page.browser-download-list.ou' | fromDictionary }}\n <a\n [title]=\"browserLinkTitlePrefix + ' Chrome'\"\n href=\"https://www.google.com/intl/fr/chrome/\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n Chrome\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 type=\"button\"\n class=\"float-end btn btn-danger\"\n *ngIf=\"!browserNotSupportedBypass\"\n (click)=\"browserNotSupportedBypass = true\"\n >\n {{\n 'foehn-page.continue-with-same-browser' | fromDictionary\n }}\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 <sdk-drafts-container\n *ngIf=\"draftsEnabled\"\n [etapeId]=\"etapeId\"\n [draftsUrl]=\"draftsUrl\"\n ></sdk-drafts-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 </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<foehn-transmit-waiting-modal></foehn-transmit-waiting-modal>\n@if (showAppVersionMismatchAlert) {\n <foehn-app-version-mis-match-modal></foehn-app-version-mis-match-modal>\n}\n", styles: ["#loginAndContinueButton{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DraftsContainerComponent, selector: "sdk-drafts-container", inputs: ["etapeId", "draftsUrl"] }, { kind: "component", type: FoehnBreadcrumbComponent, selector: "foehn-breadcrumb", inputs: ["breadcrumbItems", "currentNav", "confirmLeavingAlert"] }, { kind: "component", type: FoehnGrowlComponent, selector: "foehn-growl" }, { kind: "component", type: FoehnHeaderComponent, selector: "foehn-header", inputs: ["title", "showSecuredAreaLoginButton", "routerLinkAppTitle", "userInfo"] }, { kind: "component", type: FoehnFooterComponent, selector: "foehn-footer", inputs: ["links", "showDefaultContactLink", "showDefaultGuideLink", "showDefaultTermOfUseLink", "showDefaultSecurityBestPracticeLink"] }, { kind: "component", type: FoehnUserConnectedAsComponent, selector: "foehn-user-connected-as" }, { kind: "component", type: SupportAlertContainerComponent, selector: "sdk-support-alert-container", inputs: ["etapeId", "supportAlertUrl"] }, { kind: "component", type: FoehnConfirmModalComponent, selector: "foehn-confirm-modal" }, { kind: "component", type: FoehnIconExternalLinkAltComponent, selector: "foehn-icon-external-link-alt" }, { kind: "component", type: FoehnStatusProgressBarComponent, selector: "foehn-status-progress-bar", inputs: ["hidden"] }, { kind: "component", type: FoehnPageModalComponent, selector: "foehn-page-modal" }, { kind: "component", type: FoehnPageExpirationTimerComponent, selector: "foehn-page-expiration-timer" }, { kind: "component", type: FoehnTransmitWaitingModalComponent, selector: "foehn-transmit-waiting-modal" }, { kind: "component", type: FoehnAppVersionMisMatchModalComponent, selector: "foehn-app-version-mis-match-modal" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
|
|
8066
8117
|
}
|
|
8067
8118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FoehnPageComponent, decorators: [{
|
|
8068
8119
|
type: Component,
|
|
8069
|
-
args: [{ selector: 'foehn-page', standalone: false, template: "<foehn-page-expiration-timer\n *ngIf=\"(displayDemandeExpirationTimer | async) === true\"\n id=\"foehn-page-expiration-timer\"\n></foehn-page-expiration-timer>\n<foehn-header\n id=\"foehn_header\"\n [title]=\"appTitle\"\n [routerLinkAppTitle]=\"routerLinkAppTitle\"\n [showSecuredAreaLoginButton]=\"showSecuredAreaLoginButton | async\"\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 [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\"> </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 <foehn-status-progress-bar\n [hidden]=\"\n statusProgressBarHidden || !!(hasBlockingSupportAlert | async)\n \"\n ></foehn-status-progress-bar>\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 {{ 'foehn-page.browser-not-supported' | fromDictionary }}\n </strong>\n </p>\n <p class=\"mb-0\">\n {{ 'foehn-page.browser-download-invitation' | fromDictionary }}\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 rel=\"noopener\"\n >\n Edge\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 rel=\"noopener\"\n >\n Safari\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 rel=\"noopener\"\n >\n Firefox\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n {{ 'foehn-page.browser-download-list.ou' | fromDictionary }}\n <a\n [title]=\"browserLinkTitlePrefix + ' Chrome'\"\n href=\"https://www.google.com/intl/fr/chrome/\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n Chrome\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 type=\"button\"\n class=\"float-end btn btn-danger\"\n *ngIf=\"!browserNotSupportedBypass\"\n (click)=\"browserNotSupportedBypass = true\"\n >\n {{\n 'foehn-page.continue-with-same-browser' | fromDictionary\n }}\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 <sdk-drafts-container\n *ngIf=\"draftsEnabled\"\n [etapeId]=\"etapeId\"\n [draftsUrl]=\"draftsUrl\"\n ></sdk-drafts-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 </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<foehn-transmit-waiting-modal></foehn-transmit-waiting-modal>\n", styles: ["#loginAndContinueButton{text-decoration:underline}\n"] }]
|
|
8120
|
+
args: [{ selector: 'foehn-page', standalone: false, template: "<foehn-page-expiration-timer\n *ngIf=\"(displayDemandeExpirationTimer | async) === true\"\n id=\"foehn-page-expiration-timer\"\n></foehn-page-expiration-timer>\n<foehn-header\n id=\"foehn_header\"\n [title]=\"appTitle\"\n [routerLinkAppTitle]=\"routerLinkAppTitle\"\n [showSecuredAreaLoginButton]=\"showSecuredAreaLoginButton | async\"\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 [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\"> </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 <foehn-status-progress-bar\n [hidden]=\"\n statusProgressBarHidden || !!(hasBlockingSupportAlert | async)\n \"\n ></foehn-status-progress-bar>\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 {{ 'foehn-page.browser-not-supported' | fromDictionary }}\n </strong>\n </p>\n <p class=\"mb-0\">\n {{ 'foehn-page.browser-download-invitation' | fromDictionary }}\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 rel=\"noopener\"\n >\n Edge\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 rel=\"noopener\"\n >\n Safari\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 rel=\"noopener\"\n >\n Firefox\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n {{ 'foehn-page.browser-download-list.ou' | fromDictionary }}\n <a\n [title]=\"browserLinkTitlePrefix + ' Chrome'\"\n href=\"https://www.google.com/intl/fr/chrome/\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n Chrome\n <span class=\"visually-hidden\">\n {{ 'foehn-page.external-link.srOnly' | fromDictionary }}\n </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 type=\"button\"\n class=\"float-end btn btn-danger\"\n *ngIf=\"!browserNotSupportedBypass\"\n (click)=\"browserNotSupportedBypass = true\"\n >\n {{\n 'foehn-page.continue-with-same-browser' | fromDictionary\n }}\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 <sdk-drafts-container\n *ngIf=\"draftsEnabled\"\n [etapeId]=\"etapeId\"\n [draftsUrl]=\"draftsUrl\"\n ></sdk-drafts-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 </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<foehn-transmit-waiting-modal></foehn-transmit-waiting-modal>\n@if (showAppVersionMismatchAlert) {\n <foehn-app-version-mis-match-modal></foehn-app-version-mis-match-modal>\n}\n", styles: ["#loginAndContinueButton{text-decoration:underline}\n"] }]
|
|
8070
8121
|
}], ctorParameters: () => [{ type: i1$3.Title }, { type: FoehnPageService }, { type: SupportAlertService }, { type: FoehnNavigationService }, { type: ApplicationInfoService }, { type: GesdemEventService }, { type: BreadcrumbEventService }, { type: i1$1.Router }, { type: SessionInfo }, { type: FoehnPageModalService }, { type: SdkDictionaryService }, { type: SdkStatisticsService }, { type: DemandeExpirationService }, { type: RegisterNgModelService }], propDecorators: { appTitle: [{
|
|
8071
8122
|
type: Input
|
|
8072
8123
|
}], footerLinks: [{
|
|
@@ -8097,6 +8148,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
8097
8148
|
type: Input
|
|
8098
8149
|
}], showBeforeUnloadNativeConfirmAlert: [{
|
|
8099
8150
|
type: Input
|
|
8151
|
+
}], showAppVersionMismatchAlert: [{
|
|
8152
|
+
type: Input
|
|
8100
8153
|
}], routerLinkAppTitle: [{
|
|
8101
8154
|
type: Input
|
|
8102
8155
|
}], unloadNotification: [{
|
|
@@ -9652,6 +9705,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
9652
9705
|
}]
|
|
9653
9706
|
}] });
|
|
9654
9707
|
|
|
9708
|
+
const APP_VERSION_HEADER = 'app-version';
|
|
9709
|
+
class AppInfoHeadersInterceptor {
|
|
9710
|
+
constructor() {
|
|
9711
|
+
this.foehnPageService = inject(FoehnPageService);
|
|
9712
|
+
}
|
|
9713
|
+
intercept(request, next) {
|
|
9714
|
+
return next.handle(request).pipe(tap$1((httpEvent) => {
|
|
9715
|
+
if (httpEvent instanceof HttpResponse) {
|
|
9716
|
+
const appVersionInHeader = httpEvent.headers.get(APP_VERSION_HEADER);
|
|
9717
|
+
if (!this.appVersion?.length) {
|
|
9718
|
+
this.appVersion = appVersionInHeader;
|
|
9719
|
+
}
|
|
9720
|
+
else {
|
|
9721
|
+
if (appVersionInHeader &&
|
|
9722
|
+
this.appVersion !== appVersionInHeader) {
|
|
9723
|
+
this.foehnPageService.setAppVersionMismatch();
|
|
9724
|
+
}
|
|
9725
|
+
}
|
|
9726
|
+
}
|
|
9727
|
+
}));
|
|
9728
|
+
}
|
|
9729
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AppInfoHeadersInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9730
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AppInfoHeadersInterceptor, providedIn: 'root' }); }
|
|
9731
|
+
}
|
|
9732
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AppInfoHeadersInterceptor, decorators: [{
|
|
9733
|
+
type: Injectable,
|
|
9734
|
+
args: [{
|
|
9735
|
+
providedIn: 'root'
|
|
9736
|
+
}]
|
|
9737
|
+
}] });
|
|
9738
|
+
const APP_INFO_HEADERS_INTERCEPTOR_PROVIDER = [
|
|
9739
|
+
{
|
|
9740
|
+
provide: HTTP_INTERCEPTORS,
|
|
9741
|
+
useExisting: AppInfoHeadersInterceptor,
|
|
9742
|
+
multi: true
|
|
9743
|
+
}
|
|
9744
|
+
];
|
|
9745
|
+
|
|
9655
9746
|
class FoehnPageCounterComponent {
|
|
9656
9747
|
constructor(foehnNavigationService, ngZone) {
|
|
9657
9748
|
this.foehnNavigationService = foehnNavigationService;
|
|
@@ -9747,7 +9838,8 @@ class FoehnPageModule {
|
|
|
9747
9838
|
FoehnPageCounterComponent,
|
|
9748
9839
|
FoehnPageModalComponent,
|
|
9749
9840
|
FoehnPageExpirationTimerComponent,
|
|
9750
|
-
FoehnTransmitWaitingModalComponent
|
|
9841
|
+
FoehnTransmitWaitingModalComponent,
|
|
9842
|
+
FoehnAppVersionMisMatchModalComponent], imports: [CommonModule,
|
|
9751
9843
|
DraftsModule,
|
|
9752
9844
|
FoehnBreadcrumbModule,
|
|
9753
9845
|
FoehnGrowlModule,
|
|
@@ -9765,6 +9857,7 @@ class FoehnPageModule {
|
|
|
9765
9857
|
FoehnPageExpirationTimerComponent,
|
|
9766
9858
|
FoehnTransmitWaitingModalComponent] }); }
|
|
9767
9859
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FoehnPageModule, providers: [
|
|
9860
|
+
APP_INFO_HEADERS_INTERCEPTOR_PROVIDER,
|
|
9768
9861
|
DEMANDE_EXPIRATION_INTERCEPTOR_PROVIDER,
|
|
9769
9862
|
DEMANDE_TRANSMIT_INTERCEPTOR_PROVIDER
|
|
9770
9863
|
], imports: [CommonModule,
|
|
@@ -9804,7 +9897,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
9804
9897
|
FoehnPageCounterComponent,
|
|
9805
9898
|
FoehnPageModalComponent,
|
|
9806
9899
|
FoehnPageExpirationTimerComponent,
|
|
9807
|
-
FoehnTransmitWaitingModalComponent
|
|
9900
|
+
FoehnTransmitWaitingModalComponent,
|
|
9901
|
+
FoehnAppVersionMisMatchModalComponent
|
|
9808
9902
|
],
|
|
9809
9903
|
exports: [
|
|
9810
9904
|
FoehnPageComponent,
|
|
@@ -9814,6 +9908,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
9814
9908
|
FoehnTransmitWaitingModalComponent
|
|
9815
9909
|
],
|
|
9816
9910
|
providers: [
|
|
9911
|
+
APP_INFO_HEADERS_INTERCEPTOR_PROVIDER,
|
|
9817
9912
|
DEMANDE_EXPIRATION_INTERCEPTOR_PROVIDER,
|
|
9818
9913
|
DEMANDE_TRANSMIT_INTERCEPTOR_PROVIDER
|
|
9819
9914
|
]
|