Skip to content

Commit 6261ad3

Browse files
committed
fixes
1 parent 44cb4d6 commit 6261ad3

File tree

6 files changed

+48
-60
lines changed

6 files changed

+48
-60
lines changed

src/Fields/Field.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -462,15 +462,25 @@ public function value(?Closure $callback = null): static
462462
}
463463

464464
/**
465-
* Resolve the value.
465+
* Hydrate the model from the old value.
466466
*/
467-
public function resolveValue(Request $request, Model $model): mixed
467+
public function hydrateFromRequest(Request $request, Model $model): void
468468
{
469469
once(function () use ($request, $model): void {
470-
if ($this->withOldValue && $request->session()->hasOldInput($this->getRequestKey())) {
470+
if (in_array($request->method(), ['POST', 'PATCH']) && $request->isTurboFrameRequest()) {
471+
$this->resolveHydrate($request, $model, $this->getValueForHydrate($request));
472+
} elseif ($this->withOldValue && $request->session()->hasOldInput($this->getRequestKey())) {
471473
$this->resolveHydrate($request, $model, $this->getOldValue($request));
472474
}
473475
});
476+
}
477+
478+
/**
479+
* Resolve the value.
480+
*/
481+
public function resolveValue(Request $request, Model $model): mixed
482+
{
483+
$this->hydrateFromRequest($request, $model);
474484

475485
$value = $this->getValue($model);
476486

src/Fields/Fields.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ public function persist(Request $request, Model $model): void
3737
});
3838
}
3939

40+
/**
41+
* Hydrate the model from the request.
42+
*/
43+
public function hydrateFromRequest(Request $request, Model $model): static
44+
{
45+
return $this->each(static function (Field $field) use ($request, $model): void {
46+
$field->hydrateFromRequest($request, $model);
47+
});
48+
}
49+
4050
/**
4151
* Filter the fields that are available for the current request and model.
4252
*/

src/Fields/Relation.php

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -849,24 +849,6 @@ public function formResponse(Request $request, Model $model): Response
849849
->with('alerts.relation-saved', Alert::success(__('The relation has been saved!')));
850850
}
851851

852-
/**
853-
* Hydrate the model with the request data.
854-
*/
855-
public function handleHydrateRequest(Request $request, Model $model, Model $related): void
856-
{
857-
DB::transaction(function () use ($request, $model, $related): void {
858-
$related->setRelation('related', $model);
859-
860-
$this->resolveFields($request)
861-
->authorized($request, $related)
862-
->visible($request->isMethod('POST') ? 'create' : 'update')
863-
->subResource(false)
864-
->each(static function (Field $field) use ($request, $related): void {
865-
$field->resolveHydrate($request, $related, $field->getValueForHydrate($request));
866-
});
867-
});
868-
}
869-
870852
/**
871853
* Handle the saved form event.
872854
*/
@@ -1168,8 +1150,9 @@ public function toCreate(Request $request, Model $model): array
11681150
'method' => 'POST',
11691151
'fields' => $this->resolveFields($request)
11701152
->subResource(false)
1171-
->authorized($request, $related)
11721153
->visible('create')
1154+
->hydrateFromRequest($request, $related)
1155+
->authorized($request, $related)
11731156
->mapToInputs($request, $related),
11741157
]);
11751158
}
@@ -1216,8 +1199,9 @@ public function toEdit(Request $request, Model $model, Model $related): array
12161199
'uploads' => $this->hasFileField($request),
12171200
'fields' => $this->resolveFields($request)
12181201
->subResource(false)
1219-
->authorized($request, $related)
12201202
->visible('update')
1203+
->hydrateFromRequest($request, $related)
1204+
->authorized($request, $related)
12211205
->mapToInputs($request, $related),
12221206
'abilities' => array_merge(
12231207
$this->mapRelationAbilities($request, $model),

src/Http/Controllers/RelationController.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Illuminate\Http\RedirectResponse;
1111
use Illuminate\Http\Request;
1212
use Illuminate\Http\Response;
13+
use Illuminate\Support\Facades\DB;
1314
use Illuminate\Support\Facades\Redirect;
1415
use Illuminate\Support\Facades\Response as ResponseFactory;
1516

@@ -125,15 +126,13 @@ public function hydrate(Request $request, Model $model, Model $related): Respons
125126
/** @var \Cone\Root\Fields\Relation $field */
126127
$field = $request->route('field');
127128

128-
$field->handleHydrateRequest($request, $model, $related);
129+
return DB::transaction(static function () use ($request, $model, $related, $field): Response {
130+
$data = match (true) {
131+
$model->exists => $field->toEdit($request, $model, $related),
132+
default => $field->toCreate($request, $model),
133+
};
129134

130-
$data = match (true) {
131-
$model->exists => $field->toEdit($request, $model, $related),
132-
default => $field->toCreate($request, $model),
133-
};
134-
135-
return ResponseFactory::view(
136-
'root::resources.form-turbo-frame', $data
137-
);
135+
return ResponseFactory::view('root::resources.form-turbo-frame', $data);
136+
});
138137
}
139138
}

