Skip to content

Commit d3a1847

Browse files
committed
Refactor
1 parent ef4dd5a commit d3a1847

File tree

2 files changed

+56
-76
lines changed

2 files changed

+56
-76
lines changed

frontend/src/e2e-test/specs/5_employee/application-transitions.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,6 @@ describe('Application transitions', () => {
431431

432432
await placementDraftPage.placeToUnit(testPreschool.id)
433433

434-
// TODO test placement dates here
435434
const preschoolTermValidationWarning = page.findByDataQa(
436435
'preschool-term-warning'
437436
)

frontend/src/employee-frontend/components/placement-draft/PlacementDraft.tsx

Lines changed: 56 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,7 @@ export default React.memo(function PlacementDraft() {
143143
const [selectedUnitIsGhostUnit, setSelectedUnitIsGhostUnit] =
144144
useState<boolean>(false)
145145

146-
const [preschoolDatesTermWarning, setPreschoolDatesTermWarning] =
147-
useState(false)
146+
const [preschoolDatesAreValid, setPreschoolDatesAreValid] = useState(true)
148147

149148
const preschoolTermsResult = useQueryResult(getPreschoolTermsQuery())
150149

@@ -208,78 +207,61 @@ export default React.memo(function PlacementDraft() {
208207
)
209208
}, [applicationId, redirectToMainPage])
210209

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])
250255

251256
useEffect(() => {
252257
if (placementDraft.isSuccess) {
253258
void getApplicationUnitsResult({
254259
type: asUnitType(placementDraft.value.type),
255260
date: formState.period?.start ?? placementDraft.value.period.start,
256261
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)
276263
}
277-
}, [
278-
placementDraft,
279-
formState.period?.start,
280-
preschoolTermsResult,
281-
validatePreschoolPeriods
282-
])
264+
}, [placementDraft, formState.period?.start, preschoolTermsResult])
283265

284266
useTitle(
285267
placementDraft.map(
@@ -339,12 +321,6 @@ export default React.memo(function PlacementDraft() {
339321
}))
340322
setPlacementDraft(updatedPlacementDraft)
341323
calculateOverLaps(updatedPlacementDraft, setPlacementDraft)
342-
343-
validatePreschoolPeriods(
344-
placementDraft.value.type,
345-
periodType,
346-
fixedPeriod
347-
)
348324
}
349325
}
350326

@@ -370,7 +346,12 @@ export default React.memo(function PlacementDraft() {
370346

371347
const validPlan: DaycarePlacementPlan | null = useMemo(() => {
372348
const { unitId, period, hasPreschoolDaycarePeriod } = formState
373-
if (!unitId || !period || selectedUnitIsGhostUnit) {
349+
if (
350+
!unitId ||
351+
!period ||
352+
selectedUnitIsGhostUnit ||
353+
!preschoolDatesAreValid
354+
) {
374355
return null
375356
} else {
376357
return {
@@ -381,7 +362,7 @@ export default React.memo(function PlacementDraft() {
381362
: null
382363
}
383364
}
384-
}, [formState, selectedUnitIsGhostUnit])
365+
}, [formState, selectedUnitIsGhostUnit, preschoolDatesAreValid])
385366

386367
return (
387368
<Container
@@ -449,7 +430,7 @@ export default React.memo(function PlacementDraft() {
449430
'end'
450431
)}
451432
/>
452-
{preschoolDatesTermWarning && (
433+
{!preschoolDatesAreValid && (
453434
<div data-qa="preschool-term-warning">
454435
<WarningContainer>
455436
<InputWarning

0 commit comments

Comments
 (0)