diff --git a/src/Fields/Concerns/HasAction.php b/src/Fields/Concerns/HasAction.php index c91f1c7ed..26db6ed9f 100644 --- a/src/Fields/Concerns/HasAction.php +++ b/src/Fields/Concerns/HasAction.php @@ -6,7 +6,7 @@ trait HasAction { - protected ?Action $actionHandler = null; + public ?Action $actionHandler = null; public function action(Action $action): self { diff --git a/src/Fields/Field.php b/src/Fields/Field.php index 1d37f803c..c22f3fa43 100644 --- a/src/Fields/Field.php +++ b/src/Fields/Field.php @@ -649,41 +649,23 @@ public function afterStore(Closure $callback) public function invokeAfter(RestifyRequest $request, Model $model): void { - if ($request->isStoreRequest()) { - $request->repository() - ->collectFields($request) - ->forStore($request, $request->repository()) - ->withActions($request, $this) - ->authorizedStore($request) - ->each(fn (Field $field) => $field->actionHandler->handle($request, $model)); - - if (is_callable($this->afterStoreCallback)) { - call_user_func( - $this->afterStoreCallback, - data_get($model, $this->attribute), - $model, - $request - ); - } + if ($request->isStoreRequest() && is_callable($this->afterStoreCallback)) { + call_user_func( + $this->afterStoreCallback, + data_get($model, $this->attribute), + $model, + $request + ); } - if ($request->isUpdateRequest()) { - $request->repository() - ->collectFields($request) - ->forUpdate($request, $request->repository()) - ->withActions($request, $this) - ->authorizedUpdate($request) - ->each(fn (Field $field) => $field->actionHandler->handle($request, $model)); - - if (is_callable($this->afterUpdateCallback)) { - call_user_func( - $this->afterUpdateCallback, - $this->resolveAttribute($model, $this->attribute), - $this->valueBeforeUpdate, - $model, - $request - ); - } + if ($request->isUpdateRequest() && is_callable($this->afterUpdateCallback)) { + call_user_func( + $this->afterUpdateCallback, + $this->resolveAttribute($model, $this->attribute), + $this->valueBeforeUpdate, + $model, + $request + ); } } diff --git a/src/Repositories/Repository.php b/src/Repositories/Repository.php index cb4650f64..0d15f6480 100644 --- a/src/Repositories/Repository.php +++ b/src/Repositories/Repository.php @@ -635,6 +635,13 @@ public function store(RestifyRequest $request) } $fields->each(fn (Field $field) => $field->invokeAfter($request, $this->resource)); + + $request->repository() + ->collectFields($request) + ->forStore($request, $this) + ->withActions($request, $this) + ->authorizedStore($request) + ->each(fn (Field $field) => $field->actionHandler->handle($request, $this->resource)); }); static::stored($this->resource, $request); @@ -702,6 +709,13 @@ public function update(RestifyRequest $request, $repositoryId) fn (Field $field) => $field->invokeAfter($request, $this->resource) ); + $request->repository() + ->collectFields($request) + ->forUpdate($request, $this) + ->withActions($request, $this) + ->authorizedUpdate($request) + ->each(fn (Field $field) => $field->actionHandler->handle($request, $this->resource)); + return $this->response() ->data($this->serializeForShow($request)) ->success();