import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, LinearProgress, TextField, useMediaQuery, useTheme, } from '@mui/material'; import { useForm } from '@tanstack/react-form'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { t } from 'i18next'; import { FC, FormEvent, useState } from 'react'; import Api from '../../../api/Api'; import { PostAuth, PostUpdate } from '../../../types/Post'; import ErrorComponent from '../../Error/ErrorComponent'; interface Props { post: PostAuth; open: boolean; onClose: () => void; } const PostEditDialog: FC = ({ post, open, onClose }) => { //eslint-disable-next-line @typescript-eslint/no-explicit-any const [error, setError] = useState(); const [characterCount, setCharacterCount] = useState(post.content.length); const updateMutation = useMutation({ mutationFn: ({ data, id }: { data: PostUpdate; id: number }) => { return Api.updatePost(data, id); }, }); const form = useForm({ defaultValues: { content: post.content.replaceAll('
', ''), }, onSubmit: async ({ value }) => { try { updateMutation.mutate( { data: value, id: post.id }, { onSuccess: () => { handleClose(); queryClient.invalidateQueries({ queryKey: ['posts'] }); }, onError: setError, } ); //eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { setError(error); } }, }); const theme = useTheme(); const fullScreen = useMediaQuery(theme.breakpoints.only('xs'), { noSsr: true }); const queryClient = useQueryClient(); const handleClose = () => { form.reset(); setError(undefined); onClose(); }; return ( ) => { e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }, onKeyDown: (event: React.KeyboardEvent) => { if (event.key === 'Tab') { event.stopPropagation(); } }, noValidate: true, }} > {t('Edit post')} (!value ? t('Content required') : undefined), onChangeAsyncDebounceMs: 250, onChangeAsync: async ({ value }) => { return !value && t('Content required'); }, }} children={(field) => { return ( <> { if (e.target.value.length <= 250) { setCharacterCount(e.target.value.length); field.handleChange(e.target.value); } }} size="small" label={t('Comment')} required error={field.state.meta.isTouched && field.state.meta.errors.length > 0} helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''} autoComplete="off" margin="dense" fullWidth /> = 200 ? 'warning' : 'primary'} /> ); }} /> [state.canSubmit, state.isSubmitting]} children={([canSubmit]) => ( <> )} /> {error && ( )} ); }; export default PostEditDialog;