Skip to content

Paginated

Generic DTO that wraps a list of items together with pagination metadata. Produced by RequestBuilder.runPaginatedAdapter and HttpAdapter.parsePaginatedAdapter.

Importing

ts
import { Paginated } from '@basmilius/http-client';

Constructor

ts
new Paginated<T>(items: T[], page: number, pageSize: number, pages: number, total: number)
ArgumentTypeDescription
itemsT[]The current page of items.
pagenumberOne-based index of the current page.
pageSizenumberMaximum items per page.
pagesnumberTotal number of pages available.
totalnumberTotal number of items across every page.

Properties

  • itemsT[]. Read-only. The items on the current page.
  • pagenumber. Read-only. One-based current page index.
  • pageSizenumber. Read-only. Maximum number of items per page.
  • pagesnumber. Read-only. Total number of pages.
  • totalnumber. Read-only. Total number of items.

Methods

Paginated is decorated with @dto and inherits clone(), fill() and toJSON().

Example

ts
import {
    BaseResponse,
    BaseService,
    Paginated,
    QueryString
} from '@basmilius/http-client';
import { UserAdapter } from '../adapter/UserAdapter';
import type { UserDto } from '../dto/UserDto';

class UserService extends BaseService {
    async list(offset: number, limit: number): Promise<BaseResponse<Paginated<UserDto>>> {
        return await this
            .request('/users')
            .method('get')
            .queryString(QueryString.builder()
                .append('offset', offset)
                .append('limit', limit))
            .bearerToken()
            .runPaginatedAdapter(UserAdapter.parseUser);
    }
}

const response = await userService.list(0, 25);
const result = response.data;

console.log(result.items.length, '/', result.total);

Expected envelope

The default adapter expects the following JSON shape:

json
{
    "items": [],
    "page": 1,
    "page_size": 25,
    "pages": 4,
    "total": 87
}

See also