Completed
Pull Request — master (#203)
by
unknown
01:50
created

CheckableItem::setText()   A

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 1
dl 0
loc 3
rs 10
1
<?php
2
3
namespace PhpSchool\CliMenu\MenuItem;
4
5
use PhpSchool\CliMenu\CliMenu;
6
use PhpSchool\CliMenu\Style;
7
8
class CheckableItem implements MenuItemInterface, ToggableItemInterface, CheckableInterface
9
{
10
    use ToggableTrait;
11
12
    public function __construct(
13
        string $text,
14
        callable $selectAction,
15
        bool $showItemExtra = false,
16
        bool $disabled = false
17
    ) {
18
        $this->text          = $text;
19
        $this->selectAction  = $selectAction;
20
        $this->showItemExtra = $showItemExtra;
21
        $this->disabled      = $disabled;
22
    }
23
24
    public function getStyle() : Style\ItemStyleInterface
25
    {
26
        if (!$this->style) {
27
            $this->style = new Style\CheckableStyle();
28
        }
29
30
        return $this->style;
31
    }
32
33
    /**
34
     * @param Style\CheckableStyle|Style\ItemStyleInterface $style
35
     * @return $this
36
     */
37
    public function setStyle(Style\ItemStyleInterface $style) : self
38
    {
39
        $this->style = $style;
40
41
        return $this;
42
    }
43
44
    /**
45
     * Execute the items callable if required
46
     */
47
    public function getSelectAction() : ?callable
48
    {
49
        return function (CliMenu $cliMenu) {
50
            $this->toggle();
51
            $cliMenu->redraw();
52
53
            return ($this->selectAction)($cliMenu);
54
        };
55
    }
56
}
57