@@ -143,8 +143,7 @@ export default React.memo(function PlacementDraft() {
143
143
const [ selectedUnitIsGhostUnit , setSelectedUnitIsGhostUnit ] =
144
144
useState < boolean > ( false )
145
145
146
- const [ preschoolDatesTermWarning , setPreschoolDatesTermWarning ] =
147
- useState ( false )
146
+ const [ preschoolDatesAreValid , setPreschoolDatesAreValid ] = useState ( true )
148
147
149
148
const preschoolTermsResult = useQueryResult ( getPreschoolTermsQuery ( ) )
150
149
@@ -208,78 +207,61 @@ export default React.memo(function PlacementDraft() {
208
207
)
209
208
} , [ applicationId , redirectToMainPage ] )
210
209
211
- const validatePreschoolPeriods = useCallback (
212
- (
213
- placementType : PlacementType ,
214
- periodType : 'period' | 'preschoolDaycarePeriod' ,
215
- period : FiniteDateRange
216
- ) => {
217
- if ( preschoolTermsResult . isSuccess ) {
218
- if (
219
- placementType === 'PRESCHOOL' ||
220
- placementType === 'PREPARATORY' ||
221
- placementType === 'PRESCHOOL_DAYCARE' ||
222
- placementType === 'PRESCHOOL_DAYCARE_ONLY' ||
223
- placementType === 'PREPARATORY_DAYCARE'
224
- ) {
225
- if ( periodType === 'period' ) {
226
- preschoolTermsResult . map ( ( preschoolTerms ) => {
227
- const datesAreInsideSomePreschoolTerm = preschoolTerms . some (
228
- ( term ) =>
229
- term . finnishPreschool . asDateRange ( ) . contains ( period ) ||
230
- term . swedishPreschool . asDateRange ( ) . contains ( period )
231
- )
232
- setPreschoolDatesTermWarning ( ! datesAreInsideSomePreschoolTerm )
233
- } )
234
- } else {
235
- preschoolTermsResult . map ( ( preschoolTerms ) => {
236
- const datesAreInsideSomeExtendedPreschoolTerm =
237
- preschoolTerms . some ( ( term ) =>
238
- term . extendedTerm . asDateRange ( ) . contains ( period )
239
- )
240
- setPreschoolDatesTermWarning (
241
- ! datesAreInsideSomeExtendedPreschoolTerm
242
- )
243
- } )
244
- }
245
- }
246
- }
247
- } ,
248
- [ preschoolTermsResult , setPreschoolDatesTermWarning ]
249
- )
210
+ const isPreschoolPlacement = ( placementType : PlacementType ) =>
211
+ placementType === 'PRESCHOOL' ||
212
+ placementType === 'PREPARATORY' ||
213
+ placementType === 'PRESCHOOL_DAYCARE' ||
214
+ placementType === 'PRESCHOOL_DAYCARE_ONLY' ||
215
+ placementType === 'PREPARATORY_DAYCARE'
216
+
217
+ useEffect ( ( ) => {
218
+ if (
219
+ preschoolTermsResult . isSuccess &&
220
+ placementDraft . isSuccess &&
221
+ isPreschoolPlacement ( placementDraft . value . type )
222
+ ) {
223
+ const preschoolPeriodIsValid =
224
+ formState . period !== null &&
225
+ preschoolTermsResult
226
+ . map ( ( preschoolTerms ) =>
227
+ preschoolTerms . some (
228
+ ( term ) =>
229
+ term . finnishPreschool
230
+ . asDateRange ( )
231
+ . contains ( formState . period ! ) ||
232
+ term . swedishPreschool . asDateRange ( ) . contains ( formState . period ! )
233
+ )
234
+ )
235
+ . getOrElse ( false )
236
+
237
+ const preschoolDaycarePeriodIsValid =
238
+ formState . hasPreschoolDaycarePeriod &&
239
+ formState . preschoolDaycarePeriod !== null &&
240
+ preschoolTermsResult
241
+ . map ( ( preschoolTerms ) =>
242
+ preschoolTerms . some ( ( term ) =>
243
+ term . extendedTerm
244
+ . asDateRange ( )
245
+ . contains ( formState . preschoolDaycarePeriod ! )
246
+ )
247
+ )
248
+ . getOrElse ( false )
249
+
250
+ setPreschoolDatesAreValid (
251
+ preschoolPeriodIsValid && preschoolDaycarePeriodIsValid
252
+ )
253
+ }
254
+ } , [ preschoolTermsResult , placementDraft , formState ] )
250
255
251
256
useEffect ( ( ) => {
252
257
if ( placementDraft . isSuccess ) {
253
258
void getApplicationUnitsResult ( {
254
259
type : asUnitType ( placementDraft . value . type ) ,
255
260
date : formState . period ?. start ?? placementDraft . value . period . start ,
256
261
shiftCare : null
257
- } )
258
- . then ( setUnits )
259
- . then ( ( ) => {
260
- if ( preschoolTermsResult . isSuccess ) {
261
- validatePreschoolPeriods (
262
- placementDraft . value . type ,
263
- 'period' ,
264
- placementDraft . value . period
265
- )
266
-
267
- if ( placementDraft . value . preschoolDaycarePeriod ) {
268
- validatePreschoolPeriods (
269
- placementDraft . value . type ,
270
- 'preschoolDaycarePeriod' ,
271
- placementDraft . value . preschoolDaycarePeriod
272
- )
273
- }
274
- }
275
- } )
262
+ } ) . then ( setUnits )
276
263
}
277
- } , [
278
- placementDraft ,
279
- formState . period ?. start ,
280
- preschoolTermsResult ,
281
- validatePreschoolPeriods
282
- ] )
264
+ } , [ placementDraft , formState . period ?. start , preschoolTermsResult ] )
283
265
284
266
useTitle (
285
267
placementDraft . map (
@@ -339,12 +321,6 @@ export default React.memo(function PlacementDraft() {
339
321
} ) )
340
322
setPlacementDraft ( updatedPlacementDraft )
341
323
calculateOverLaps ( updatedPlacementDraft , setPlacementDraft )
342
-
343
- validatePreschoolPeriods (
344
- placementDraft . value . type ,
345
- periodType ,
346
- fixedPeriod
347
- )
348
324
}
349
325
}
350
326
@@ -370,7 +346,12 @@ export default React.memo(function PlacementDraft() {
370
346
371
347
const validPlan : DaycarePlacementPlan | null = useMemo ( ( ) => {
372
348
const { unitId, period, hasPreschoolDaycarePeriod } = formState
373
- if ( ! unitId || ! period || selectedUnitIsGhostUnit ) {
349
+ if (
350
+ ! unitId ||
351
+ ! period ||
352
+ selectedUnitIsGhostUnit ||
353
+ ! preschoolDatesAreValid
354
+ ) {
374
355
return null
375
356
} else {
376
357
return {
@@ -381,7 +362,7 @@ export default React.memo(function PlacementDraft() {
381
362
: null
382
363
}
383
364
}
384
- } , [ formState , selectedUnitIsGhostUnit ] )
365
+ } , [ formState , selectedUnitIsGhostUnit , preschoolDatesAreValid ] )
385
366
386
367
return (
387
368
< Container
@@ -449,7 +430,7 @@ export default React.memo(function PlacementDraft() {
449
430
'end'
450
431
) }
451
432
/>
452
- { preschoolDatesTermWarning && (
433
+ { ! preschoolDatesAreValid && (
453
434
< div data-qa = "preschool-term-warning" >
454
435
< WarningContainer >
455
436
< InputWarning
0 commit comments