Получить ReferenceManyField Count? - PullRequest
4 голосов
/ 24 апреля 2019

Как вы можете отобразить счетчик компонента "ReferenceManyField"?

Вот в чём дело, я перечисляю организации, и я бы хотел, чтобы каждая из них насчитывала их пользователей.

Получить организации:

GET /organizations?filter={}&range=[0,24]&sort=["name","ASC"]

Выбор пользователей для каждой организации:

...
GET /users?filter={"uuid_organization":"1117b0a0-6ec7-40e3-9ee6-49d121c27111"}&range=[0,99]&sort=["email","ASC"]
...
    <List
        {...props}
        filters={<OrganizationFilter />}
        sort={{ field: 'name', order: 'ASC' }}
        perPage={25}
    >
        <Responsive
            xsmall={<MobileGrid />}
            medium={
                <Datagrid expand={<OrganizationShow />}>
                    <OrganizationLinkField />
                    <ReferenceManyField label="Users" reference="users" target="uuid_organization" sort={{ field: 'email', order: 'ASC' }}>
                        // PRINT: 102 users
                    </ReferenceManyField>
                    <EditButton />
                </Datagrid>
            }
        />
    </List>

Я не уверен, что мне следует делать это таким образом, это кажется неэффективным и излишним. Что ты думаешь?

Заранее спасибо.

1 Ответ

0 голосов
/ 06 мая 2019

Подход, который вы выбрали, - это способ, которым react-admin реализовал его для получения объединенных данных по внешнему ключу, и ИМХО, это не так уж и много, потому что на уровне базы данных вам все еще нужно запросить другую таблицу.

Согласно документации , есть дополнительное свойство ответа для формата ответа GET_MANY_REFERENCE, называемое total: GET_MANY_REFERENCE { data: {Record[]}, total: {int} }

Компонент поля ReferenceManyField использует этот формат ответа для извлечения данных, используя идентификатор текущей записи в качестве внешнего ключа (родительского идентификатора) для указанного ресурса.

Копание в react-admin код последней версии 2.9.0 Я вижу, что ReferenceManyField передает реквизиты своим детям, и вам решать, как вы обрабатываете данные (например, List, DataGrid) и одним из реквизитов является total (количество записей), которое по умолчанию передается компоненту Pagination.

Вы можете создать свой собственный простой функциональный компонент для обработки этих реквизитов, если вы не хотите использовать что-либо еще:

import React from 'react';

const UserTotal = props => <div>User count: {props.total}</div>;

export default UserTotal;

И использование вашего справочного поля:

<ReferenceManyField 
  label="Users" 
  reference="users" 
  target="uuid_organization" 
  sort={{ field: 'email', order: 'ASC' }}
>
  <UserTotal />
</ReferenceManyField>
...