From 71884dcb1a430e280786ae40aa4898627de44ad1 Mon Sep 17 00:00:00 2001 From: Alejandro MG Date: Fri, 17 Jan 2025 16:50:41 +0100 Subject: [PATCH 01/15] UI modal structure --- frontend/src/utils/mappings.js | 56 +++++++++++ .../src/views/InstructionPage/DecisionTab.vue | 57 +---------- .../VisaPage/DecisionModificationModal.vue | 98 +++++++++++++++++++ .../src/views/VisaPage/VisaValidationTab.vue | 25 +++-- 4 files changed, 171 insertions(+), 65 deletions(-) create mode 100644 frontend/src/views/VisaPage/DecisionModificationModal.vue diff --git a/frontend/src/utils/mappings.js b/frontend/src/utils/mappings.js index 4d9ea11ac..f2c92e19b 100644 --- a/frontend/src/utils/mappings.js +++ b/frontend/src/utils/mappings.js @@ -275,3 +275,59 @@ export const populationCategoriesMapping = { export const getAuthorizationModeInFrench = (type) => { return authorizationModesMapping[type] || null } + +export const blockingReasons = [ + { + title: "Le produit ne répond pas à la définition du complément alimentaire", + items: [ + "Forme assimilable à un aliment courant", + "Recommandations d'emploi incompatibles", + "Composition (source concentrée, ...)", + "Autre raison pour laquelle le produit ne répond pas à la définition du complément alimentaire", + ], + }, + { + title: "Le produit répond à la définition du médicament", + items: ["Médicament par fonction", "Médicament par présentation", "Sevrage tabagique"], + }, + { + title: "Les procédures ne sont pas respectées", + items: [ + "Présence d'un Novel Food", + "Présence d'une forme d'apport en nutriments non autorisée", + "Demande en article 17 attendue", + "Demande en article 18 attendue", + ], + }, + { + title: "Le dossier n'est pas recevable", + items: [ + "Incohérences entre le dossier et l'étiquetage", + "Informations manquantes", + "Absence de preuve de reconnaissance mutuelle", + "Absence ou non conformité de l'étiquetage", + "Autre motif d'irrecevabilité", + ], + }, + { + title: "Le complément alimentaire n'est pas acceptable", + items: ["Existence d'un risque"], + }, +] + +export const decisionCategories = [ + { + value: "approve", + title: "J’envoie l’attestation de déclaration", + icon: "ri-checkbox-circle-fill", + description: "La déclaration est conforme et peut être transmise.", + color: "green", + }, + { + value: "modify", + title: "Des changements sont nécessaires", + icon: "ri-close-circle-fill", + description: "La déclaration ne peut pas être transmise en l'état.", + color: "red", + }, +] diff --git a/frontend/src/views/InstructionPage/DecisionTab.vue b/frontend/src/views/InstructionPage/DecisionTab.vue index e0923d40e..56709d008 100644 --- a/frontend/src/views/InstructionPage/DecisionTab.vue +++ b/frontend/src/views/InstructionPage/DecisionTab.vue @@ -105,6 +105,7 @@ import { headers } from "@/utils/data-fetching" import useToaster from "@/composables/use-toaster" import { handleError } from "@/utils/error-handling" import ArticleInfoRow from "@/components/DeclarationSummary/ArticleInfoRow" +import { blockingReasons, decisionCategories } from "@/utils/mappings" const decisionCategory = ref(null) watch(decisionCategory, () => (proposal.value = decisionCategory.value === "approve" ? "autorisation" : null)) @@ -142,62 +143,6 @@ watch(proposal, (newProposal) => { const needsAnsesReferal = computed(() => declaration.value?.article === "ANSES_REFERAL") -const decisionCategories = [ - { - value: "approve", - title: "J’envoie l’attestation de déclaration", - icon: "ri-checkbox-circle-fill", - description: "La déclaration est conforme et peut être transmise.", - color: "green", - }, - { - value: "modify", - title: "Des changements sont nécessaires", - icon: "ri-close-circle-fill", - description: "La déclaration ne peut pas être transmise en l'état.", - color: "red", - }, -] - -const blockingReasons = [ - { - title: "Le produit ne répond pas à la définition du complément alimentaire", - items: [ - "Forme assimilable à un aliment courant", - "Recommandations d'emploi incompatibles", - "Composition (source concentrée, ...)", - "Autre raison pour laquelle le produit ne répond pas à la définition du complément alimentaire", - ], - }, - { - title: "Le produit répond à la définition du médicament", - items: ["Médicament par fonction", "Médicament par présentation", "Sevrage tabagique"], - }, - { - title: "Les procédures ne sont pas respectées", - items: [ - "Présence d'un Novel Food", - "Présence d'une forme d'apport en nutriments non autorisée", - "Demande en article 17 attendue", - "Demande en article 18 attendue", - ], - }, - { - title: "Le dossier n'est pas recevable", - items: [ - "Incohérences entre le dossier et l'étiquetage", - "Informations manquantes", - "Absence de preuve de reconnaissance mutuelle", - "Absence ou non conformité de l'étiquetage", - "Autre motif d'irrecevabilité", - ], - }, - { - title: "Le complément alimentaire n'est pas acceptable", - items: ["Existence d'un risque"], - }, -] - const proposalOptions = computed(() => { if (decisionCategory.value === "approve") return [{ text: "Autorisation", value: "autorisation" }] diff --git a/frontend/src/views/VisaPage/DecisionModificationModal.vue b/frontend/src/views/VisaPage/DecisionModificationModal.vue new file mode 100644 index 000000000..6a03ab780 --- /dev/null +++ b/frontend/src/views/VisaPage/DecisionModificationModal.vue @@ -0,0 +1,98 @@ + + + diff --git a/frontend/src/views/VisaPage/VisaValidationTab.vue b/frontend/src/views/VisaPage/VisaValidationTab.vue index ea59848a9..fd54ea50d 100644 --- a/frontend/src/views/VisaPage/VisaValidationTab.vue +++ b/frontend/src/views/VisaPage/VisaValidationTab.vue @@ -5,6 +5,12 @@
+