import { ContentCopy } from "@mui/icons-material"; import CachedIcon from "@mui/icons-material/Cached"; import ClearIcon from "@mui/icons-material/Clear"; import PhotoIcon from "@mui/icons-material/Photo"; import { Avatar, Box, Button, Checkbox, DialogActions, DialogContent, DialogTitle, FormControlLabel, IconButton, InputAdornment, ListItem, ListItemAvatar, ListItemText, TextField, Tooltip } from "@mui/material"; import { NameAutocompleter } from "@/components/Exercises/widgets/Filter/NameAutocompleter"; import { Exercise } from "@/components/Exercises/models/exercise"; import { Language } from "@/components/Exercises/models/language"; import { useDeleteExerciseQuery, useDeleteExerciseTranslationQuery, useFetchExerciseQuery, } from "@/components/Exercises/queries"; import { SERVER_URL } from "@/config"; import React from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; export function ExerciseDeleteDialog(props: { onClose: () => void, onChangeLanguage: () => void, currentExercise: Exercise, currentLanguage: Language | undefined, }) { const [replacementId, setReplacementId] = React.useState(null); const [replacementExercise, setReplacementExercise] = React.useState(null); const [sameExerciseError, setSameExerciseError] = React.useState(false); const [transferMedia, setTransferMedia] = React.useState(true); const [transferTranslations, setTransferTranslations] = React.useState(true); const [isProcessing, setIsProcessing] = React.useState(false); const [t] = useTranslation(); const navigate = useNavigate(); const exerciseId = props.currentExercise.id!; const deleteExerciseMutation = useDeleteExerciseQuery(exerciseId); const deleteTranslationMutation = useDeleteExerciseTranslationQuery(exerciseId); const fetchExercise = useFetchExerciseQuery(); const resetReplacement = () => { setReplacementExercise(null); setReplacementId(null); setSameExerciseError(false); }; const handleDeleteTranslation = async () => { await deleteTranslationMutation.mutateAsync( props.currentExercise.getTranslation(props.currentLanguage)!.id! ); props.onClose(); props.onChangeLanguage(); }; const handleDeleteBase = async (handleReplacement: boolean = false) => { setIsProcessing(true); try { if (handleReplacement) { await deleteExerciseMutation.mutateAsync({ replacementUUID: replacementExercise!.uuid!, transferMedia, transferTranslations, }); } else { await deleteExerciseMutation.mutateAsync(); } } finally { setIsProcessing(false); } props.onClose(); navigate('../overview'); }; const loadCurrentReplacement = async (exerciseId?: number) => { const id = exerciseId !== undefined ? exerciseId : replacementId; if (id !== null) { if (id === props.currentExercise.id) { setReplacementExercise(null); setSameExerciseError(true); return; } setSameExerciseError(false); try { const exercise = await fetchExercise(id); setReplacementExercise(exercise); } catch { setReplacementExercise(null); } } }; return <> {t('delete')}

{t('exercises.deleteExerciseBody', { name: props.currentExercise.getTranslation(props.currentLanguage)?.name, language: props.currentLanguage?.nameLong }) }

{t('cannotBeUndone')}

{t('exercises.replacements')}

{t('exercises.replacementsInfoText')}

{t('exercises.replacementsSearch')}

{ if (exercise !== null) { setReplacementId(exercise.id!); loadCurrentReplacement(exercise.id!); } }} /> loadCurrentReplacement()} onChange={async (event) => { setReplacementId(event.target.value !== '' ? parseInt(event.target.value) : null); }} value={replacementId ?? ""} slotProps={{ input: { endAdornment: loadCurrentReplacement()}> } } } fullWidth={true} variant="standard" /> {sameExerciseError && <>

{t('exercises.replacementCannotBeSame')}

} {replacementExercise === null && !sameExerciseError && <>

{t('exercises.noReplacementSelected')}

} {replacementExercise !== null && <>

Selected exercise for replacement: navigator.clipboard.writeText(replacementExercise!.id!.toString())}>

{replacementExercise.mainImage ? : } setTransferMedia(e.target.checked)} disabled={isProcessing} /> } label={t('exercises.transferMediaLabel')} /> setTransferTranslations(e.target.checked)} disabled={isProcessing} /> } label={t('exercises.transferTranslationsLabel')} /> }
; }