Skip to content

Commit 7a74484

Browse files
authored
fixed validation rules do not work when using dependsOnIn / dependsOnNotIn #29 (#30)
1 parent 6bc2a6a commit 7a74484

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

src/DependencyContainer.php

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class DependencyContainer extends Field
2626
/**
2727
* DependencyContainer constructor.
2828
*
29-
* @param $fields
29+
* @param $fields
3030
* @param null $attribute
3131
* @param null $resolveCallback
3232
*/
@@ -175,7 +175,7 @@ protected function getFieldLayout($field, $value = null)
175175
* Resolve dependency fields for display
176176
*
177177
* @param mixed $resource
178-
* @param null $attribute
178+
* @param null $attribute
179179
*/
180180
public function resolveForDisplay($resource, $attribute = null)
181181
{
@@ -242,7 +242,7 @@ public function resolveForDisplay($resource, $attribute = null)
242242
/**
243243
* Resolve dependency fields
244244
*
245-
* @param mixed $resource
245+
* @param mixed $resource
246246
* @param string $attribute
247247
* @return array|mixed
248248
*/
@@ -259,9 +259,9 @@ public function resolve($resource, $attribute = null)
259259
* @trace fill/fillForAction -> fillInto -> *
260260
*
261261
* @param NovaRequest $request
262-
* @param $model
263-
* @param $attribute
264-
* @param null $requestAttribute
262+
* @param $model
263+
* @param $attribute
264+
* @param null $requestAttribute
265265
*/
266266
public function fillInto(NovaRequest $request, $model, $attribute, $requestAttribute = null)
267267
{
@@ -297,26 +297,45 @@ public function areDependenciesSatisfied(NovaRequest $request)
297297
$satisfiedCounts = 0;
298298
foreach ($this->meta['dependencies'] as $index => $dependency) {
299299

300+
// dependsOnEmpty
300301
if (array_key_exists('empty', $dependency) && empty($request->has($dependency['property']))) {
301302
$satisfiedCounts++;
302303
}
303304

305+
// dependsOnNotEmpty
304306
if (array_key_exists('notEmpty', $dependency) && !empty($request->has($dependency['property']))) {
305307
$satisfiedCounts++;
306308
}
307309

308-
// inverted
309-
if (array_key_exists('nullOrZero', $dependency) && in_array($request->get($dependency['property']),
310-
[null, 0, '0'], true)) {
310+
// dependsOnNullOrZero
311+
if (array_key_exists('nullOrZero', $dependency)
312+
&& in_array($request->get($dependency['property']), [null, 0, '0', ''], true)) {
313+
$satisfiedCounts++;
314+
}
315+
316+
// dependsOnIn
317+
if (array_key_exists('in', $dependency)
318+
&& in_array($request->get($dependency['property']), $dependency['in'])) {
319+
$satisfiedCounts++;
320+
}
321+
322+
// dependsOnNotIn
323+
if (array_key_exists('notin', $dependency)
324+
&& !in_array($request->get($dependency['property']), $dependency['notin'])) {
311325
$satisfiedCounts++;
312326
}
313327

328+
// dependsOnNot
314329
if (array_key_exists('not', $dependency) && $dependency['not'] != $request->get($dependency['property'])) {
315330
$satisfiedCounts++;
316331
}
317332

318-
if (array_key_exists('value',
319-
$dependency) && $dependency['value'] == $request->get($dependency['property'])) {
333+
// dependsOn
334+
if (array_key_exists('value', $dependency)
335+
&& !array_key_exists('in', $dependency)
336+
&& !array_key_exists('notin', $dependency)
337+
&& !array_key_exists('nullOrZero', $dependency)
338+
&& $dependency['value'] == $request->get($dependency['property'])) {
320339
$satisfiedCounts++;
321340
}
322341
}
@@ -328,7 +347,7 @@ public function areDependenciesSatisfied(NovaRequest $request)
328347
* Get a rule set based on field property name
329348
*
330349
* @param NovaRequest $request
331-
* @param string $propertyName
350+
* @param string $propertyName
332351
* @return array
333352
*/
334353
protected function getSituationalRulesSet(NovaRequest $request, string $propertyName = 'rules')
@@ -349,8 +368,7 @@ protected function getSituationalRulesSet(NovaRequest $request, string $property
349368
// if field is DependencyContainer, then add rules from dependant fields
350369
if ($field instanceof DependencyContainer && $propertyName === "rules") {
351370
$fieldsRules[Str::random()] = $field->getSituationalRulesSet($request, $propertyName);
352-
}
353-
elseif ($field instanceof Medialibrary) {
371+
} elseif ($field instanceof Medialibrary) {
354372
$rules = is_callable($field->{$propertyName})
355373
? call_user_func($field->{$propertyName}, $request)
356374
: $field->{$propertyName};
@@ -360,8 +378,7 @@ protected function getSituationalRulesSet(NovaRequest $request, string $property
360378
$request,
361379
$field,
362380
);
363-
}
364-
else {
381+
} else {
365382
$fieldsRules[$field->attribute] = is_callable($field->{$propertyName})
366383
? call_user_func($field->{$propertyName}, $request)
367384
: $field->{$propertyName};

0 commit comments

Comments
 (0)