Intelligent GridDocumentação em português

Dados do servidor

Formas de levar linhas de um backend para a grade, além de setData():

Necessidade Use
Página por página conforme o usuário rola, via HTTP modo append com load e fetch
Página por página em uma única conexão, com alterações de outros usuários em tempo real modo append com socket
Todas as linhas, em blocos, com progresso loadStream() (Server-Sent Events)
Alterações que o seu próprio código recebe (polling, um barramento de mensagens) applyServerChanges()

WebSocket e Server-Sent Events são alternativas ao fetch, não substitutos. Eles exigem o sorla-db 1.7.1 ou posterior.

Server-Sent Events: carregando em blocos

const stream = grid.loadStream('/api/orders/stream', {
    headers: { Authorization: `Bearer ${token}` },
    onProgress: ({ loaded, total }) => (bar.value = total ? loaded / total : 0)
});
const state = await stream.done;   // { loaded, total, blocks, errors, ... }
stream.close();                    // interrompe antes do fim

O servidor envia as linhas em eventos nomeados (o protocolo de stream do sorla-db):

event: meta
data: {"total": 100000}

id: 1
event: rows
data: [{"id": 1, ...}, ... 5000 rows ...]

event: end
data: {}

Eventos: streamEnd (o estado final) e streamError ({ error }).

Um exemplo do endpoint em Node está em scripts/demo-api.ts (/api/orders/stream): ele espera o drain quando o navegador lê mais devagar do que o servidor escreve.

applyServerChanges

grid.applyServerChanges({ rows: [{ id: 7, qty: 3 }, { id: 9001, name: 'New', qty: 1 }] });
grid.applyServerChanges({ type: 'delete', ids: [12, 13] });
// → { inserted: ['9001'], updated: ['7'], removed: ['12', '13'] }

Experimente

npm run demo inicia um backend com 100 000 pedidos guardados em uma coleção do sorla-db no servidor:

Exemplo Mostra
fetch-pages.html páginas via HTTP que são adicionadas à grade; filtros enviados como where
websocket.html páginas via WebSocket, com linhas alteradas por "outro usuário" a cada 3 s
sse-stream.html 100 000 linhas em blocos de 5 000, com progresso

Editar esta página no GitHub