From a79fa45a6dec12f5666c916989586e5fcf443088 Mon Sep 17 00:00:00 2001 From: filipriec Date: Fri, 28 Feb 2025 23:27:16 +0100 Subject: [PATCH] revert working properly well --- client/config.toml | 4 +++ client/src/modes/handlers/command_mode.rs | 11 +++++- client/src/modes/handlers/common.rs | 41 +++++++++++++++++++++++ client/src/modes/handlers/event.rs | 9 +++++ 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/client/config.toml b/client/config.toml index 417e98e..a10e1e7 100644 --- a/client/config.toml +++ b/client/config.toml @@ -4,6 +4,9 @@ [keybindings.common] save = ["ctrl+s"] quit = ["ctrl+q"] +# !!!change to space b r in the future and from edit mode +revert = ["ctrl+r"] + force_quit = ["ctrl+shift+q"] save_and_quit = ["ctrl+shift+s"] move_up = ["Up"] @@ -48,6 +51,7 @@ save = ["w"] quit = ["q"] force_quit = ["q!"] save_and_quit = ["wq"] +revert = ["r"] [colors] theme = "dark" diff --git a/client/src/modes/handlers/command_mode.rs b/client/src/modes/handlers/command_mode.rs index 6252246..9e5387e 100644 --- a/client/src/modes/handlers/command_mode.rs +++ b/client/src/modes/handlers/command_mode.rs @@ -110,7 +110,16 @@ async fn process_command( command_input.clear(); return Ok((should_exit, message, true)); }, - + "revert" => { + let message = common::revert( + form_state, + app_terminal, + current_position, + total_count, + ).await?; + command_input.clear(); + return Ok((false, message, true)); + }, "unknown" => { let message = format!("Unknown command: {}", command); command_input.clear(); diff --git a/client/src/modes/handlers/common.rs b/client/src/modes/handlers/common.rs index 7353e56..73ca5e8 100644 --- a/client/src/modes/handlers/common.rs +++ b/client/src/modes/handlers/common.rs @@ -122,3 +122,44 @@ pub async fn save_and_quit( Ok((true, "Saved and exiting application".to_string())) } + +/// Discard changes since last save +pub async fn revert( + form_state: &mut FormState, + app_terminal: &mut AppTerminal, + current_position: &mut u64, + total_count: u64, +) -> Result> { + let is_new = *current_position == total_count + 1; + + if is_new { + // Clear all fields for new entries + form_state.values.iter_mut().for_each(|v| *v = String::new()); + form_state.has_unsaved_changes = false; + return Ok("New entry cleared".to_string()); + } + + let data = app_terminal.get_adresar_by_position(*current_position).await?; + + // Update form fields with saved values + form_state.values = vec![ + data.firma, + data.kz, + data.drc, + data.ulica, + data.psc, + data.mesto, + data.stat, + data.banka, + data.ucet, + data.skladm, + data.ico, + data.kontakt, + data.telefon, + data.skladu, + data.fax, + ]; + + form_state.has_unsaved_changes = false; + Ok("Changes discarded, reloaded last saved version".to_string()) +} diff --git a/client/src/modes/handlers/event.rs b/client/src/modes/handlers/event.rs index 4053b68..69746fa 100644 --- a/client/src/modes/handlers/event.rs +++ b/client/src/modes/handlers/event.rs @@ -72,6 +72,15 @@ impl EventHandler { ).await?; return Ok((should_exit, message)); }, + "revert" => { + let message = common::revert( + form_state, + app_terminal, + current_position, + total_count, + ).await?; + return Ok((false, message)); + }, _ => {} } }