import { get } from "lodash" import { FC, memo, ReactNode, useCallback, useEffect, useState } from "react" import classnames from "classnames" import styles from "./styles.module.scss" import { mealDays, MealOption, useUserMeals } from "../meals.utils" import FormButton from "../../Form/FormButton/FormButton" import { fetchVolunteerMealsSetIfNeed } from "../../../store/volunteerMealsSet" import IgnoreButton from "../../Form/IgnoreButton/IgnoreButton" import { useUserDayWishes } from "../daysWishes.utils" import { fetchVolunteerDayWishesSetIfNeed } from "../../../store/volunteerDayWishesSet" type Props = { children?: ReactNode | undefined afterSubmit?: () => void | undefined } const MealsForm: FC = ({ children, afterSubmit }): JSX.Element => { const [saturdayLunchMeal, setSaturdayLunchMeal] = useState("") const [sundayLunchMeal, setSundayLunchMeal] = useState("") const [sundayDinnerMeal, setSundayDinnerMeal] = useState("") const [userMeals, saveMeals] = useUserMeals() const [userWishes] = useUserDayWishes() const meals = get(userMeals, "meals", []) const dayWishesString = get(userWishes, "dayWishes", []) useEffect(() => { setSaturdayLunchMeal(meals[0] || "") setSundayLunchMeal(meals[1] || "") setSundayDinnerMeal(meals[2] || "") }, [meals]) const onChoiceSubmit = useCallback(() => { saveMeals([saturdayLunchMeal, sundayLunchMeal, sundayDinnerMeal]) if (afterSubmit) afterSubmit() }, [saveMeals, saturdayLunchMeal, sundayLunchMeal, sundayDinnerMeal, afterSubmit]) const getBreakfeastElement = (dayName: string): JSX.Element => (
{dayName} matin, petit dej à 8h avec jus de pomme, multifruit, café, brioches et quatre-quarts, crêpes si bénévoles motivés.
) const getMealElement = (i: number, meal: string, setMeal: (m: string) => void): JSX.Element => (
{mealDays[i].name} {i === 0 && <>, accompagné d'un délicieux brownie tout chocolat} {i === 1 && ( <>, accompagné du même brownie. Enfin, un autre que celui de la veille )}{" "} :
{mealDays[i].options.map((option: MealOption) => ( ))}
) const getNotVolunteerElement = (dayName: string): JSX.Element => (
{dayName} matin/midi/soir, comme tu n'es pas bénévole ce jour-là, on a rien prévu. Mais{" "} contacte-nous {" "} si tu veux qu'on te prévoie un dîner.{" "} {dayName === "Dimanche" && ( <> Surtout dimanche soir si tu redeviens bénévole pour nous aider à ranger un peu le festival ! )}
) return (
Mes repas
{dayWishesString.includes("S") ? ( <> {getBreakfeastElement("Samedi")} {getMealElement(0, saturdayLunchMeal, setSaturdayLunchMeal)}
Samedi soir, apéro dînatoire
) : ( getNotVolunteerElement("Samedi") )}


{dayWishesString.includes("D") ? ( <> {getBreakfeastElement("Dimanche")} {getMealElement(1, sundayLunchMeal, setSundayLunchMeal)} {getMealElement(2, sundayDinnerMeal, setSundayDinnerMeal)} ) : ( getNotVolunteerElement("Dimanche") )}
Jeudi, vendredi et lundi, chacun improvise. Peut-être resto à proximité.
Enregistrer {children === undefined && ( <> {" "} Annuler {" "} )} {children !== undefined && ( <> {" "} {children} {" "} )}
) } MealsForm.defaultProps = { children: undefined, afterSubmit: undefined, } export default memo(MealsForm) // Fetch server-side data here export const fetchFor = [fetchVolunteerMealsSetIfNeed, fetchVolunteerDayWishesSetIfNeed]