// src/state/state.rs use std::env; use common::proto::multieko2::table_definition::ProfileTreeResponse; use crate::components::IntroState; use crate::modes::handlers::mode_manager::AppMode; #[derive(Default)] pub struct DialogState { pub show_dialog: bool, pub dialog_title: String, pub dialog_message: String, pub dialog_button_active: bool, } pub struct UiState { pub show_sidebar: bool, pub is_saved: bool, pub show_intro: bool, pub show_admin: bool, pub show_form: bool, pub show_login: bool, pub intro_state: IntroState, pub dialog: DialogState, // Add dialog state here } pub struct GeneralState { pub selected_item: usize, pub current_option: usize, } pub struct AppState { // Core editor state pub current_dir: String, pub total_count: u64, pub current_position: u64, pub profile_tree: ProfileTreeResponse, pub selected_profile: Option, pub current_mode: AppMode, // UI preferences pub ui: UiState, pub general: GeneralState, } impl AppState { pub fn new() -> Result> { let current_dir = env::current_dir()? .to_string_lossy() .to_string(); Ok(AppState { current_dir, total_count: 0, current_position: 0, profile_tree: ProfileTreeResponse::default(), selected_profile: None, current_mode: AppMode::General, ui: UiState::default(), general: GeneralState { selected_item: 0, current_option: 0, }, }) } // Existing methods remain unchanged pub fn update_total_count(&mut self, total_count: u64) { self.total_count = total_count; } pub fn update_current_position(&mut self, current_position: u64) { self.current_position = current_position; } pub fn update_mode(&mut self, mode: AppMode) { self.current_mode = mode; } // Add dialog helper methods pub fn show_dialog(&mut self, title: &str, message: &str) { self.ui.dialog.show_dialog = true; self.ui.dialog.dialog_title = title.to_string(); self.ui.dialog.dialog_message = message.to_string(); self.ui.dialog.dialog_button_active = true; } pub fn hide_dialog(&mut self) { self.ui.dialog.show_dialog = false; self.ui.dialog.dialog_title.clear(); self.ui.dialog.dialog_message.clear(); } pub fn set_dialog_button_active(&mut self, active: bool) { self.ui.dialog.dialog_button_active = active; } } impl Default for UiState { fn default() -> Self { Self { show_sidebar: true, is_saved: false, show_intro: true, show_admin: false, show_form: false, show_login: false, intro_state: IntroState::new(), dialog: DialogState::default(), } } }