c4f23c7d38309495a16e827cba274111c2ce3722
[yaffs-website] / vendor / consolidation / output-formatters / src / StructuredData / RenderCellCollectionTrait.php
1 <?php
2 namespace Consolidation\OutputFormatters\StructuredData;
3
4 use Consolidation\OutputFormatters\Options\FormatterOptions;
5
6 trait RenderCellCollectionTrait
7 {
8
9     /** @var RenderCellInterface[] */
10     protected $rendererList = [
11         RenderCellCollectionInterface::PRIORITY_FIRST => [],
12         RenderCellCollectionInterface::PRIORITY_NORMAL => [],
13         RenderCellCollectionInterface::PRIORITY_FALLBACK => [],
14     ];
15
16     /**
17      * Add a renderer
18      *
19      * @return $this
20      */
21     public function addRenderer(RenderCellInterface $renderer, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL)
22     {
23         $this->rendererList[$priority][] = $renderer;
24         return $this;
25     }
26
27     /**
28      * Add a callable as a renderer
29      *
30      * @return $this
31      */
32     public function addRendererFunction(callable $rendererFn, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL)
33     {
34         $renderer = new CallableRenderer($rendererFn);
35         return $this->addRenderer($renderer, $priority);
36     }
37
38     /**
39      * {@inheritdoc}
40      */
41     public function renderCell($key, $cellData, FormatterOptions $options, $rowData)
42     {
43         $flattenedRendererList = array_reduce(
44             $this->rendererList,
45             function ($carry, $item) {
46                 return array_merge($carry, $item);
47             },
48             []
49         );
50
51         foreach ($flattenedRendererList as $renderer) {
52             $cellData = $renderer->renderCell($key, $cellData, $options, $rowData);
53             if (is_string($cellData)) {
54                 return $cellData;
55             }
56         }
57         return $cellData;
58     }
59 }