import React, { useCallback, useEffect, useState } from 'react' import { useForm } from 'react-hook-form' import { useCellValues, usePublisher } from '@mdxeditor/gurx' import { closeImageDialog$, editorRootElementRef$, imageDialogState$, imageUploadHandler$, saveImage$ } from '@mdxeditor/editor' import styles from './Dialog.module.scss' import { createPortal } from 'react-dom' interface ImageFormFields { src: string title: string altText: string file: FileList } export const ImageDialog: React.FC = () => { const [state, editorRootElementRef, imageUploadHandler] = useCellValues( imageDialogState$, editorRootElementRef$, imageUploadHandler$ ) const saveImage = usePublisher(saveImage$) const closeImageDialog = usePublisher(closeImageDialog$) const { register, handleSubmit, setValue, reset } = useForm({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any values: state.type === 'editing' ? (state.initialValues as any) : {} }) const [open, setOpen] = useState(state.type !== 'inactive') useEffect(() => { setOpen(state.type !== 'inactive') }, [state.type]) useEffect(() => { if (!open) { closeImageDialog() reset({ src: '', title: '', altText: '' }) } }, [closeImageDialog, open, reset]) const handleClose = useCallback(() => { setOpen(false) }, []) if (!open) return null if (!editorRootElementRef?.current) return null return createPortal(

Add an image

{ void handleSubmit(saveImage)(e) reset({ src: '', title: '', altText: '' }) e.preventDefault() e.stopPropagation() }} > {imageUploadHandler === null ? ( ) : (
)}
setValue('src', e.currentTarget.value)} placeholder={'Paste an image src'} />
, editorRootElementRef?.current ) }