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.
Por limite e deslocamento
Seção intitulada “Por limite e deslocamento”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.
Por cursor
Seção intitulada “Por cursor”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:
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`);Contar sai caro
Seção intitulada “Contar sai caro”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.