Pular para o conteúdo

Paginação

Toda lista vem em páginas. Sem Query.limit, a página tem 25 itens. A resposta traz os itens e o total de itens que casam com os filtros.

Query.limit(20) e Query.offset(40) trazem a terceira página de 20. É simples e permite pular para a página N, mas fica mais lento quanto maior o deslocamento, e itens que entram ou saem no meio do caminho mudam o que cai em cada página.

Query.cursorAfter(id) começa logo depois do item id (o último da página anterior). Não fica mais lento no fim da lista e não repete nem pula itens quando a tabela muda. Use para rolagem infinita e para percorrer tudo:

paginacao.ts
import { Query, TablesDB, type Models } from '@owbase/web';
import { client } from './client';
const db = new TablesDB(client);
const PAGINA = 100;
// Percorre a tabela inteira pelo cursor: cada página começa depois da última linha da anterior.
async function todosOsPedidos(): Promise<Models.DefaultRow[]> {
const todos: Models.DefaultRow[] = [];
let cursor: string | undefined;
for (;;) {
const queries = [Query.limit(PAGINA)];
if (cursor) queries.push(Query.cursorAfter(cursor));
const { rows } = await db.listRows({ databaseId: 'loja', tableId: 'pedidos', queries, total: false });
todos.push(...rows);
if (rows.length < PAGINA) return todos;
cursor = rows[rows.length - 1].$id;
}
}
console.log(`${(await todosOsPedidos()).length} pedidos`);

Calcular o total exige contar as linhas. Quando a tela não mostra o total, passe total: false: a resposta vem com total 0 e mais rápido.