1515 </div >
1616 <AgrementBilanHebergementDetail
1717 v-for =" (hebergement, index) in paginatedHebergements"
18- :key =" `${hebergement.agrBilanAnnuelId}-${hebergement.adresseId }-${index}`"
18+ :key =" `${hebergement.agrBilanAnnuelId}-${hebergement.agrBilanAnnuelId }-${index}`"
1919 :hebergement =" hebergement"
20- :statut =" props.statut"
20+ :statut =" props.statut || AGREMENT_STATUT.BROUILLON "
2121 @update ="
2222 (updatedHebergement) =>
2323 handleHebergementUpdate(index, updatedHebergement)
5858 <div class =" fr-mt-6v" >
5959 <p class =" fr-mb-0" >Période</p >
6060 <AgrementBilanSelectMonths
61- :default-selected =" props.bilanHebergement?.mois"
6261 :modifiable =" props.modifiable"
6362 @update:selected =" handleMonths"
6463 />
104103 </div >
105104</template >
106105
107- <script setup>
106+ <script setup lang="ts" >
108107import { computed , ref , watch } from " vue" ;
108+ import type { BilanHebergementDto } from " @vao/shared-bridge/src/dto/agrement.dto" ;
109+ import type { AdresseDto } from " @vao/shared-bridge/src/dto/adresse.dto" ;
109110import SearchAddress from " @/components/address/search-address.vue" ;
110111import { useField , useForm } from " vee-validate" ;
111112import { useToaster } from " @vao/shared-ui" ;
112- import { normalizeAdresse } from " @vao/shared-bridge" ;
113+ import { normalizeAdresse , AGREMENT_STATUT } from " @vao/shared-bridge" ;
113114import * as yup from " yup" ;
114115
115116const log = logger (" components/AgrementBilanHebergements" );
116117
117- const props = defineProps ({
118- bilanHebergement: {
119- type: Array ,
120- required: false ,
121- default : () => [],
122- },
123- statut: {
124- type: String ,
125- required: false ,
126- default: " BROUILLON" ,
127- },
128- modifiable: { type: Boolean , required: false , default: false },
129- });
118+ const props = defineProps <{
119+ bilanHebergement? : BilanHebergementDto [];
120+ statut? : string ;
121+ modifiable? : boolean ;
122+ }>();
130123
131124const toaster = useToaster ();
132125
133- const localHebergements = ref ([... props .bilanHebergement ]);
126+ const localHebergements = ref <BilanHebergementDto []>([
127+ ... (props .bilanHebergement ?? []),
128+ ]);
134129
135- const isFirstLoad = ref (true );
130+ const isFirstLoad = ref < boolean > (true );
136131
137132watch (
138133 () => props .bilanHebergement ,
139134 (newBilanHebergement ) => {
140135 if (isFirstLoad .value ) {
141- localHebergements .value = [... newBilanHebergement];
136+ localHebergements .value = [... ( newBilanHebergement ?? []) ];
142137 isFirstLoad .value = false ;
143138 }
144139 },
145140 { immediate: true , deep: true },
146141);
147142
148143const ITEMS_PER_PAGE = 10 ;
149- const currentPage = ref (0 );
144+ const currentPage = ref < number > (0 );
150145
151- const showForm = ref (false );
146+ const showForm = ref < boolean > (false );
152147
153- function toggleForm () {
148+ function toggleForm(): void {
154149 showForm .value = ! showForm .value ;
155150}
156151
157- const totalPages = computed (() => {
152+ const totalPages = computed < number > (() => {
158153 return Math .ceil (localHebergements .value .length / ITEMS_PER_PAGE );
159154});
160155
161- const pages = computed (() => {
162- const pageArray = [];
156+ const pages = computed <{ title : string ; href : string ; label : string }[]> (() => {
157+ const pageArray: { title : string ; href : string ; label : string }[] = [];
163158 for (let i = 1 ; i <= totalPages .value ; i ++ ) {
164159 pageArray .push ({
165160 title: ` Lien vers la page ${i } ` ,
@@ -170,18 +165,21 @@ const pages = computed(() => {
170165 return pageArray ;
171166});
172167
173- const paginatedHebergements = computed (() => {
168+ const paginatedHebergements = computed < BilanHebergementDto []> (() => {
174169 const start = currentPage .value * ITEMS_PER_PAGE ;
175170 const end = start + ITEMS_PER_PAGE ;
176171 return localHebergements .value .slice (start , end );
177172});
178173
179- function handleHebergementUpdate (index , updatedHebergement ) {
174+ function handleHebergementUpdate(
175+ index : number ,
176+ updatedHebergement : BilanHebergementDto ,
177+ ): void {
180178 const actualIndex = currentPage .value * ITEMS_PER_PAGE + index ;
181179 localHebergements .value [actualIndex ] = { ... updatedHebergement };
182180}
183181
184- function handleHebergementDelete (index ) {
182+ function handleHebergementDelete(index : number ) : void {
185183 const actualIndex = currentPage .value * ITEMS_PER_PAGE + index ;
186184 localHebergements .value .splice (actualIndex , 1 );
187185
@@ -216,62 +214,65 @@ const {
216214 errorMessage : nomHebergementErrorMessage,
217215 handleChange : onNomHebergementChange,
218216 meta : nomHebergementMeta,
219- } = useField (" nomHebergement" );
217+ } = useField < string > (" nomHebergement" );
220218
221219const {
222220 value : nbJours,
223221 errorMessage : nbJoursErrorMessage,
224222 handleChange : onNbJoursChange,
225223 meta : nbJoursMeta,
226- } = useField (" nbJours" );
224+ } = useField < number > (" nbJours" );
227225
228226const { value : adresse, errorMessage : adresseErrorMessage } =
229- useField (" adresse" );
227+ useField < any > (" adresse" );
230228
231229const {
232230 value : periode,
233231 errorMessage : periodeErrorMessage,
234232 meta : periodeMeta,
235- } = useField (" periode" );
233+ } = useField < string []> (" periode" );
236234
237- function handleMonths (monthsArray ) {
235+ function handleMonths(monthsArray : string []) : void {
238236 periode .value = monthsArray ;
239237}
240238
241- const selectedAdresseObject = ref (null );
239+ const selectedAdresseObject = ref < AdresseDto | { label : string } | null > (null );
242240
243- function onAdresseSelect (selectedAddress ) {
244- adresse .value = selectedAddress .label ;
241+ function onAdresseSelect(
242+ selectedAddress : AdresseDto | { label: string },
243+ ): void {
244+ adresse .value = selectedAddress .label || " " ;
245245 selectedAdresseObject .value = selectedAddress ;
246246}
247247
248248const onSubmitAddSejour = handleSubmit (
249- (values ) => {
250- const adresseObject = selectedAdresseObject .value
251- ? selectedAdresseObject .value
252- : { label: values .adresse };
249+ (values : Record <string , any >) => {
250+ const adresseObject: AdresseDto | { label: string } =
251+ selectedAdresseObject .value
252+ ? selectedAdresseObject .value
253+ : { label: values .adresse };
253254
254- let adresseNorm;
255+ let adresseNorm: AdresseDto ;
255256 try {
256257 adresseNorm = normalizeAdresse (adresseObject );
257258 } catch (e ) {
258259 log .w (" Erreur de normalisation de l'adresse :" , e );
259260 toaster .error ({
260- titleTag: " Erreur sur l'adresse" ,
261261 description: " L'adresse saisie est incomplète ou invalide." ,
262262 });
263263 return ;
264264 }
265265
266266 const agrBilanAnnuelId =
267- props .bilanHebergement [0 ]? .agrBilanAnnuelId || null ;
267+ (props .bilanHebergement && props .bilanHebergement [0 ]?.agrBilanAnnuelId ) ||
268+ null ;
268269
269- const newHebergement = {
270+ const newHebergement: BilanHebergementDto = {
271+ agrBilanAnnuelId ,
270272 nomHebergement: values .nomHebergement ,
271273 adresse: adresseNorm ,
272274 nbJours: parseInt (values .nbJours ),
273- mois: values .periode .map ((m ) => parseInt (m)),
274- agrBilanAnnuelId,
275+ mois: values .periode .map ((m : string ) => parseInt (m )),
275276 };
276277
277278 localHebergements .value .push (newHebergement );
@@ -285,19 +286,19 @@ const onSubmitAddSejour = handleSubmit(
285286 description: " Le séjour a été ajouté avec succès." ,
286287 });
287288 },
288- (errors ) => {
289+ (errors : any ) => {
289290 console .warn (" Erreurs de validation :" , errors );
290291 },
291292);
292293
293- function validateHebergements () {
294+ function validateHebergements(): boolean {
294295 let isValid = true ;
295- const errors = [];
296+ const errors: string [] = [];
296297
297298 localHebergements .value .forEach ((hebergement , index ) => {
298299 if (
299300 ! hebergement .nomHebergement ||
300- hebergement .nomHebergement .trim () === " "
301+ hebergement .nomHebergement ? .trim ?. () === " "
301302 ) {
302303 errors .push (` Hébergement ${index + 1 }: Le nom est obligatoire ` );
303304 isValid = false ;
@@ -340,7 +341,7 @@ function validateHebergements() {
340341 return isValid ;
341342}
342343
343- function getHebergements () {
344+ function getHebergements(): BilanHebergementDto [] {
344345 return localHebergements .value ;
345346}
346347
0 commit comments