Я пытаюсь создать страницу создания одной формы для сущности со встроенным массивом других сущностей (который имеет другой уровень глубины). Всем сущностям и встроенным сущностям разрешено (но не обязательно) прикреплять изображение. Для ввода изображения используется пользовательская конечная точка API-платформы для загрузки изображения в AWS s3, а затем возвращается сгенерированный URL-адрес, который копируется в соответствии с текстовым полем. Это работает так, как я хочу, когда я создаю сущность с одним полем изображения.
My Image Uploader:
(Не стесняйтесь критиковать меня за то, как я проверяю, имеет ли изображение изменилось - я рад узнать)
const ImageUploader = () => (
<>
<ImageInput source="imageUpload" label="image">
<ImageField source="imageUpload" title="title"/>
</ImageInput>
<ImageInput source="imageChecker" label="" options={{hidden: true}}>
</ImageInput>
<TextInput source="image" label="Image path"/>
<FormDataConsumer>
{
({formData}) => {
if (typeof formData === 'undefined' || typeof formData.imageUpload === 'undefined') {
return;
}
if (formData.imageChecker === null || formData.imageUpload !== formData.imageChecker) {
formData.imageChecker = formData.imageUpload;
formData.image = getImagePath(formData.imageUpload);
}
}
}
</FormDataConsumer>
</>
);
В чем проблема:
Проблема в том, что когда у меня есть несколько полей ImageUploader
в поле Create
, загрузка изображения в один из загрузчиков копирует эффект для всех остальных загрузчиков и ввода текста. Само изображение также загружается во все загрузчики изображений.
Пример моей формы с несколькими загрузчиками изображений:
const FooBarCreate = props => (
<CreateGuesser {...props}>
...
<ImageUploader/>
<ArrayInput fullWidth={true} source="Foo">
<SimpleFormIterator>
...
<ImageUploader/>
<ArrayInput fullWidth={true} label="Bar" source="Bar">
<SimpleFormIterator>
...
<FormDataConsumer>
{
some logic unrelated to images
}
</FormDataConsumer>
</SimpleFormIterator>
</ArrayInput>
</SimpleFormIterator>
</ArrayInput>
</CreateGuesser>
);
Я предполагаю, что программа не может распознать, какое поле я я пытаюсь присвоить значение, так как все их исходные имена image
, и я не знаю, как решить эту проблему.
Что я пробовал:
- вокруг
ImageUploader
с тегом <SimpleForm>
вместо пустого тега, не повезло, только генерирует кнопки save
повсюду.