Skip to content

Commit 1d997ad

Browse files
l-schererachorein
authored andcommitted
feat: 1361 fusager I give my opinion (#1248)
## Ticket(s) lié(s) 1361 ## Description Ajout d'un écran modal en fin de déclaration de séjour M-2 / J-8 pour permettre aux utilisateurs de donner leur avis ## Screenshot / liens loom <img width="1024" height="542" alt="image" src="https://github.com/user-attachments/assets/5a4d07f7-15cc-43db-922a-35dfae7f7087" /> ## Check-list - [X] Ma branche est rebase sur main - [ ] Des tests ont été écrits pour tous les endpoints créés ou modifiés - [X] Refacto "à la volée" des parties sur lesquelles j'ai codée - [X] Plus de `console.log` - [ ] J'ai ajouté une validation de schéma sur la route que j'ai ajouté ou modifié - [ ] J'ai converti les fichiers vue en `<script lang="ts">` - [X] Mon code est en Typescript (autant que possible) **Testing instructions** En tant qu'usager - [x] Aller dans la liste des déclarations de séjour - [x] Créer ou reprendre une déclaration m-2 ou J-8 - [x] Compléter et aller jusqu' à la transmission de la déclaration - [X] Une fois avoir cliqué sur la transmission de la déclaration une nouvelle fenêtre s'affiche invitant à donner son avis - [X] Un clique sur "je donne mon avis" ouvre un nouvel onglet - [X] Possibilité de fermer la fenêtre modale, on est alors redirigé vers la liste des déclaration de séjours
1 parent d14ea0b commit 1d997ad

3 files changed

Lines changed: 91 additions & 9 deletions

File tree

packages/frontend-usagers/nuxt.config.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@ export default defineNuxtConfig({
6161
headers: {
6262
crossOriginEmbedderPolicy: "unsafe-none",
6363
contentSecurityPolicy: {
64-
"img-src": ["'self'", "*.openstreetmap.org", "data:"],
64+
"img-src": [
65+
"'self'",
66+
"*.openstreetmap.org",
67+
"jedonnemonavis.numerique.gouv.fr",
68+
"data:",
69+
],
6570
"script-src": [
6671
"'self'",
6772
"https:",
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<template>
2+
<h2 class="fr-h4">
3+
<span
4+
class="fr-icon-check-line fr-icon--lg fr-mr-1w icon-success"
5+
aria-hidden="true"
6+
></span>
7+
Votre déclaration a bien été transmise
8+
</h2>
9+
<section class="fr-container fr-my-4w">
10+
<p>Votre demande est en cours de traitement</p>
11+
12+
<div class="avis-box" role="region" aria-labelledby="avis-title">
13+
<div class="fr-grid-row fr-grid-row--gutters fr-grid-row--middle">
14+
<div class="fr-col-12 fr-col-md-6">
15+
<h3 id="avis-title" class="fr-h4">
16+
Comment s’est passée votre démarche ?
17+
</h3>
18+
19+
<p class="fr-text--sm">
20+
Aidez-nous à améliorer cette démarche en donnant votre avis, cela ne
21+
prend que 2 minutes.
22+
</p>
23+
</div>
24+
<div class="fr-col-12 fr-col-md-6 fr-text--right">
25+
<a
26+
href="https://jedonnemonavis.numerique.gouv.fr/Demarches/4077?button=4503"
27+
target="_blank"
28+
rel="noopener noreferrer"
29+
title="Je donne mon avis - nouvelle fenêtre"
30+
>
31+
<img
32+
src="https://jedonnemonavis.numerique.gouv.fr/static/bouton-bleu-clair.svg"
33+
alt="Je donne mon avis"
34+
/>
35+
</a>
36+
</div>
37+
</div>
38+
</div>
39+
</section>
40+
</template>
41+
42+
<script setup lang="ts"></script>
43+
44+
<style scoped>
45+
.icon-success {
46+
color: var(--text-default-success);
47+
}
48+
.avis-box {
49+
background-color: var(--background-contrast-blue-france);
50+
padding: 1rem;
51+
margin: 1rem;
52+
}
53+
a img {
54+
width: 90%;
55+
}
56+
</style>

packages/frontend-usagers/src/pages/demande-sejour/[[declarationId]].vue

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,15 @@
168168
</div>
169169
</div>
170170
</div>
171+
<DsfrModal
172+
class="fr-icon-checkbox-circle-line fr-icon--lg"
173+
name="modal-confirm-transmission"
174+
:opened="isModalConfirmTransmissionOpened"
175+
size="md"
176+
@close="onCloseConfirmTransmissionModal"
177+
>
178+
<DemandeSejourConfirmTransmission />
179+
</DsfrModal>
171180
</div>
172181
</DsfrTabContent>
173182

@@ -241,7 +250,12 @@
241250

242251
<script setup>
243252
import dayjs from "dayjs";
244-
import { Chat, DemandeStatusBadge, fileUtils, useToaster } from "@vao/shared-ui";
253+
import {
254+
Chat,
255+
DemandeStatusBadge,
256+
fileUtils,
257+
useToaster,
258+
} from "@vao/shared-ui";
245259
const getFileUploadErrorMessage = fileUtils.getFileUploadErrorMessage;
246260
247261
const route = useRoute();
@@ -475,6 +489,12 @@ const hash = computed(() => {
475489
return sommaireOptions[0];
476490
});
477491
492+
const isModalConfirmTransmissionOpened = ref(false);
493+
494+
async function onCloseConfirmTransmissionModal() {
495+
isModalConfirmTransmissionOpened.value = false;
496+
await navigateTo("/demande-sejour/liste");
497+
}
478498
const canModify = computed(() => {
479499
return (
480500
!demandeCourante.value.statut ||
@@ -663,12 +683,10 @@ async function updateOrCreate(data, type) {
663683
},
664684
});
665685
666-
toaster.success(
667-
{
668-
titleTag: "h2",
669-
description: `Déclaration de séjour ${sejourId.value ? "sauvegardée" : "créée"}`,
670-
}
671-
);
686+
toaster.success({
687+
titleTag: "h2",
688+
description: `Déclaration de séjour ${sejourId.value ? "sauvegardée" : "créée"}`,
689+
});
672690
log.d(`demande de séjour ${sejourId.value} mis à jour`);
673691
sejourId.value = response.id;
674692
return await nextHash();
@@ -735,7 +753,7 @@ async function finalize(attestation) {
735753
});
736754
}
737755
log.d(`demande de séjour ${sejourId.value} transmise`);
738-
return await navigateTo("/demande-sejour/liste");
756+
isModalConfirmTransmissionOpened.value = true;
739757
} catch (error) {
740758
log.w("Finalisation de la declaration de sejour : ", { error });
741759
const codeError = error?.data?.name;
@@ -782,4 +800,7 @@ onMounted(async () => {
782800
justify-content: end;
783801
align-items: start;
784802
}
803+
a img {
804+
display: block;
805+
}
785806
</style>

0 commit comments

Comments
 (0)