import {Box, TextField, Button, Typography, Autocomplete} from '@mui/material' import {Edit} from '@refinedev/mui' import {useForm} from '@refinedev/react-hook-form' import {useEffect} from 'react' import {useShow} from '@refinedev/core' import {Controller} from 'react-hook-form' import {MEDIA_TYPES} from '../../lib/constants' import {ALLOWED_IMAGE_TYPES, ALLOWED_VIDEO_TYPES, useMediaFileUpload} from '../../components/media/MediaFormUtils' type MediaFormValues = { media_name: string media_type: number file?: File } export const MediaEdit = () => { const { saveButtonProps, refineCore: {onFinish}, register, formState: {errors}, setValue, handleSubmit, watch, setError, clearErrors, control, } = useForm({ defaultValues: { media_name: '', media_type: '', file: undefined, }, }) const {query} = useShow() const {data} = query const record = data?.data const selectedMediaType = watch('media_type') const {selectedFile, previewUrl, setPreviewUrl, handleFileChange, handleMediaTypeChange} = useMediaFileUpload({ selectedMediaType, setError, clearErrors, setValue, }) useEffect(() => { if (record?.id) { setPreviewUrl(`https://wn.krbl.ru/media/${record.id}/download`) setValue('media_name', record?.media_name || '') setValue('media_type', record?.media_type) } }, [record, setValue, setPreviewUrl]) return ( { const formData = { media_name: data.media_name, filename: selectedFile?.name || record?.filename, type: Number(data.media_type), } onFinish(formData) }), }} > ( option.value === field.value) || null} onChange={(_, value) => { field.onChange(value?.value || null) handleMediaTypeChange(value?.value || null) }} getOptionLabel={(item) => { return item ? item.label : '' }} isOptionEqualToValue={(option, value) => { return option.value === value?.value }} renderInput={(params) => } /> )} /> {selectedFile && ( {selectedFile.name} )} {errors.file && ( {(errors as any)?.file?.message} )} {previewUrl && selectedMediaType === 1 && ( Preview )} ) }