"""Pagination adapters for clients built with ngx-jsonapi.""" from rest_framework.response import Response from rest_framework_json_api.pagination import JsonApiPageNumberPagination class NgxJsonApiPageNumberPagination(JsonApiPageNumberPagination): """Expose page-number metadata in the shape expected by ngx-jsonapi.""" def get_paginated_response(self, data): next_page = None previous_page = None if self.page.has_next(): next_page = self.page.next_page_number() if self.page.has_previous(): previous_page = self.page.previous_page_number() return Response( { "results": data, "meta": { "page": self.page.number, "pages": self.page.paginator.num_pages, "total_resources": self.page.paginator.count, "resources_per_page": self.page.paginator.per_page, }, "links": { "first": self.build_link(1), "last": self.build_link(self.page.paginator.num_pages), "next": self.build_link(next_page), "prev": self.build_link(previous_page), }, } )