getPaginatedData<T> method

Future<Response> getPaginatedData<T>(
  1. PagyParams<T> params
)

Implementation

Future<Response> getPaginatedData<T>(PagyParams<T> params) async {
  final cfg = PagyConfig();

  final paginationParams = {
    if (cfg.pageKey.isNotEmpty && params.page != null)
      cfg.pageKey: params.page,
    if ((cfg.limitKey?.isNotEmpty ?? false) && params.limit != null)
      cfg.limitKey!: params.limit,
  };

  final mergedQuery = {
    ...?params.additionalQueryParams,
    ...?params.queryParameter,
  };

  Map<String, dynamic>? queryParameters;
  dynamic body;

  final mode = params.paginationMode ?? cfg.paginationMode;
  if (mode == PaginationPayloadMode.queryParams) {
    queryParameters = {...paginationParams, ...mergedQuery};
    body = params.requestType == PagyApiRequestType.post
        ? params.payloadData
        : null;
  } else {
    final additionalQuery = {...?params.additionalQueryParams};
    if (params.payloadData == null) {
      body = {...paginationParams, ...mergedQuery};
      queryParameters = additionalQuery;
    } else if (params.payloadData is Map) {
      body = {...paginationParams, ...mergedQuery, ...params.payloadData};
      queryParameters = additionalQuery;
    } else {
      // If payload isn't a Map, keep it intact and send pagination via query.
      body = params.payloadData;
      queryParameters = {
        ...additionalQuery,
        ...paginationParams,
        ...mergedQuery,
      };
    }
  }

  final Response apiResponse;
  try {
    apiResponse = await _networkService.request(
      endPoint: params.endPoint,
      method: params.requestType.name,
      queryParameters: queryParameters,
      body: body,
      token: params.token,
      isAuthorize: params.token != null,
      extraHeaders: params.headers,
      cancelToken: params.cancelToken,
    );
    return apiResponse;
  } catch (_) {
    rethrow;
  }
}