diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/consolidation/output-formatters/src/StructuredData/RenderCellCollectionTrait.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,59 @@
+<?php
+namespace Consolidation\OutputFormatters\StructuredData;
+
+use Consolidation\OutputFormatters\Options\FormatterOptions;
+
+trait RenderCellCollectionTrait
+{
+
+    /** @var RenderCellInterface[] */
+    protected $rendererList = [
+        RenderCellCollectionInterface::PRIORITY_FIRST => [],
+        RenderCellCollectionInterface::PRIORITY_NORMAL => [],
+        RenderCellCollectionInterface::PRIORITY_FALLBACK => [],
+    ];
+
+    /**
+     * Add a renderer
+     *
+     * @return $this
+     */
+    public function addRenderer(RenderCellInterface $renderer, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL)
+    {
+        $this->rendererList[$priority][] = $renderer;
+        return $this;
+    }
+
+    /**
+     * Add a callable as a renderer
+     *
+     * @return $this
+     */
+    public function addRendererFunction(callable $rendererFn, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL)
+    {
+        $renderer = new CallableRenderer($rendererFn);
+        return $this->addRenderer($renderer, $priority);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function renderCell($key, $cellData, FormatterOptions $options, $rowData)
+    {
+        $flattenedRendererList = array_reduce(
+            $this->rendererList,
+            function ($carry, $item) {
+                return array_merge($carry, $item);
+            },
+            []
+        );
+
+        foreach ($flattenedRendererList as $renderer) {
+            $cellData = $renderer->renderCell($key, $cellData, $options, $rowData);
+            if (is_string($cellData)) {
+                return $cellData;
+            }
+        }
+        return $cellData;
+    }
+}