From bf2d63d32ea26963109cefca8fb0763fd7233384 Mon Sep 17 00:00:00 2001 From: Guilherme Saade Date: Wed, 10 Sep 2025 13:49:52 -0300 Subject: [PATCH] feat: add repeater item numbers --- packages/forms/docs/03-fields/12-repeater.md | 14 ++++++++++++++ .../views/components/repeater/index.blade.php | 5 +++++ packages/forms/src/Components/Repeater.php | 14 ++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/packages/forms/docs/03-fields/12-repeater.md b/packages/forms/docs/03-fields/12-repeater.md index 992dd2466b..16d18a94ad 100644 --- a/packages/forms/docs/03-fields/12-repeater.md +++ b/packages/forms/docs/03-fields/12-repeater.md @@ -435,6 +435,20 @@ Any fields that you use from `$state` should be `live()` if you wish to see the +## Numbering repeater items + +Unlike Builders, items in the repeater don't have a number next to their label by default. You may enable this using the `itemNumbers(true)` method: + +```php +use Filament\Forms\Components\Repeater; + +Repeater::make('members') + ->schema([ + // ... + ]) + ->itemNumbers(true) +``` + ## Simple repeaters with one field You can use the `simple()` method to create a repeater with a single field, using a minimal design diff --git a/packages/forms/resources/views/components/repeater/index.blade.php b/packages/forms/resources/views/components/repeater/index.blade.php index 1c77f4709a..c025d3ee1c 100644 --- a/packages/forms/resources/views/components/repeater/index.blade.php +++ b/packages/forms/resources/views/components/repeater/index.blade.php @@ -79,6 +79,7 @@ @foreach ($containers as $uuid => $item) @php $itemLabel = $getItemLabel($uuid); + $hasItemNumbers = $hasItemNumbers(); $visibleExtraItemActions = array_filter( $extraItemActions, fn (Action $action): bool => $action(['item' => $uuid])->isVisible(), @@ -154,6 +155,10 @@ ]) > {{ $itemLabel }} + + @if ($hasItemNumbers) + {{ $loop->iteration }} + @endif @endif diff --git a/packages/forms/src/Components/Repeater.php b/packages/forms/src/Components/Repeater.php index a49e432817..82fbdc5534 100644 --- a/packages/forms/src/Components/Repeater.php +++ b/packages/forms/src/Components/Repeater.php @@ -54,6 +54,8 @@ class Repeater extends Field implements Contracts\CanConcealComponents, Contract protected string | Closure | null $itemLabel = null; + protected bool | Closure $hasItemNumbers = false; + protected Field | Closure | null $simpleField = null; protected Alignment | string | Closure | null $addActionAlignment = null; @@ -1014,6 +1016,13 @@ class Repeater extends Field implements Contracts\CanConcealComponents, Contract return $this; } + public function itemNumbers(bool | Closure $condition = true): static + { + $this->hasItemNumbers = $condition; + + return $this; + } + public function fillFromRelationship(): void { $this->state( @@ -1140,6 +1149,11 @@ class Repeater extends Field implements Contracts\CanConcealComponents, Contract return $this->itemLabel !== null; } + public function hasItemNumbers(): bool + { + return (bool) $this->evaluate($this->hasItemNumbers); + } + public function simple(Field | Closure | null $field): static { $this->simpleField = $field;