1: Да, я думаю, что нет возможности добавить разбиение на страницы в ReferenceInput, вы должны жестко его закодировать, но, если ваш бэкэнд уже поддерживает текстовый поиск, вы можете использовать AutocompleteInput как дочерний, позволяя пользователям фильтровать результаты:
<ReferenceInput
label="Ring Id"
source="ringid"
reference="candidates"
filterToQuery={searchText => ({ paramNameThatYourBackendExpects: searchText })}
>
<AutocompleteInput optionText="ringid" />
</ReferenceInput>
2 & 3: 2 происходит из-за 3. ReferenceInput только «хочет» использовать getMany, потому что он также поддерживает SelectManyInput как дочерний. В таком случае лучше получить все выбранные параметры сразу, чем вызывать один one, поэтому для упрощения кода ReferenceInput всегда использует getMany. Если вы не можете реализовать внутреннюю часть getMany, но можете добавить код в свой dataProvider, вы можете реализовать getMany, выполнив несколько вызовов getOne:
Предполагая, что dataProvider v3:
this.getMany = async (resource, params) => {
const response = {data: []}
for (const id of params.id) {
response.data.push(await this.getOne(resource, {id}))
}
return response
}
v2 зависит от реализации, просто следуйте тому же принципу.
Если вы не можете изменить dataProvider, например, сторонний dataProvider, вы можете обернуть его:
v3
const fakeGetManyDataProvider = dataProvider => ({
...dataProvider,
getMany: async (resource, params) => {
const response = {data: []}
for (const id of params.id) {
response.data.push(await dataProvider.getOne(resource, {id}))
}
return response
}
})
v2
import { GET_MANY, GET_ONE } from 'react-admin'
const fakeGetManyDataProvider = dataProvider => async (verb, resource, params) => {
if (verb === GET_MANY) {
const response = {data: []}
for (const id of params.id) {
response.data.push(await dataProvider(GET_ONE, resource, {id}))
}
return response
}
return dataProvider(verb, resource, params)
}
Обратите внимание, что обработка ошибок опущена для простоты, реагирующий администратор ожидает отклоненных обещаний вместо необработанных ожиданий, поэтому вы должны обрабатывать ошибки.