Skip to the content.

Svelte table component

Props

  columns: Array<{
    key: string,
    title: string,
    sortable?: boolean // set to false to disable sorting for one column (default: true)
    sortBy?: (a,b) => number // set custom sorting method
  }>

  rows: Array<T = unknown>

  classes?: {
      'table'?: string
      'thead'?: string
      'headtr'?: string
      'th'?: string
      'tbody'?: string
      'tr'?: string
      'tr-expanded'?: string
      'td'?: string
      'cell'?: string
      'helpButton'?: string
      'sortingButton'?: string
      'paginationContainer'?: string
      'paginationInfo'?: string
      'paginationButtons'?: string,
  }

  isSortable?: boolean // if set to false will disable sorting on _all_ columns (default true)
  rowsPerPage?: number // used to enable pagination
  currentPage?: number // used to manually overwrite (see async pagination)
  asyncPagination?: boolean // used to disable slicing of rows array in order to simulate pagination
  from?: number // used to manually overwrite (see async pagination)
  to?: number // used to manually overwrite (see async pagination)
  totalItems?: number // used to manually overwrite (see async pagination)
  totalPages?: number // used to manually overwrite (see async pagination)

Pagination

Slots


Examples

Simple table

import { SvelteTable } from '@hurtigruten/svelte-table';

let rows = [
  { Id: 1, FirstName: 'Adam', LastName: 'Smith' },
  { Id: 2, FirstName: 'Eva', LastName: 'Adams' },
  { Id: 3, FirstName: 'George', LastName: 'Brown' }
];
const columns = [
  {
    key: 'Id',
    title: 'ID',
    sortable: false
  },
  {
    key: 'FirstName',
    title: 'First name'
  },
  {
    key: 'LastName',
    title: 'Last name'
  }
];
<SvelteTable {columns} {rows} styles= />

Table with components

<!-- ValidIcon component -->
<script>
  export let isChecked;
</script>

<span> {#if cell} ✅ {:else} 🛑 {/if} </span>
import { SvelteTable } from '@hurtigruten/svelte-table';
import FullName from './FullName.svelte';

let rows = [];
const columns = [
  {
    key: 'Id',
    title: 'ID',
    sortable: true
  },
  {
    key: 'FullName',
    title: 'Full name',
  },
  {
    key: 'Validated'
    title: 'Validated'
  }
];

You can pass a custom Svelte component or inline HTML inside of the slot="cell" element.

Simply use a {#if column.key...}, for conditional rendering og elements.

<SvelteTable {columns} {rows} styles=
  let:cell
  let:column
  let:row
  />
  <div slot="cell>
  {#if column.key === "FullName"}
    <span>{row.firstName} {row.lastName}</span>
  {:else if column.key === "Validated"}
    <ValidIcon isChecked={cell} />
  {:else}
  <span>{cell}</span>
  {/if}
 </div>
</SvelteTable>