expected it to work like this, finally does
This commit is contained in:
@@ -89,35 +89,45 @@ impl EventHandler {
|
|||||||
return Ok((false, self.command_message.clone()));
|
return Ok((false, self.command_message.clone()));
|
||||||
}
|
}
|
||||||
} else if key.code == KeyCode::Right {
|
} 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;
|
*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;
|
// Only load data if position is valid
|
||||||
form_state.has_unsaved_changes = false;
|
if *current_position <= total_count {
|
||||||
self.command_message = format!("Loaded entry {}", *current_position);
|
match app_terminal.get_adresar_by_position(*current_position).await {
|
||||||
}
|
Ok(response) => {
|
||||||
Err(e) => {
|
// Update all form fields
|
||||||
self.command_message = format!("Error loading entry: {}", e);
|
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()));
|
return Ok((false, self.command_message.clone()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,14 +27,6 @@ pub async fn run_ui() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
app_state.update_current_position(total_count.saturating_add(1)); // Start in new entry mode
|
app_state.update_current_position(total_count.saturating_add(1)); // Start in new entry mode
|
||||||
form_state.reset_to_empty();
|
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 {
|
loop {
|
||||||
let total_count = app_terminal.get_adresar_count().await?;
|
let total_count = app_terminal.get_adresar_count().await?;
|
||||||
app_state.update_total_count(total_count);
|
app_state.update_total_count(total_count);
|
||||||
@@ -67,6 +59,10 @@ pub async fn run_ui() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
|
|
||||||
// Handle position changes and update form state
|
// Handle position changes and update form state
|
||||||
if !event_handler.is_edit_mode {
|
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 {
|
if app_state.current_position > total_count {
|
||||||
// New entry - reset form
|
// New entry - reset form
|
||||||
form_state.reset_to_empty();
|
form_state.reset_to_empty();
|
||||||
|
|||||||
Reference in New Issue
Block a user