20 lines
663 B
PHP
20 lines
663 B
PHP
<?php
|
|
|
|
namespace Modules\Builder\Services;
|
|
|
|
final class BuilderRenderer
|
|
{
|
|
public function __construct(private BuilderRegistry $registry) {}
|
|
|
|
public function render(array $document, array $context = []): string
|
|
{
|
|
return collect($document['nodes'] ?? [])->map(function (array $node) use ($context) {
|
|
if (($node['kind'] ?? 'component') === 'container') {
|
|
return '<div class="builder-container">'.$this->render($node, $context).'</div>';
|
|
}
|
|
|
|
return $this->registry->component((string) ($node['type'] ?? 'content'))->render($node['properties'] ?? [], $context);
|
|
})->implode("\n");
|
|
}
|
|
}
|