Skip to content

Commit 711805c

Browse files
committed
Propagates styles from bottom up
1 parent c72b588 commit 711805c

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

src/Builder/CliMenuBuilder.php

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,6 @@ public function addSubMenu(string $text, \Closure $callback) : self
188188
$menu = $builder->build();
189189
$menu->setParent($this->menu);
190190

191-
//we apply the parent theme if nothing was changed
192-
//if no styles were changed in this sub-menu
193-
if (!$menu->getStyle()->hasChangedFromDefaults()) {
194-
$menu->setStyle($this->menu->getStyle());
195-
}
196-
197191
$this->menu->addItem($item = new MenuMenuItem(
198192
$text,
199193
$menu,
@@ -210,12 +204,6 @@ public function addSubMenuFromBuilder(string $text, CliMenuBuilder $builder) : s
210204
$menu = $builder->build();
211205
$menu->setParent($this->menu);
212206

213-
//we apply the parent theme if nothing was changed
214-
//if no styles were changed in this sub-menu
215-
if (!$menu->getStyle()->hasChangedFromDefaults()) {
216-
$menu->setStyle($this->menu->getStyle());
217-
}
218-
219207
$this->menu->addItem($item = new MenuMenuItem(
220208
$text,
221209
$menu,
@@ -556,6 +544,28 @@ public function build() : CliMenu
556544
$this->style->setDisplaysExtra($this->itemsHaveExtra($this->menu->getItems()));
557545
}
558546

547+
if (!$this->subMenu) {
548+
$this->propagateStyles($this->menu);
549+
}
550+
559551
return $this->menu;
560552
}
553+
554+
/**
555+
* Pass styles from current menu to sub-menu
556+
* only if sub-menu style has not be customized
557+
*/
558+
private function propagateStyles(CliMenu $menu)
559+
{
560+
foreach ($menu->getItems() as $item) {
561+
if ($item instanceof MenuMenuItem) {
562+
$subMenu = $item->getSubMenu();
563+
564+
!$subMenu->getStyle()->hasChangedFromDefaults()
565+
&& $subMenu->setStyle(clone $menu->getStyle());
566+
567+
$this->propagateStyles($subMenu);
568+
}
569+
}
570+
}
561571
}

test/Builder/CliMenuBuilderTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@ public function testSubMenuInheritsParentsStyle() : void
593593
->build();
594594

595595
self::assertSame('green', $menu->getItems()[0]->getSubMenu()->getStyle()->getBg());
596-
self::assertSame($menu->getStyle(), $menu->getItems()[0]->getSubMenu()->getStyle());
596+
self::assertEquals($menu->getStyle(), $menu->getItems()[0]->getSubMenu()->getStyle());
597597
}
598598

599599
public function testSubMenuDoesNotInheritsParentsStyleWhenSubMenuStyleHasAlterations() : void

0 commit comments

Comments
 (0)