Skip to main content

Table Setup

To use the DataTable, provide it with an array of objects (tableData) and an array of column definitions (columns).

Basic Example

warning

DataTable rerender is a resource-consuming operation. To provide the best UX, maintain referential equality for component props. I.e. wrap objects with useMemo and functions with useCallback.

Result
Loading...
Live Editor
// import { DataTable } from 'koval-ui';

function Example() {
  const columns = useMemo(
    () => [
      {
        id: 'firstName',
        name: 'First Name',
        accessorKey: 'firstName',
      },
      {
        id: 'lastName',
        name: 'Last Name',
        accessorKey: 'lastName',
      },
      {
        id: 'role',
        name: 'Role',
        accessorKey: 'role',
      },
      {
        id: 'company',
        name: 'Company',
        accessorKey: 'business.companyName', // access nested data
      },
      {
        id: 'country',
        name: 'Country',
        accessorKey: 'address.country',
      },
    ],
    []
  );
  const data = useMemo(
    () => [
      {
        firstName: 'Sidoney',
        lastName: 'Koss',
        role: 'manager',
        address: {
          city: 'New Johnathonshire',
          country: 'Tokelau',
        },
        business: {
          companyName: 'King LLC',
        },
      },
      {
        firstName: 'Elysia',
        lastName: 'Anderson',
        role: 'developer',
        address: {
          city: 'West Adelehaven',
          country: 'Gabon',
        },
        business: {
          companyName: 'Borer Group',
        },
      },
      {
        firstName: 'Celia',
        lastName: 'MacGyver',
        role: 'developer',
        address: {
          city: 'Dallinberg',
          country: 'Chad',
        },
        business: {
          companyName: 'Lind, Kirlin and Kuhic',
        },
      },
    ],
    []
  );

  return (
    <DataTable
      caption="Most Basic Table"
      tableData={data}
      columns={columns}
      tableHeight={300}
    />
  );
}

Configuring Columns

Columns map your data's properties to the table display. They must have an id, a name for the table header, and either an accessorKey or an accessorFn to resolve the data.

const columns = [
{
id: 'firstName',
name: 'First Name',
accessorKey: 'firstName',
sortable: true,
filterable: true,
},
{
id: 'age',
name: 'Age',
accessorKey: 'age',
columnType: 'decimal',
sortable: true,
},
{
id: 'country',
name: 'Country',
accessorKey: 'address.country', // access nested data
},
];

Column Interface

Each object in the columns array configures a column in the table.

id

type: string

Unique identifier for the column.

name

type: string

Human-readable title for the column header.

accessorKey

type: string

Object path to access the value in TableData (e.g. 'user.name', 'address.city'). Supports nested paths with dot notation.

accessorFn

type: AccessorFn

Function to dynamically compute the value from the row data. Use when the cell value cannot be resolved with a simple path.

const columns: Column[] = [
{
id: 'fullName',
name: 'Full Name',
accessorFn: row => `${row.firstName} ${row.lastName}`,
},
];

columnType

type: ColumnTypes

Specifies data formatting (e.g. 'text', 'decimal', 'percentage', 'currency', 'unit', 'date', 'select').

TypeDescription
textPlain text (default)
decimalFormatted decimal number
percentageFormatted percentage
currencyFormatted currency with locale-aware symbols
unitFormatted measurement with unit display
dateFormatted date/time
selectDropdown/select-style display

columnType

type: ColumnTypes

Specifies data formatting (e.g. 'text', 'decimal', 'percentage', 'currency', 'unit', 'date', 'select').

columnCell

type: CellComponent

Custom React component to render the cell.

size

type: number

Column width in pixels. Default is 166.

editable

type: boolean

Allows user editing of the column cells.

filterable

type: boolean

Enables filtering on this column.

sortable

type: boolean

Enables ascending/descending sorting.

pinnable

type: boolean

Enables freezing the column to the left/right.

sortingFn

type: SortingModes | SortingFn

Mode or function for sorting data in this column.

filterFn

type: FilterFnOption | CustomFilterFns

Mode or function for filtering data in this column.

cellProps

type: ColumnFormatOptions

Props passed to formatting cells (e.g., date formats, currencies).

headerCell

type: HeaderCell

Custom React component for the column header.

footerCell

type: FooterCell

Custom React component for the column footer.

filterInput

type: FilterInput

Custom React component for the column filter input.