Source code for vitalDSP_webapp.callbacks.core.app_callbacks
"""
Core application callbacks for vitalDSP webapp.
This module handles basic application functionality like sidebar toggling.
"""
from dash.dependencies import Input, Output
[docs]
def register_sidebar_callbacks(app):
"""
Registers the callback to toggle the sidebar between expanded and collapsed states.
Also toggles the icon between the hamburger icon and a right-pointing arrow.
"""
@app.callback(
[
Output("sidebar", "className"), # Toggle sidebar class
Output("sidebar-toggle-icon", "className"), # Toggle icon class
],
[Input("sidebar-toggle", "n_clicks")],
)
def toggle_sidebar(n_clicks):
"""
Toggles the sidebar's width and the toggle button icon.
"""
if n_clicks is None:
n_clicks = 0
print(f"Sidebar toggle clicked {n_clicks} times")
if n_clicks % 2 == 0:
# Expanded state
print("Setting sidebar to expanded state")
return ("sidebar sidebar-expanded", "fas fa-bars")
else:
# Collapsed state
print("Setting sidebar to collapsed state")
return ("sidebar sidebar-collapsed", "fas fa-arrow-right")
@app.callback(Output("page-content", "style"), [Input("sidebar", "className")])
def adjust_page_content_position(sidebar_class):
"""
Adjusts the page content position based on sidebar state.
"""
from vitalDSP_webapp.config.settings import app_config
if "sidebar-collapsed" in sidebar_class:
# Sidebar is collapsed, use collapsed width
left_position = f"{app_config.SIDEBAR_COLLAPSED_WIDTH}px"
else:
# Sidebar is expanded, use full width
left_position = f"{app_config.SIDEBAR_WIDTH}px"
return {
"position": "absolute",
"top": f"{app_config.HEADER_HEIGHT}px",
"left": left_position,
"right": "0",
"padding": "2rem",
"backgroundColor": "#ffffff",
"minHeight": f"calc(100vh - {app_config.HEADER_HEIGHT}px)",
"zIndex": 100,
"transition": "left 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
}