import NavigateNextIcon from '@mui/icons-material/NavigateNext'; import { Alert, AlertTitle, Box, Button, ImageListItem, Table, TableBody, TableCell, TableContainer, TableRow, Typography } from "@mui/material"; import Grid from '@mui/material/Grid'; import ImageList from "@mui/material/ImageList"; import { LoadingPlaceholder } from "@/core/ui/LoadingWidget/LoadingWidget"; import { FormQueryErrors } from "@/core/ui/Widgets/FormError"; import { StepProps } from "@/components/Exercises/screens/Add/AddExerciseStepper"; import { useAddExerciseFullQuery, useAddExerciseImageQuery, useCategoriesQuery, useEquipmentQuery, useLanguageQuery, useMusclesQuery } from "@/components/Exercises/queries"; import { useProfileQuery } from "@/components/User"; import Markdown from 'markdown-to-jsx'; import React, { Fragment } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { useExerciseSubmissionStateValue } from "@/components/Exercises/screens/Add/state"; import { ENGLISH_LANGUAGE_ID } from "@/core/lib/consts"; import { MarkdownOptions } from "@/core/lib/markdown"; import { makeLink, WgerLink } from "@/core/lib/url"; export const Step6Overview = ({ onBack }: StepProps) => { const [t, i18n] = useTranslation(); const [state] = useExerciseSubmissionStateValue(); const navigate = useNavigate(); const categoryQuery = useCategoriesQuery(); const languageQuery = useLanguageQuery(); const musclesQuery = useMusclesQuery(); const equipmentQuery = useEquipmentQuery(); const profileQuery = useProfileQuery(); const addExerciseSubmissionMutation = useAddExerciseFullQuery(); const addImageMutation = useAddExerciseImageQuery(); const submitExercise = async () => { // Create the exercise const exerciseId = await addExerciseSubmissionMutation.mutateAsync({ exercise: { categoryId: state.category as number, equipmentIds: state.equipment, muscleIds: state.muscles, secondaryMuscleIds: state.musclesSecondary, }, author: profileQuery.data!.username, variationGroup: state.variationGroup, variationsConnectTo: state.newVariationExerciseId, translations: [ { language: ENGLISH_LANGUAGE_ID, name: state.nameEn, description: state.descriptionEn, aliases: [ ...state.alternativeNamesEn.map(name => ({ alias: name })) ], comments: [ ...state.notesEn.map(name => ({ comment: name })) ] }, ...(state.languageId !== null ? [{ language: state.languageId, name: state.nameI18n, description: state.descriptionI18n, aliases: [ ...state.alternativeNamesI18n.map(name => ({ alias: name })) ], comments: [ ...state.notesI18n.map(name => ({ comment: name })) ] }] : []) ], }); // Post the images individually, it seems to be more reliable this way // and most problems were happening when creating the exercise itself for (const image of state.images) { if (!image.file) { continue; } await addImageMutation.mutateAsync({ exerciseId: exerciseId, image: image.file, imageData: image, }); } }; const variationText = state.variationGroup !== null ? `Using variation group ${state.variationGroup}` : state.newVariationExerciseId !== null ? `Connecting to exercise ${state.newVariationExerciseId}` : ''; return equipmentQuery.isLoading || languageQuery.isLoading || musclesQuery.isLoading || categoryQuery.isLoading ? : <> {t('exercises.step1HeaderBasics')} {t('name')} {state.nameEn} {t('exercises.alternativeNames')} {state.alternativeNamesEn.join(", ")} {t('description')} {state.descriptionEn} {t('exercises.notes')} {state.notesEn.map(note => {note})} {t('category')} {categoryQuery.data!.find(c => c.id === state.category)!.translatedName} {t('exercises.equipment')} {state.equipment.map(e => equipmentQuery.data!.find(value => value.id === e)!.translatedName).join(', ')} {t('exercises.muscles')} {state.muscles.map(m => musclesQuery.data!.find(value => value.id === m)!.getName()).join(', ')} {t('exercises.secondaryMuscles')} {state.musclesSecondary.map(m => musclesQuery.data!.find(value => value.id === m)!.getName()).join(', ')} {t('exercises.variations')} {variationText} {state.images.length > 0 && ( {state.images.map(imageEntry => ( ))} )} {state.languageId !== null && ( <> {languageQuery.data!.find(l => l.id === state.languageId)!.nameLong} {t('name')} {state.nameI18n} {t('exercises.alternativeNames')} {state.alternativeNamesI18n.join(", ")} {t('description')} {state.descriptionI18n} {t('exercises.notes')} {state.notesI18n.map(note => {note})} > )} {addExerciseSubmissionMutation.isIdle && {t('exercises.checkInformationBeforeSubmitting')} } {addExerciseSubmissionMutation.isSuccess && {t('success')} {t('exercises.cacheWarning')} } {!addExerciseSubmissionMutation.isSuccess && {t('goBack')} } {!addExerciseSubmissionMutation.isSuccess && {t('exercises.submitExercise')} } {addExerciseSubmissionMutation.isSuccess && navigate(makeLink(WgerLink.EXERCISE_DETAIL, i18n.language, { id: addExerciseSubmissionMutation.data! }))} sx={{ mt: 1, mr: 1 }} color="success" > {t('seeDetails')} } >; };