Home / Function/ TableSort() — supabase Function Reference

TableSort() — supabase Function Reference

Architecture documentation for the TableSort() function in table-sort.tsx from the supabase codebase.

Entity Profile

Relationship Graph

Source Code

apps/design-system/registry/default/example/table-sort.tsx lines 62–142

export default function TableSort() {
  const [sort, setSort] = useState<ProductSort>('name:asc')

  const handleSortChange = (column: ProductSortColumn) => {
    const [currentCol, currentOrder] = sort.split(':') as [ProductSortColumn, ProductSortOrder]
    if (currentCol === column) {
      // Cycle through: asc -> desc -> no sort (default)
      if (currentOrder === 'asc') {
        setSort(`${column}:desc` as ProductSort)
      } else {
        // Reset to default sort (name:asc)
        setSort('name:asc')
      }
    } else {
      // New column, start with asc
      setSort(`${column}:asc` as ProductSort)
    }
  }

  const sortedProducts = useMemo(() => {
    const [sortCol, sortOrder] = sort.split(':') as [ProductSortColumn, ProductSortOrder]
    const orderMultiplier = sortOrder === 'asc' ? 1 : -1

    return [...products].sort((a, b) => {
      if (sortCol === 'name') {
        return a.name.localeCompare(b.name) * orderMultiplier
      }
      if (sortCol === 'category') {
        return a.category.localeCompare(b.category) * orderMultiplier
      }
      if (sortCol === 'price') {
        return (a.price - b.price) * orderMultiplier
      }
      return 0
    })
  }, [sort])

  return (
    <Card className="w-full">
      <Table>
        <TableHeader>
          <TableRow>
            <TableHead>
              <TableHeadSort column="name" currentSort={sort} onSortChange={handleSortChange}>
                Product
              </TableHeadSort>
            </TableHead>
            <TableHead>
              <TableHeadSort column="category" currentSort={sort} onSortChange={handleSortChange}>
                Category
              </TableHeadSort>
            </TableHead>
            <TableHead className="hidden md:table-cell">Description</TableHead>
            <TableHead className="text-right">
              <TableHeadSort
                className="justify-end"
                column="price"
                currentSort={sort}
                onSortChange={handleSortChange}
              >
                Price
              </TableHeadSort>
            </TableHead>
          </TableRow>
        </TableHeader>
        <TableBody>
          {sortedProducts.map((product) => (
            <TableRow key={product.name}>
              <TableCell className="text-foreground">{product.name}</TableCell>
              <TableCell className="text-foreground-lighter">{product.category}</TableCell>
              <TableCell className="hidden md:table-cell text-foreground-muted">
                {product.description}
              </TableCell>
              <TableCell className="text-right">${product.price.toFixed(2)}</TableCell>
            </TableRow>
          ))}
        </TableBody>
      </Table>
    </Card>
  )
}

Domain

Subdomains

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free