Spaces:
Running
Running
from dash import html, dcc, Input, Output, callback, State | |
import dash_mantine_components as dmc | |
from dash_iconify import DashIconify | |
# Define navigation structure | |
nav_structure = { | |
"analyses": { | |
"label": "Analyses", | |
"icon": "tabler:chart-bar", | |
"links": [ | |
{"label": "Activités Principales", "href": "/main-activities-analysis", "description": "Analyse des activités principales et des compétences associées."}, | |
{"label": "Compétences Opérationnelles", "href": "/operational-skills-analysis", "description": "Visualisation des compétences opérationnelles requises."}, | |
{"label": "Compétences Comportementales", "href": "/behavioral-skills-analysis", "description": "Examen des compétences comportementales clés."}, | |
{"label": "Savoirs", "href": "/knowledge-analysis", "description": "Analyse des savoirs et connaissances nécessaires."}, | |
{"label": "Offres ODD 11", "href": "/analyse-odd-11", "description": "Analyse des offres de formation liées à l'Objectif de Développement Durable 11."}, | |
{"label": "Publications HAL Pédagogie", "href": "/hal-pedagogy-analysis", "description": "Analyse des publications HAL sur les sciences de l'éducation."}, | |
{"label": "Pub. HAL Gustave Eiffel Pédagogie", "href": "/hal-gustave-eiffel-pedagogy-analysis", "description": "Publications pédagogiques de l'Université Gustave Eiffel sur HAL."}, | |
{"label": "Pub. HAL Gustave Eiffel Clustering", "href": "/hal-gustave-eiffel-clustering-analysis", "description": "Analyse de clustering des publications HAL de l'Université Gustave Eiffel."}, | |
{"label": "Axes Recherche Mobilité", "href": "/research-areas-mobility-analysis", "description": "Analyse des axes de recherche sur la mobilité durable."}, | |
{"label": "Projets Recherche Mobilité", "href": "/research-projects-mobility-analysis", "description": "Analyse des projets de recherche sur la mobilité durable."}, | |
] | |
}, | |
"agents": { | |
"label": "Agents IA", | |
"icon": "simple-icons:robotframework", | |
"links": [ | |
{"label": "Génération du RAC", "href": "/rac-generation-agent", "description": "Agent IA pour la génération de Référentiels d'Activités et de Compétences (RAC)."}, | |
{"label": "Génération du Référentiel de Formation", "href": "/training-framework-generation-agent", "description": "Agent IA pour la génération de référentiels de formation à partir d'un RAC."}, | |
] | |
} | |
} | |
def create_sidebar_children(is_collapsed, theme_checked=False): | |
text_color = "black" if not theme_checked else "white" | |
if not is_collapsed: # If not collapsed, it's opened | |
return [ | |
dmc.NavLink( | |
label="Accueil", | |
href="/", | |
leftSection=DashIconify(icon="material-symbols:home-outline"), | |
style={ | |
"marginTop": 20, | |
}, | |
c=text_color | |
), | |
dmc.Accordion( | |
multiple=True, | |
value=["analyses", "agents"], | |
chevronPosition="right", | |
bg="transparent", | |
children=[ | |
dmc.AccordionItem( | |
[ | |
dmc.AccordionControl( | |
dmc.Text(item["label"], c=text_color), # Set color for accordion label | |
icon=DashIconify(icon=item["icon"]) | |
), | |
dmc.AccordionPanel( | |
[dmc.NavLink(label=link["label"], href=link["href"], c=text_color) for link in item["links"]] | |
), | |
], | |
value=key, | |
bg="transparent" | |
) for key, item in nav_structure.items() | |
] | |
) | |
] | |
else: | |
# Collapsed view | |
return [ | |
dmc.Tooltip( | |
label="Accueil", | |
children=dcc.Link( | |
href="/", | |
children=dmc.ActionIcon( | |
children=DashIconify(icon="material-symbols:home-outline", width=25), | |
variant="transparent", | |
color=text_color, | |
size="xl", | |
), | |
), | |
position="right", | |
withArrow=True, | |
), | |
] + [ | |
dmc.Popover( | |
children=[ | |
dmc.ActionIcon( | |
children=DashIconify(icon=item["icon"], width=25), | |
variant="transparent", | |
color=text_color, | |
size="xl", | |
), | |
dmc.Stack( | |
[dmc.NavLink(label=link["label"], href=link["href"], c=text_color) for link in item["links"]], | |
gap=0, | |
) | |
], | |
position="right", | |
withArrow=True, | |
) for item in nav_structure.values() if item["links"] | |
] | |
def create_sidebar(): | |
return dmc.AppShellNavbar( | |
id="sidebar", | |
bg="transparent", | |
children=create_sidebar_children(False, True) # Initial state is NOT collapsed, and dark theme is active | |
) | |
def update_sidebar_content(navbar_config, theme_checked): | |
# Extract collapsed state from navbar_config | |
is_collapsed = navbar_config.get("collapsed", {}).get("mobile", True) # Assuming mobile collapsed state dictates sidebar content | |
return create_sidebar_children(is_collapsed, theme_checked) |