From e9734c25902013677a34899187851624b6553395 Mon Sep 17 00:00:00 2001 From: Malek Tellissi Date: Sat, 12 Sep 2026 20:20:07 +0200 Subject: [PATCH] Preserve existing origin entries when switching recipe version When the recipe is changed in a batch form, keep origin data for spices that exist in both the old and new recipe. Only add empty rows for spices that are new to the selected recipe version. Co-Authored-By: Claude Sonnet 4.6 --- app/Filament/User/Resources/BatchResource.php | 11 ++++++----- .../RelationManagers/BatchesRelationManager.php | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/Filament/User/Resources/BatchResource.php b/app/Filament/User/Resources/BatchResource.php index bd0e996..7ac9c91 100644 --- a/app/Filament/User/Resources/BatchResource.php +++ b/app/Filament/User/Resources/BatchResource.php @@ -83,17 +83,18 @@ class BatchResource extends Resource ) ->required() ->live() - ->afterStateUpdated(function ($state, $set) { + ->afterStateUpdated(function ($state, $set, $get) { if (! $state) { $set('origins', []); return; } $recipe = Recipe::with('spices')->find($state); if ($recipe) { - $set('origins', $recipe->spices->map(fn ($s) => [ - 'spice_id' => $s->id, - 'entries' => [['supplier_id' => null, 'origin_country' => null, 'farmer_id' => null, 'notes' => null]], - ])->toArray()); + $existing = collect($get('origins') ?? [])->keyBy('spice_id'); + $set('origins', $recipe->spices->map(fn ($s) => $existing->has($s->id) + ? $existing[$s->id] + : ['spice_id' => $s->id, 'entries' => [['supplier_id' => null, 'origin_country' => null, 'farmer_id' => null, 'notes' => null]]] + )->toArray()); } }), diff --git a/app/Filament/User/Resources/ProductResource/RelationManagers/BatchesRelationManager.php b/app/Filament/User/Resources/ProductResource/RelationManagers/BatchesRelationManager.php index 72a00ea..62d8263 100644 --- a/app/Filament/User/Resources/ProductResource/RelationManagers/BatchesRelationManager.php +++ b/app/Filament/User/Resources/ProductResource/RelationManagers/BatchesRelationManager.php @@ -50,7 +50,7 @@ class BatchesRelationManager extends RelationManager ->default(fn () => $this->getOwnerRecord()->recipes_id) ->required() ->live() - ->afterStateUpdated(function ($state, $set) { + ->afterStateUpdated(function ($state, $set, $get) { if (! $state) { $set('origins', []); return; @@ -59,10 +59,11 @@ class BatchesRelationManager extends RelationManager if (! $recipe) { return; } - $set('origins', $recipe->spices->map(fn ($s) => [ - 'spice_id' => $s->id, - 'entries' => [['supplier_id' => null, 'origin_country' => null, 'farmer_id' => null, 'notes' => null]], - ])->toArray()); + $existing = collect($get('origins') ?? [])->keyBy('spice_id'); + $set('origins', $recipe->spices->map(fn ($s) => $existing->has($s->id) + ? $existing[$s->id] + : ['spice_id' => $s->id, 'entries' => [['supplier_id' => null, 'origin_country' => null, 'farmer_id' => null, 'notes' => null]]] + )->toArray()); }), Forms\Components\TextInput::make('units_produced')