From 51b28c556407048fcf40a9c463bfe684728e1eb0 Mon Sep 17 00:00:00 2001 From: Iisakki Rotko Date: Tue, 21 May 2024 18:00:20 +0200 Subject: [PATCH] fix: show AppBar when Tabs are the only children --- solara/components/applayout.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/solara/components/applayout.py b/solara/components/applayout.py index 922c40fc4..17b30a7a1 100644 --- a/solara/components/applayout.py +++ b/solara/components/applayout.py @@ -257,20 +257,14 @@ def AppLayout( use_drawer = True title = t.use_title_get() or title children_appbartitle = apptitle_portal.use_portal() - show_app_bar = (title and (len(routes) > 1 and navigation)) or children_appbar or use_drawer or children_appbartitle - - if style is None: - style = {"height": "100%", "max-height": "100%", "overflow": "auto"} - # if style is None, we choose a default style based on whether we are seeing the appbar, etc - if show_app_bar or children_sidebar or len(children) != 1: - style["padding"] = "12px" def set_path(index): path = paths[index] location.pathname = path v_slots = [] - + # Separate tabs from the other children. We want to keep a reference to any tabs that were added through children + # so we can make sure AppBar is rendered even when tabs are the only children tabs = None for child_appbar in children_appbar.copy(): if child_appbar.component == solara.lab.Tabs: @@ -278,18 +272,24 @@ def set_path(index): raise ValueError("Only one Tabs component is allowed in the AppBar") tabs = child_appbar children_appbar.remove(tabs) + tabs_to_render = tabs + + show_app_bar = (title and (len(routes) > 1 and navigation)) or bool(children_appbar) or bool(use_drawer) or bool(children_appbartitle) or bool(tabs) - if (tabs is None) and routes and navigation and (len(routes) > 1): - with solara.lab.Tabs(value=index, on_value=set_path, align="center") as tabs: + if style is None: + style = {"height": "100%", "max-height": "100%", "overflow": "auto"} + # if style is None, we choose a default style based on whether we are seeing the appbar, etc + if show_app_bar or children_sidebar or len(children) != 1: + style["padding"] = "12px" + + if (tabs_to_render is None) and routes and navigation and (len(routes) > 1): + with solara.lab.Tabs(value=index, on_value=set_path, align="center") as tabs_to_render: for route in routes: name = route.path if route.path != "/" else "Home" solara.lab.Tab(name) - # with v.Tabs(v_model=index, on_v_model=set_path, centered=True) as tabs: - # for route in routes: - # name = route.path if route.path != "/" else "Home" - # v.Tab(children=[name]) - if tabs is not None: - v_slots = [{"name": "extension", "children": tabs}] + + if tabs_to_render is not None and navigation: + v_slots = [{"name": "extension", "children": tabs_to_render}] if embedded_mode and not fullscreen: # this version doesn't need to run fullscreen # also ideal in jupyter notebooks