diff --git a/src/HasDependencies.php b/src/HasDependencies.php index 34824f9..ee4080c 100644 --- a/src/HasDependencies.php +++ b/src/HasDependencies.php @@ -13,7 +13,7 @@ trait HasDependencies { protected $childFieldsArr = []; - + /** * @param NovaRequest $request * @return FieldCollection|\Illuminate\Support\Collection @@ -27,7 +27,7 @@ public function availableFields(NovaRequest $request) foreach ($fields as $field) { if ($field instanceof NovaDependencyContainer) { $availableFields[] = $this->filterFieldForRequest($field, $request); - if($field->areDependenciesSatisfied($request) || $this->extractableRequest($request, $this->model())) { + if ($field->areDependenciesSatisfied($request) || $this->extractableRequest($request, $this->model())) { if ($this->doesRouteRequireChildFields()) { $this->extractChildFields($field->meta['fields']); } @@ -53,13 +53,14 @@ public function availableFields(NovaRequest $request) * @param $model * @return bool */ - protected function extractableRequest(NovaRequest $request, $model) { + protected function extractableRequest(NovaRequest $request, $model) + { // if form was submitted to update (method === 'PUT') - if($request->isUpdateOrUpdateAttachedRequest() && strtoupper($request->get('_method', null)) === 'PUT') { + if ($request->isUpdateOrUpdateAttachedRequest() && strtoupper($request->get('_method', null)) === 'PUT') { return false; } // if form was submitted to create and new resource - if($request->isCreateOrAttachRequest() && $model->id === null) { + if ($request->isCreateOrAttachRequest() && $model->id === null) { return false; } return true; @@ -72,7 +73,8 @@ protected function extractableRequest(NovaRequest $request, $model) { * * @todo: implement */ - public function filterFieldForRequest($field, NovaRequest $request) { + public function filterFieldForRequest($field, NovaRequest $request) + { // @todo: filter fields for request, e.g. show/hideOnIndex, create, update or whatever return $field; } @@ -81,14 +83,15 @@ public function filterFieldForRequest($field, NovaRequest $request) { * @param array $availableFields * @param NovaRequest $request */ - public function filterFieldsForRequest(Collection $availableFields, NovaRequest $request) { + public function filterFieldsForRequest(Collection $availableFields, NovaRequest $request) + { return $availableFields; } /** * @return bool */ - protected function doesRouteRequireChildFields() : bool + protected function doesRouteRequireChildFields(): bool { return Str::endsWith(Route::currentRouteAction(), [ 'FieldDestroyController@handle', @@ -106,6 +109,7 @@ protected function doesRouteRequireChildFields() : bool protected function extractChildFields($childFields) { foreach ($childFields as $childField) { + if ($childField instanceof NovaDependencyContainer) { $this->extractChildFields($childField->meta['fields']); } else { @@ -124,14 +128,28 @@ protected function extractChildFields($childFields) */ protected function applyRulesForChildFields($childField) { + if (isset($childField->rules)) { - $childField->rules[] = "sometimes:required:".$childField->attribute; + if (gettype($childField->rules) == 'array') { + $childField->rules[] = "sometimes:required:" . $childField->attribute; + } } + if (isset($childField->creationRules)) { - $childField->creationRules[] = "sometimes:required:".$childField->attribute; + + if (gettype($childField->rules) == 'object') { + $childField->creationRules = json_decode(json_encode("sometimes:required:" . $childField->attribute)); + } else { + $childField->creationRules[] = "sometimes:required:" . $childField->attribute; + } } + if (isset($childField->updateRules)) { - $childField->updateRules[] = "sometimes:required:".$childField->attribute; + if (gettype($childField->rules) == 'object') { + $childField->updateRules = json_decode(json_encode("sometimes:required:" . $childField->attribute)); + } else { + $childField->updateRules[] = "sometimes:required:" . $childField->attribute; + } } return $childField; } @@ -141,13 +159,14 @@ protected function applyRulesForChildFields($childField) * Overridden using ActionController & ActionRequest by modifying routes * @return void */ - public function validateFields() { + public function validateFields() + { $availableFields = []; - if ( !empty( ($action_fields = $this->action()->fields()) ) ) { + if (!empty(($action_fields = $this->action()->fields()))) { foreach ($action_fields as $field) { if ($field instanceof NovaDependencyContainer) { // do not add any fields for validation if container is not satisfied - if($field->areDependenciesSatisfied($this)) { + if ($field->areDependenciesSatisfied($this)) { $availableFields[] = $field; $this->extractChildFields($field->meta['fields']); }