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