import axios from "axios"; import { ErrorMessage, Field, Form, Formik } from "formik"; import { useEffect, useState } from "react"; import { TrainingGoalDto } from "../../dto/training-goal.dto"; import { useStores } from "../../stores"; import Spinner from "../utils/spinner.component"; import AddTrainingGoalTaskForm from "./add-training-goal-task.form.component"; import AddTrainingGoalForm from "./add-training-goal.form.component"; import TrainingGoalTaskForm from "./training-goal-task.form.component"; export default function TrainingGoalsForm({ dogId }: { dogId: number }) { const [trainingGoals, setTrainingGoals] = useState<TrainingGoalDto[] | null>( null ); const { dogsStore } = useStores(); useEffect(() => { dogsStore .findAllTrainingGoals(dogId) .then((trainingGoals: TrainingGoalDto[]) => setTrainingGoals(trainingGoals) ); }, [dogId, dogsStore]); if (!trainingGoals) { return <Spinner />; } if (!trainingGoals.length) { return ( <> <p>No goals have been set.</p> <AddTrainingGoalForm dogId={dogId} /> </> ); } return ( <> <AddTrainingGoalForm dogId={dogId} /> <ul> {trainingGoals.map((goal) => ( <li key={goal.id}> <Formik initialValues={{ title: goal.title }} onSubmit={(values, actions) => { axios.patch(`/api/dogs/${dogId}/training-goals/${goal.id}`, { ...values, }); }} > <> <Form> <Field name="title" /> <ErrorMessage name="title" /> <button type="submit">Save</button> </Form> <AddTrainingGoalTaskForm dogId={dogId} goalId={goal.id} /> <ul> {goal.tasks.map((task) => ( <li key={task.id}> <TrainingGoalTaskForm dogId={dogId} goalId={goal.id} taskId={task.id} /> </li> ))} </ul> </> </Formik> </li> ))} </ul> </> ); }