Table behavior
Table capabilities are server-described. React only exposes controls that the Table definition permits, and Laravel validates requested state before executing it.
Global search
Section titled “Global search”Enable search per Column:
TextColumn::make('name', 'Name')->searchable();TextColumn::make('email', 'Email')->searchable();Or make all Columns searchable by default:
UsersTable::make('users')->searchableColumns();Global search is bounded to searchable Columns. For custom storage, use a Column’s searchUsing()
and declare its supported source kinds. Incoming search is normalized and applied after filters but
before sorting. Search input may contain at most 500 Unicode code points.
Sorting
Section titled “Sorting”Sorting is enabled for the Table by default, but a Column must be sortable:
TextColumn::make('name', 'Name')->sortable();Configure Table-level behavior:
UsersTable::make('users') ->sorting() ->multiSort() ->initialSort('name');For multiple initial rules, pass an array in the canonical order expected by your application.
Disable the feature with sorting(false) or multiple sorting with multiSort(false).
Choose one ordering owner for a Table:
- Source-owned order: keep an intentional query order such as
User::query()->latest()and usesorting(false). InertiaX preserves that base order. - Table-owned order: return an unordered base query, mark Columns sortable, and use
initialSort()when an initial order is required.
Avoid combining a base-query order with interactive Table sorting. InertiaX qualifies the physical columns it orders (including the row-key tie-breaker) for joined queries, but it does not clear, inspect, warn about, or reinterpret application-owned ordering.
Pagination
Section titled “Pagination”Pagination defaults to 10 rows with [10, 25, 50, 100] as available page sizes:
UsersTable::make('users') ->pageSize(25) ->pageSizeOptions([10, 25, 50]);Use pagination(false) only for a bounded result that should be sent and shown in full. Eloquent
pagination happens in the database; Collection pagination slices the processed in-memory result.
Selection
Section titled “Selection”Selection is disabled by default:
use InertiaX\Components\Table\Enums\SelectionMode;
UsersTable::make('users') ->selection() ->selectionMode(SelectionMode::Multiple);The exact backed values are also accepted at this fluent boundary, so
selectionMode('single') is equivalent to selectionMode(SelectionMode::Single). Invalid strings
fail immediately. Protected class defaults remain enum-typed.
Use SelectionMode::Single when only one row may be selected. Selection is client state exposed
through the Table controller and events; it does not execute a domain action by itself.
Stable row identity is required for selection.
Column visibility and copying
Section titled “Column visibility and copying”Opt individual Columns into user-controlled visibility or copying:
TextColumn::make('email', 'Email')->toggleable()->copyable();Use visible(false) for a Column that starts hidden but can be revealed when it is also toggleable.
Table-wide toggleableColumns(), visibleColumns(), and copyableColumns() set defaults for every
Column.
Refresh control
Section titled “Refresh control”The built-in refresh button is enabled by default. Hide it with:
UsersTable::make('users')->refreshButton(false)Refresh keeps the current Table state and asks the integration for fresh rows.
Defaults at a glance
Section titled “Defaults at a glance”| Capability | Default |
|---|---|
| Sorting engine | enabled |
| Multi-sort | enabled |
| Individual sortable Columns | disabled |
| Pagination | enabled, 10 rows |
| Selection | disabled |
| Auto filters | enabled for filterable Columns |
| Advanced filter mode | disabled |
| Refresh button | enabled |
| Searchable/copyable/toggleable Columns | disabled |
Make capabilities explicit on reusable Table classes when the defaults are part of your application’s user experience.