# UI COMPONENTS MODULE import gradio as gr import logging from datetime import datetime from modules.utils import ErrorManager, SystemState # Configure logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger('ui_components') def create_error_alert(): """Create the error alert UI component""" with gr.Blocks() as error_container: # Hidden error alert that will be shown when errors occur error_display = gr.HTML( value="", visible=False, elem_id="error-alert", elem_classes="error-alert-component" ) # CSS for error styling gr.HTML(""" """) # JavaScript for interactive behavior gr.HTML(""" """) def update_error_display(error_obj): """Update the error display with an error object""" if not error_obj: return gr.HTML.update(value="", visible=False) # Format the error as HTML error_html = f"""

⚠️ {error_obj['type']} in {error_obj['module'] or 'Unknown Module'}

Error: {error_obj['message']}

Time: {error_obj['timestamp']}

Show Technical Details
{error_obj['details'] if error_obj['details'] else 'No additional details available'}
""" # Update the display return gr.HTML.update(value=error_html, visible=True) # Register the update function to be called when errors occur ErrorManager().add_listener(lambda err: error_display.update(update_error_display(err))) return error_container def create_status_bar(): """Create a status bar showing system status""" system_state = SystemState() with gr.Row(elem_classes="status-bar") as status_bar: gr.HTML(""" """) with gr.Column(scale=1): status_indicator = gr.HTML( value=f"""
System {'Online' if system_state.online else 'Offline'}
""" ) with gr.Column(scale=1): mode_indicator = gr.HTML( value=f"""
Mode: {'Demo' if system_state.demo_mode else 'Production'} {' | Debug: On' if system_state.debug_mode else ''}
""" ) with gr.Column(scale=1): time_indicator = gr.HTML( value=f"""
Current Time: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
""" ) # Hidden refresh buttons that get triggered by JavaScript with gr.Row(visible=False): status_refresh_btn = gr.Button("Refresh Status", elem_id="status_refresh_btn") mode_refresh_btn = gr.Button("Refresh Mode", elem_id="mode_refresh_btn") time_refresh_btn = gr.Button("Refresh Time", elem_id="time_refresh_btn") # Connect refresh buttons to update functions status_refresh_btn.click( lambda: gr.HTML.update(value=f"""
System {'Online' if SystemState().online else 'Offline'}
"""), outputs=[status_indicator] ) mode_refresh_btn.click( lambda: gr.HTML.update(value=f"""
Mode: {'Demo' if SystemState().demo_mode else 'Production'} {' | Debug: On' if SystemState().debug_mode else ''}
"""), outputs=[mode_indicator] ) time_refresh_btn.click( lambda: gr.HTML.update(value=f"""
Current Time: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
"""), outputs=[time_indicator] ) # JavaScript to auto-update every 30 seconds gr.HTML(""" """) return status_bar