From 77c70671a066ad6cf718557f7e1e725af795b95a Mon Sep 17 00:00:00 2001 From: Sebastian De Deyne Date: Mon, 1 Aug 2016 15:50:59 +0200 Subject: [PATCH] Submenu refactor --- src/Menu.php | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/Menu.php b/src/Menu.php index 2a15adc..f9139ed 100644 --- a/src/Menu.php +++ b/src/Menu.php @@ -190,15 +190,8 @@ public function submenu($header, $menu = null) { list($header, $menu) = $this->parseSubmenuArgs(func_get_args()); - if (is_callable($menu)) { - $transformer = $menu; - $menu = $this->blueprint(); - $transformer($menu); - } - - if ($header instanceof Item) { - $header = $header->render(); - } + $menu = $this->createSubmenuMenu($menu); + $header = $this->createSubmenuHeader($header); return $this->add($menu->prependIf($header, $header)); } @@ -212,6 +205,36 @@ protected function parseSubmenuArgs($args): array return [$args[0], $args[1]]; } + /** + * @param \Spatie\Menu\Menu|callable $menu + * + * @return \Spatie\Menu\Menu + */ + protected function createSubmenuMenu($menu): Menu + { + if (is_callable($menu)) { + $transformer = $menu; + $menu = $this->blueprint(); + $transformer($menu); + } + + return $menu; + } + + /** + * @param \Spatie\Menu\Item|string $header + * + * @return string + */ + protected function createSubmenuHeader($header): string + { + if ($header instanceof Item) { + $header = $header->render(); + } + + return $header; + } + /** * Iterate over all the items and apply a callback. If you typehint the * item parameter in the callable, it wil only be applied to items of that