admin-on-rest: доступ к данным столбца строки в компоненте Datagrid.

У меня есть представление List, в котором я хочу отобразить поле ReferenceField на основе значения текущей строки, отображаемой в таблице, которую создает компонент Datagrid.

Как я могу получить доступ к данным текущей строки? (значения столбцов текущей строки).

Я пробовал record.processed, но получаю сообщение об ошибке, говорящее о том, что объект записи не существует (processed — это столбец в записи, который я хочу проверить, чтобы отформатировать поле). Я также пробовал resource.processed, this.props.processed и this.props.record.processed безуспешно.

Фрагмент кода, который показывает, что я пытаюсь сделать, выглядит следующим образом:

<List title="Sales Inquiries" filter={{ request_type: 'sales' }}  {...props}>
      <Datagrid>
          <TextField source="id" />
          <TextField source="firstname" label="First Name" />
          <TextField source="lastname" label="Last Name" />
          <TextField source="company" />
          <TextField source="email" />
          <DateField source="timestamp" label="Received" />

          {record.processed ?
            <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
              <TextField source="username" />
            </ReferenceField>
          : <span>Nobody</span> }

          <ShowButton />
      </Datagrid>
  </List>

ИЗМЕНИТЬ

Сделал, как предложил @kunal pareek. Применил HOC к полю ReferenceField, который изменяет его, чтобы отображать правильное содержимое следующим образом:

const CustomField = (props) => (
  <span>
    {props.record.processed ?
      <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
        <TextField source="username" />
      </ReferenceField>
    : <span>Nobody</span> }
  </span>
);

person Chakir Mrabet    schedule 03.07.2017    source источник


Ответы (2)


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

Так что вы можете сделать это.

<List title="Sales Inquiries" filter={{ request_type: 'sales' }}  {...props}>
      <Datagrid>
          <TextField source="id" />
          <TextField source="firstname" label="First Name" />
          <TextField source="lastname" label="Last Name" />
          <TextField source="company" />
          <TextField source="email" />
          <DateField source="timestamp" label="Received" />
          <CustomField />

          <ShowButton />
      </Datagrid>
  </List>

const CustomField = (props) => (
          {props.record.processed ?
            <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
              <TextField source="username" />
            </ReferenceField>
          : <span>Nobody</span> }
)

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

Вы также можете использовать HOC. Вы можете найти примеры здесь

https://marmelab.com/admin-on-rest/Theming.html

person kunal pareek    schedule 03.07.2017

В этом вам может помочь дополнение depending-input.

person Gildas Garcia    schedule 03.07.2017
comment
Спасибо, это полезно и для других ситуаций. - person Chakir Mrabet; 04.07.2017