import { Done } from '@mui/icons-material'; import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, Grid, TextField, Typography, useMediaQuery, useTheme, } from '@mui/material'; import { useForm } from '@tanstack/react-form'; import { useMutation } from '@tanstack/react-query'; import { FC, FormEvent, useState } from 'react'; import { useTranslation } from 'react-i18next'; import Api from '../../../api/Api'; import { UserCreate } from '../../../types/User'; import ErrorComponent from '../../Error/ErrorComponent'; interface Props { open: boolean; onClose: () => void; } const RegisterDialog: FC = ({ open, onClose }) => { //eslint-disable-next-line @typescript-eslint/no-explicit-any const [error, setError] = useState(); const createMutation = useMutation({ mutationFn: ({ data }: { data: UserCreate }) => { return Api.createUser(data); }, }); const { t } = useTranslation(); const theme = useTheme(); const fullScreen = useMediaQuery(theme.breakpoints.only('xs'), { noSsr: true }); const form = useForm({ defaultValues: { username: '', email: '', password: '', }, onSubmit: async ({ value }) => { try { createMutation.mutate( { data: value }, { onSuccess: () => setError(undefined), onError: setError, } ); //eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { setError(error); } }, }); const handleClose = () => { form.reset(); setError(undefined); onClose(); }; if (createMutation.isSuccess) return ( {t('Confirm header')} {t('Confirm mail')} ); return ( ) => { e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }, onKeyDown: (event: React.KeyboardEvent) => { if (event.key === 'Tab') { event.stopPropagation(); } }, noValidate: true, }} > {t('Register')} (!value ? t('Username required') : undefined), onChangeAsyncDebounceMs: 250, onChangeAsync: async ({ value }) => { return !value && t('Username required'); }, }} children={(field) => { return ( <> field.handleChange(e.target.value)} size="small" label={t('Username')} required error={field.state.meta.isTouched && field.state.meta.errors.length > 0} helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''} autoComplete="new-username" fullWidth margin="dense" /> ); }} /> (!value ? t('Email required') : undefined), onChangeAsyncDebounceMs: 250, onChangeAsync: async ({ value }) => { return !value && t('Email required'); }, }} children={(field) => { return ( <> field.handleChange(e.target.value)} size="small" label={t('Email')} required error={field.state.meta.isTouched && field.state.meta.errors.length > 0} helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''} type="email" autoComplete="new-email" inputMode="email" fullWidth /> ); }} /> (!value ? t('Password required') : undefined), onChangeAsyncDebounceMs: 250, onChangeAsync: async ({ value }) => { return !value && t('Password required'); }, }} children={(field) => { return ( <> field.handleChange(e.target.value)} size="small" label={t('Password')} required error={field.state.meta.isTouched && field.state.meta.errors.length > 0} helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''} type="password" autoComplete="new-password" fullWidth /> ); }} /> [state.canSubmit, state.isSubmitting]} children={([canSubmit]) => ( <> )} /> {error && } ); }; export default RegisterDialog;