From b9072e4d7cd23a693fca74214790bea75fe210e7 Mon Sep 17 00:00:00 2001 From: Priec Date: Fri, 22 Aug 2025 22:57:28 +0200 Subject: [PATCH] router2, needs bug fixes3 --- client/src/modes/general/dialog.rs | 188 +++++++++++++++++------------ client/src/ui/handlers/ui.rs | 5 +- 2 files changed, 109 insertions(+), 84 deletions(-) diff --git a/client/src/modes/general/dialog.rs b/client/src/modes/general/dialog.rs index 9d0c831..1721e1a 100644 --- a/client/src/modes/general/dialog.rs +++ b/client/src/modes/general/dialog.rs @@ -6,11 +6,10 @@ use crate::ui::handlers::context::DialogPurpose; use crate::state::app::state::AppState; use crate::buffer::AppView; use crate::buffer::state::BufferState; -use crate::state::pages::auth::{LoginState, RegisterState}; -use crate::state::pages::admin::AdminState; use crate::modes::handlers::event::EventOutcome; use crate::tui::functions::common::{login, register}; use crate::tui::functions::common::add_table::handle_delete_selected_columns; +use crate::pages::routing::{Router, Page}; use anyhow::Result; /// Handles key events specifically when a dialog is active. @@ -20,10 +19,8 @@ pub async fn handle_dialog_event( event: &Event, config: &Config, app_state: &mut AppState, - login_state: &mut LoginState, - register_state: &mut RegisterState, buffer_state: &mut BufferState, - admin_state: &mut AdminState, + router: &mut Router, ) -> Option> { if let Event::Key(key) = event { // Always allow Esc to dismiss @@ -56,100 +53,131 @@ pub async fn handle_dialog_event( Some(p) => p, None => { app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Internal Error: Dialog context lost".to_string()))); + return Some(Ok(EventOutcome::Ok( + "Internal Error: Dialog context lost".to_string(), + ))); } }; // Handle Dialog Actions Directly Here match purpose { - DialogPurpose::LoginSuccess => { - match selected_index { - 0 => { // "Menu" button selected - app_state.hide_dialog(); - let message = login::back_to_main(login_state, app_state, buffer_state).await; + DialogPurpose::LoginSuccess => match selected_index { + 0 => { + // "Menu" button selected + app_state.hide_dialog(); + if let Page::Login(state) = &mut router.current { + let message = + login::back_to_main(state, app_state, buffer_state).await; return Some(Ok(EventOutcome::Ok(message))); } - 1 => { - app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Exiting dialog".to_string()))); - } - _ => { - app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Unknown dialog button selected".to_string()))); - } + return Some(Ok(EventOutcome::Ok( + "Login state not active".to_string(), + ))); } - } - DialogPurpose::LoginFailed => { - match selected_index { - 0 => { // "OK" button selected - app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Login failed dialog dismissed".to_string()))); - } - _ => { - app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Unknown dialog button selected".to_string()))); - } + 1 => { + app_state.hide_dialog(); + return Some(Ok(EventOutcome::Ok("Exiting dialog".to_string()))); } - } - DialogPurpose::RegisterSuccess => { // Add this arm - match selected_index { - 0 => { // "OK" button for RegisterSuccess - app_state.hide_dialog(); - let message = register::back_to_login(register_state, app_state, buffer_state).await; + _ => { + app_state.hide_dialog(); + return Some(Ok(EventOutcome::Ok( + "Unknown dialog button selected".to_string(), + ))); + } + }, + DialogPurpose::LoginFailed => match selected_index { + 0 => { + // "OK" button selected + app_state.hide_dialog(); + return Some(Ok(EventOutcome::Ok( + "Login failed dialog dismissed".to_string(), + ))); + } + _ => { + app_state.hide_dialog(); + return Some(Ok(EventOutcome::Ok( + "Unknown dialog button selected".to_string(), + ))); + } + }, + DialogPurpose::RegisterSuccess => match selected_index { + 0 => { + // "OK" button for RegisterSuccess + app_state.hide_dialog(); + if let Page::Register(state) = &mut router.current { + let message = + register::back_to_login(state, app_state, buffer_state) + .await; return Some(Ok(EventOutcome::Ok(message))); } - _ => { // Default for RegisterSuccess - app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Unknown dialog button selected".to_string()))); - } + return Some(Ok(EventOutcome::Ok( + "Register state not active".to_string(), + ))); } - } - DialogPurpose::RegisterFailed => { // Add this arm - match selected_index { - 0 => { // "OK" button for RegisterFailed - app_state.hide_dialog(); // Just dismiss - return Some(Ok(EventOutcome::Ok("Register failed dialog dismissed".to_string()))); - } - _ => { // Default for RegisterFailed - app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Unknown dialog button selected".to_string()))); - } + _ => { + app_state.hide_dialog(); + return Some(Ok(EventOutcome::Ok( + "Unknown dialog button selected".to_string(), + ))); } - } - DialogPurpose::ConfirmDeleteColumns => { - match selected_index { - 0 => { // "Confirm" button selected - let outcome_message = handle_delete_selected_columns(&mut admin_state.add_table_state); + }, + DialogPurpose::RegisterFailed => match selected_index { + 0 => { + // "OK" button for RegisterFailed + app_state.hide_dialog(); // Just dismiss + return Some(Ok(EventOutcome::Ok( + "Register failed dialog dismissed".to_string(), + ))); + } + _ => { + app_state.hide_dialog(); + return Some(Ok(EventOutcome::Ok( + "Unknown dialog button selected".to_string(), + ))); + } + }, + DialogPurpose::ConfirmDeleteColumns => match selected_index { + 0 => { + // "Confirm" button selected + if let Page::Admin(state) = &mut router.current { + let outcome_message = + handle_delete_selected_columns(&mut state.add_table_state); app_state.hide_dialog(); return Some(Ok(EventOutcome::Ok(outcome_message))); } - 1 => { // "Cancel" button selected - app_state.hide_dialog(); - return Some(Ok(EventOutcome::Ok("Deletion cancelled.".to_string()))); - } - _ => { /* Handle unexpected index */ } + return Some(Ok(EventOutcome::Ok( + "Admin state not active".to_string(), + ))); } - } - DialogPurpose::SaveTableSuccess => { - match selected_index { - 0 => { // "OK" button selected - app_state.hide_dialog(); - buffer_state.update_history(AppView::Admin); // Navigate back - return Some(Ok(EventOutcome::Ok("Save success dialog dismissed.".to_string()))); - } - _ => { /* Handle unexpected index */ } + 1 => { + // "Cancel" button selected + app_state.hide_dialog(); + return Some(Ok(EventOutcome::Ok("Deletion cancelled.".to_string()))); } - } - DialogPurpose::SaveLogicSuccess => { - match selected_index { - 0 => { // "OK" button selected - app_state.hide_dialog(); - buffer_state.update_history(AppView::Admin); - return Some(Ok(EventOutcome::Ok("Save success dialog dismissed.".to_string()))); - } - _ => { /* Handle unexpected index */ } + _ => { /* Handle unexpected index */ } + }, + DialogPurpose::SaveTableSuccess => match selected_index { + 0 => { + // "OK" button selected + app_state.hide_dialog(); + buffer_state.update_history(AppView::Admin); // Navigate back + return Some(Ok(EventOutcome::Ok( + "Save success dialog dismissed.".to_string(), + ))); } - } + _ => { /* Handle unexpected index */ } + }, + DialogPurpose::SaveLogicSuccess => match selected_index { + 0 => { + // "OK" button selected + app_state.hide_dialog(); + buffer_state.update_history(AppView::Admin); + return Some(Ok(EventOutcome::Ok( + "Save success dialog dismissed.".to_string(), + ))); + } + _ => { /* Handle unexpected index */ } + }, } } _ => {} // Ignore other general actions when dialog is shown diff --git a/client/src/ui/handlers/ui.rs b/client/src/ui/handlers/ui.rs index 8eb3ade..0ad7c35 100644 --- a/client/src/ui/handlers/ui.rs +++ b/client/src/ui/handlers/ui.rs @@ -232,12 +232,9 @@ pub async fn run_ui() -> Result<()> { &mut terminal, &mut command_handler, &mut auth_state, - &mut login_state, - &mut register_state, - &mut intro_state, - &mut admin_state, &mut buffer_state, &mut app_state, + &mut router, ).await; let mut should_exit = false; match event_outcome_result {