upgrade create & edit for /article route using react-simplemde-editor

This commit is contained in:
maxim
2025-02-21 21:21:26 +03:00
parent 4a0440cd6e
commit 9d590c994f
5 changed files with 148 additions and 29 deletions

View File

@ -1,12 +1,20 @@
import {Box, TextField} from '@mui/material'
import {Create} from '@refinedev/mui'
import {useForm} from '@refinedev/react-hook-form'
import {Controller} from 'react-hook-form'
import React from 'react'
import SimpleMDE from 'react-simplemde-editor'
import 'easymde/dist/easymde.min.css'
const MemoizedSimpleMDE = React.memo(SimpleMDE)
export const ArticleCreate = () => {
const {
saveButtonProps,
refineCore: {formLoading},
register,
control,
formState: {errors},
} = useForm({
refineCoreProps: {
@ -14,6 +22,14 @@ export const ArticleCreate = () => {
},
})
const simpleMDEOptions = React.useMemo(
() => ({
placeholder: 'Введите контент в формате Markdown...',
spellChecker: false,
}),
[],
)
return (
<Create isLoading={formLoading} saveButtonProps={saveButtonProps}>
<Box component="form" sx={{display: 'flex', flexDirection: 'column'}} autoComplete="off">
@ -30,19 +46,8 @@ export const ArticleCreate = () => {
label={'Заголовок'}
name="heading"
/>
<TextField
{...register('body', {
required: 'Это поле является обязательным',
})}
error={!!(errors as any)?.body}
helperText={(errors as any)?.body?.message}
margin="normal"
fullWidth
InputLabelProps={{shrink: true}}
type="text"
label={'Контент'}
name="body"
/>
<Controller control={control} name="body" rules={{required: 'Это поле является обязательным'}} defaultValue="" render={({field: {onChange, value}}) => <MemoizedSimpleMDE value={value} onChange={onChange} options={simpleMDEOptions} className="my-markdown-editor" />} />
</Box>
</Create>
)

View File

@ -1,13 +1,29 @@
import {Box, TextField} from '@mui/material'
import {Edit} from '@refinedev/mui'
import {useForm} from '@refinedev/react-hook-form'
import {Controller} from 'react-hook-form'
import React from 'react'
import SimpleMDE from 'react-simplemde-editor'
import 'easymde/dist/easymde.min.css'
const MemoizedSimpleMDE = React.memo(SimpleMDE)
export const ArticleEdit = () => {
const {
saveButtonProps,
register,
control,
formState: {errors},
} = useForm({})
} = useForm()
const simpleMDEOptions = React.useMemo(
() => ({
placeholder: 'Введите контент в формате Markdown...',
spellChecker: false,
}),
[],
)
return (
<Edit saveButtonProps={saveButtonProps}>
@ -22,22 +38,11 @@ export const ArticleEdit = () => {
fullWidth
InputLabelProps={{shrink: true}}
type="text"
label={'Заголовок'}
label="Заголовок"
name="heading"
/>
<TextField
{...register('body', {
required: 'Это поле является обязательным',
})}
error={!!(errors as any)?.body}
helperText={(errors as any)?.body?.message}
margin="normal"
fullWidth
InputLabelProps={{shrink: true}}
type="text"
label={'Контент'}
name="body"
/>
<Controller control={control} name="body" rules={{required: 'Это поле является обязательным'}} defaultValue="" render={({field: {onChange, value}}) => <MemoizedSimpleMDE value={value} onChange={onChange} options={simpleMDEOptions} className="my-markdown-editor" />} />
</Box>
</Edit>
)