diff --git a/client/src/modes/canvas/common.rs b/client/src/modes/canvas/common.rs index a6a9ff4..15dbfe5 100644 --- a/client/src/modes/canvas/common.rs +++ b/client/src/modes/canvas/common.rs @@ -1,15 +1,18 @@ // src/modes/canvas/common.rs use crate::tui::terminal::core::TerminalCore; -use crate::state::pages::form::FormState; +use crate::state::pages::{form::FormState, auth::AuthState}; use crate::state::state::AppState; use crate::services::grpc_client::GrpcClient; -use crate::tui::functions::common::form::{save, revert}; +use crate::tui::functions::common::{ + form::{save as form_save, revert}, + login::{save as login_save, cancel} +}; -/// Main handler for common core actions pub async fn handle_core_action( action: &str, form_state: &mut FormState, + auth_state: &mut AuthState, grpc_client: &mut GrpcClient, terminal: &mut TerminalCore, app_state: &mut AppState, @@ -18,38 +21,52 @@ pub async fn handle_core_action( ) -> Result<(bool, String), Box> { match action { "save" => { - let message = save( - form_state, - grpc_client, - &mut app_state.ui.is_saved, - current_position, - total_count, - ).await?; - Ok((false, message)) + if app_state.ui.show_login { + let message = login_save(auth_state, grpc_client).await?; + Ok((false, message)) + } else { + let message = form_save( + form_state, + grpc_client, + &mut app_state.ui.is_saved, + current_position, + total_count, + ).await?; + Ok((false, message)) + } }, "force_quit" => { terminal.cleanup()?; Ok((true, "Force exiting without saving.".to_string())) }, "save_and_quit" => { - let message = save( - form_state, - grpc_client, - &mut app_state.ui.is_saved, - current_position, - total_count, - ).await?; + let message = if app_state.ui.show_login { + login_save(auth_state, grpc_client).await? + } else { + form_save( + form_state, + grpc_client, + &mut app_state.ui.is_saved, + current_position, + total_count, + ).await? + }; terminal.cleanup()?; Ok((true, format!("{}. Exiting application.", message))) }, "revert" => { - let message = revert( - form_state, - grpc_client, - current_position, - total_count, - ).await?; - Ok((false, message)) + if app_state.ui.show_login { + let message = cancel(auth_state).await; + Ok((false, message)) + } else { + let message = revert( + form_state, + grpc_client, + current_position, + total_count, + ).await?; + Ok((false, message)) + } }, _ => Ok((false, format!("Core action not handled: {}", action))), } diff --git a/client/src/tui/functions/common.rs b/client/src/tui/functions/common.rs index b6774ad..66c868b 100644 --- a/client/src/tui/functions/common.rs +++ b/client/src/tui/functions/common.rs @@ -1,6 +1,8 @@ // src/tui/functions/common.rs pub mod commands; pub mod form; +pub mod login; pub use commands::*; pub use form::*; +pub use login::*; diff --git a/client/src/tui/functions/common/login.rs b/client/src/tui/functions/common/login.rs new file mode 100644 index 0000000..e9e934d --- /dev/null +++ b/client/src/tui/functions/common/login.rs @@ -0,0 +1,21 @@ +// src/tui/functions/common/login.rs + +use crate::state::pages::auth::AuthState; +use crate::services::grpc_client::GrpcClient; + +/// Shared logic for login operations +pub async fn save( + auth_state: &mut AuthState, + grpc_client: &mut GrpcClient, +) -> Result> { + // Implement your login-specific save logic here + Ok("Login credentials saved".to_string()) +} + +/// Shared logic for login cancellation +pub async fn cancel( + auth_state: &mut AuthState, +) -> String { + auth_state.clear_fields(); + "Login cancelled".to_string() +}