Event System

Yable includes a typed event emitter for responding to table interactions.

Available Events

EventPayloadDescription
cell:clickCellClickEventCell was clicked
cell:dblclickCellClickEventCell was double-clicked
cell:contextmenuCellClickEventCell right-click
row:clickRowClickEventRow was clicked
row:dblclickRowClickEventRow was double-clicked
row:contextmenuRowClickEventRow right-click
header:clickHeaderClickEventHeader cell was clicked
header:contextmenuHeaderClickEventHeader right-click
cell:edit:startCellEditEventCell entered edit mode
cell:edit:commitCellEditEventCell edit was committed
cell:edit:cancelCellEditEventCell edit was cancelled
selection:changeSelectionChangeEventRow selection changed
sort:changeSortChangeEventSorting changed
filter:changeFilterChangeEventFilters changed
page:changePageChangeEventPagination changed
state:changeStateChangeEventAny state changed

How to Use

// Subscribe to events
const unsubscribe = table.events.on('cell:click', (event) => {
  console.log('Clicked cell:', event.column.id, event.row.original)
})

// Unsubscribe
unsubscribe()

// Or use off()
table.events.off('cell:click', handler)

// Emit custom events
table.events.emit('cell:click', {
  cell: someCell,
  row: someRow,
  column: someColumn,
})

// Remove all listeners
table.events.removeAllListeners()

Reacting to sorting changes

sort:change fires whenever sorting changes — a header click, a context-menu action, or a programmatic table.setSorting(...) — with the new sorting array. This is the idiomatic hook for AG Grid onSortChanged-style consumers:

table.events.on('sort:change', ({ sorting }) => {
  console.log('Sorting changed:', sorting) // [{ id: 'name', desc: true }]
})

Table Callback Options

You can also handle events via table options:

const table = useTable({
  data,
  columns,
  onCellClick: (event) => console.log('Cell clicked:', event),
  onRowClick: (event) => console.log('Row clicked:', event),
  onHeaderClick: (event) => console.log('Header clicked:', event),
})