CtrlK
BlogDocsLog inGet started
Tessl Logo

grouping

Group rows with columnGroupingFeature, groupedRowModel, groupedColumnMode, and manualGrouping. Load for grouped or placeholder cells and grouping interactions with expansion or pagination.

68

Quality

84%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

This skill builds on core, table-features, and client-vs-server. Grouping creates row structure and the renderer chooses grouped-cell UI. Load the separate aggregation skill when grouped rows should also calculate values.

Setup

import {
  columnGroupingFeature,
  createGroupedRowModel,
  tableFeatures,
} from '@tanstack/table-core'

export const features = tableFeatures({
  columnGroupingFeature,
  groupedRowModel: createGroupedRowModel(),
})

Core Patterns

const options = { groupedColumnMode: 'reorder' as const }
const mode = cell.getIsGrouped()
  ? 'grouped'
  : cell.getIsPlaceholder()
    ? 'placeholder'
    : 'value'

Render these cell modes deliberately.

Common Mistakes

[HIGH] Registering processing without grouping

Wrong: tableFeatures({ groupedRowModel: createGroupedRowModel() })

Correct: tableFeatures({ columnGroupingFeature, groupedRowModel: createGroupedRowModel() })

The grouped row-model slot requires columnGroupingFeature.

Source: packages/table-core/src/types/TableFeatures.ts#FeatureSlotPrereqs

[HIGH] Treating rendered rows as underlying records

Wrong: const leafCount = table.getRowModel().flatRows.filter(row => !row.subRows.length).length

Correct:

const countLeafRows = (rows: typeof groupRow.subRows): number =>
  rows.reduce(
    (count, row) =>
      count + (row.subRows.length ? countLeafRows(row.subRows) : 1),
    0,
  )
const leafCount = countLeafRows(groupRow.subRows)

Count descendants from one group row rather than the flattened render model, where group rows and expanded rows may both appear. The current table.getRowModel().rows is render order, while original dataset counts come from the data owner.

Source: docs/framework/react/guide/grouping.md

[HIGH] Rendering every cell identically

Wrong: render(cell.getValue())

Correct: render(cell.getIsPlaceholder() ? null : cell.getValue())

Placeholder cells do not represent ordinary leaf values. Group rows should only render their grouped cell when aggregation is not enabled.

Source: examples/react/grouping/src/main.tsx

API Discovery

Inspect node_modules/@tanstack/table-core/dist/features/column-grouping/ for grouping. Load the aggregation skill when totals, multiple aggregations, grouped aggregate values, or custom definitions are part of the task.

Repository
TanStack/table
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.