// src/tui/functions/form.rs use crate::state::pages::form::FormState; use crate::services::grpc_client::GrpcClient; use crate::state::canvas_state::CanvasState; pub async fn handle_action( action: &str, form_state: &mut FormState, grpc_client: &mut GrpcClient, current_position: &mut u64, total_count: u64, ideal_cursor_column: &mut usize, ) -> Result> { match action { "previous_entry" => { let new_position = current_position.saturating_sub(1); if new_position >= 1 { *current_position = new_position; let response = grpc_client.get_adresar_by_position(*current_position).await?; // Direct field assignments form_state.id = response.id; form_state.values = vec![ response.firma, response.kz, response.drc, response.ulica, response.psc, response.mesto, response.stat, response.banka, response.ucet, response.skladm, response.ico, response.kontakt, response.telefon, response.skladu, response.fax, ]; let current_input = form_state.get_current_input(); let max_cursor_pos = if !current_input.is_empty() { current_input.len() - 1 } else { 0 }; form_state.current_cursor_pos = std::cmp::min(*ideal_cursor_column, max_cursor_pos); form_state.has_unsaved_changes = false; Ok(format!("Loaded form entry {}", *current_position)) } else { Ok("Already at first form entry".into()) } } "next_entry" => { if *current_position <= total_count { *current_position += 1; if *current_position <= total_count { let response = grpc_client.get_adresar_by_position(*current_position).await?; // Direct field assignments form_state.id = response.id; form_state.values = vec![ response.firma, response.kz, response.drc, response.ulica, response.psc, response.mesto, response.stat, response.banka, response.ucet, response.skladm, response.ico, response.kontakt, response.telefon, response.skladu, response.fax, ]; let current_input = form_state.get_current_input(); let max_cursor_pos = if !current_input.is_empty() { current_input.len() - 1 } else { 0 }; form_state.current_cursor_pos = std::cmp::min(*ideal_cursor_column, max_cursor_pos); form_state.has_unsaved_changes = false; Ok(format!("Loaded form entry {}", *current_position)) } else { form_state.reset_to_empty(); form_state.current_field = 0; form_state.current_cursor_pos = 0; *ideal_cursor_column = 0; Ok("New form entry mode".into()) } } else { Ok("Already at last entry".into()) } } _ => Err("Unknown form action".into()) } }