add_table working properly well

This commit is contained in:
filipriec
2025-09-01 16:37:43 +02:00
parent 3b130e9208
commit 8157dc7a60

View File

@@ -378,6 +378,40 @@ impl EventHandler {
if !outcome.get_message_if_ok().is_empty() { if !outcome.get_message_if_ok().is_empty() {
return Ok(outcome); return Ok(outcome);
} }
} else if let Page::AddTable(add_table_page) = &mut router.current {
// Handle AddTable before global actions so canvas gets first shot at keys.
// Map keys to MovementAction (same as AddLogic early handler)
let movement_action_early = if let Some(act) =
config.get_general_action(key_event.code, key_event.modifiers)
{
match act {
"up" => Some(MovementAction::Up),
"down" => Some(MovementAction::Down),
"left" => Some(MovementAction::Left),
"right" => Some(MovementAction::Right),
"next" => Some(MovementAction::Next),
"previous" => Some(MovementAction::Previous),
"select" => Some(MovementAction::Select),
"esc" => Some(MovementAction::Esc),
_ => None,
}
} else {
None
};
let outcome = add_table::event::handle_add_table_event(
key_event,
movement_action_early,
config,
app_state,
add_table_page,
self.grpc_client.clone(),
self.save_table_result_sender.clone(),
)?;
// Only stop if the page consumed the key; else let global handling proceed.
if !outcome.get_message_if_ok().is_empty() {
return Ok(outcome);
}
} else if let Page::Admin(admin_state) = &mut router.current { } else if let Page::Admin(admin_state) = &mut router.current {
if matches!(auth_state.role, Some(UserRole::Admin)) { if matches!(auth_state.role, Some(UserRole::Admin)) {
if let Event::Key(key_event) = event { if let Event::Key(key_event) = event {
@@ -531,41 +565,6 @@ impl EventHandler {
} }
} }
if let Page::AddTable(add_table_state) = &mut router.current {
// Allow ":" (enter_command_mode) even when inside AddTable canvas
if let Some(action) =
config.get_general_action(key_event.code, key_event.modifiers)
{
if action == "enter_command_mode"
&& !self.command_mode
&& !app_state.ui.show_search_palette
&& !self.navigation_state.active
{
self.command_mode = true;
self.command_input.clear();
self.command_message.clear();
self.key_sequence_tracker.reset();
app_state.ui.focus_outside_canvas = true;
return Ok(EventOutcome::Ok(String::new()));
}
}
let client_clone = self.grpc_client.clone();
let sender_clone = self.save_table_result_sender.clone();
let outcome = crate::pages::admin_panel::add_table::event::handle_add_table_event(
key_event,
movement_action,
config,
app_state,
add_table_state,
client_clone,
sender_clone,
)?;
if !outcome.get_message_if_ok().is_empty() {
return Ok(outcome);
}
}
// Generic navigation for the rest (Intro/Login/Register/Form) // Generic navigation for the rest (Intro/Login/Register/Form)
let nav_outcome = if matches!(&router.current, Page::AddTable(_) | Page::AddLogic(_)) { let nav_outcome = if matches!(&router.current, Page::AddTable(_) | Page::AddLogic(_)) {
// Skip generic navigation for AddTable/AddLogic (they have their own handlers) // Skip generic navigation for AddTable/AddLogic (they have their own handlers)