add media_name prop for /media route

This commit is contained in:
maxim 2025-03-31 20:06:48 +03:00
parent f649b1390e
commit 9a2ad7036b
5 changed files with 43 additions and 25 deletions

View File

@ -12,7 +12,7 @@ interface CustomDataGridProps extends DataGridProps {
resource?: string // Add this prop resource?: string // Add this prop
} }
const DEV_FIELDS = ['id', 'code', 'country_code', 'city_id', 'carrier_id', 'main_color', 'left_color', 'right_color', 'logo', 'slogan'] as const const DEV_FIELDS = ['id', 'code', 'country_code', 'city_id', 'carrier_id', 'main_color', 'left_color', 'right_color', 'logo', 'slogan', 'filename'] as const
export const CustomDataGrid = ({hasCoordinates = false, columns = [], resource, ...props}: CustomDataGridProps) => { export const CustomDataGrid = ({hasCoordinates = false, columns = [], resource, ...props}: CustomDataGridProps) => {
// const isDev = import.meta.env.DEV // const isDev = import.meta.env.DEV

View File

@ -7,7 +7,7 @@ import {MEDIA_TYPES} from '../../lib/constants'
import {ALLOWED_IMAGE_TYPES, ALLOWED_VIDEO_TYPES, useMediaFileUpload} from '../../components/media/MediaFormUtils' import {ALLOWED_IMAGE_TYPES, ALLOWED_VIDEO_TYPES, useMediaFileUpload} from '../../components/media/MediaFormUtils'
type MediaFormValues = { type MediaFormValues = {
filename: string media_name: string
media_type: number media_type: number
file?: File file?: File
} }
@ -42,13 +42,20 @@ export const MediaCreate = () => {
...saveButtonProps, ...saveButtonProps,
disabled: !!errors.file || !selectedFile, disabled: !!errors.file || !selectedFile,
onClick: handleSubmit((data) => { onClick: handleSubmit((data) => {
const formData = new FormData()
formData.append('filename', data.filename)
formData.append('type', String(data.media_type))
if (data.file) { if (data.file) {
const formData = new FormData()
formData.append('media_name', data.media_name)
formData.append('filename', data.file.name)
formData.append('type', String(data.media_type))
formData.append('file', data.file) formData.append('file', data.file)
console.log('Отправляемые данные:')
for (const pair of formData.entries()) {
console.log(pair[0] + ': ' + pair[1])
}
onFinish(formData)
} }
onFinish(formData)
}), }),
}} }}
> >
@ -78,20 +85,20 @@ export const MediaCreate = () => {
/> />
<TextField <TextField
{...register('filename', { {...register('media_name', {
required: 'Это поле является обязательным', required: 'Это поле является обязательным',
})} })}
error={!!(errors as any)?.filename} error={!!(errors as any)?.media_name}
helperText={(errors as any)?.filename?.message} helperText={(errors as any)?.media_name?.message}
margin="normal" margin="normal"
fullWidth fullWidth
InputLabelProps={{shrink: true}} InputLabelProps={{shrink: true}}
type="text" type="text"
label="Название *" label="Название *"
name="filename" name="media_name"
/> />
<Box component="form" sx={{display: 'flex', flexDirection: 'column'}} autoComplete="off"> <Box component="form" sx={{display: 'flex', flexDirection: 'column'}} autoComplete="off" style={{marginTop: 10}}>
<Box display="flex" flexDirection="column-reverse" alignItems="center" gap={6}> <Box display="flex" flexDirection="column-reverse" alignItems="center" gap={6}>
<Box display="flex" flexDirection="column" alignItems="center" gap={2}> <Box display="flex" flexDirection="column" alignItems="center" gap={2}>
<Button variant="contained" component="label" disabled={!selectedMediaType}> <Button variant="contained" component="label" disabled={!selectedMediaType}>
@ -112,7 +119,7 @@ export const MediaCreate = () => {
)} )}
</Box> </Box>
{previewUrl && ( {previewUrl && selectedMediaType === 1 && (
<Box mt={2} display="flex" justifyContent="center"> <Box mt={2} display="flex" justifyContent="center">
<img src={previewUrl} alt="Preview" style={{maxWidth: '200px', borderRadius: 8}} /> <img src={previewUrl} alt="Preview" style={{maxWidth: '200px', borderRadius: 8}} />
</Box> </Box>

View File

@ -9,7 +9,7 @@ import {MEDIA_TYPES} from '../../lib/constants'
import {ALLOWED_IMAGE_TYPES, ALLOWED_VIDEO_TYPES, useMediaFileUpload} from '../../components/media/MediaFormUtils' import {ALLOWED_IMAGE_TYPES, ALLOWED_VIDEO_TYPES, useMediaFileUpload} from '../../components/media/MediaFormUtils'
type MediaFormValues = { type MediaFormValues = {
filename: string media_name: string
media_type: number media_type: number
file?: File file?: File
} }
@ -28,7 +28,7 @@ export const MediaEdit = () => {
control, control,
} = useForm<MediaFormValues>({ } = useForm<MediaFormValues>({
defaultValues: { defaultValues: {
filename: '', media_name: '',
media_type: '', media_type: '',
file: undefined, file: undefined,
}, },
@ -50,7 +50,7 @@ export const MediaEdit = () => {
useEffect(() => { useEffect(() => {
if (record?.id) { if (record?.id) {
setPreviewUrl(`https://wn.krbl.ru/media/${record.id}/download`) setPreviewUrl(`https://wn.krbl.ru/media/${record.id}/download`)
setValue('filename', record?.filename || '') setValue('media_name', record?.media_name || '')
setValue('media_type', record?.media_type) setValue('media_type', record?.media_type)
} }
}, [record, setValue, setPreviewUrl]) }, [record, setValue, setPreviewUrl])
@ -62,7 +62,8 @@ export const MediaEdit = () => {
disabled: !!errors.file, disabled: !!errors.file,
onClick: handleSubmit((data) => { onClick: handleSubmit((data) => {
const formData = { const formData = {
filename: data.filename, media_name: data.media_name,
filename: selectedFile?.name || record?.filename,
type: Number(data.media_type), type: Number(data.media_type),
} }
onFinish(formData) onFinish(formData)
@ -97,20 +98,20 @@ export const MediaEdit = () => {
/> />
<TextField <TextField
{...register('filename', { {...register('media_name', {
required: 'Это поле является обязательным', required: 'Это поле является обязательным',
})} })}
error={!!(errors as any)?.filename} error={!!(errors as any)?.media_name}
helperText={(errors as any)?.filename?.message} helperText={(errors as any)?.media_name?.message}
margin="normal" margin="normal"
fullWidth fullWidth
InputLabelProps={{shrink: true}} InputLabelProps={{shrink: true}}
type="text" type="text"
label="Название *" label="Название *"
name="filename" name="media_name"
/> />
<Box display="flex" flexDirection="column-reverse" alignItems="center" gap={4}> <Box display="flex" flexDirection="column-reverse" alignItems="center" gap={4} style={{marginTop: 10}}>
<Box display="flex" flexDirection="column" alignItems="center" gap={2}> <Box display="flex" flexDirection="column" alignItems="center" gap={2}>
<Button variant="contained" component="label" disabled={!selectedMediaType}> <Button variant="contained" component="label" disabled={!selectedMediaType}>
{selectedFile ? 'Изменить файл' : 'Загрузить файл'} {selectedFile ? 'Изменить файл' : 'Загрузить файл'}
@ -130,9 +131,9 @@ export const MediaEdit = () => {
)} )}
</Box> </Box>
{previewUrl && ( {previewUrl && selectedMediaType === 1 && (
<Box mt={2} display="flex" justifyContent="center"> <Box mt={2} display="flex" justifyContent="center">
<img src={previewUrl} alt="Preview" style={{maxWidth: '300px', objectFit: 'contain'}} /> <img src={previewUrl} alt="Preview" style={{maxWidth: '200px', borderRadius: 8}} />
</Box> </Box>
)} )}
</Box> </Box>

View File

@ -22,13 +22,22 @@ export const MediaList = () => {
}, },
{ {
field: 'filename', field: 'filename',
headerName: 'Название', headerName: 'Название файла',
type: 'string', type: 'string',
minWidth: 250, minWidth: 250,
display: 'flex', display: 'flex',
align: 'left', align: 'left',
headerAlign: 'left', headerAlign: 'left',
}, },
{
field: 'media_name',
headerName: 'Название',
type: 'string',
minWidth: 150,
display: 'flex',
align: 'left',
headerAlign: 'left',
},
{ {
field: 'media_type', field: 'media_type',
headerName: 'Тип', headerName: 'Тип',

View File

@ -11,7 +11,8 @@ export const MediaShow = () => {
const record = data?.data const record = data?.data
const fields = [ const fields = [
{label: 'Название', data: 'filename'}, // {label: 'Название файла', data: 'filename'},
{label: 'Название', data: 'media_name'},
{ {
label: 'Тип', label: 'Тип',
data: 'media_type', data: 'media_type',