Showing 12 rows across 10 visible columns.
Use arrow keys to move between cells. A cell whose only content is a single button or link focuses it directly. In cells with several controls, press Enter to interact with them, Tab to move forward between them, Shift+Tab to move backward, and Escape to return to the cell.
Row actions | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Summit Crest | Summit Crest Logistics | Online | West | 5 | Jun 1 | $1,500 | |||
| Beacon Tech | Beacon Tech Labs | Retail | Midwest | 12 | Jun 2 | $5,400 | |||
| Horizon Ventures | Horizon Ventures Group | Wholesale | Northeast | 19 | Jun 3 | $11,400 | |||
| Vanguard Systems | Vanguard Systems Corp | Online | South | 26 | Jun 4 | $19,500 | |||
| Zenith Logistics | Zenith Logistics Services | Retail | West | 33 | Jun 5 | $29,700 | |||
| Quantum Energy | Quantum Energy Group | Wholesale | Midwest | 40 | Jun 6 | $42,000 | |||
| Pacific Trade | Pacific Trade & Supply | Online | Northeast | 47 | Jun 7 | $56,400 | |||
| Caliber Manufacturing | Caliber Manufacturing Co | Retail | South | 9 | Jun 8 | $12,150 | |||
| Summit Crest | Summit Crest Logistics | Wholesale | West | 16 | Jun 9 | $24,000 | |||
| Beacon Tech | Beacon Tech Labs | Online | Midwest | 23 | Jun 10 | $37,950 | |||
| Horizon Ventures | Horizon Ventures Group | Retail | Northeast | 30 | Jun 11 | $9,000 | |||
| Vanguard Systems | Vanguard Systems Corp | Wholesale | South | 37 | Jun 12 | $16,650 |
<!-- Same surface, same state — swap the interaction model. -->
<nat-table-surface [enableSorting]="true" [(state)]="state">
@if (view() === 'grid') {
<nat-table [columns]="columns" [data]="rows" accessibleName="Orders" />
} @else {
<nat-table-static [columns]="columns" [data]="rows" accessibleName="Orders" />
}
</nat-table-surface>// component.ts — both renderers consume the same engine state, so sorting and
// pinning survive the swap. The static table keeps native table semantics and
// natural tab order; it has no grid keyboard model.
protected readonly view = signal<'grid' | 'static'>('grid');
// The actions column starts right-pinned; pinning is engine state, so it
// renders sticky in both interaction models.
protected readonly state = signal<Partial<NatTableUserState>>({
columnPinning: { left: [], right: ['actions'] }
});
// A plain-button actions column renders in both interaction models. (Cells
// built on ngGridCellWidget need the grid context and cannot render in the
// static table.)
const actionsColumn: ColumnDef<Order, unknown> = {
id: 'actions',
header: 'Actions',
enableSorting: false,
cell: (info) =>
flexRenderComponent(OrderActionButton, {
inputs: { orderId: info.row.original.id },
outputs: { viewOrder: (orderId) => this.onViewOrder(orderId) }
})
};