moving to tui/functions/form.rs read_only functions
This commit is contained in:
@@ -163,73 +163,15 @@ async fn execute_action(
|
|||||||
grpc_client: &mut GrpcClient,
|
grpc_client: &mut GrpcClient,
|
||||||
) -> Result<String, Box<dyn std::error::Error>> {
|
) -> Result<String, Box<dyn std::error::Error>> {
|
||||||
match action {
|
match action {
|
||||||
"previous_entry" => {
|
"previous_entry" | "next_entry" => {
|
||||||
let new_position = current_position.saturating_sub(1);
|
// This will only be called when no component is active
|
||||||
if new_position >= 1 {
|
key_sequence_tracker.reset();
|
||||||
*current_position = new_position;
|
Ok(format!("Navigation only available in form mode"))
|
||||||
match grpc_client.get_adresar_by_position(*current_position).await {
|
|
||||||
Ok(response) => {
|
|
||||||
// Replace update_from_response with 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;
|
|
||||||
*command_message = format!("Loaded entry {}", *current_position);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
*command_message = format!("Error loading entry: {}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
key_sequence_tracker.reset();
|
|
||||||
}
|
|
||||||
Ok(command_message.clone())
|
|
||||||
}
|
}
|
||||||
"next_entry" => {
|
"exit_edit_mode" => {
|
||||||
if *current_position <= total_count {
|
key_sequence_tracker.reset();
|
||||||
*current_position += 1;
|
command_message.clear();
|
||||||
if *current_position <= total_count {
|
Ok("".to_string())
|
||||||
match grpc_client.get_adresar_by_position(*current_position).await {
|
|
||||||
Ok(response) => {
|
|
||||||
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;
|
|
||||||
*command_message = format!("Loaded entry {}", *current_position);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
*command_message = format!("Error loading entry: {}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
form_state.reset_to_empty();
|
|
||||||
form_state.current_field = 0;
|
|
||||||
form_state.current_cursor_pos = 0;
|
|
||||||
*ideal_cursor_column = 0;
|
|
||||||
*command_message = "New entry mode".to_string();
|
|
||||||
}
|
|
||||||
key_sequence_tracker.reset();
|
|
||||||
}
|
|
||||||
Ok(command_message.clone())
|
|
||||||
}
|
}
|
||||||
"exit_edit_mode" => {
|
"exit_edit_mode" => {
|
||||||
key_sequence_tracker.reset();
|
key_sequence_tracker.reset();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// src/tui/functions/form.rs
|
// src/tui/functions/form.rs
|
||||||
|
|
||||||
use crate::state::pages::form::FormState;
|
use crate::state::pages::form::FormState;
|
||||||
use crate::tui::terminal::GrpcClient;
|
use crate::tui::terminal::GrpcClient;
|
||||||
|
use common::proto::multieko2::adresar::AdresarResponse;
|
||||||
|
|
||||||
pub async fn handle_action(
|
pub async fn handle_action(
|
||||||
action: &str,
|
action: &str,
|
||||||
@@ -13,18 +13,68 @@ pub async fn handle_action(
|
|||||||
) -> Result<String, Box<dyn std::error::Error>> {
|
) -> Result<String, Box<dyn std::error::Error>> {
|
||||||
match action {
|
match action {
|
||||||
"previous_entry" => {
|
"previous_entry" => {
|
||||||
// Form-specific previous entry logic
|
|
||||||
let new_position = current_position.saturating_sub(1);
|
let new_position = current_position.saturating_sub(1);
|
||||||
if new_position >= 1 {
|
if new_position >= 1 {
|
||||||
*current_position = new_position;
|
*current_position = new_position;
|
||||||
let response = grpc_client.get_adresar_by_position(*current_position).await?;
|
let response = grpc_client.get_adresar_by_position(*current_position).await?;
|
||||||
form_state.update_from_response(response);
|
|
||||||
|
// 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))
|
Ok(format!("Loaded form entry {}", *current_position))
|
||||||
} else {
|
} else {
|
||||||
Ok("Already at first form entry".into())
|
Ok("Already at first form entry".into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Other form-specific actions...
|
"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())
|
_ => Err("Unknown form action".into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user