Skip to content

Commit b110feb

Browse files
committed
🐛 Added fix for casting/resolving layouts
See whitecube#409
1 parent 44eebde commit b110feb

File tree

2 files changed

+10
-20
lines changed

2 files changed

+10
-20
lines changed

src/Concerns/HasFlexible.php

-17
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use Whitecube\NovaFlexibleContent\Layouts\Layout;
66
use Whitecube\NovaFlexibleContent\Layouts\Collection;
77
use Illuminate\Support\Collection as BaseCollection;
8-
use Laravel\Nova\NovaServiceProvider;
98
use Whitecube\NovaFlexibleContent\Value\FlexibleCast;
109

1110
trait HasFlexible {
@@ -32,22 +31,6 @@ public function flexible($attribute, $layoutMapping = [])
3231
* @return \Whitecube\NovaFlexibleContent\Layouts\Collection
3332
*/
3433
public function cast($value, $layoutMapping = [])
35-
{
36-
if(app()->getProvider(NovaServiceProvider::class) && !app()->runningInConsole() && !app()->environment('testing')) {
37-
return $value;
38-
}
39-
40-
return $this->toFlexible($value ?: null, $layoutMapping);
41-
}
42-
43-
/**
44-
* Parse a Flexible Content from value
45-
*
46-
* @param mixed $value
47-
* @param array $layoutMapping
48-
* @return \Whitecube\NovaFlexibleContent\Layouts\Collection
49-
*/
50-
public function toFlexible($value, $layoutMapping = [])
5134
{
5235
$flexible = $this->getFlexibleArrayFromValue($value);
5336

src/Value/Resolver.php

+10-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace Whitecube\NovaFlexibleContent\Value;
44

55
use Illuminate\Support\Collection;
6+
use Whitecube\NovaFlexibleContent\Layouts\Collection as LayoutsCollection;
7+
use Whitecube\NovaFlexibleContent\Layouts\Layout;
68

79
class Resolver implements ResolverInterface
810
{
@@ -39,11 +41,14 @@ public function get($resource, $attribute, $layouts)
3941
$value = $this->extractValueFromResource($resource, $attribute);
4042

4143
return collect($value)->map(function($item) use ($layouts) {
42-
$layout = $layouts->find($item->layout);
44+
$layout = $layouts->find($item instanceof Layout ? $item->name() : $item->layout);
4345

4446
if(!$layout) return;
4547

46-
return $layout->duplicateAndHydrate($item->key, (array) $item->attributes);
48+
$key = $item instanceof Layout ? $item->key() : $item->key;
49+
$attributes = $item instanceof Layout ? $item->getAttributes() : (array) $item->attributes;
50+
51+
return $layout->duplicateAndHydrate($key, $attributes);
4752
})->filter()->values();
4853
}
4954

@@ -58,7 +63,9 @@ protected function extractValueFromResource($resource, $attribute)
5863
{
5964
$value = data_get($resource, str_replace('->', '.', $attribute)) ?? [];
6065

61-
if($value instanceof Collection) {
66+
if ($value instanceof LayoutsCollection) {
67+
$value = $value->all();
68+
} elseif ($value instanceof Collection) {
6269
$value = $value->toArray();
6370
} else if (is_string($value)) {
6471
$value = json_decode($value) ?? [];

0 commit comments

Comments
 (0)