diff --git a/README.md b/README.md index 2eb8dd25..08f922e5 100644 --- a/README.md +++ b/README.md @@ -555,9 +555,7 @@ use PhpSchool\CliMenu\Builder\CliMenuBuilder; use PhpSchool\CliMenu\CliMenu; $callable = function (CliMenu $menu) { - $item = $menu->getSelectedItem(); - $item->toggle(); - $menu->redraw(); + echo $menu->getSelectedItem()->getText(); }; $menu = (new CliMenuBuilder) diff --git a/examples/checkable-item.php b/examples/checkable-item.php index 13fdde04..663cdd33 100644 --- a/examples/checkable-item.php +++ b/examples/checkable-item.php @@ -2,17 +2,11 @@ use PhpSchool\CliMenu\CliMenu; use PhpSchool\CliMenu\Builder\CliMenuBuilder; -use PhpSchool\CliMenu\MenuItem\CheckableItem; require_once(__DIR__ . '/../vendor/autoload.php'); $itemCallable = function (CliMenu $menu) { - /** @var CheckableItem $item */ - $item = $menu->getSelectedItem(); - - $item->toggle(); - - $menu->redraw(); + echo $menu->getSelectedItem()->getText(); }; $menu = (new CliMenuBuilder) diff --git a/src/MenuItem/CheckableItem.php b/src/MenuItem/CheckableItem.php index e8fded5d..b0adbf1f 100644 --- a/src/MenuItem/CheckableItem.php +++ b/src/MenuItem/CheckableItem.php @@ -2,6 +2,7 @@ namespace PhpSchool\CliMenu\MenuItem; +use PhpSchool\CliMenu\CliMenu; use PhpSchool\CliMenu\MenuStyle; use PhpSchool\CliMenu\Util\StringUtil; @@ -49,7 +50,12 @@ public function __construct( */ public function getSelectAction() : ?callable { - return $this->selectAction; + return function (CliMenu $cliMenu) { + $this->toggle(); + $cliMenu->redraw(); + + return ($this->selectAction)($cliMenu); + }; } /** diff --git a/test/MenuItem/CheckableItemTest.php b/test/MenuItem/CheckableItemTest.php index 4b947fb1..589ab71e 100644 --- a/test/MenuItem/CheckableItemTest.php +++ b/test/MenuItem/CheckableItemTest.php @@ -2,6 +2,7 @@ namespace PhpSchool\CliMenuTest\MenuItem; +use PhpSchool\CliMenu\CliMenu; use PhpSchool\CliMenu\MenuItem\CheckableItem; use PhpSchool\CliMenu\MenuStyle; use PhpSchool\Terminal\Terminal; @@ -19,9 +20,15 @@ public function testCanSelectIsTrue() : void public function testGetSelectAction() : void { $callable = function () { + return 'callable is called'; }; $item = new CheckableItem('Item', $callable); - $this->assertSame($callable, $item->getSelectAction()); + + $cliMenu = $this->getMockBuilder(CLiMenu::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->assertSame($callable(), $item->getSelectAction()($cliMenu)); } public function testShowsItemExtra() : void