diff --git a/src/Concerns/HasFlexible.php b/src/Concerns/HasFlexible.php index 82930620..6f628be2 100644 --- a/src/Concerns/HasFlexible.php +++ b/src/Concerns/HasFlexible.php @@ -3,7 +3,6 @@ namespace Whitecube\NovaFlexibleContent\Concerns; use Illuminate\Support\Collection as BaseCollection; -use Laravel\Nova\NovaServiceProvider; use Laravel\Nova\Support\Fluent; use Whitecube\NovaFlexibleContent\Layouts\Collection; use Whitecube\NovaFlexibleContent\Layouts\Layout; @@ -33,22 +32,6 @@ public function flexible($attribute, $layoutMapping = []) * @return \Whitecube\NovaFlexibleContent\Layouts\Collection */ public function cast($value, $layoutMapping = []) - { - if (app()->getProvider(NovaServiceProvider::class) && ! app()->runningInConsole()) { - return $value; - } - - return $this->toFlexible($value ?: null, $layoutMapping); - } - - /** - * Parse a Flexible Content from value - * - * @param array|string|\Illuminate\Support\Collection|null $value - * @param array $layoutMapping - * @return \Whitecube\NovaFlexibleContent\Layouts\Collection - */ - public function toFlexible($value, $layoutMapping = []) { $flexible = $this->getFlexibleArrayFromValue($value); diff --git a/src/Value/Resolver.php b/src/Value/Resolver.php index de4fcd7e..e84d5c23 100644 --- a/src/Value/Resolver.php +++ b/src/Value/Resolver.php @@ -3,6 +3,8 @@ namespace Whitecube\NovaFlexibleContent\Value; use Illuminate\Support\Collection; +use Whitecube\NovaFlexibleContent\Layouts\Collection as LayoutsCollection; +use Whitecube\NovaFlexibleContent\Layouts\Layout; class Resolver implements ResolverInterface { @@ -38,13 +40,16 @@ public function get($resource, $attribute, $layouts) $value = $this->extractValueFromResource($resource, $attribute); return collect($value)->map(function ($item) use ($layouts) { - $layout = $layouts->find($item->layout); + $layout = $layouts->find($item instanceof Layout ? $item->name() : $item->layout); if (! $layout) { return null; } - return $layout->duplicateAndHydrate($item->key, (array) $item->attributes); + $key = $item instanceof Layout ? $item->key() : $item->key; + $attributes = $item instanceof Layout ? $item->getAttributes() : (array) $item->attributes; + + return $layout->duplicateAndHydrate($key, $attributes); })->filter()->values(); } @@ -59,7 +64,9 @@ protected function extractValueFromResource($resource, $attribute) { $value = data_get($resource, str_replace('->', '.', $attribute)) ?? []; - if ($value instanceof Collection) { + if ($value instanceof LayoutsCollection) { + $value = $value->all(); + } elseif ($value instanceof Collection) { $value = $value->toArray(); } elseif (is_string($value)) { $value = json_decode($value) ?? [];