import { Autocomplete, Box, Button, MenuItem, Stack, TextField, } from "@mui/material"; import Grid from '@mui/material/Grid'; import { LoadingWidget } from "@/core/ui/LoadingWidget/LoadingWidget"; import { StepProps } from "@/components/Exercises/screens/Add/AddExerciseStepper"; import { ExerciseAliases } from "@/components/Exercises/forms/ExerciseAliases"; import { ExerciseEquipmentSelect } from "@/components/Exercises/forms/ExerciseEquipmentSelect"; import { ExerciseName } from "@/components/Exercises/forms/ExerciseName"; import { ExerciseSelect } from "@/components/Exercises/forms/ExerciseSelect"; import { alternativeNameValidator, categoryValidator, nameValidator } from "@/components/Exercises/forms/yupValidators"; import { useCategoriesQuery, useEquipmentQuery, useMusclesQuery, } from "@/components/Exercises/queries"; import { MuscleOverview } from "@/components/Muscles/MuscleOverview"; import { Form, Formik } from "formik"; import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useExerciseSubmissionStateValue } from "@/components/Exercises/screens/Add/state"; import * as exerciseReducer from "@/components/Exercises/screens/Add/state/exerciseSubmissionReducer"; import * as yup from "yup"; export const Step1Basics = ({ onContinue }: StepProps) => { const [t] = useTranslation(); const [state, dispatch] = useExerciseSubmissionStateValue(); const [primaryMuscles, setPrimaryMuscles] = useState(state.muscles); const [secondaryMuscles, setSecondaryMuscles] = useState(state.musclesSecondary); useEffect(() => { dispatch(exerciseReducer.setPrimaryMuscles(primaryMuscles)); }, [dispatch, primaryMuscles]); useEffect(() => { dispatch(exerciseReducer.setSecondaryMuscles(secondaryMuscles)); }, [dispatch, secondaryMuscles]); // Load data from server const categoryQuery = useCategoriesQuery(); const musclesQuery = useMusclesQuery(); const equipmentQuery = useEquipmentQuery(); const validationSchema = yup.object({ nameEn: nameValidator(), newAlternativeNameEn: alternativeNameValidator(), category: categoryValidator(), }); return ( { dispatch(exerciseReducer.setNameEn(values.nameEn)); dispatch(exerciseReducer.setCategory(values.category as number)); dispatch(exerciseReducer.setAlternativeNamesEn(values.newAlternativeNameEn)); dispatch(exerciseReducer.setEquipment(values.equipment)); onContinue!(); }} > {formik => { return ( (
{categoryQuery.isLoading ? : ( {category.translatedName} ))} /> } {equipmentQuery.isLoading ? : } {musclesQuery.isLoading ? : <> m.id)} getOptionDisabled={(option) => secondaryMuscles.includes(option) } getOptionLabel={option => musclesQuery.data!.find(m => m.id === option)!.getName()} value={primaryMuscles} onChange={(event, newValue) => { setPrimaryMuscles(newValue); }} renderInput={params => ( { formik.setFieldValue( formik.getFieldProps("muscles").name, e.target.value ); }} /> )} /> m.id)} getOptionDisabled={(option) => primaryMuscles.includes(option) } getOptionLabel={option => musclesQuery.data!.find(m => m.id === option)!.getName()} value={secondaryMuscles} onChange={(event, newValue) => { setSecondaryMuscles(newValue); }} renderInput={params => ( )} /> musclesQuery.data!.find(mq => mq.id === m)!)} secondaryMuscles={secondaryMuscles.map(m => musclesQuery.data!.find(mq => mq.id === m)!)} isFront={true} /> musclesQuery.data!.find(mq => mq.id === m)!)} secondaryMuscles={secondaryMuscles.map(m => musclesQuery.data!.find(mq => mq.id === m)!)} isFront={false} /> }
) ); }}
); };