Reactivity example with a simple CRUD

This example uses Svelte runes to mimic interactions with a Rest API.

ID
First name
Last name
Email
1SallyannCurnnokkscurnnokk0@fc2.com
2AlixLavignealavigne1@telegraph.co.uk
3BeliaGormanbgorman2@odnoklassniki.ru
4WesGullyeswgullyes3@netscape.com
5KarlynHaltkhalt4@upenn.edu
6MeggiYoungemyounge5@blogs.com
7DouglassKynddkynd6@godaddy.com
8JessePattemorejpattemore7@mozilla.org
9EttiGowrichegowrich8@google.ca
10MeaghanPetrinampetrina9@merriam-webster.com

Update rows after invalidation

<script lang="ts">
    import { TableHandler, Row } from '@vincjo/datatables'
    let { data }: { data: Row[] } = $props()

    const table = new TableHandler(data, { rowsPerPage: 20 })

    $effect(() => {
        data
        table.rows = data
    })
</script>


Maintain vertical scroll state after update

<script lang="ts">
    import { TableHandler, Row } from '@vincjo/datatables'
    let { data }: { data: Row[] } = $props()

    let element: HTMLElement | undefined

    const table = new TableHandler(data, { rowsPerPage: 20 })

    $effect(() => {
        data
        update()
    })

    const update = () => {
        if (element) {
            const scrollTop = element.parentNode.scrollTop
            table.rows = data
            setTimeout(() => {
                element.parentNode.scrollTop = scrollTop
            }, 2)
        }
    }
</script>

<Datatable {table}>
    <table bind:this={element}>
        [...]
    </table>
</Datatable>