From 8157dc7a604affb212a23763d96e712059edfc21 Mon Sep 17 00:00:00 2001 From: filipriec Date: Mon, 1 Sep 2025 16:37:43 +0200 Subject: [PATCH] add_table working properly well --- client/src/modes/handlers/event.rs | 69 +++++++++++++++--------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/client/src/modes/handlers/event.rs b/client/src/modes/handlers/event.rs index 2070c72..1ba3952 100644 --- a/client/src/modes/handlers/event.rs +++ b/client/src/modes/handlers/event.rs @@ -378,6 +378,40 @@ impl EventHandler { if !outcome.get_message_if_ok().is_empty() { 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 { if matches!(auth_state.role, Some(UserRole::Admin)) { 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) let nav_outcome = if matches!(&router.current, Page::AddTable(_) | Page::AddLogic(_)) { // Skip generic navigation for AddTable/AddLogic (they have their own handlers)