Chris@0: [], Chris@0: RenderCellCollectionInterface::PRIORITY_NORMAL => [], Chris@0: RenderCellCollectionInterface::PRIORITY_FALLBACK => [], Chris@0: ]; Chris@0: Chris@0: /** Chris@0: * Add a renderer Chris@0: * Chris@0: * @return $this Chris@0: */ Chris@0: public function addRenderer(RenderCellInterface $renderer, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL) Chris@0: { Chris@0: $this->rendererList[$priority][] = $renderer; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Add a callable as a renderer Chris@0: * Chris@0: * @return $this Chris@0: */ Chris@0: public function addRendererFunction(callable $rendererFn, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL) Chris@0: { Chris@0: $renderer = new CallableRenderer($rendererFn); Chris@0: return $this->addRenderer($renderer, $priority); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function renderCell($key, $cellData, FormatterOptions $options, $rowData) Chris@0: { Chris@0: $flattenedRendererList = array_reduce( Chris@0: $this->rendererList, Chris@0: function ($carry, $item) { Chris@0: return array_merge($carry, $item); Chris@0: }, Chris@0: [] Chris@0: ); Chris@0: Chris@0: foreach ($flattenedRendererList as $renderer) { Chris@0: $cellData = $renderer->renderCell($key, $cellData, $options, $rowData); Chris@0: if (is_string($cellData)) { Chris@0: return $cellData; Chris@0: } Chris@0: } Chris@0: return $cellData; Chris@0: } Chris@0: }