Pagination
In order to enable pagination for the table a prop rowsPerPage must be passed with a number value.
Default pagination
The default pagination uses Pagination.svelte component to display four buttons: “First”, “Prev”, “Next”, “Last” and “{from}-{to} of {totalItems}” in the middle.
Customizing
To customize those components add classes to the classes prop passed to the Table component:
{
paginationContainer: '',
paginationInfo: '',
paginationButtons: ''
}
Example
const classes = {
paginationContainer: 'bg-blue-200',
paginationInfo: 'flex items-center',
paginationButtons: 'rounded'
};
<SvelteTable
rowsPerPage="{3}"
{classes}
{rows}
{columns}
let:nextPage
let:prevPage
let:enabled
let:currentPage
let:totalPage
/>
Custom pagination component
If you want more customization options for the pagination component you can insert your own component in a pagination slot.
Read more about the pagination slot
Example
<SvelteTable
rowsPerPage="{3}"
{rows}
{columns}
let:nextPage
let:prevPage
let:enabled
let:currentPage
let:totalPages
>
<div slot="pagination">
<button disabled="{!enabled.prevPage}" on:click="{prevPage}">
Previous
</button>
<p>Showing page {currentPage} of {totalPages}</p>
<button disabled="{!enabled.nextPage}" on:click="{nextPage}">Next</button>
</div>
</SvelteTable>
Async pagination example
In order to manage a server-side pagination, where you fire a request each time the user changes the page you will need to control the totalItems and currentPage props manually. asyncPagination prop must be set to true, so the table doesn’t just slice the received rows, but waits for an update instead. You can then listen on changes made to currentPage and react to them.
Example
<script>
const columns = [......];
let rows = [......];
let currentPage = 1;
let totalItems = 0;
let rowsPerPage = 5;
const handlePageChange = async (page) => {
const skip = (page - 1) * rowsPerPage;
const response = await fetch(`YOUR_API?skip=${skip}&take=${rowsPerPage}`);
rows = response.data;
totalItems = response.totalCount;
};
$: handlePageChange(currentPage);
</script>
<SvelteTable
asyncPagination
bind:currentPage
{totalItems}
{rowsPerPage}
{rows}
{columns}
/>