2 namespace Consolidation\OutputFormatters\StructuredData;
4 use Consolidation\OutputFormatters\Options\FormatterOptions;
5 use Consolidation\OutputFormatters\Formatters\FormatterAwareInterface;
6 use Consolidation\OutputFormatters\Formatters\FormatterAwareTrait;
8 trait RenderCellCollectionTrait
10 use FormatterAwareTrait;
12 /** @var RenderCellInterface[] */
13 protected $rendererList = [
14 RenderCellCollectionInterface::PRIORITY_FIRST => [],
15 RenderCellCollectionInterface::PRIORITY_NORMAL => [],
16 RenderCellCollectionInterface::PRIORITY_FALLBACK => [],
24 public function addRenderer(RenderCellInterface $renderer, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL)
26 $this->rendererList[$priority][] = $renderer;
31 * Add a callable as a renderer
35 public function addRendererFunction(callable $rendererFn, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL)
37 $renderer = new CallableRenderer($rendererFn);
38 return $this->addRenderer($renderer, $priority);
44 public function renderCell($key, $cellData, FormatterOptions $options, $rowData)
46 $flattenedRendererList = array_reduce(
48 function ($carry, $item) {
49 return array_merge($carry, $item);
54 foreach ($flattenedRendererList as $renderer) {
55 if ($renderer instanceof FormatterAwareInterface) {
56 $renderer->setFormatter($this->getFormatter());
58 $cellData = $renderer->renderCell($key, $cellData, $options, $rowData);