Spaces:
Runtime error
Runtime error
| import dash_bootstrap_components as dbc | |
| from dash import Input, Output, State, callback, html, page_registry | |
| def generate_menu(navbar): | |
| menu_elements = {} | |
| for _, page in page_registry.items(): | |
| path_url = page.get("path") | |
| path_url_split = path_url.split("/") | |
| if len(path_url_split) >= 3: | |
| menu_elements.setdefault( | |
| path_url_split[1], | |
| { | |
| "name": path_url_split[1], | |
| "children": [], | |
| "multi": True, | |
| "label": path_url_split[1], | |
| }, | |
| ).get("children").append( | |
| dbc.DropdownMenuItem( | |
| html.Div(page.get("name")), | |
| href=page.get("path"), | |
| ) | |
| ) | |
| else: | |
| menu_elements[path_url_split[1]] = { | |
| "name": path_url_split[1], | |
| "children": dbc.NavItem( | |
| dbc.NavLink( | |
| html.Span( | |
| [ | |
| html.I( | |
| className=page.get( | |
| "class_icon", "ti ti-circle" | |
| ) | |
| ), | |
| html.Span(page.get("name"), className="ms-1"), | |
| ], | |
| className="d-flex align-items-center", | |
| ), | |
| href=page.get("path"), | |
| class_name="ms-3", | |
| ) | |
| ), | |
| "multi": False, | |
| } | |
| navbar = dbc.Navbar( | |
| dbc.Container( | |
| [ | |
| html.A( | |
| # Use row and col to control vertical alignment of logo / brand | |
| dbc.Row( | |
| [ | |
| dbc.Col( | |
| dbc.NavbarBrand( | |
| html.Img( | |
| src=r"assets/logo.svg", | |
| alt="Humanitics.ai Logo", | |
| width="150px", | |
| ), | |
| className="ms-2", | |
| ) | |
| ), | |
| ], | |
| align="center", | |
| className="g-0", | |
| ), | |
| href="https://plotly.com", | |
| style={"textDecoration": "none"}, | |
| ), | |
| dbc.NavbarToggler(id="navbar-toggler", n_clicks=0), | |
| dbc.Collapse( | |
| [ | |
| dbc.Nav( | |
| [ | |
| dbc.DropdownMenu( | |
| nav=True, | |
| in_navbar=True, | |
| label=v.get("label").capitalize(), | |
| children=v.get("children"), | |
| class_name="text-primary ms-3", | |
| ) | |
| if v.get("multi") | |
| else v.get("children") | |
| for k, v in menu_elements.items() | |
| ], | |
| class_name="mt-1", | |
| navbar=True, | |
| ), | |
| ], | |
| id="navbar-collapse", | |
| is_open=False, | |
| navbar=True, | |
| ), | |
| ] | |
| ), | |
| color="light", | |
| sticky=True, | |
| ) | |
| return navbar, {"display": "none"} | |
| def toggle_navbar_collapse(n, is_open): | |
| if n: | |
| return not is_open | |
| return is_open | |
| def logout(n_clicks, href): | |
| if n_clicks: | |
| return "logout" | |
| return None | |