import { FC, memo, useCallback, useEffect, useRef, useState } from "react" import get from "lodash/get" import set from "lodash/set" import styles from "./styles.module.scss" import { foodDefaultValue, tShirtSizes, useUserParticipationDetails, } from "../participationDetails.utils" import FormButton from "../../Form/FormButton/FormButton" type Props = { afterSubmit?: () => void | undefined } const ParticipationDetailsForm: FC = ({ afterSubmit }): JSX.Element | null => { const sizeRef = useRef(null) const dietRef = useRef(null) const ageRef = useRef(null) const [has2Shirts, setHas2Shirts] = useState(true) const [participationDetails, saveParticipationDetails] = useUserParticipationDetails() const onSubmit = useCallback(() => { const age = get(ageRef, "current.value", "") const teeshirtSize = has2Shirts ? "" : get(sizeRef, "current.value", "") const food = get(dietRef, "current.value", "") || foodDefaultValue saveParticipationDetails({ age, teeshirtSize, food }) if (afterSubmit) afterSubmit() }, [has2Shirts, saveParticipationDetails, afterSubmit]) const onHas2ShirtsClick = useCallback( (value) => { setHas2Shirts(value) }, [setHas2Shirts] ) useEffect(() => { const age = get(participationDetails, "age", "") const teeshirtSize = get(participationDetails, "teeshirtSize", "") const food = get(participationDetails, "food", "") if (age) set(ageRef, "current.value", age) if (teeshirtSize) set(sizeRef, "current.value", teeshirtSize) setHas2Shirts(!teeshirtSize) if (food) set(dietRef, "current.value", food) }, [setHas2Shirts, participationDetails]) return (
Mes informations pour le festival
J'ai déjà 2 t-shirts
{has2Shirts === false && (
)}
Enregistrer
) } ParticipationDetailsForm.defaultProps = { afterSubmit: undefined, } export default memo(ParticipationDetailsForm)