compiled, needs other fixes
This commit is contained in:
@@ -29,8 +29,6 @@ pub async fn execute_common_action<S: CanvasState + Any>(
|
|||||||
let outcome = save(
|
let outcome = save(
|
||||||
form_state,
|
form_state,
|
||||||
grpc_client,
|
grpc_client,
|
||||||
current_position,
|
|
||||||
total_count,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
let message = format!("Save successful: {:?}", outcome); // Simple message for now
|
let message = format!("Save successful: {:?}", outcome); // Simple message for now
|
||||||
@@ -40,8 +38,6 @@ pub async fn execute_common_action<S: CanvasState + Any>(
|
|||||||
revert(
|
revert(
|
||||||
form_state,
|
form_state,
|
||||||
grpc_client,
|
grpc_client,
|
||||||
current_position,
|
|
||||||
total_count,
|
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,8 +119,6 @@ async fn process_command(
|
|||||||
let outcome = save(
|
let outcome = save(
|
||||||
form_state,
|
form_state,
|
||||||
grpc_client,
|
grpc_client,
|
||||||
current_position,
|
|
||||||
total_count,
|
|
||||||
).await?;
|
).await?;
|
||||||
let message = match outcome {
|
let message = match outcome {
|
||||||
SaveOutcome::CreatedNew(_) => "New entry created".to_string(),
|
SaveOutcome::CreatedNew(_) => "New entry created".to_string(),
|
||||||
@@ -134,8 +132,6 @@ async fn process_command(
|
|||||||
let message = revert(
|
let message = revert(
|
||||||
form_state,
|
form_state,
|
||||||
grpc_client,
|
grpc_client,
|
||||||
current_position,
|
|
||||||
total_count,
|
|
||||||
).await?;
|
).await?;
|
||||||
command_input.clear();
|
command_input.clear();
|
||||||
Ok(EventOutcome::Ok(message))
|
Ok(EventOutcome::Ok(message))
|
||||||
|
|||||||
@@ -489,6 +489,10 @@ impl EventHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Extracting values to avoid borrow conflicts
|
||||||
|
let mut current_position = form_state.current_position;
|
||||||
|
let total_count = form_state.total_count;
|
||||||
|
|
||||||
let (_should_exit, message) = read_only::handle_read_only_event(
|
let (_should_exit, message) = read_only::handle_read_only_event(
|
||||||
app_state,
|
app_state,
|
||||||
key_event,
|
key_event,
|
||||||
@@ -499,8 +503,8 @@ impl EventHandler {
|
|||||||
&mut admin_state.add_table_state,
|
&mut admin_state.add_table_state,
|
||||||
&mut admin_state.add_logic_state,
|
&mut admin_state.add_logic_state,
|
||||||
&mut self.key_sequence_tracker,
|
&mut self.key_sequence_tracker,
|
||||||
form_state.current_position,
|
&mut current_position,
|
||||||
form_state.total_count,
|
total_count,
|
||||||
grpc_client,
|
grpc_client,
|
||||||
&mut self.command_message,
|
&mut self.command_message,
|
||||||
&mut self.edit_mode_cooldown,
|
&mut self.edit_mode_cooldown,
|
||||||
@@ -531,6 +535,10 @@ impl EventHandler {
|
|||||||
return Ok(EventOutcome::Ok("".to_string()));
|
return Ok(EventOutcome::Ok("".to_string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Extracting values to avoid borrow conflicts
|
||||||
|
let mut current_position = form_state.current_position;
|
||||||
|
let total_count = form_state.total_count;
|
||||||
|
|
||||||
let (_should_exit, message) = read_only::handle_read_only_event(
|
let (_should_exit, message) = read_only::handle_read_only_event(
|
||||||
app_state,
|
app_state,
|
||||||
key_event,
|
key_event,
|
||||||
@@ -541,8 +549,8 @@ impl EventHandler {
|
|||||||
&mut admin_state.add_table_state,
|
&mut admin_state.add_table_state,
|
||||||
&mut admin_state.add_logic_state,
|
&mut admin_state.add_logic_state,
|
||||||
&mut self.key_sequence_tracker,
|
&mut self.key_sequence_tracker,
|
||||||
form_state.current_position,
|
&mut current_position,
|
||||||
form_state.total_count,
|
total_count,
|
||||||
grpc_client,
|
grpc_client,
|
||||||
&mut self.command_message,
|
&mut self.command_message,
|
||||||
&mut self.edit_mode_cooldown,
|
&mut self.edit_mode_cooldown,
|
||||||
@@ -573,6 +581,10 @@ impl EventHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Extracting values to avoid borrow conflicts
|
||||||
|
let mut current_position = form_state.current_position;
|
||||||
|
let total_count = form_state.total_count;
|
||||||
|
|
||||||
let edit_result = edit::handle_edit_event(
|
let edit_result = edit::handle_edit_event(
|
||||||
key_event,
|
key_event,
|
||||||
config,
|
config,
|
||||||
@@ -581,6 +593,8 @@ impl EventHandler {
|
|||||||
register_state,
|
register_state,
|
||||||
admin_state,
|
admin_state,
|
||||||
&mut self.ideal_cursor_column,
|
&mut self.ideal_cursor_column,
|
||||||
|
&mut current_position,
|
||||||
|
total_count,
|
||||||
grpc_client,
|
grpc_client,
|
||||||
app_state,
|
app_state,
|
||||||
)
|
)
|
||||||
@@ -657,6 +671,11 @@ impl EventHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if config.is_command_execute(key_code, modifiers) {
|
if config.is_command_execute(key_code, modifiers) {
|
||||||
|
|
||||||
|
// Extracting values to avoid borrow conflicts
|
||||||
|
let mut current_position = form_state.current_position;
|
||||||
|
let total_count = form_state.total_count;
|
||||||
|
|
||||||
let outcome = command_mode::handle_command_event(
|
let outcome = command_mode::handle_command_event(
|
||||||
key_event,
|
key_event,
|
||||||
config,
|
config,
|
||||||
@@ -669,8 +688,14 @@ impl EventHandler {
|
|||||||
grpc_client,
|
grpc_client,
|
||||||
command_handler,
|
command_handler,
|
||||||
terminal,
|
terminal,
|
||||||
|
&mut current_position,
|
||||||
|
total_count,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
// Update form_state with potentially changed position
|
||||||
|
form_state.current_position = current_position;
|
||||||
|
|
||||||
self.command_mode = false;
|
self.command_mode = false;
|
||||||
self.key_sequence_tracker.reset();
|
self.key_sequence_tracker.reset();
|
||||||
let new_mode = ModeManager::derive_mode(app_state, self, admin_state);
|
let new_mode = ModeManager::derive_mode(app_state, self, admin_state);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
use crate::state::pages::form::FormState;
|
use crate::state::pages::form::FormState;
|
||||||
use crate::services::grpc_client::GrpcClient;
|
use crate::services::grpc_client::GrpcClient;
|
||||||
use crate::state::pages::canvas_state::CanvasState;
|
use crate::state::pages::canvas_state::CanvasState;
|
||||||
|
use crate::services::ui_service::UiService;
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
|
|
||||||
pub async fn handle_action(
|
pub async fn handle_action(
|
||||||
@@ -12,8 +13,7 @@ pub async fn handle_action(
|
|||||||
total_count: u64,
|
total_count: u64,
|
||||||
ideal_cursor_column: &mut usize,
|
ideal_cursor_column: &mut usize,
|
||||||
) -> Result<String> {
|
) -> Result<String> {
|
||||||
// TODO store unsaved changes without deleting form state values
|
// Check for unsaved changes in both cases
|
||||||
// First check for unsaved changes in both cases
|
|
||||||
if form_state.has_unsaved_changes() {
|
if form_state.has_unsaved_changes() {
|
||||||
return Ok(
|
return Ok(
|
||||||
"Unsaved changes. Save (Ctrl+S) or Revert (Ctrl+R) before navigating."
|
"Unsaved changes. Save (Ctrl+S) or Revert (Ctrl+R) before navigating."
|
||||||
@@ -23,57 +23,43 @@ pub async fn handle_action(
|
|||||||
|
|
||||||
match action {
|
match action {
|
||||||
"previous_entry" => {
|
"previous_entry" => {
|
||||||
let new_position = current_position.saturating_sub(1);
|
let new_position = form_state.current_position.saturating_sub(1);
|
||||||
if new_position >= 1 {
|
if new_position >= 1 {
|
||||||
|
form_state.current_position = new_position;
|
||||||
*current_position = new_position;
|
*current_position = new_position;
|
||||||
let response = grpc_client.get_adresar_by_position(*current_position).await?;
|
|
||||||
|
if new_position <= form_state.total_count {
|
||||||
// Direct field assignments
|
let load_message = UiService::load_table_data_by_position(grpc_client, form_state).await?;
|
||||||
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 current_input = form_state.get_current_input();
|
||||||
let max_cursor_pos = if !current_input.is_empty() {
|
let max_cursor_pos = if !current_input.is_empty() {
|
||||||
current_input.len() - 1
|
current_input.len() - 1
|
||||||
} else { 0 };
|
} else { 0 };
|
||||||
form_state.current_cursor_pos = std::cmp::min(*ideal_cursor_column, max_cursor_pos);
|
form_state.current_cursor_pos = (*ideal_cursor_column).min(max_cursor_pos);
|
||||||
form_state.has_unsaved_changes = false;
|
|
||||||
|
Ok(load_message)
|
||||||
Ok(format!("Loaded form entry {}", *current_position))
|
} else {
|
||||||
|
Ok(format!("Moved to position {}", new_position))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Ok("Already at first position".into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"next_entry" => {
|
||||||
|
if form_state.current_position <= form_state.total_count {
|
||||||
|
form_state.current_position += 1;
|
||||||
|
*current_position = form_state.current_position;
|
||||||
|
|
||||||
|
if form_state.current_position <= form_state.total_count {
|
||||||
|
let load_message = UiService::load_table_data_by_position(grpc_client, form_state).await?;
|
||||||
|
|
||||||
|
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 = (*ideal_cursor_column).min(max_cursor_pos);
|
||||||
|
|
||||||
|
Ok(load_message)
|
||||||
} else {
|
} else {
|
||||||
form_state.reset_to_empty();
|
form_state.reset_to_empty();
|
||||||
form_state.current_field = 0;
|
form_state.current_field = 0;
|
||||||
@@ -86,6 +72,5 @@ pub async fn handle_action(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => Err(anyhow!("Unknown form action: {}", action))
|
_ => Err(anyhow!("Unknown form action: {}", action))
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,6 +161,8 @@ pub fn render_ui(
|
|||||||
render_form(
|
render_form(
|
||||||
f, form_render_area, form_state, &fields_vec, &form_state.current_field,
|
f, form_render_area, form_state, &fields_vec, &form_state.current_field,
|
||||||
&values_vec, theme, is_event_handler_edit_mode, highlight_state,
|
&values_vec, theme, is_event_handler_edit_mode, highlight_state,
|
||||||
|
form_state.total_count,
|
||||||
|
form_state.current_position,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user