From ebeb6adb0f676bc4d69230e6c28ba8ff0c2e7558 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Fri, 17 May 2024 11:38:24 +0200 Subject: [PATCH] Move getDisclaimer from ResultPage to typology files --- frontend/src/components/ResultPage.vue | 45 +++---------------- frontend/src/main.css | 2 +- frontend/src/stores/result.ts | 4 +- .../epaule-a-levier-sous-garde.ts | 2 + .../utils/firearms-utils/epaule-a-pompe.ts | 15 ++----- .../utils/firearms-utils/epaule-a-verrou.ts | 2 + .../epaule-semi-auto-militaire-milieu-20e.ts | 1 + .../epaule-semi-auto-style-chasse.ts | 19 ++++++++ .../get-next-route-after-result.ts | 6 +-- frontend/src/utils/firearms-utils/index.ts | 25 ++++------- .../pistolet-semi-auto-moderne.ts | 5 +++ frontend/src/utils/firearms-utils/revolver.ts | 5 +++ .../GuideIdentificationFirearm.vue | 8 ++-- .../IdentificationSelectAmmo.vue | 4 +- .../SecuringAchievement.vue | 4 +- .../SecuringSelectOptionContent.vue | 14 +++--- .../SecuringTutorialContent.vue | 26 +++++------ frontend/src/views/MissingCardPage.vue | 44 +++++++++--------- 18 files changed, 110 insertions(+), 121 deletions(-) diff --git a/frontend/src/components/ResultPage.vue b/frontend/src/components/ResultPage.vue index 26d74ed0..458644b3 100644 --- a/frontend/src/components/ResultPage.vue +++ b/frontend/src/components/ResultPage.vue @@ -2,7 +2,7 @@ import { ref, computed, watchEffect } from 'vue' import axios from 'axios' import SnackbarAlert from '@/components/SnackbarAlert.vue' -import { resultTree, ALARM_GUNS_TYPOLOGIES, MEASURED_GUNS_TYPOLOGIES, DISCLAIMERS } from '@/utils/firearms-utils/index' +import { TYPOLOGIES, MEASURED_GUNS_TYPOLOGIES } from '@/utils/firearms-utils/index' import { isUserUsingCrosscall } from '@/utils/isUserUsingCrosscall' import { useSnackbarStore } from '@/stores/snackbar' import { useStepsStore } from '@/stores/steps' @@ -28,40 +28,7 @@ function getCategoryFromTypologyAndMeasures (typology: string, gunLength: number if (gunLength > 75 && gunBarrelLength > 55) { return 'C' } } } - return resultTree[typology]?.category -} - -function getDisclaimer (typology: string, category: string) { - if (['epaule_a_levier_sous_garde', 'epaule_a_verrou'].includes(typology)) { - if (isCardDetected.value === false) { - if (['B ou C', 'C'].includes(category)) { - return DISCLAIMERS.epaule_a_levier_verrou.short - } - } else { - if (['C'].includes(category)) { - return DISCLAIMERS.epaule_a_levier_verrou.short - } - if (['B ou C'].includes(category)) { - return DISCLAIMERS.epaule_a_levier_verrou.long - } - } - } - if (typology === 'epaule_semi_auto_style_chasse' && ['B ou C', 'C'].includes(category)) { - if (isCardDetected.value === false) { - return DISCLAIMERS.semi_auto_style_chasse.short - } else { - if (['C'].includes(category)) { - return DISCLAIMERS.semi_auto_style_chasse.short - } - if (['B ou C'].includes(category)) { - return DISCLAIMERS.semi_auto_style_chasse.long - } - } - } - if (typology === 'epaule_a_pompe' && category === 'B ou C') { return DISCLAIMERS.epaule_a_pompe.short } - if (typology === 'epaule_a_pompe' && category === 'C') { return DISCLAIMERS.epaule_a_pompe.long } - if (['epaule_semi_auto_style_militaire_milieu_20e', 'semi_auto_style_militaire_autre'].includes(typology)) { return DISCLAIMERS.epaule_semi_auto_style_militaire } - if (ALARM_GUNS_TYPOLOGIES.includes(typology) && category === 'D') { return DISCLAIMERS.alarm_guns } + return TYPOLOGIES[typology]?.category } watchEffect(() => { @@ -76,14 +43,14 @@ const imgUrl = computed(() => resultStore.imgUrl) const typology = computed(() => resultStore.typology) const isDummy = computed(() => stepsStore.isDummy) -const isDummyTypology = computed(() => resultTree[typology.value]?.isDummyTypology === true) +const isDummyTypology = computed(() => TYPOLOGIES[typology.value]?.isDummyTypology === true) const isCardDetected = computed(() => resultStore.gunLength !== null && resultStore.gunBarrelLength !== null) const isUp = ref(false) const isDown = ref(false) const isFeedbackDone = ref(false) -const label = computed(() => resultTree[typology.value]?.displayLabel) +const label = computed(() => TYPOLOGIES[typology.value]?.displayLabel) const category = computed(() => { if (stepsStore.selectedAlarmGun && stepsStore.selectedAlarmGun !== '') { @@ -91,13 +58,13 @@ const category = computed(() => { } else if (isDummy.value) { return 'Non Classée' } else if (typology.value === 'revolver') { - return resultTree[typology.value]?.categoryWithoutSecuring + return TYPOLOGIES[typology.value]?.categoryWithoutSecuring } else { return getCategoryFromTypologyAndMeasures(typology.value, resultStore.gunLength, resultStore.gunBarrelLength) } }) -const disclaimer = computed(() => getDisclaimer(typology.value, category.value)) +const disclaimer = computed(() => TYPOLOGIES[typology.value] && Object.hasOwn(TYPOLOGIES[typology.value], 'getDisclaimer') ? TYPOLOGIES[typology.value].getDisclaimer(category.value, isCardDetected.value) : null) function sendFeedback (isCorrect: boolean) { const json = { diff --git a/frontend/src/main.css b/frontend/src/main.css index d7b6fddc..f7cb36f6 100644 --- a/frontend/src/main.css +++ b/frontend/src/main.css @@ -27,7 +27,7 @@ a { transform: translate(-50%, -100%); background-color: #f5f5fe; box-shadow: 0 -4px 16px rgb(0 0 0 / 25%); - padding: 15px !important; + padding: 15px; width: 100%; } diff --git a/frontend/src/stores/result.ts b/frontend/src/stores/result.ts index 996798cc..49d0f5cb 100644 --- a/frontend/src/stores/result.ts +++ b/frontend/src/stores/result.ts @@ -2,9 +2,9 @@ import { defineStore } from 'pinia' import { useLocalStorage } from '@vueuse/core' import { serializer } from '@/utils/storage-utils' -import type { resultTree } from '@/utils/firearms-utils' +import type { TYPOLOGIES } from '@/utils/firearms-utils' -type TypologyKey = keyof typeof resultTree +type TypologyKey = keyof typeof TYPOLOGIES export const useResultStore = defineStore('result', () => { const typology = useLocalStorage('typology', null, { serializer }) diff --git a/frontend/src/utils/firearms-utils/epaule-a-levier-sous-garde.ts b/frontend/src/utils/firearms-utils/epaule-a-levier-sous-garde.ts index d1976edd..7922f7eb 100644 --- a/frontend/src/utils/firearms-utils/epaule-a-levier-sous-garde.ts +++ b/frontend/src/utils/firearms-utils/epaule-a-levier-sous-garde.ts @@ -2,6 +2,7 @@ import levierSousGardeMagasinAvantImg from '@/assets/guide-mise-en-securite/phot import levierSousGardePasMagasinImg from '@/assets/guide-mise-en-securite/photos/epaule_a_levier_sous_garde/epaule_levier_ss_garde_magasin_fixe.jpg' import levierSousGardeMagasinAvantVideo from '@/assets/guide-mise-en-securite/videos/epaule_a_levier_sous_garde/epaule_levier_ss_garde_magasin_avant.mp4' import levierSousGardePasMagasinVideo from '@/assets/guide-mise-en-securite/videos/epaule_a_levier_sous_garde/epaule_levier_ss_garde_magasin_fixe.mp4' +import { getEpaulLevierVerrouDisclaimer } from '@/utils/firearms-utils/index' /* Armes d’épaule à levier de sous-garde Magasin avant @@ -40,4 +41,5 @@ export const epaule_a_levier_sous_garde = { video: levierSousGardePasMagasinVideo, }, }, + getDisclaimer: getEpaulLevierVerrouDisclaimer, } as const diff --git a/frontend/src/utils/firearms-utils/epaule-a-pompe.ts b/frontend/src/utils/firearms-utils/epaule-a-pompe.ts index 3dab252a..fa704442 100644 --- a/frontend/src/utils/firearms-utils/epaule-a-pompe.ts +++ b/frontend/src/utils/firearms-utils/epaule-a-pompe.ts @@ -17,15 +17,8 @@ export const epaule_a_pompe = { 6: 'Contrôler l’orifice du tube magasin et constater que celui-ci est bien vide', }, video: epaulePompeSimpleVideo, - // text_steps: { - // 1: 'Observer l’arme en l’orientant dans une direction sans risque, en manipulant avec précaution', - // 2: 'Retourner l’arme et appuyer sur la planchette élévatrice', - // 3: 'Appuyer sur l’ergot/crochet maintenant les cartouches afin de vider le magasin', - // 4: 'Vérifier que le magasin est vide en appuyant sur le poussoir', - // 5: 'Si la pompe est bloquée, appuyer sur le bouton de déverrouillage situé à l’avant ou sous le pontet', - // 6: 'Actionner la pompe pour extraire la munition par la fenêtre d’éjection', - // 7: 'Contrôler visuellement que la chambre est vide', - // 8: 'Verrouiller l’arme en actionnant la pompe vers l’avant', - // }, - // video: epaulePompeCompliqueVideo, + getDisclaimer: (category: string) => { + if (category === 'B ou C') { return 'Catégorie B si la capacité maximale (chambre comprise) est supérieure à 5, ou si la crosse n’est pas fixe.' } + if (category === 'C') { return 'Catégorie B si la capacité maximale (chambre comprise) est supérieure à 5, ou si la crosse n’est pas fixe, ou si le canon est lisse.' } + }, } as const diff --git a/frontend/src/utils/firearms-utils/epaule-a-verrou.ts b/frontend/src/utils/firearms-utils/epaule-a-verrou.ts index 4dcd5ef9..b97dd5a9 100644 --- a/frontend/src/utils/firearms-utils/epaule-a-verrou.ts +++ b/frontend/src/utils/firearms-utils/epaule-a-verrou.ts @@ -1,6 +1,7 @@ import epauleAVerrouCartridges from '@/assets/guide-identification/photos/epaule_a_verrou/epaule_a_verrou_chargeur_cartouche.jpg' import epauleAVerrouBalls from '@/assets/guide-identification/photos/epaule_a_verrou/epaule_a_verrou_chargeur_bille.jpg' import epauleAVerrouVideo from '@/assets/guide-mise-en-securite/videos/epaule_a_verrou/epaule_verrou_chargeur-video.mp4' +import { getEpaulLevierVerrouDisclaimer } from '@/utils/firearms-utils/index' /* Armes d’épaule à verrou @@ -26,4 +27,5 @@ export const epaule_a_verrou = { img_ammo: epauleAVerrouBalls, }, }, + getDisclaimer: getEpaulLevierVerrouDisclaimer, } as const diff --git a/frontend/src/utils/firearms-utils/epaule-semi-auto-militaire-milieu-20e.ts b/frontend/src/utils/firearms-utils/epaule-semi-auto-militaire-milieu-20e.ts index ea82308f..b997a2c6 100644 --- a/frontend/src/utils/firearms-utils/epaule-semi-auto-militaire-milieu-20e.ts +++ b/frontend/src/utils/firearms-utils/epaule-semi-auto-militaire-milieu-20e.ts @@ -5,4 +5,5 @@ export const epaule_semi_auto_style_militaire_milieu_20e = { displayLabel: 'Arme d’épaule semi-automatique ou automatique', category: 'A ou B', isDummyTypology: false, + getDisclaimer: () => "Catégorie A si à l'origine l’arme était à répétition automatique puis a été transformée en arme semi automatique, ou si l’arme possède une crosse rétractable / pliable et qu’en configuration la plus courte elle mesure moins de 60 cm.", } as const diff --git a/frontend/src/utils/firearms-utils/epaule-semi-auto-style-chasse.ts b/frontend/src/utils/firearms-utils/epaule-semi-auto-style-chasse.ts index 713bf121..0a38593c 100644 --- a/frontend/src/utils/firearms-utils/epaule-semi-auto-style-chasse.ts +++ b/frontend/src/utils/firearms-utils/epaule-semi-auto-style-chasse.ts @@ -1,3 +1,8 @@ +const DISCLAIMERS = { + short: 'Catégorie B si la capacité > à 3 munitions, ou si le chargeur est amovible.', + long: '', +} + /* Armes d’épaule semi-automatiques ou automatiques type chasse */ @@ -5,4 +10,18 @@ export const epaule_semi_auto_style_chasse = { displayLabel: 'Arme d’épaule semi-automatique', category: 'B ou C', isDummyTypology: false, + getDisclaimer: (category: string, isCardDetected: boolean) => { + if (['B ou C', 'C'].includes(category)) { + if (isCardDetected === false) { + return DISCLAIMERS.short + } else { + if (['C'].includes(category)) { + return DISCLAIMERS.short + } + if (['B ou C'].includes(category)) { + return DISCLAIMERS.long + } + } + } + }, } as const diff --git a/frontend/src/utils/firearms-utils/get-next-route-after-result.ts b/frontend/src/utils/firearms-utils/get-next-route-after-result.ts index 6b1cb683..9789eea8 100644 --- a/frontend/src/utils/firearms-utils/get-next-route-after-result.ts +++ b/frontend/src/utils/firearms-utils/get-next-route-after-result.ts @@ -1,4 +1,4 @@ -import { resultTree, MEASURED_GUNS_TYPOLOGIES } from '@/utils/firearms-utils/index' +import { TYPOLOGIES, MEASURED_GUNS_TYPOLOGIES } from '@/utils/firearms-utils/index' export const getNextRouteAfterResult = ({ securingTutorial, confidenceLevel, typology, gunLength, gunBarrelLength }) => { const isCardDetected = gunLength !== null && gunBarrelLength !== null @@ -9,12 +9,12 @@ export const getNextRouteAfterResult = ({ securingTutorial, confidenceLevel, typ if (isCardDetected === false && isMeasuredGun === true) { return { name: 'MissingCard' } } else { return { name: 'IdentificationTypologyResult' } } } - const hasSecuringOptions = resultTree[typology]?.options_step_1 || resultTree[typology]?.options || resultTree[typology]?.text_steps + const hasSecuringOptions = TYPOLOGIES[typology]?.options_step_1 || TYPOLOGIES[typology]?.options || TYPOLOGIES[typology]?.text_steps if (!hasSecuringOptions) { return { name: 'SecuringAchievement' } } - const hasMoreThanOneOptions = resultTree[typology]?.options_step_1 || resultTree[typology]?.options + const hasMoreThanOneOptions = TYPOLOGIES[typology]?.options_step_1 || TYPOLOGIES[typology]?.options if (hasMoreThanOneOptions) { return { name: 'SecuringSelectOption', params: { step: 1 } } } diff --git a/frontend/src/utils/firearms-utils/index.ts b/frontend/src/utils/firearms-utils/index.ts index 21ca6a84..594ea655 100644 --- a/frontend/src/utils/firearms-utils/index.ts +++ b/frontend/src/utils/firearms-utils/index.ts @@ -12,7 +12,7 @@ import { pistolet_mecanisme_ancien } from './pistolet-mecanisme-ancien' import { autre_pistolet } from './autre-pistolet' import { arme_alarme } from './arme-alarme' -export const resultTree = { +export const TYPOLOGIES = { autre_pistolet, epaule_a_levier_sous_garde, epaule_a_pompe, @@ -91,19 +91,12 @@ export const MEASURED_GUNS_TYPOLOGIES = [ 'epaule_a_verrou', 'epaule_semi_auto_style_chasse', ] -export const DISCLAIMERS = { - epaule_a_levier_verrou: { - short: 'Catégorie B si la capacité > 11 munitions.', - long: '', - }, - semi_auto_style_chasse: { - short: 'Catégorie B si la capacité > à 3 munitions, ou si le chargeur est amovible.', - long: '', - }, - epaule_a_pompe: { - short: 'Catégorie B si la capacité maximale (chambre comprise) est supérieure à 5, ou si la crosse n’est pas fixe.', - long: 'Catégorie B si la capacité maximale (chambre comprise) est supérieure à 5, ou si la crosse n’est pas fixe, ou si le canon est lisse.', - }, - epaule_semi_auto_style_militaire: "Catégorie A si à l'origine l’arme était à répétition automatique puis a été transformée en arme semi automatique, ou si l’arme possède une crosse rétractable / pliable et qu’en configuration la plus courte elle mesure moins de 60 cm.", - alarm_guns: 'Les armes d’alarmes sont susceptibles d’être modifiées pour tirer des munitions létales. Pour des raisons de sécurité, faites si possible expertiser l’arme.', + +export function getEpaulLevierVerrouDisclaimer (category: string, isCardDetected: boolean) { + if ((isCardDetected === false && ['B ou C', 'C'].includes(category)) || (isCardDetected && ['C'].includes(category))) { + return 'Catégorie B si la capacité > 11 munitions.' + } + if (isCardDetected && ['B ou C'].includes(category)) { + return '' + } } diff --git a/frontend/src/utils/firearms-utils/pistolet-semi-auto-moderne.ts b/frontend/src/utils/firearms-utils/pistolet-semi-auto-moderne.ts index 5fbcffe3..cd5778f0 100644 --- a/frontend/src/utils/firearms-utils/pistolet-semi-auto-moderne.ts +++ b/frontend/src/utils/firearms-utils/pistolet-semi-auto-moderne.ts @@ -57,4 +57,9 @@ export const pistolet_semi_auto_moderne = { img_ammo: pistoletSemiAutoModerneBalls, }, }, + getDisclaimer: (category: string) => { + if (category === 'D') { + return 'Les armes d’alarmes sont susceptibles d’être modifiées pour tirer des munitions létales. Pour des raisons de sécurité, faites si possible expertiser l’arme.' + } + }, } as const diff --git a/frontend/src/utils/firearms-utils/revolver.ts b/frontend/src/utils/firearms-utils/revolver.ts index d358fc90..da7673a1 100644 --- a/frontend/src/utils/firearms-utils/revolver.ts +++ b/frontend/src/utils/firearms-utils/revolver.ts @@ -214,6 +214,11 @@ export const revolver = { img_ammo: revolverBalls, }, }, + getDisclaimer: (category: string) => { + if (category === 'D') { + return 'Les armes d’alarmes sont susceptibles d’être modifiées pour tirer des munitions létales. Pour des raisons de sécurité, faites si possible expertiser l’arme.' + } + }, } as const export const revolver_black_powder = { diff --git a/frontend/src/views/GuideIdentificationFirearm/GuideIdentificationFirearm.vue b/frontend/src/views/GuideIdentificationFirearm/GuideIdentificationFirearm.vue index 16bf7610..7caf05f5 100644 --- a/frontend/src/views/GuideIdentificationFirearm/GuideIdentificationFirearm.vue +++ b/frontend/src/views/GuideIdentificationFirearm/GuideIdentificationFirearm.vue @@ -5,7 +5,7 @@ import { useRoute, useRouter } from 'vue-router' import { identificationGuideSteps, identificationGuideStepsWithArmeAlarme, - resultTree, + TYPOLOGIES, ALARM_GUNS_TYPOLOGIES, } from '@/utils/firearms-utils/index' import { useStepsStore } from '@/stores/steps' @@ -21,7 +21,7 @@ const typology = computed(() => resultStore.typology) const currentStep = ref(1) -const isDummyTypology = resultTree[resultStore.typology].isDummyTypology +const isDummyTypology = TYPOLOGIES[resultStore.typology].isDummyTypology const isLowConfidence = confidenceLevel.value === 'low' const steps = computed(() => { @@ -99,7 +99,7 @@ const showDiv = ref(false)