Skip to content

Commit 98f62bd

Browse files
committed
fix: CategoryMenu is_active logic
The `CategoryMenu.is_active` function was incorrectly returning `True` if any of the children were visible.
1 parent a3f24b5 commit 98f62bd

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

sqladmin/_menu.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def type_(self) -> str:
4444
class CategoryMenu(ItemMenu):
4545
def is_active(self, request: Request) -> bool:
4646
return any(
47-
c.is_visible(request) and c.is_accessible(request) for c in self.children
47+
c.is_active(request) and c.is_accessible(request) for c in self.children
4848
)
4949

5050
@property

sqladmin/templates/sqladmin/_macros.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% macro menu_category(menu, request) %}
2-
{% if menu.is_active(request) %}
2+
{% if menu.is_visible(request) and menu.is_accessible(request) %}
33
<li class="nav-item dropdown">
44
<a class="nav-link dropdown-toggle {% if menu.is_active(request) %}active{% endif %}" data-bs-toggle="dropdown"
55
href="#">

tests/test_menu.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,32 @@ def test_category_menu():
4242
assert item_menu.type_ == "Category"
4343

4444

45+
def test_category_menu_is_active_when_child_is_active():
46+
request = Request(
47+
{
48+
"type": "http",
49+
"path_params": {"identity": "user"},
50+
}
51+
)
52+
user_menu = ViewMenu(view=UserAdmin(), name="user")
53+
54+
category_menu = CategoryMenu(name="Models")
55+
category_menu.add_child(user_menu)
56+
57+
assert user_menu.is_active(request) is True
58+
assert category_menu.is_active(request) is True
59+
60+
61+
def test_category_menu_is_not_active_when_no_child_is_active():
62+
user_menu = ViewMenu(view=UserAdmin(), name="user")
63+
64+
category_menu = CategoryMenu(name="Models")
65+
category_menu.add_child(user_menu)
66+
67+
assert user_menu.is_active(request) is False
68+
assert category_menu.is_active(request) is False
69+
70+
4571
def test_view_menu():
4672
item_menu = ViewMenu(view=UserAdmin(), name="view")
4773

0 commit comments

Comments
 (0)