comparison vendor/consolidation/output-formatters/src/StructuredData/RenderCellCollectionTrait.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 5fb285c0d0e3
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
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 }