From 6804062ca3891f2d21ab8f3d059b748a26a55962 Mon Sep 17 00:00:00 2001 From: Benjamin Levesque <14175665+benjlevesque@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:34:17 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Simplifier=20formulaire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page.tsx | 9 ++++ ...mandeCompl\303\250teRaccordement.form.tsx" | 41 ++++++++----------- ...deCompl\303\250teRaccordement.stories.tsx" | 21 ++++++++-- ...andeCompl\303\250teRaccordement.action.ts" | 6 +-- 4 files changed, 45 insertions(+), 32 deletions(-) diff --git a/packages/applications/ssr/src/app/laureats/[identifiant]/raccordements/demande-complete-raccordement:transmettre/page.tsx b/packages/applications/ssr/src/app/laureats/[identifiant]/raccordements/demande-complete-raccordement:transmettre/page.tsx index dd5483db345..a70f93fa469 100644 --- a/packages/applications/ssr/src/app/laureats/[identifiant]/raccordements/demande-complete-raccordement:transmettre/page.tsx +++ b/packages/applications/ssr/src/app/laureats/[identifiant]/raccordements/demande-complete-raccordement:transmettre/page.tsx @@ -7,6 +7,7 @@ import { GestionnaireRéseau, Raccordement } from '@potentiel-domain/reseau'; import { Option } from '@potentiel-libraries/monads'; import { IdentifiantProjet } from '@potentiel-domain/common'; import { mapToPlainObject } from '@potentiel-domain/core'; +import { getLogger } from '@potentiel-libraries/monitoring'; import { TransmettreDemandeComplèteRaccordementPage } from '@/components/pages/réseau/raccordement/transmettre/transmettreDemandeComplèteRaccordement/TransmettreDemandeComplèteRaccordement.page'; import { PageWithErrorHandling } from '@/utils/PageWithErrorHandling'; @@ -23,6 +24,7 @@ type PageProps = IdentifiantParameter; export default async function Page({ params: { identifiant } }: PageProps) { return PageWithErrorHandling(async () => { + const logger = getLogger('page:DCR:transmettre'); const identifiantProjet = IdentifiantProjet.convertirEnValueType(decodeParameter(identifiant)); const projet = await récupérerProjet(identifiantProjet.formatter()); @@ -60,6 +62,13 @@ export default async function Page({ params: { identifiant } }: PageProps) { data: { identifiantProjetValue: identifiantProjet.formatter() }, }); + if (Option.isNone(gestionnaireRéseauActuel)) { + logger.warn('Aucun gestionnaire de réseau trouvé pour le projet', { + identifiantProjet: identifiantProjet.formatter(), + }); + notFound(); + } + const raccordements = await mediator.send({ type: 'Réseau.Raccordement.Query.ConsulterRaccordement', data: { identifiantProjetValue: identifiantProjet.formatter() }, diff --git "a/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.form.tsx" "b/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.form.tsx" index d74beba73cf..9845724b5b7 100644 --- "a/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.form.tsx" +++ "b/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.form.tsx" @@ -9,6 +9,7 @@ import { Routes } from '@potentiel-applications/routes'; import { ExpressionRegulière, IdentifiantProjet } from '@potentiel-domain/common'; import { PlainType } from '@potentiel-domain/core'; import { Option } from '@potentiel-libraries/monads'; +import { GestionnaireRéseau, Raccordement } from '@potentiel-domain/reseau'; import { Form } from '@/components/atoms/form/Form'; import { UploadNewOrModifyExistingDocument } from '@/components/atoms/form/document/UploadNewOrModifyExistingDocument'; @@ -28,7 +29,7 @@ import { export type TransmettreDemandeComplèteRaccordementFormProps = { identifiantProjet: PlainType; - gestionnaireRéseauActuel: GestionnaireRéseauSelectProps['gestionnaireRéseauActuel']; + gestionnaireRéseauActuel: PlainType; listeGestionnairesRéseau: GestionnaireRéseauSelectProps['listeGestionnairesRéseau']; aDéjàTransmisUneDemandeComplèteDeRaccordement: boolean; }; @@ -44,27 +45,27 @@ export const TransmettreDemandeComplèteRaccordementForm = ({ ValidationErrors >({}); - const identifiantGestionnaireRéseauActuel = Option.match(gestionnaireRéseauActuel) - .some((grd) => grd.identifiantGestionnaireRéseau.codeEIC) - .none(() => undefined); + const estGestionnaireInconnu = GestionnaireRéseau.IdentifiantGestionnaireRéseau.bind( + gestionnaireRéseauActuel.identifiantGestionnaireRéseau, + ).estÉgaleÀ(GestionnaireRéseau.IdentifiantGestionnaireRéseau.inconnu); + + const identifiantGestionnaireRéseauActuel = + gestionnaireRéseauActuel.identifiantGestionnaireRéseau.codeEIC; const [selectedIdentifiantGestionnaireRéseau, setSelectedIdentifiantGestionnaireRéseau] = useState(identifiantGestionnaireRéseauActuel); - const alreadyHasAGestionnaireRéseau = - identifiantGestionnaireRéseauActuel && identifiantGestionnaireRéseauActuel !== 'inconnu'; - - const gestionnaireActuel = selectedIdentifiantGestionnaireRéseau + const aideSaisieRéférenceDossierRaccordement = selectedIdentifiantGestionnaireRéseau ? listeGestionnairesRéseau.find( (gestionnaire) => gestionnaire.identifiantGestionnaireRéseau.codeEIC === selectedIdentifiantGestionnaireRéseau, - ) + )?.aideSaisieRéférenceDossierRaccordement : undefined; - const format = gestionnaireActuel?.aideSaisieRéférenceDossierRaccordement?.format ?? Option.none; - const légende = gestionnaireActuel?.aideSaisieRéférenceDossierRaccordement.légende ?? Option.none; + const format = aideSaisieRéférenceDossierRaccordement?.format ?? Option.none; + const légende = aideSaisieRéférenceDossierRaccordement?.légende ?? Option.none; const expressionReguliere = - gestionnaireActuel?.aideSaisieRéférenceDossierRaccordement?.expressionReguliere?.expression ?? + aideSaisieRéférenceDossierRaccordement?.expressionReguliere?.expression ?? ExpressionRegulière.accepteTout.expression; return ( @@ -103,18 +104,8 @@ export const TransmettreDemandeComplèteRaccordementForm = ({ > - - {alreadyHasAGestionnaireRéseau ? ( + {!estGestionnaireInconnu ? (
-
Gestionnaire réseau actuel {aDéjàTransmisUneDemandeComplèteDeRaccordement ? null : ( @@ -124,8 +115,8 @@ export const TransmettreDemandeComplèteRaccordementForm = ({ )}
- {gestionnaireActuel?.raisonSociale} ( - {gestionnaireActuel?.identifiantGestionnaireRéseau?.codeEIC}) + {gestionnaireRéseauActuel.raisonSociale} ( + {gestionnaireRéseauActuel.identifiantGestionnaireRéseau?.codeEIC})
) : ( diff --git "a/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.stories.tsx" "b/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.stories.tsx" index aefa97abad1..b6a23f1309f 100644 --- "a/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.stories.tsx" +++ "b/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/TransmettreDemandeCompl\303\250teRaccordement.stories.tsx" @@ -35,20 +35,35 @@ const listeGestionnairesRéseau = Array.from({ length: 3 }, (_, i) => ({ contactEmail: Option.none, })); +listeGestionnairesRéseau[0].aideSaisieRéférenceDossierRaccordement = { + expressionReguliere: ExpressionRegulière.convertirEnValueType('[a-zA-Z]{3}'), + format: 'ABC', + légende: 'légende', +}; + export const Default: Story = { args: { listeGestionnairesRéseau, - gestionnaireRéseauActuel: Option.none, + gestionnaireRéseauActuel: listeGestionnairesRéseau[1], identifiantProjet: IdentifiantProjet.convertirEnValueType('PPE2 - Bâtiment#4#1#id-cre-738'), delaiDemandeDeRaccordementEnMois: { texte: '3 mois', valeur: 3 }, aDéjàTransmisUneDemandeComplèteDeRaccordement: false, }, }; -export const AvecGestionnaire: Story = { +export const GestionnaireRéseauInconnu: Story = { args: { listeGestionnairesRéseau, - gestionnaireRéseauActuel: listeGestionnairesRéseau[1], + gestionnaireRéseauActuel: { + aideSaisieRéférenceDossierRaccordement: { + expressionReguliere: ExpressionRegulière.accepteTout, + format: Option.none, + légende: Option.none, + }, + contactEmail: Option.none, + identifiantGestionnaireRéseau: GestionnaireRéseau.IdentifiantGestionnaireRéseau.inconnu, + raisonSociale: '', + }, identifiantProjet: IdentifiantProjet.convertirEnValueType('PPE2 - Bâtiment#4#1#id-cre-738'), delaiDemandeDeRaccordementEnMois: { texte: '3 mois', valeur: 3 }, aDéjàTransmisUneDemandeComplèteDeRaccordement: false, diff --git "a/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/transmettreDemandeCompl\303\250teRaccordement.action.ts" "b/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/transmettreDemandeCompl\303\250teRaccordement.action.ts" index 248b743874c..bff559e778f 100644 --- "a/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/transmettreDemandeCompl\303\250teRaccordement.action.ts" +++ "b/packages/applications/ssr/src/components/pages/r\303\251seau/raccordement/transmettre/transmettreDemandeCompl\303\250teRaccordement/transmettreDemandeCompl\303\250teRaccordement.action.ts" @@ -13,8 +13,7 @@ import { withUtilisateur } from '@/utils/withUtilisateur'; const schema = zod.object({ identifiantProjet: zod.string().min(1), dateQualification: zod.string().min(1, { message: 'Champ obligatoire' }), - identifiantGestionnaireReseau: zod.string().min(1), - identifiantGestionnaireReseauActuel: zod.string().min(1), + identifiantGestionnaireReseau: zod.string().optional(), referenceDossier: zod.string().min(1, { message: 'Champ obligatoire' }), accuseReception: singleDocument({ acceptedFileTypes: ['application/pdf'] }), }); @@ -27,13 +26,12 @@ const action: FormAction = async ( identifiantProjet, dateQualification, identifiantGestionnaireReseau, - identifiantGestionnaireReseauActuel, referenceDossier, accuseReception, }, ) => withUtilisateur(async (utilisateur) => { - if (identifiantGestionnaireReseauActuel !== identifiantGestionnaireReseau) { + if (identifiantGestionnaireReseau) { await mediator.send({ type: 'Réseau.Raccordement.UseCase.ModifierGestionnaireRéseauRaccordement', data: {