kisame76/filament-tree-table
Expandable parent/child tree rows for Filament v4 and v5 tables. Show top-level parents, expand with a chevron to reveal inline child rows while search and filters stay correct. Includes expand-all/collapse-all actions and optional pagination by root.
paginateByRoot() — paginate by root node instead of by row, so a family (a root plus all of its currently visible descendants) is never split across a page boundary. Each page carries N roots (the per-page selection) plus all their visible descendants, so the row count per page varies; "Showing X to Y of Z" and the page count refer to roots. Off by default (paginate_by_root config key) to preserve the existing per-row pagination. No effect while the view is flattened (sort/filter/search), under a non-default pagination mode, or with ->paginated(false).en) and German (de) included. Publish the language files with php artisan vendor:publish --tag="filament-tree-table-translations" to add or override locales.HasExpandableRows contract gained setOrderedKeys() and setPaginateByRoot() (used by the tree internals). Implementations using the InteractsWithExpandableRows trait — the documented setup — get them automatically and need no changes.defaultSort() — set the default order for sibling rows by column name or a Closure(Builder $query, string $direction), e.g. order by a related/computed value instead of the primary key.flattenOnFilter() / flattenOnSearch() — choose whether an active filter or search drops the tree for a flat list. Both default to true (previous behaviour); set to false to keep the hierarchy..ftt-context), the way a file-tree search greys the folder path.->sortable(query: ...) closures and relationship/computed columns are honoured instead of being silently ignored.HasExpandableRows contract gained a few methods (used by the tree internals). Implementations using the InteractsWithExpandableRows trait — the documented setup — get them automatically and need no changes.toggleableColumns() / reorderableColumns() panel (where it appeared as a nameless, draggable row) and can no longer be reordered or pushed to the back by a persisted column order. It always renders as the first column.Initial release.
level/depth column required — depth is derived from parent_id.How can I help you explore Laravel packages today?