Можно ли использовать какой-то фильтр в свойстве источника поля или ввода? - PullRequest
0 голосов
/ 15 января 2020

Я хотел бы использовать гораздо более сложное свойство 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 я хочу отобразить заголовок Engli sh, если он существует, иначе заголовок Arabi c.

Я могу использовать такие вещи, как:

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

Однако я бы хотел написать что-то вроде:

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

И, очевидно, более сложный. Я полагаю, мне нужно иметь возможность вызывать свою собственную функцию, чтобы получить именно тот логин c, который я хочу. Возможно ли это и как?

Другое решение состоит в том, чтобы преобразовать производное GraphQL JSON в правильный dict / ha sh, прежде чем реагирует с этим admin-admin, чтобы я мог написать:

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

Но это означало бы, что я должен сделать это снова на стороне создания / обновления, но это нормально. Не уверен, что это работает, так как я использую ra-data-graphql-simple.

1 Ответ

0 голосов
/ 15 января 2020

Разобрался. Мне нужно создать собственное поле, которое лучше всего работает:

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}/>
};

, а затем использовать это поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...