Mercurial > hg > isophonics-drupal-site
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 } |