Pagination server side
Efficiently handle and display huge datasets by implementing server-side pagination, reducing load times and improving performance.
Example
Id
Name
Category
Price Retail
Status
1
Luxurious Bamboo Tuna
Clothing
266.92
discontinued
2
Fantastic Bronze Table
Sports
124.8
low-stock
3
Handcrafted Concrete Cheese
Home & Garden
480.58
in-stock
4
Ergonomic Steel Cheese
Clothing
127.56
low-stock
5
Sleek Concrete Hat
Sports
77.61
in-stock
6
Modern Gold Salad
Home & Garden
321.32
in-stock
7
Gorgeous Aluminum Cheese
Clothing
41.82
low-stock
8
Handmade Plastic Shirt
Sports
487.32
low-stock
9
Ergonomic Wooden Keyboard
Sports
485.29
in-stock
10
Frozen Bamboo Soap
Electronics
165.47
in-stock
Per page:
Showing
1
to
10
of 1000 rows
{ "page": 1, "pageSize": 10, "pageSizes": [ 10, 20, 50, 100 ], "pageCount": 100 }
{#each datagrid.columns.getLeafColumnsInOrder() as column}
{@render LeafHeader(column)}
{/each}
{#each datagrid.rows.getPaginatedRows() as row}
{#if !row.isGroupRow()}
{#each datagrid.columns.getLeafColumnsInOrder() as column}
{@render RenderBodyCell(column, row)}
{/each}
{:else}{/if}
{/each}
Per page:
Showing
{(datagrid.features.pagination.page - 1) * datagrid.features.pagination.pageSize + 1}
to
{Math.min(
datagrid.features.pagination.page * datagrid.features.pagination.pageSize,
data.totalCount
)}
of {data.totalCount} rows
{JSON.stringify( { page: datagrid.features.pagination.page, pageSize: datagrid.features.pagination.pageSize, pageSizes: datagrid.features.pagination.pageSizes, pageCount: datagrid.features.pagination.pageCount }, null, 2 )}
{getCellContent(column, row.original)}
{/snippet}
{#snippet LeafHeader(column: LeafColumn)}
{#if column.isVisible()}
{column.header}
+Page.ts example
import { inventoryData } from "$lib/data/data-storage.svelte.js";
import { error } from '@sveltejs/kit';
// Helper function to add sleep (delay)
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
export const load = async ({ url, params }) => {
try {
// Sleep for 100ms before proceeding
await sleep(1000);
// Pagination logic for inventory
const page = Number(url.searchParams.get('page') || 1);
const pageSize = Number(url.searchParams.get('pageSize') || 10);
const totalInventory = inventoryData;
const startIndex = (page - 1) * pageSize;
const endIndex = startIndex + pageSize;
return {
inventory: totalInventory.slice(startIndex, endIndex),
totalCount: totalInventory.length,
currentPage: page,
pageSize: pageSize,
};
} catch (e) {
console.error(e);
error(404, 'something went wrong');
}
};