ArrayElementViewRenderer::render()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 7
ccs 4
cts 4
cp 1
rs 10
cc 2
nc 2
nop 2
crap 2
1
<?php
2
3
namespace Bdf\Form\Aggregate\View;
4
5
use Bdf\Form\Leaf\View\SelectHtmlRenderer;
6
use Bdf\Form\Leaf\View\SimpleFieldHtmlRenderer;
7
use Bdf\Form\View\FieldViewInterface;
8
use Bdf\Form\View\FieldViewRendererInterface;
9
10
/**
11
 * Default renderer for @see ArrayElementView
12
 *
13
 * @implements FieldViewRendererInterface<ArrayElementView>
14
 */
15
final class ArrayElementViewRenderer implements FieldViewRendererInterface
16
{
17
    /**
18
     * @var ArrayElementViewRenderer|null
19
     */
20
    private static $instance;
21
22
    /**
23
     * @var FieldViewRendererInterface
24
     */
25
    private $csvRenderer;
26
27
    /**
28
     * @var FieldViewRendererInterface
29
     */
30
    private $selectRenderer;
31
32
    /**
33
     * ArrayElementViewRenderer constructor.
34
     *
35
     * @param FieldViewRendererInterface|null $csvRenderer Renderer used for simple CSV element
36
     * @param FieldViewRendererInterface|null $selectRenderer Renderer for a select multiple (only if choices are defined)
37
     */
38 11
    public function __construct(?FieldViewRendererInterface $csvRenderer = null, ?FieldViewRendererInterface $selectRenderer = null)
39
    {
40 11
        $this->csvRenderer = $csvRenderer ?? SimpleFieldHtmlRenderer::instance();
41 11
        $this->selectRenderer = $selectRenderer ?? SelectHtmlRenderer::instance();
42 11
    }
43
44
    /**
45
     * {@inheritdoc}
46
     *
47
     * @param ArrayElementView $view
48
     */
49 13
    public function render(FieldViewInterface $view, array $attributes): string
50
    {
51 13
        if ($view->isCsv()) {
0 ignored issues
show
Bug introduced by
The method isCsv() does not exist on Bdf\Form\View\FieldViewInterface. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

51
        if ($view->/** @scrutinizer ignore-call */ isCsv()) {
Loading history...
52 11
            return $this->csvRenderer->render($view, $attributes);
53
        }
54
55 2
        return $this->selectRenderer->render($view, ['multiple' => true] + $attributes);
56
    }
57
58
    /**
59
     * Get the renderer instance
60
     *
61
     * @return self
62
     */
63 4
    public static function instance(): self
64
    {
65 4
        if (self::$instance) {
66 4
            return self::$instance;
67
        }
68
69 1
        return self::$instance = new self();
70
    }
71
}
72