Panel::getPanelType()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Adf\Node\Block;
6
7
use DH\Adf\Builder\BulletListBuilder;
8
use DH\Adf\Builder\HeadingBuilder;
9
use DH\Adf\Builder\OrderedListBuilder;
10
use DH\Adf\Builder\ParagraphBuilder;
11
use DH\Adf\Builder\TaskListBuilder;
12
use DH\Adf\Node\BlockNode;
13
use DH\Adf\Node\Node;
14
use InvalidArgumentException;
15
16
/**
17
 * @see https://developer.atlassian.com/cloud/jira/platform/apis/document/nodes/panel
18
 */
19
class Panel extends BlockNode
20
{
21
    use BulletListBuilder;
22
    use HeadingBuilder;
23
    use OrderedListBuilder;
24
    use ParagraphBuilder;
25
    use TaskListBuilder;
26
27
    public const INFO = 'info';
28
    public const NOTE = 'note';
29
    public const WARNING = 'warning';
30
    public const SUCCESS = 'success';
31
    public const ERROR = 'error';
32
33
    protected string $type = 'panel';
34
    protected array $allowedContentTypes = [
35
        BulletList::class,
36
        Heading::class,
37
        OrderedList::class,
38
        Paragraph::class,
39
        TaskList::class,
40
    ];
41
    private string $panelType;
42
43
    public function __construct(string $type = self::INFO, ?BlockNode $parent = null)
44
    {
45
        if (!\in_array($type, [
46
            self::INFO,
47
            self::NOTE,
48
            self::WARNING,
49
            self::SUCCESS,
50
            self::ERROR,
51
        ], true)) {
52
            throw new InvalidArgumentException('Invalid panel type');
53
        }
54
55
        parent::__construct($parent);
56
        $this->panelType = $type;
57
    }
58
59
    public static function load(array $data, ?BlockNode $parent = null): self
60
    {
61
        self::checkNodeData(static::class, $data, ['attrs']);
62
        self::checkRequiredKeys(['panelType'], $data['attrs']);
63
64
        $node = new self($data['attrs']['panelType'], $parent);
65
66
        // set content if defined
67
        if (\array_key_exists('content', $data)) {
68
            foreach ($data['content'] as $nodeData) {
69
                $class = Node::NODE_MAPPING[$nodeData['type']];
70
                $child = $class::load($nodeData, $node);
71
72
                $node->append($child);
73
            }
74
        }
75
76
        return $node;
77
    }
78
79
    public function getPanelType(): string
80
    {
81
        return $this->panelType;
82
    }
83
84
    protected function attrs(): array
85
    {
86
        $attrs = parent::attrs();
87
        $attrs['panelType'] = $this->panelType;
88
89
        return $attrs;
90
    }
91
}
92