是否可以在字段或输入的源属性中使用某种过滤器?

问题描述 投票:0回答:1

我想使用比我所看到的任何示例都要复杂得多的source属性。用于字段和输入。我不想显示一个简单的字段,而是要从源代码的列表中选择一个特定的字段。下面提供更多解释,但我希望能够提供比这更复杂的信息源:

<TextField source="translations[language = 'en'].title" label="Title" />

我的输入中包含以下JSON:

{ "post": {
    "id": 1,
    "translations": [
      { "language": "en", "title": "English" },
      { "language": "ar", "title": "Arabic" }
    ]
  }
}

这来自GraphQL来源,该来源没有字典。这就是translations是记录列表的原因。在我的Datagrid中,我想显示英文标题(如果存在),否则显示阿拉伯语标题。

我可以使用类似的东西:

<Datagrid>
  <TextField source="translations[0].title" label="Title" />
</Datagrid>

但是我想写类似的东西:

<Datagrid>
  <TextField source="translations[language = 'en'].title" label="Title" />
</Datagrid>

显然更为复杂。我想我需要能够调用自己的函数以完全具有所需的逻辑。这可能吗,怎么办?

另一种解决方案是在react-admin处理此问题之前将GraphQL派生的JSON转换为正确的字典/哈希,这样我可以编写:

<TextField source="translations['en'].title" label="Title" />

但是这意味着我必须再次在创建/更新侧执行此操作,但这很好。由于我使用ra-data-graphql-simple,因此不确定是否可行。

react-admin
1个回答
0
投票

想通了。我需要创建自己的字段,这似乎效果最好:

const TitleField = props => {
    const { record } = props
    let titleIndex = 0
    record.law_texts.forEach(function (item, index) {
        if (item.language === "ar")
            titleIndex = index
    })
    const source = "law_texts[" + titleIndex + "].title"
    return <TextField {...props} source={source}/>
};

然后使用该字段。

© www.soinside.com 2019 - 2024. All rights reserved.