Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 33 additions & 14 deletions src/HasDependencies.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
trait HasDependencies
{
protected $childFieldsArr = [];

/**
* @param NovaRequest $request
* @return FieldCollection|\Illuminate\Support\Collection
Expand All @@ -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']);
}
Expand All @@ -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;
Expand All @@ -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;
}
Expand All @@ -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',
Expand All @@ -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 {
Expand All @@ -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;
}
Expand All @@ -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']);
}
Expand Down