From f0cbad9e0f26ffb14cdadcd58c01abc4bdd11944 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sun, 7 May 2023 20:55:00 +0100 Subject: [PATCH] feature: Allow conditional layout relationships --- .../EntanglesStateWithSingularRelationship.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/forms/src/Components/Concerns/EntanglesStateWithSingularRelationship.php b/packages/forms/src/Components/Concerns/EntanglesStateWithSingularRelationship.php index 882cf750f7..d01f790f77 100644 --- a/packages/forms/src/Components/Concerns/EntanglesStateWithSingularRelationship.php +++ b/packages/forms/src/Components/Concerns/EntanglesStateWithSingularRelationship.php @@ -24,7 +24,7 @@ trait EntanglesStateWithSingularRelationship protected ?Closure $mutateRelationshipDataBeforeSaveUsing = null; - public function relationship(string $relationshipName): static + public function relationship(string $relationshipName, bool | Closure $saveCondition = true): static { $this->relationship = $relationshipName; $this->statePath($relationshipName); @@ -35,7 +35,11 @@ trait EntanglesStateWithSingularRelationship $component->fillFromRelationship(); }); - $this->saveRelationshipsBeforeChildrenUsing(static function (Component | CanEntangleWithSingularRelationships $component, HasForms $livewire): void { + $this->saveRelationshipsBeforeChildrenUsing(static function (Component | CanEntangleWithSingularRelationships $component, HasForms $livewire) use ($saveCondition): void { + if (! $component->evaluate($saveCondition)) { + return; + } + $relationship = $component->getRelationship(); if ($relationship instanceof BelongsTo) { @@ -67,7 +71,11 @@ trait EntanglesStateWithSingularRelationship $component->cachedExistingRecord($record); }); - $this->saveRelationshipsUsing(static function (Component | CanEntangleWithSingularRelationships $component, HasForms $livewire): void { + $this->saveRelationshipsUsing(static function (Component | CanEntangleWithSingularRelationships $component, HasForms $livewire) use ($saveCondition): void { + if (! $component->evaluate($saveCondition)) { + return; + } + $data = $component->getChildComponentContainer()->getState(shouldCallHooksBefore: false); $record = $component->getCachedExistingRecord();