仅允许在edit / create中创建新的ArrayInput元素,并使现有元素不可变/仅显示

时间:2018-10-11 08:28:45

标签: admin-on-rest react-admin

我已经阅读了一天的文档和论坛,却没有找到答案的解决方案。我想知道react-admin是否可以实现以下目的?

我有一个资源文档,可以为其添加模板。 模板的数量是无限的,但是一旦添加了模板,就不能对其进行编辑或移动。

编辑文档时,可以编辑文档的标题和说明,也可以添加新模板,但是不能修改/删除旧模板。

例如,看下面的这张图片:

Screenshot

在标题,说明和创建日期下面,有一个ArrayInput字段,带有source ='templates'。

第一个条目对应于我已经创建的条目,但是它是可变的。 底部是显示模板的简单数据网格。

我要么需要一个数据网格,并且只能创建新模板,要么使ArrayInput中的现有条目不可变。

是否有干净的方法来实现这一目标? 如果不是,则应该是imo功能。你觉得呢?

1 个答案:

答案 0 :(得分:1)

这是一个非常具体的用例,因此我们不支持开箱即用。但是,如documentation中所述,ArrayInput接受的唯一子对象是迭代器的实现,该迭代器是负责允许添加/删除和显示输入的组件。我们仅提供SimpleFormIterator,但您可以根据其source进行制作。

我认为您可能需要一个迭代器组件,该组件接受两个渲染道具,一个用于返回字段的现有项,另一个用于返回输入的新项。这样使用:

<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>