Разрешить создание новых элементов ArrayInput только в режиме редактирования / создания и создания неизменных / отображения только существующих - PullRequest
0 голосов
/ 11 октября 2018

Я читаю документы и форум в течение дня и не нашла решения для своего ответа.Я задаюсь вопросом, возможно ли следующее с response-admin.

У меня есть ресурсные документы, для которых могут быть созданы шаблоны.Количество шаблонов бесконечно, но после добавления шаблона его нельзя редактировать или удалять.

Когда я редактирую документ, я могу редактировать его заголовок и описание или добавлять новые шаблоны, но яневозможно изменить / удалить старые.

Посмотрите на это изображение ниже, например:

Screenshot

Ниже заголовка, описания иСоздано в Date есть поле ArrayInput с source = 'templates'.

Первая запись соответствует уже созданной мной, но изменяемой.Внизу находится простая сетка данных, которая показывает шаблоны.

Мне нужно иметь сетку данных и иметь возможность только создавать новые шаблоны, или иметь неизменяемые существующие записи в ArrayInput.

Есть ли чистый или хакерский способ добиться этого?Если нет, то это должна быть особенность IMO.Что ты думаешь?

1 Ответ

0 голосов
/ 11 октября 2018

Это очень специфический вариант использования, поэтому мы не будем поддерживать эту функцию из коробки.Однако, как объяснено в документации , единственный дочерний элемент, принятый ArrayInput, является реализацией итератора, который является компонентом, отвечающим за добавление / удаление и отображение входных данных.Мы предоставляем только SimpleFormIterator, но вы можете сделать свой собственный на основе источника .

Я думаю, вам, вероятно, понадобится компонент итератора, принимающий два объекта рендеринга, один для существующих элементов.который будет возвращать поля, и еще один для новых элементов, которые будут возвращать входные данные.Это будет использовано так:

<ArrayInput source="templates">
    <SimpleFormIterator
        renderExisting={() => ([
            <TextField source="country" />,
            <TextField source="templateId" />,
            <NumberField source="pages" />,
        ])}
        renderNew={() => ([
            <TextInput source="country" />,
            <TextInput source="templateId" />,
            <NumberInput source="pages" />,
        ])}
    />
</ArrayInput>
...