Skip to content

ServerSidePlugin

Server-Side Data Plugin for tbw-grid

Central data orchestrator for the grid. Manages fetch, cache, and row-model for server-side data loading. Structural plugins (Tree, GroupingRows) can claim data via events; the core grid uses it as flat rows when unclaimed.

import { ServerSidePlugin } from '@toolbox-web/grid/plugins/server-side';
interface ServerSideDataSource {
getRows(params: GetRowsParams): Promise<GetRowsResult>;
getChildRows?(params: GetChildRowsParams): Promise<GetChildRowsResult>;
}
OptionTypeDescription
pageSize?numberNumber of nodes to request per fetch. This determines the endNode - startNode range passed to getRows(). Smaller values mean faster initial loads but more frequent requests while scrolling.
cacheBlockSize?numberNumber of nodes kept in each cache block. When a block is evicted (e.g. scrolled far away), re-scrolling back triggers a new fetch. Should be ≥ pageSize; larger values reduce re-fetches at the cost of memory.
maxConcurrentRequests?numberMaximum number of concurrent getRows() requests. Limits how many blocks can be fetched simultaneously during fast scrolling. Set to 1 for strict sequential loading; higher values improve perceived performance.
loadThreshold?numberPrefetch slack in node count (rows). When > 0, blocks are loaded as soon as the user is within loadThreshold rows of an unloaded block, rather than only when the visible window enters it. This reduces the number of placeholder rows the user sees during gentle scrolling at the cost of slightly more eager fetching.
dataSource?ServerSideDataSource<unknown>Data source for server-side loading. When provided, the plugin auto-initializes on attach — no need to call setDataSource().
sortMode?server | localHow sort changes affect the cache. - 'server' (default): purge cache and refetch via getRows({ sortModel }). Use when the backend supports the requested sort shape natively. - 'local': keep the loaded blocks; sort the loaded rows in-place via the active sort plugin (MultiSort or core sort). sortModel is not sent on subsequent block fetches. Placeholder rows (__loading: true) are pinned to the end regardless of direction.
filterMode?server | localHow filter changes affect the cache. - 'server' (default): purge cache and refetch via getRows({ filterModel }). - 'local': keep the loaded blocks; filter only the rows currently in cache via FilteringPlugin’s normal pipeline. filterModel is not sent on subsequent block fetches.
import '@toolbox-web/grid';
import '@toolbox-web/grid/features/server-side';
grid.gridConfig = {
columns: [...],
features: {
serverSide: {
pageSize: 50,
dataSource: {
async getRows(params) {
const response = await fetch(
`/api/data?start=${params.startNode}&end=${params.endNode}`
);
const data = await response.json();
return { rows: data.rows, totalNodeCount: data.total };
},
},
},
},
};

Extends BaseGridPlugin

Inherited methods like attach(), detach(), afterRender(), etc. are documented in the base class.

Set the data source for server-side loading.

setDataSource(dataSource: ServerSideDataSource): void
NameTypeDescription
dataSourceServerSideDataSourceData source implementing the getRows method (and optionally getChildRows)

Refresh all data from the server. Purges cache and refetches from block 0.

refresh(): void

Clear all cached data without refreshing.

purgeCache(): void

Get the total node count from the server.

getTotalNodeCount(): number

⚠️ Deprecated: Use getTotalNodeCount instead. Will be removed in a future version.

getTotalRowCount(): number

Check if a specific node is loaded in the cache.

isNodeLoaded(nodeIndex: number): boolean
NameTypeDescription
nodeIndexnumberNode index to check

⚠️ Deprecated: Use isNodeLoaded instead. Will be removed in a future version.

isRowLoaded(rowIndex: number): boolean
NameTypeDescription
rowIndexnumber

Get the number of loaded cache blocks.

getLoadedBlockCount(): number

AI assistants: For complete API documentation, implementation guides, and code examples for this library, see https://raw.githubusercontent.com/OysteinAmundsen/toolbox/main/llms-full.txt