diff --git a/client/src/bottom_panel/layout.rs b/client/src/bottom_panel/layout.rs index 30e26cd..cd1a41d 100644 --- a/client/src/bottom_panel/layout.rs +++ b/client/src/bottom_panel/layout.rs @@ -46,7 +46,6 @@ pub fn render_bottom_panel( chunk_idx: &mut usize, current_dir: &str, theme: &Theme, - is_event_handler_edit_mode: bool, current_fps: f64, app_state: &AppState, navigation_state: &NavigationState, @@ -74,7 +73,6 @@ pub fn render_bottom_panel( status_line_area, current_dir, theme, - is_event_handler_edit_mode, current_fps, app_state, ); diff --git a/client/src/components/admin/add_logic.rs b/client/src/components/admin/add_logic.rs index 6dfe3ea..88ae634 100644 --- a/client/src/components/admin/add_logic.rs +++ b/client/src/components/admin/add_logic.rs @@ -34,7 +34,7 @@ pub fn render_add_logic( // Handle full-screen script editing if add_logic_state.current_focus == AddLogicFocus::InsideScriptContent { let mut editor_ref = add_logic_state.script_content_editor.borrow_mut(); - let border_style_color = if editor.mode() == canvas::AppMode::Edit { + let border_style_color = if crate::components::common::text_editor::TextEditor::is_vim_insert_mode(&add_logic_state.vim_state) { theme.highlight } else { theme.secondary @@ -50,7 +50,7 @@ pub fn render_add_logic( format!("Script {}", vim_mode_status) } EditorKeybindingMode::Emacs | EditorKeybindingMode::Default => { - if editor.mode() == canvas::AppMode::Edit { + if crate::components::common::text_editor::TextEditor::is_vim_insert_mode(&add_logic_state.vim_state) { "Script (Editing)".to_string() } else { "Script".to_string() diff --git a/client/src/components/admin/add_table.rs b/client/src/components/admin/add_table.rs index 9dd6e90..504c9ac 100644 --- a/client/src/components/admin/add_table.rs +++ b/client/src/components/admin/add_table.rs @@ -20,7 +20,6 @@ pub fn render_add_table( theme: &Theme, app_state: &AppState, add_table_state: &mut AddTableState, - is_edit_mode: bool, // Determines if canvas inputs are in edit mode ) { // --- Configuration --- // Threshold width to switch between wide and narrow layouts diff --git a/client/src/functions/modes/navigation/add_logic_nav.rs b/client/src/functions/modes/navigation/add_logic_nav.rs index a8d8f44..96a154a 100644 --- a/client/src/functions/modes/navigation/add_logic_nav.rs +++ b/client/src/functions/modes/navigation/add_logic_nav.rs @@ -1,4 +1,5 @@ // src/functions/modes/navigation/add_logic_nav.rs + use crate::config::binds::config::{Config, EditorKeybindingMode}; use crate::state::{ app::state::AppState, @@ -21,7 +22,6 @@ pub fn handle_add_logic_navigation( key_event: KeyEvent, config: &Config, app_state: &mut AppState, - is_edit_mode: &mut bool, buffer_state: &mut BufferState, grpc_client: GrpcClient, save_logic_sender: SaveLogicResultSender, @@ -29,18 +29,17 @@ pub fn handle_add_logic_navigation( router: &mut Router, ) -> bool { if let Page::AddLogic(add_logic_state) = &mut router.current { - - // === FULLSCREEN SCRIPT EDITING - COMPLETE ISOLATION === + // === FULLSCREEN SCRIPT EDITING === if add_logic_state.current_focus == AddLogicFocus::InsideScriptContent { // === AUTOCOMPLETE HANDLING === if add_logic_state.script_editor_autocomplete_active { match key_event.code { - // ... (Char, Backspace, Tab, Down, Up cases remain the same) ... KeyCode::Char(c) if c.is_alphanumeric() || c == '_' => { add_logic_state.script_editor_filter_text.push(c); add_logic_state.update_script_editor_suggestions(); { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); TextEditor::handle_input( &mut editor_borrow, key_event, @@ -48,7 +47,8 @@ pub fn handle_add_logic_navigation( &mut add_logic_state.vim_state, ); } - *command_message = format!("Filtering: @{}", add_logic_state.script_editor_filter_text); + *command_message = + format!("Filtering: @{}", add_logic_state.script_editor_filter_text); return true; } KeyCode::Backspace => { @@ -56,7 +56,8 @@ pub fn handle_add_logic_navigation( add_logic_state.script_editor_filter_text.pop(); add_logic_state.update_script_editor_suggestions(); { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); TextEditor::handle_input( &mut editor_borrow, key_event, @@ -64,27 +65,37 @@ pub fn handle_add_logic_navigation( &mut add_logic_state.vim_state, ); } - *command_message = if add_logic_state.script_editor_filter_text.is_empty() { - "Autocomplete: @".to_string() - } else { - format!("Filtering: @{}", add_logic_state.script_editor_filter_text) - }; - } else { - let should_deactivate = if let Some((trigger_line, trigger_col)) = add_logic_state.script_editor_trigger_position { - let current_cursor = { - let editor_borrow = add_logic_state.script_content_editor.borrow(); - editor_borrow.cursor() + *command_message = + if add_logic_state.script_editor_filter_text.is_empty() { + "Autocomplete: @".to_string() + } else { + format!( + "Filtering: @{}", + add_logic_state.script_editor_filter_text + ) + }; + } else { + let should_deactivate = + if let Some((trigger_line, trigger_col)) = + add_logic_state.script_editor_trigger_position + { + let current_cursor = { + let editor_borrow = + add_logic_state.script_content_editor.borrow(); + editor_borrow.cursor() + }; + current_cursor.0 == trigger_line + && current_cursor.1 == trigger_col + 1 + } else { + false }; - current_cursor.0 == trigger_line && current_cursor.1 == trigger_col + 1 - } else { - false - }; if should_deactivate { add_logic_state.deactivate_script_editor_autocomplete(); *command_message = "Autocomplete cancelled".to_string(); } { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); TextEditor::handle_input( &mut editor_borrow, key_event, @@ -97,75 +108,120 @@ pub fn handle_add_logic_navigation( } KeyCode::Tab | KeyCode::Down => { if !add_logic_state.script_editor_suggestions.is_empty() { - let current = add_logic_state.script_editor_selected_suggestion_index.unwrap_or(0); - let next = (current + 1) % add_logic_state.script_editor_suggestions.len(); + let current = add_logic_state + .script_editor_selected_suggestion_index + .unwrap_or(0); + let next = + (current + 1) % add_logic_state.script_editor_suggestions.len(); add_logic_state.script_editor_selected_suggestion_index = Some(next); - *command_message = format!("Selected: {}", add_logic_state.script_editor_suggestions[next]); + *command_message = format!( + "Selected: {}", + add_logic_state.script_editor_suggestions[next] + ); } return true; } KeyCode::Up => { if !add_logic_state.script_editor_suggestions.is_empty() { - let current = add_logic_state.script_editor_selected_suggestion_index.unwrap_or(0); + let current = add_logic_state + .script_editor_selected_suggestion_index + .unwrap_or(0); let prev = if current == 0 { add_logic_state.script_editor_suggestions.len() - 1 } else { current - 1 }; add_logic_state.script_editor_selected_suggestion_index = Some(prev); - *command_message = format!("Selected: {}", add_logic_state.script_editor_suggestions[prev]); + *command_message = format!( + "Selected: {}", + add_logic_state.script_editor_suggestions[prev] + ); } return true; } KeyCode::Enter => { - if let Some(selected_idx) = add_logic_state.script_editor_selected_suggestion_index { - if let Some(suggestion) = add_logic_state.script_editor_suggestions.get(selected_idx).cloned() { - let trigger_pos = add_logic_state.script_editor_trigger_position; - let filter_len = add_logic_state.script_editor_filter_text.len(); + if let Some(selected_idx) = + add_logic_state.script_editor_selected_suggestion_index + { + if let Some(suggestion) = add_logic_state + .script_editor_suggestions + .get(selected_idx) + .cloned() + { + let trigger_pos = + add_logic_state.script_editor_trigger_position; + let filter_len = + add_logic_state.script_editor_filter_text.len(); add_logic_state.deactivate_script_editor_autocomplete(); add_logic_state.has_unsaved_changes = true; if let Some(pos) = trigger_pos { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); if suggestion == "sql" { - replace_autocomplete_text(&mut editor_borrow, pos, filter_len, "sql"); + replace_autocomplete_text( + &mut editor_borrow, + pos, + filter_len, + "sql", + ); editor_borrow.insert_str("('')"); - // Move cursor back twice to be between the single quotes - editor_borrow.move_cursor(CursorMove::Back); // Before ')' - editor_borrow.move_cursor(CursorMove::Back); // Before ''' (inside '') + editor_borrow.move_cursor(CursorMove::Back); + editor_borrow.move_cursor(CursorMove::Back); *command_message = "Inserted: @sql('')".to_string(); } else { - let is_table_selection = add_logic_state.is_table_name_suggestion(&suggestion); - replace_autocomplete_text(&mut editor_borrow, pos, filter_len, &suggestion); + let is_table_selection = + add_logic_state.is_table_name_suggestion(&suggestion); + replace_autocomplete_text( + &mut editor_borrow, + pos, + filter_len, + &suggestion, + ); if is_table_selection { editor_borrow.insert_str("."); let new_cursor = editor_borrow.cursor(); - drop(editor_borrow); // Release borrow before calling add_logic_state methods + drop(editor_borrow); - add_logic_state.script_editor_trigger_position = Some(new_cursor); + add_logic_state.script_editor_trigger_position = + Some(new_cursor); add_logic_state.script_editor_autocomplete_active = true; add_logic_state.script_editor_filter_text.clear(); - add_logic_state.trigger_column_autocomplete_for_table(suggestion.clone()); + add_logic_state + .trigger_column_autocomplete_for_table( + suggestion.clone(), + ); - let profile_name = add_logic_state.profile_name.clone(); + let profile_name = + add_logic_state.profile_name.clone(); let table_name_for_fetch = suggestion.clone(); let mut client_clone = grpc_client.clone(); tokio::spawn(async move { - match UiService::fetch_columns_for_table(&mut client_clone, &profile_name, &table_name_for_fetch).await { - Ok(_columns) => { - // Result handled by main UI loop - } - Err(e) => { - tracing::error!("Failed to fetch columns for {}.{}: {}", profile_name, table_name_for_fetch, e); - } + if let Err(e) = UiService::fetch_columns_for_table( + &mut client_clone, + &profile_name, + &table_name_for_fetch, + ) + .await + { + tracing::error!( + "Failed to fetch columns for {}.{}: {}", + profile_name, + table_name_for_fetch, + e + ); } }); - *command_message = format!("Selected table '{}', fetching columns...", suggestion); + *command_message = format!( + "Selected table '{}', fetching columns...", + suggestion + ); } else { - *command_message = format!("Inserted: {}", suggestion); + *command_message = + format!("Inserted: {}", suggestion); } } } @@ -174,7 +230,8 @@ pub fn handle_add_logic_navigation( } add_logic_state.deactivate_script_editor_autocomplete(); { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); TextEditor::handle_input( &mut editor_borrow, key_event, @@ -192,7 +249,8 @@ pub fn handle_add_logic_navigation( add_logic_state.deactivate_script_editor_autocomplete(); *command_message = "Autocomplete cancelled".to_string(); { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); TextEditor::handle_input( &mut editor_borrow, key_event, @@ -205,9 +263,12 @@ pub fn handle_add_logic_navigation( } } + // Trigger autocomplete with '@' if key_event.code == KeyCode::Char('@') && key_event.modifiers == KeyModifiers::NONE { let should_trigger = match add_logic_state.editor_keybinding_mode { - EditorKeybindingMode::Vim => *is_edit_mode, + EditorKeybindingMode::Vim => { + TextEditor::is_vim_insert_mode(&add_logic_state.vim_state) + } _ => true, }; if should_trigger { @@ -216,7 +277,8 @@ pub fn handle_add_logic_navigation( editor_borrow.cursor() }; { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); TextEditor::handle_input( &mut editor_borrow, key_event, @@ -234,45 +296,42 @@ pub fn handle_add_logic_navigation( } } + // Esc handling if key_event.code == KeyCode::Esc && key_event.modifiers == KeyModifiers::NONE { match add_logic_state.editor_keybinding_mode { EditorKeybindingMode::Vim => { - if *is_edit_mode { - { - let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); - TextEditor::handle_input( - &mut editor_borrow, - key_event, - &add_logic_state.editor_keybinding_mode, - &mut add_logic_state.vim_state, - ); - } - if TextEditor::is_vim_normal_mode(&add_logic_state.vim_state) { - *is_edit_mode = false; - *command_message = "VIM: Normal Mode. Esc again to exit script.".to_string(); - } + let was_insert = + TextEditor::is_vim_insert_mode(&add_logic_state.vim_state); + { + let mut editor_borrow = + add_logic_state.script_content_editor.borrow_mut(); + TextEditor::handle_input( + &mut editor_borrow, + key_event, + &add_logic_state.editor_keybinding_mode, + &mut add_logic_state.vim_state, + ); + } + if was_insert { + *command_message = + "VIM: Normal Mode. Esc again to exit script.".to_string(); } else { - add_logic_state.current_focus = AddLogicFocus::ScriptContentPreview; + add_logic_state.current_focus = + AddLogicFocus::ScriptContentPreview; app_state.ui.focus_outside_canvas = true; - *is_edit_mode = false; *command_message = "Exited script editing.".to_string(); } } _ => { - if *is_edit_mode { - *is_edit_mode = false; - *command_message = "Exited script edit. Esc again to exit script.".to_string(); - } else { - add_logic_state.current_focus = AddLogicFocus::ScriptContentPreview; - app_state.ui.focus_outside_canvas = true; - *is_edit_mode = false; - *command_message = "Exited script editing.".to_string(); - } + add_logic_state.current_focus = AddLogicFocus::ScriptContentPreview; + app_state.ui.focus_outside_canvas = true; + *command_message = "Exited script editing.".to_string(); } } return true; } + // Normal text input let changed = { let mut editor_borrow = add_logic_state.script_content_editor.borrow_mut(); TextEditor::handle_input( @@ -285,12 +344,10 @@ pub fn handle_add_logic_navigation( if changed { add_logic_state.has_unsaved_changes = true; } - if add_logic_state.editor_keybinding_mode == EditorKeybindingMode::Vim { - *is_edit_mode = !TextEditor::is_vim_normal_mode(&add_logic_state.vim_state); - } return true; } + // === NON-FULLSCREEN NAVIGATION === let action = config.get_general_action(key_event.code, key_event.modifiers); let current_focus = add_logic_state.current_focus; let mut handled = true; @@ -304,8 +361,12 @@ pub fn handle_add_logic_navigation( match current_focus { AddLogicFocus::InputLogicName => {} AddLogicFocus::InputTargetColumn => new_focus = AddLogicFocus::InputLogicName, - AddLogicFocus::InputDescription => new_focus = AddLogicFocus::InputTargetColumn, - AddLogicFocus::ScriptContentPreview => new_focus = AddLogicFocus::InputDescription, + AddLogicFocus::InputDescription => { + new_focus = AddLogicFocus::InputTargetColumn + } + AddLogicFocus::ScriptContentPreview => { + new_focus = AddLogicFocus::InputDescription + } AddLogicFocus::SaveButton => new_focus = AddLogicFocus::ScriptContentPreview, AddLogicFocus::CancelButton => new_focus = AddLogicFocus::SaveButton, _ => handled = false, @@ -313,13 +374,19 @@ pub fn handle_add_logic_navigation( } Some("move_down") => { match current_focus { - AddLogicFocus::InputLogicName => new_focus = AddLogicFocus::InputTargetColumn, - AddLogicFocus::InputTargetColumn => new_focus = AddLogicFocus::InputDescription, + AddLogicFocus::InputLogicName => { + new_focus = AddLogicFocus::InputTargetColumn + } + AddLogicFocus::InputTargetColumn => { + new_focus = AddLogicFocus::InputDescription + } AddLogicFocus::InputDescription => { add_logic_state.last_canvas_field = 2; new_focus = AddLogicFocus::ScriptContentPreview; - }, - AddLogicFocus::ScriptContentPreview => new_focus = AddLogicFocus::SaveButton, + } + AddLogicFocus::ScriptContentPreview => { + new_focus = AddLogicFocus::SaveButton + } AddLogicFocus::SaveButton => new_focus = AddLogicFocus::CancelButton, AddLogicFocus::CancelButton => {} _ => handled = false, @@ -327,20 +394,30 @@ pub fn handle_add_logic_navigation( } Some("next_option") => { match current_focus { - AddLogicFocus::InputLogicName | AddLogicFocus::InputTargetColumn | AddLogicFocus::InputDescription => - { new_focus = AddLogicFocus::ScriptContentPreview; } - AddLogicFocus::ScriptContentPreview => new_focus = AddLogicFocus::SaveButton, + AddLogicFocus::InputLogicName + | AddLogicFocus::InputTargetColumn + | AddLogicFocus::InputDescription => { + new_focus = AddLogicFocus::ScriptContentPreview + } + AddLogicFocus::ScriptContentPreview => { + new_focus = AddLogicFocus::SaveButton + } AddLogicFocus::SaveButton => new_focus = AddLogicFocus::CancelButton, - AddLogicFocus::CancelButton => { } + AddLogicFocus::CancelButton => {} _ => handled = false, } } Some("previous_option") => { match current_focus { - AddLogicFocus::InputLogicName | AddLogicFocus::InputTargetColumn | AddLogicFocus::InputDescription => - { } - AddLogicFocus::ScriptContentPreview => new_focus = AddLogicFocus::InputDescription, - AddLogicFocus::SaveButton => new_focus = AddLogicFocus::ScriptContentPreview, + AddLogicFocus::InputLogicName + | AddLogicFocus::InputTargetColumn + | AddLogicFocus::InputDescription => {} + AddLogicFocus::ScriptContentPreview => { + new_focus = AddLogicFocus::InputDescription + } + AddLogicFocus::SaveButton => { + new_focus = AddLogicFocus::ScriptContentPreview + } AddLogicFocus::CancelButton => new_focus = AddLogicFocus::SaveButton, _ => handled = false, } @@ -371,35 +448,47 @@ pub fn handle_add_logic_navigation( match current_focus { AddLogicFocus::ScriptContentPreview => { new_focus = AddLogicFocus::InsideScriptContent; - *is_edit_mode = false; app_state.ui.focus_outside_canvas = false; let mode_hint = match add_logic_state.editor_keybinding_mode { - EditorKeybindingMode::Vim => "VIM mode - 'i'/'a'/'o' to edit", + EditorKeybindingMode::Vim => { + "VIM mode - 'i'/'a'/'o' to edit" + } _ => "Enter/Ctrl+E to edit", }; - *command_message = format!("Fullscreen script editing. {} or Esc to exit.", mode_hint); + *command_message = format!( + "Fullscreen script editing. {} or Esc to exit.", + mode_hint + ); + handled = true; } AddLogicFocus::SaveButton => { *command_message = "Save logic action".to_string(); + handled = true; } AddLogicFocus::CancelButton => { buffer_state.update_history(AppView::Admin); *command_message = "Cancelled Add Logic".to_string(); - *is_edit_mode = false; - + handled = true; } - AddLogicFocus::InputLogicName | AddLogicFocus::InputTargetColumn | AddLogicFocus::InputDescription => { - *is_edit_mode = !*is_edit_mode; - *command_message = format!("Field edit mode: {}", if *is_edit_mode { "ON" } else { "OFF" }); + AddLogicFocus::InputLogicName + | AddLogicFocus::InputTargetColumn + | AddLogicFocus::InputDescription => { + // Focus canvas inputs; let canvas keymap handle editing + app_state.ui.focus_outside_canvas = false; + handled = false; // forward to canvas } _ => handled = false, } } Some("toggle_edit_mode") => { match current_focus { - AddLogicFocus::InputLogicName | AddLogicFocus::InputTargetColumn | AddLogicFocus::InputDescription => { - *is_edit_mode = !*is_edit_mode; - *command_message = format!("Canvas field edit mode: {}", if *is_edit_mode { "ON" } else { "OFF" }); + AddLogicFocus::InputLogicName + | AddLogicFocus::InputTargetColumn + | AddLogicFocus::InputDescription => { + app_state.ui.focus_outside_canvas = false; + *command_message = + "Focus moved to input. Use i/a (Vim) or type to edit.".to_string(); + handled = true; } _ => { *command_message = "Cannot toggle edit mode here.".to_string(); @@ -411,22 +500,21 @@ pub fn handle_add_logic_navigation( if handled && current_focus != new_focus { add_logic_state.current_focus = new_focus; - let new_is_canvas_input_focus = matches!(new_focus, - AddLogicFocus::InputLogicName | AddLogicFocus::InputTargetColumn | AddLogicFocus::InputDescription + let new_is_canvas_input_focus = matches!( + new_focus, + AddLogicFocus::InputLogicName + | AddLogicFocus::InputTargetColumn + | AddLogicFocus::InputDescription ); if new_is_canvas_input_focus { - *is_edit_mode = false; app_state.ui.focus_outside_canvas = false; } else { app_state.ui.focus_outside_canvas = true; - if matches!(new_focus, AddLogicFocus::ScriptContentPreview) { - *is_edit_mode = false; - } } } handled } else { - return false; // not on AddLogic page + false } } @@ -436,7 +524,6 @@ fn replace_autocomplete_text( filter_len: usize, replacement: &str, ) { - // use tui_textarea::CursorMove; // Already imported at the top of the module let filter_start_pos = (trigger_pos.0, trigger_pos.1 + 1); editor.move_cursor(CursorMove::Jump(filter_start_pos.0 as u16, filter_start_pos.1 as u16)); for _ in 0..filter_len { diff --git a/client/src/modes/handlers/event.rs b/client/src/modes/handlers/event.rs index 5c723a7..12566c1 100644 --- a/client/src/modes/handlers/event.rs +++ b/client/src/modes/handlers/event.rs @@ -75,7 +75,6 @@ pub struct EventHandler { pub command_mode: bool, pub command_input: String, pub command_message: String, - pub is_edit_mode: bool, pub edit_mode_cooldown: bool, pub ideal_cursor_column: usize, pub key_sequence_tracker: KeySequenceTracker, @@ -106,7 +105,6 @@ impl EventHandler { command_mode: false, command_input: String::new(), command_message: String::new(), - is_edit_mode: false, edit_mode_cooldown: false, ideal_cursor_column: 0, key_sequence_tracker: KeySequenceTracker::new(400), @@ -396,7 +394,6 @@ impl EventHandler { key_event, config, app_state, - &mut self.is_edit_mode, buffer_state, client_clone, sender_clone, diff --git a/client/src/ui/handlers/render.rs b/client/src/ui/handlers/render.rs index 93ad8ae..740e4d6 100644 --- a/client/src/ui/handlers/render.rs +++ b/client/src/ui/handlers/render.rs @@ -35,7 +35,6 @@ pub fn render_ui( router: &mut Router, buffer_state: &BufferState, theme: &Theme, - is_event_handler_edit_mode: bool, event_handler_command_input: &str, event_handler_command_mode_active: bool, event_handler_command_message: &str, @@ -96,7 +95,7 @@ pub fn render_ui( Page::Admin(state) => crate::components::admin::admin_panel::render_admin_panel( f, app_state, - &mut AuthState::default(), // TODO: later move AuthState into Router + &mut AuthState::default(), state, main_content_area, theme, @@ -109,7 +108,6 @@ pub fn render_ui( theme, app_state, state, - is_event_handler_edit_mode, ), Page::AddTable(state) => render_add_table( f, @@ -117,7 +115,6 @@ pub fn render_ui( theme, app_state, state, - is_event_handler_edit_mode, ), Page::Form(state) => { let (sidebar_area, form_actual_area) = @@ -189,7 +186,6 @@ pub fn render_ui( &mut chunk_idx, current_dir, theme, - is_event_handler_edit_mode, current_fps, app_state, navigation_state, diff --git a/client/src/ui/handlers/ui.rs b/client/src/ui/handlers/ui.rs index a9bbd55..410c82b 100644 --- a/client/src/ui/handlers/ui.rs +++ b/client/src/ui/handlers/ui.rs @@ -544,7 +544,7 @@ pub async fn run_ui() -> Result<()> { if let Page::Form(form_state) = &mut router.current { if !table_just_switched { - if position_changed && !event_handler.is_edit_mode { + if position_changed && !matches!(app_state.form_editor.as_ref().map(|e| e.mode()), Some(canvas::AppMode::Edit)) { position_logic_needs_redraw = true; if let Some(form_state) = app_state.form_state_mut() { @@ -582,7 +582,7 @@ pub async fn run_ui() -> Result<()> { form_state.current_cursor_pos = event_handler.ideal_cursor_column.min(max_cursor_pos); } - } else if !position_changed && !event_handler.is_edit_mode { + } else if !position_changed && !matches!(app_state.form_editor.as_ref().map(|e| e.mode()), Some(canvas::AppMode::Edit)) { if let Some(form_state) = app_state.form_state_mut() { let current_input_str = form_state.get_current_input(); let current_input_len = current_input_str.chars().count(); @@ -597,7 +597,7 @@ pub async fn run_ui() -> Result<()> { } } } else if let Page::Register(state) = &mut router.current { - if !event_handler.is_edit_mode { + if !matches!(app_state.form_editor.as_ref().map(|e| e.mode()), Some(canvas::AppMode::Edit)) { let current_input = state.get_current_input(); let max_cursor_pos = if !current_input.is_empty() { current_input.len() - 1 } else { 0 }; @@ -605,7 +605,7 @@ pub async fn run_ui() -> Result<()> { event_handler.ideal_cursor_column.min(max_cursor_pos); } } else if let Page::Login(state) = &mut router.current { - if !event_handler.is_edit_mode { + if !matches!(app_state.form_editor.as_ref().map(|e| e.mode()), Some(canvas::AppMode::Edit)) { let current_input = state.get_current_input(); let max_cursor_pos = if !current_input.is_empty() { current_input.len() - 1 } else { 0 }; @@ -688,7 +688,6 @@ pub async fn run_ui() -> Result<()> { &mut router, &buffer_state, &theme, - event_handler.is_edit_mode, &event_handler.command_input, event_handler.command_mode, &event_handler.command_message,