Skip to content

@sqlrooms/data-table

A high-performance data table component library for SQLRooms applications. This package provides flexible and feature-rich table components for displaying and interacting with large datasets, with special support for Apache Arrow data structures.

Features

  • 📊 Multiple Table Variants: Paginated, virtualized, and query-specific tables
  • 🚀 High Performance: Optimized for handling large datasets efficiently
  • 🏹 Arrow Integration: Native support for Apache Arrow data structures
  • 🔍 Sorting & Filtering: Built-in data manipulation capabilities
  • 📱 Responsive Design: Tables that work well on all screen sizes
  • 🎨 Customizable: Flexible styling and configuration options

Installation

bash
npm install @sqlrooms/data-table
# or
yarn add @sqlrooms/data-table

Basic Usage

Paginated Data Table

tsx
import {DataTablePaginated} from '@sqlrooms/data-table';

function MyDataTable() {
  const data = [
    {id: 1, name: 'Alice', age: 28},
    {id: 2, name: 'Bob', age: 34},
    {id: 3, name: 'Charlie', age: 42},
    // More data...
  ];

  const columns = [
    {accessorKey: 'id', header: 'ID'},
    {accessorKey: 'name', header: 'Name'},
    {accessorKey: 'age', header: 'Age'},
  ];

  return (
    <DataTablePaginated
      data={data}
      columns={columns}
      pageSize={10}
      enableSorting
      enableFiltering
    />
  );
}

Virtualized Data Table for Large Datasets

tsx
import {DataTableVirtualized} from '@sqlrooms/data-table';

function LargeDataTable() {
  // Imagine this is a very large dataset
  const largeDataset = generateLargeDataset(10000);

  const columns = [
    {accessorKey: 'id', header: 'ID'},
    {accessorKey: 'name', header: 'Name'},
    {accessorKey: 'email', header: 'Email'},
    {accessorKey: 'status', header: 'Status'},
    {accessorKey: 'lastActive', header: 'Last Active'},
  ];

  return (
    <DataTableVirtualized
      data={largeDataset}
      columns={columns}
      height={500}
      width="100%"
    />
  );
}

Working with SQL Query Results

tsx
import {QueryDataTable} from '@sqlrooms/data-table';
import {useSql} from '@sqlrooms/duckdb';

function QueryResultsTable() {
  const {data, isLoading, error} = useSql({
    query:
      'SELECT id, name, email, created_at FROM users ORDER BY created_at DESC',
  });

  if (isLoading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;
  if (!data) return null;

  return <QueryDataTable data={data} />;
}

Using with Apache Arrow

tsx
import {useArrowDataTable} from '@sqlrooms/data-table';
import {Table} from 'apache-arrow';

function ArrowTable({arrowTable}: {arrowTable: Table}) {
  const {columns, data} = useArrowDataTable(arrowTable);

  return <DataTablePaginated columns={columns} data={data} pageSize={25} />;
}

Advanced Features

  • Custom Cell Rendering: Define custom renderers for specific cell types
  • Row Selection: Enable row selection with checkboxes
  • Expandable Rows: Show additional details in expandable row sections
  • Column Resizing: Allow users to resize columns
  • Export Options: Export table data to CSV or other formats
  • Theming: Customize the appearance to match your application

For more information, visit the SQLRooms documentation.

Type Aliases

Functions