Skip to main content

Function: paginateCursor()

Call Signature

paginateCursor<T, TCursor>(items, getCursor, config): CursorPaginatedResult<T, TCursor>

Defined in: collection/paginate/index.ts:112

Paginates an array using cursor-based pagination.

More efficient than offset pagination for large datasets and real-time data. Prevents issues with missing/duplicate items during pagination.

Type Parameters

T

T

TCursor

TCursor

Parameters

items

readonly T[]

The array to paginate

getCursor

(item) => TCursor

Function to extract cursor from item

config

CursorPaginationConfig<TCursor>

Cursor pagination configuration

Returns

CursorPaginatedResult<T, TCursor>

A CursorPaginatedResult with items and next cursor

Example

// Data-first
const messages = [
{ id: 'msg_1', text: 'Hello', createdAt: '2024-01-01' },
{ id: 'msg_2', text: 'World', createdAt: '2024-01-02' }
]

paginateCursor(messages, (m) => m.id, { limit: 10 })
// => {
// items: [first 10 messages],
// nextCursor: 'msg_10',
// hasMore: true
// }

// Continue from cursor
paginateCursor(messages, (m) => m.id, { cursor: 'msg_10', limit: 10 })

// Data-last (in pipe)
pipe(
messages,
paginateCursor((m) => m.id, { limit: 10 })
)

See

paginate - for offset-based pagination

Call Signature

paginateCursor<T, TCursor>(getCursor, config): (items) => CursorPaginatedResult<T, TCursor>

Defined in: collection/paginate/index.ts:117

Paginates an array using cursor-based pagination.

More efficient than offset pagination for large datasets and real-time data. Prevents issues with missing/duplicate items during pagination.

Type Parameters

T

T

TCursor

TCursor

Parameters

getCursor

(item) => TCursor

Function to extract cursor from item

config

CursorPaginationConfig<TCursor>

Cursor pagination configuration

Returns

A CursorPaginatedResult with items and next cursor

(items): CursorPaginatedResult<T, TCursor>

Parameters

items

readonly T[]

Returns

CursorPaginatedResult<T, TCursor>

Example

// Data-first
const messages = [
{ id: 'msg_1', text: 'Hello', createdAt: '2024-01-01' },
{ id: 'msg_2', text: 'World', createdAt: '2024-01-02' }
]

paginateCursor(messages, (m) => m.id, { limit: 10 })
// => {
// items: [first 10 messages],
// nextCursor: 'msg_10',
// hasMore: true
// }

// Continue from cursor
paginateCursor(messages, (m) => m.id, { cursor: 'msg_10', limit: 10 })

// Data-last (in pipe)
pipe(
messages,
paginateCursor((m) => m.id, { limit: 10 })
)

See

paginate - for offset-based pagination