// src/modes/canvas/common_mode.rs use crate::tui::terminal::core::TerminalCore; use crate::state::pages::{form::FormState, auth::AuthState}; use crate::state::state::AppState; use crate::services::grpc_client::GrpcClient; use crate::services::auth::AuthClient; use crate::modes::handlers::event::EventOutcome; use crate::tui::functions::common::form::SaveOutcome; use crate::tui::functions::common::{ form::{save as form_save, revert as form_revert}, login::{save as login_save, revert as login_revert} }; pub async fn handle_core_action( action: &str, form_state: &mut FormState, auth_state: &mut AuthState, grpc_client: &mut GrpcClient, auth_client: &mut AuthClient, terminal: &mut TerminalCore, app_state: &mut AppState, current_position: &mut u64, total_count: u64, ) -> Result> { match action { "save" => { if app_state.ui.show_login { let message = login_save(auth_state, auth_client, app_state).await?; Ok(EventOutcome::Ok(message)) } else { let save_outcome = form_save( form_state, grpc_client, current_position, total_count, ).await?; let message = match save_outcome { SaveOutcome::NoChange => "No changes to save.".to_string(), SaveOutcome::UpdatedExisting => "Entry updated.".to_string(), SaveOutcome::CreatedNew(_) => "New entry created.".to_string(), }; Ok(EventOutcome::DataSaved(save_outcome, message)) } }, "force_quit" => { terminal.cleanup()?; Ok(EventOutcome::Exit("Force exiting without saving.".to_string())) }, "save_and_quit" => { let message = if app_state.ui.show_login { login_save(auth_state, auth_client, app_state).await? } else { let save_outcome = form_save( form_state, grpc_client, current_position, total_count, ).await?; match save_outcome { SaveOutcome::NoChange => "No changes to save.".to_string(), SaveOutcome::UpdatedExisting => "Entry updated.".to_string(), SaveOutcome::CreatedNew(_) => "New entry created.".to_string(), } }; terminal.cleanup()?; Ok(EventOutcome::Exit(format!("{}. Exiting application.", message))) }, "revert" => { if app_state.ui.show_login { let message = login_revert(auth_state, app_state).await; Ok(EventOutcome::Ok(message)) } else { let message = form_revert( form_state, grpc_client, current_position, total_count, ).await?; Ok(EventOutcome::Ok(message)) } }, _ => Ok(EventOutcome::Ok(format!("Core action not handled: {}", action))), } }