Utilities

The SDK exports utility functions for working with ConnectRPC pagination and query transformation.

import {
  getConnectNextPageParam,
  getGroupCountMapFromFirstPage,
  DEFAULT_PAGE_SIZE,
  transformDataTableQueryToRQLRequest,
} from "@raystack/frontier/admin";

DEFAULT_PAGE_SIZE

Default page size used for paginated queries.

const DEFAULT_PAGE_SIZE = 50;

getConnectNextPageParam

Returns the next page parameters for infinite queries using ConnectRPC pagination. Returns undefined when there are no more pages.

Signature

function getConnectNextPageParam<T extends ConnectRPCPaginatedResponse>(
  lastPage: T,
  queryParams: { query: RQLRequest },
  itemsKey?: string, // default: "organizations"
): { query: RQLRequest } | undefined;

Parameters

ParameterTypeDescription
lastPageConnectRPCPaginatedResponseThe last page response from the API.
queryParams\{ query: RQLRequest \}The current query parameters.
itemsKeystringThe key in the response that contains the items array. Defaults to "organizations".

Example

import { useInfiniteQuery } from "@connectrpc/connect-query";
import { AdminServiceQueries } from "@raystack/proton/frontier";
import { getConnectNextPageParam } from "@raystack/frontier/admin";

const { data, fetchNextPage } = useInfiniteQuery(
  AdminServiceQueries.searchUsers,
  { query },
  {
    pageParamKey: "query",
    getNextPageParam: (lastPage) =>
      getConnectNextPageParam(lastPage, { query }, "users"),
  },
);

getGroupCountMapFromFirstPage

Extracts group count data from the first page of an infinite query response. Useful for displaying group counts in DataTable column headers.

Signature

function getGroupCountMapFromFirstPage(
  infiniteData: { pages: ConnectRPCPaginatedResponse[] },
): Record<string, Record<string, number>>;

Example

const groupCountMap = infiniteData
  ? getGroupCountMapFromFirstPage(infiniteData)
  : {};

const columns = getColumns({ groupCountMap });

transformDataTableQueryToRQLRequest

Converts an Apsara DataTableQuery object into an RQLRequest compatible with ConnectRPC APIs. Handles filters, sorting, pagination, and search.

Signature

function transformDataTableQueryToRQLRequest(
  query: DataTableQuery,
  options?: TransformOptions,
): RQLRequest;

Options

OptionTypeDescription
defaultLimitnumberDefault page size. Defaults to 50.
fieldNameMappingRecord<string, string>Maps frontend field names to API field names (e.g. \{ createdAt: "created_at" \}).

Example

import { transformDataTableQueryToRQLRequest } from "@raystack/frontier/admin";

const query = transformDataTableQueryToRQLRequest(tableQuery, {
  fieldNameMapping: {
    createdAt: "created_at",
    updatedAt: "updated_at",
  },
});

ConnectRPCPaginatedResponse

Type for paginated API responses.

type ConnectRPCPaginatedResponse = {
  pagination?: RQLQueryPaginationResponse;
  group?: RQLQueryGroupResponse;
  [key: string]: unknown;
};

TransformOptions

Options for transformDataTableQueryToRQLRequest.

interface TransformOptions {
  defaultLimit?: number;
  fieldNameMapping?: Record<string, string>;
}