Как обрабатывать пагинацию на основе курсора в React-Admin? - PullRequest
1 голос
/ 21 октября 2019

Мой API обеспечивает пагинацию на основе курсора, а не нумерацию смещений по пределу, поэтому сложно подобрать конфигурацию page: {int} и perPage: {int}, которую React-Admin предоставляет для GET_LIST и GET_MANY_REFERENCE.

Разбиение на основе курсора используется многими API с быстродвижущимися данными, такими как Twitter, Facebook и Slack .

В своей простейшей нумерации на основе курсора это означает, чтоответ списка включает (в теле ответа или в заголовках) непрозрачные курсоры, которые являются «закладками» до конца предыдущей страницы и начала следующей страницы. Он может включать или не включать курсоры для каждого ресурса в ответе и может включать или не включать постоянные курсоры для первой и последней доступных страниц. API на основе курсора с нумерацией страниц также может не быть в состоянии обеспечить значимое «общее количество» ресурсов, соответствующих предоставленному фильтру, как в настоящее время настаивают в реакции-admin GET_LIST и GET_MANY_REFERENCEответы.

Подобные вопросы, похоже, задавались на трекере проблем React-Admin (act-admin # 1510 и response-admin # 1787 ) и на Stack-Переполнение Как разбить списки реагирующих администраторов, когда общее количество неизвестно? ), но все ответы кажутся довольно хрупкими обходными путями.

Чтобы быть точным в отношении идиома запроса / ответа, поддерживаемого моимAPI, первоначальный запрос может выглядеть следующим образом:

GET http://example.com/api/resources?<filter-params>&paging.limit=10

Ответ включает до 10 запрошенных ресурсов и курсоры, отмечающие начало и конец этой страницы:

X-Paging-Since: <since-cursor>
X-Paging-Until: <until-cursor>

[ {...}, {...}, ... ]

Предыдущая страница тогда:

GET http://example.com/api/resources?<filter-params>&paging.until=<since-cursor>

, а следующая страница:

GET http://example.com/api/resources?<filter-params>&paging.since=<until-cursor>

(Inэтот API, эти полные URL для next / prev (и first / last) на самом делеДоступно также в заголовках ответа Link : Link: <prev-url>;rel=prev, <next-url>;rel=next, <first-url>;rel=first, <last-url>;rel=last.)

Очевидно, что мой поставщик данных может переформатировать эти заголовки в данные, возвращаемые реагирующим администраторам, как мы хотим, но не ясно, какЛучше всего подключиться к компонентам реагировать-admin List или Pagination или к компоненту Pagination, чтобы передать соответствующий курсор / URL обратно поставщику данных для следующего запроса.

...