Skip to content

Commit 3d981f3

Browse files
authored
feat: active callback for sidebar navigation (#1165)
1 parent f5ea4d1 commit 3d981f3

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

docs/tabs/dynamic.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ def tabs_callback(request: HttpRequest) -> list[dict[str, Any]]:
4141
{
4242
"title": _("Your custom title"),
4343
"link": reverse_lazy("admin:app_label_model_name_changelist"),
44-
"is_active": True # Configure active tab
44+
"active": True # Configure active tab
45+
# "active": lambda request: True
4546
},
4647
],
4748
},

src/unfold/sites.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,14 +231,16 @@ def get_sidebar_list(self, request: HttpRequest) -> list[dict[str, Any]]:
231231
tabs = self._get_value(self._get_config("TABS", request), request) or []
232232
results = []
233233

234-
for group in navigation:
234+
for group in copy.deepcopy(navigation):
235235
allowed_items = []
236236

237237
for item in group["items"]:
238-
item["active"] = False
239-
item["active"] = self._get_is_active(
240-
request, item.get("link_callback") or item["link"]
241-
)
238+
if "active" in item:
239+
item["active"] = self._get_value(item["active"], request)
240+
else:
241+
item["active"] = self._get_is_active(
242+
request, item.get("link_callback") or item["link"]
243+
)
242244

243245
# Checks if any tab item is active and then marks the sidebar link as active
244246
for tab in tabs:
@@ -342,7 +344,7 @@ def _replace_values(self, target: dict, source: dict, request: HttpRequest):
342344
return target
343345

344346
def _get_is_active(
345-
self, request: HttpRequest, link: str, is_tab: bool = False
347+
self, request: HttpRequest, link: Union[str, Callable], is_tab: bool = False
346348
) -> bool:
347349
if not isinstance(link, str):
348350
link = str(link)

0 commit comments

Comments
 (0)