annotate 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
rev   line source
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 }