src/Http/Controllers/ResourceController.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Illuminate\Http\RedirectResponse;
1212
use Illuminate\Http\Request;
1313
use Illuminate\Http\Response;
14+
use Illuminate\Support\Facades\DB;
1415
use Illuminate\Support\Facades\Redirect;
1516
use Illuminate\Support\Facades\Response as ResponseFactory;
1617

@@ -115,15 +116,13 @@ public function restore(Request $request, Resource $resource, Model $model): Red
115116
*/
116117
public function hydrate(Request $request, Resource $resource, Model $model): Response
117118
{
118-
$resource->handleHydrateRequest($request, $model);
119-
120-
$data = match (true) {
121-
$model->exists => $resource->toEdit($request, $model),
122-
default => $resource->toCreate($request),
123-
};
124-
125-
return ResponseFactory::view(
126-
'root::resources.form-turbo-frame', $data
127-
);
119+
return DB::transaction(static function () use ($resource, $request, $model): Response {
120+
$data = match (true) {
121+
$model->exists => $resource->toEdit($request, $model),
122+
default => $resource->toCreate($request),
123+
};
124+
125+
return ResponseFactory::view('root::resources.form-turbo-frame', $data);
126+
});
128127
}
129128
}

src/Resources/Resource.php

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -560,22 +560,6 @@ public function handleFormRequest(Request $request, Model $model): Response
560560
}
561561
}
562562

563-
/**
564-
* Hydrate the model with the request data.
565-
*/
566-
public function handleHydrateRequest(Request $request, Model $model): void
567-
{
568-
DB::transaction(function () use ($request, $model): void {
569-
$this->resolveFields($request)
570-
->authorized($request, $model)
571-
->visible($request->isMethod('POST') ? 'create' : 'update')
572-
->subResource(false)
573-
->each(static function (Field $field) use ($request, $model): void {
574-
$field->resolveHydrate($request, $model, $field->getValueForHydrate($request));
575-
});
576-
});
577-
}
578-
579563
/**
580564
* Make a form response.
581565
*/
@@ -717,8 +701,9 @@ public function toCreate(Request $request): array
717701
'uploads' => $this->hasFileField($request),
718702
'fields' => $this->resolveFields($request)
719703
->subResource(false)
720-
->authorized($request, $model)
721704
->visible('create')
705+
->hydrateFromRequest($request, $model)
706+
->authorized($request, $model)
722707
->mapToInputs($request, $model),
723708
'abilities' => $this->mapResourceAbilities($request),
724709
]);
@@ -776,8 +761,9 @@ public function toEdit(Request $request, Model $model): array
776761
'uploads' => $this->hasFileField($request),
777762
'fields' => $this->resolveFields($request)
778763
->subResource(false)
779-
->authorized($request, $model)
780764
->visible('update')
765+
->hydrateFromRequest($request, $model)
766+
->authorized($request, $model)
781767
->mapToInputs($request, $model),
782768
'abilities' => array_merge(
783769
$this->mapResourceAbilities($request),

0 commit comments

Comments
 (0)