From 9dc2f4b1f9efc25dee72bca73315dd9e0c1e71e8 Mon Sep 17 00:00:00 2001 From: filipriec Date: Wed, 19 Feb 2025 22:02:08 +0100 Subject: [PATCH] expected it to work like this, finally does --- src/client/ui/handlers/event.rs | 62 +++++++++++++++++++-------------- src/client/ui/handlers/ui.rs | 12 +++---- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/client/ui/handlers/event.rs b/src/client/ui/handlers/event.rs index 2f62eee..b2937d5 100644 --- a/src/client/ui/handlers/event.rs +++ b/src/client/ui/handlers/event.rs @@ -89,35 +89,45 @@ impl EventHandler { return Ok((false, self.command_message.clone())); } } else if key.code == KeyCode::Right { - if *current_position < total_count { + // Allow navigation to total_count + 1 for new entries + if *current_position <= total_count { *current_position += 1; - match app_terminal.get_adresar_by_position(*current_position).await { - Ok(response) => { - // Update all form fields - form_state.id = response.id; - form_state.firma = response.firma; - form_state.kz = response.kz; - form_state.drc = response.drc; - form_state.ulica = response.ulica; - form_state.psc = response.psc; - form_state.mesto = response.mesto; - form_state.stat = response.stat; - form_state.banka = response.banka; - form_state.ucet = response.ucet; - form_state.skladm = response.skladm; - form_state.ico = response.ico; - form_state.kontakt = response.kontakt; - form_state.telefon = response.telefon; - form_state.skladu = response.skladu; - form_state.fax = response.fax; - form_state.current_field = 0; - form_state.has_unsaved_changes = false; - self.command_message = format!("Loaded entry {}", *current_position); - } - Err(e) => { - self.command_message = format!("Error loading entry: {}", e); + // Only load data if position is valid + if *current_position <= total_count { + match app_terminal.get_adresar_by_position(*current_position).await { + Ok(response) => { + // Update all form fields + form_state.id = response.id; + form_state.firma = response.firma; + form_state.kz = response.kz; + form_state.drc = response.drc; + form_state.ulica = response.ulica; + form_state.psc = response.psc; + form_state.mesto = response.mesto; + form_state.stat = response.stat; + form_state.banka = response.banka; + form_state.ucet = response.ucet; + form_state.skladm = response.skladm; + form_state.ico = response.ico; + form_state.kontakt = response.kontakt; + form_state.telefon = response.telefon; + form_state.skladu = response.skladu; + form_state.fax = response.fax; + + form_state.current_field = 0; + form_state.has_unsaved_changes = false; + self.command_message = format!("Loaded entry {}", *current_position); + } + Err(e) => { + self.command_message = format!("Error loading entry: {}", e); + } } + } else { + // Clear form when entering new entry position + form_state.reset_to_empty(); + form_state.current_field = 0; + self.command_message = "New entry mode".to_string(); } return Ok((false, self.command_message.clone())); } diff --git a/src/client/ui/handlers/ui.rs b/src/client/ui/handlers/ui.rs index 9e2a7ca..5009148 100644 --- a/src/client/ui/handlers/ui.rs +++ b/src/client/ui/handlers/ui.rs @@ -27,14 +27,6 @@ pub async fn run_ui() -> Result<(), Box> { app_state.update_current_position(total_count.saturating_add(1)); // Start in new entry mode form_state.reset_to_empty(); - // Load initial data if there are existing entries - if total_count > 0 { - let response = app_terminal - .get_adresar_by_position(total_count) - .await?; - update_form_state_from_response(&mut form_state, response); - } - loop { let total_count = app_terminal.get_adresar_count().await?; app_state.update_total_count(total_count); @@ -67,6 +59,10 @@ pub async fn run_ui() -> Result<(), Box> { // Handle position changes and update form state if !event_handler.is_edit_mode { + // Ensure position never exceeds total_count + 1 + if app_state.current_position > total_count + 1 { + app_state.current_position = total_count + 1; + } if app_state.current_position > total_count { // New entry - reset form form_state.reset_to_empty();