Skip to content

Commit 3aea6c9

Browse files
committed
bug #6734 Fix Dashboard menu item highlighting (javiereguiluz)
This PR was squashed before being merged into the 4.x branch. Discussion ---------- Fix Dashboard menu item highlighting Fixes #6701. Commits ------- c4a848c Fix Dashboard menu item highlighting
2 parents 533e89a + c4a848c commit 3aea6c9

File tree

4 files changed

+20
-11
lines changed

4 files changed

+20
-11
lines changed

config/services.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@
235235

236236
->set(MenuItemMatcher::class)
237237
->arg(0, service(AdminUrlGenerator::class))
238+
->arg(1, service(AdminRouteGenerator::class))
238239

239240
->alias(MenuItemMatcherInterface::class, MenuItemMatcher::class)
240241

src/Menu/MenuItemMatcher.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use EasyCorp\Bundle\EasyAdminBundle\Config\Option\EA;
88
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Menu\MenuItemMatcherInterface;
99
use EasyCorp\Bundle\EasyAdminBundle\Dto\MenuItemDto;
10+
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminRouteGenerator;
1011
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
1112
use Symfony\Component\HttpFoundation\Request;
1213

@@ -17,6 +18,7 @@ class MenuItemMatcher implements MenuItemMatcherInterface
1718
{
1819
public function __construct(
1920
private AdminUrlGenerator $adminUrlGenerator,
21+
private AdminRouteGenerator $adminRouteGenerator,
2022
) {
2123
}
2224

@@ -35,8 +37,7 @@ public function __construct(
3537
*/
3638
public function markSelectedMenuItem(array $menuItems, Request $request): array
3739
{
38-
$usePrettyUrls = true === (bool) $request->attributes->get(EA::ROUTE_CREATED_BY_EASYADMIN);
39-
if ($usePrettyUrls) {
40+
if ($this->adminRouteGenerator->usesPrettyUrls()) {
4041
$menuItems = $this->doMarkSelectedPrettyUrlsMenuItem($menuItems, $request);
4142
} else {
4243
$menuItems = $this->doMarkSelectedLegacyMenuItem($menuItems, $request);

tests/Controller/PrettyUrls/PrettyUrlsControllerTest.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,14 @@ public function testAdminUrlGenerator(): void
297297
->setAction('customAction')
298298
->generateUrl()
299299
;
300-
$client->request('GET', $url);
300+
$client->request('GET', $url);
301301

302302
$this->assertSelectorTextSame('#url1', 'http://localhost/admin/pretty/urls?'.http_build_query([
303303
'crudAction' => 'customAction',
304304
'crudControllerFqcn' => CategoryCrudController::class,
305305
'dashboardControllerFqcn' => DashboardController::class,
306306
]));
307307

308-
309308
$this->assertSelectorTextSame('#url2', 'http://localhost/admin/pretty/urls?'.http_build_query([
310309
'crudAction' => 'customAction',
311310
'crudControllerFqcn' => CategoryCrudController::class,

tests/Menu/MenuItemMatcherTest.php

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use EasyCorp\Bundle\EasyAdminBundle\Config\Option\EA;
77
use EasyCorp\Bundle\EasyAdminBundle\Dto\MenuItemDto;
88
use EasyCorp\Bundle\EasyAdminBundle\Menu\MenuItemMatcher;
9+
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminRouteGenerator;
910
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
1011
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
1112
use Symfony\Component\HttpFoundation\InputBag;
@@ -19,7 +20,8 @@ public function testIsSelectedWhenContextIsNull()
1920

2021
self::bootKernel();
2122
$adminUrlGenerator = self::getContainer()->get(AdminUrlGenerator::class);
22-
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator);
23+
$adminRouteGenerator = self::getContainer()->get(AdminRouteGenerator::class);
24+
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator, $adminRouteGenerator);
2325
$menuItemDto = new MenuItemDto();
2426

2527
$menuItemMatcher->markSelectedMenuItem([$menuItemDto], $request);
@@ -33,7 +35,8 @@ public function testIsSelectedWhenMenuItemIsSection()
3335

3436
self::bootKernel();
3537
$adminUrlGenerator = self::getContainer()->get(AdminUrlGenerator::class);
36-
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator);
38+
$adminRouteGenerator = self::getContainer()->get(AdminRouteGenerator::class);
39+
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator, $adminRouteGenerator);
3740
$menuItemDto = new MenuItemDto();
3841
$menuItemDto->setType(MenuItemDto::TYPE_SECTION);
3942

@@ -50,7 +53,8 @@ public function testIsSelectedWithCrudControllers()
5053

5154
self::bootKernel();
5255
$adminUrlGenerator = self::getContainer()->get(AdminUrlGenerator::class);
53-
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator);
56+
$adminRouteGenerator = self::getContainer()->get(AdminRouteGenerator::class);
57+
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator, $adminRouteGenerator);
5458
$menuItemDto = $this->getMenuItemDto();
5559
$menuItemMatcher->markSelectedMenuItem([$menuItemDto], $request);
5660

@@ -101,7 +105,8 @@ public function testIsSelectedWithRoutes()
101105

102106
self::bootKernel();
103107
$adminUrlGenerator = self::getContainer()->get(AdminUrlGenerator::class);
104-
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator);
108+
$adminRouteGenerator = self::getContainer()->get(AdminRouteGenerator::class);
109+
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator, $adminRouteGenerator);
105110
$menuItemDto = $this->getMenuItemDto(routeName: 'some_route');
106111

107112
$menuItemMatcher->markSelectedMenuItem([$menuItemDto], $request);
@@ -142,7 +147,8 @@ public function testIsSelectedWithUrls()
142147

143148
self::bootKernel();
144149
$adminUrlGenerator = self::getContainer()->get(AdminUrlGenerator::class);
145-
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator);
150+
$adminRouteGenerator = self::getContainer()->get(AdminRouteGenerator::class);
151+
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator, $adminRouteGenerator);
146152
$menuItemDto = new MenuItemDto();
147153

148154
$menuItemMatcher->markSelectedMenuItem([$menuItemDto], $request);
@@ -182,7 +188,8 @@ public function testMenuWithDashboardItem()
182188

183189
self::bootKernel();
184190
$adminUrlGenerator = self::getContainer()->get(AdminUrlGenerator::class);
185-
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator);
191+
$adminRouteGenerator = self::getContainer()->get(AdminRouteGenerator::class);
192+
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator, $adminRouteGenerator);
186193
$menuItems = $menuItemMatcher->markSelectedMenuItem($menuItems, $request);
187194

188195
$this->assertSame('item2', $this->getSelectedMenuItemLabel($menuItems), 'Perfect match: Dashboard item');
@@ -197,7 +204,8 @@ public function testComplexMenu()
197204

198205
self::bootKernel();
199206
$adminUrlGenerator = self::getContainer()->get(AdminUrlGenerator::class);
200-
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator);
207+
$adminRouteGenerator = self::getContainer()->get(AdminRouteGenerator::class);
208+
$menuItemMatcher = new MenuItemMatcher($adminUrlGenerator, $adminRouteGenerator);
201209

202210
$menuItems = $menuItemMatcher->markSelectedMenuItem($menuItems, $request);
203211

0 commit comments

Comments
 (0)