From c9131d44571e47707b86626376f2752f005f0968 Mon Sep 17 00:00:00 2001 From: filipriec Date: Wed, 11 Jun 2025 16:46:55 +0200 Subject: [PATCH] working but not properly displaying search results --- client/src/ui/handlers/render.rs | 156 ++++++++++++++++++++----------- 1 file changed, 99 insertions(+), 57 deletions(-) diff --git a/client/src/ui/handlers/render.rs b/client/src/ui/handlers/render.rs index dcc94b4..46393a6 100644 --- a/client/src/ui/handlers/render.rs +++ b/client/src/ui/handlers/render.rs @@ -1,35 +1,36 @@ -// client/src/ui/handlers/render.rs +// src/ui/handlers/render.rs use crate::components::{ + admin::add_logic::render_add_logic, + admin::render_add_table, + auth::{login::render_login, register::render_register}, + common::dialog::render_dialog, // Make sure this is imported + common::find_file_palette, + common::search_palette::render_search_palette, + form::form::render_form, + handlers::sidebar::{self, calculate_sidebar_layout}, + intro::intro::render_intro, render_background, render_buffer_list, render_command_line, render_status_line, - intro::intro::render_intro, - handlers::sidebar::{self, calculate_sidebar_layout}, - form::form::render_form, - admin::render_add_table, - admin::add_logic::render_add_logic, - auth::{login::render_login, register::render_register}, - common::find_file_palette, - common::search_palette::render_search_palette }; use crate::config::colors::themes::Theme; +use crate::modes::general::command_navigation::NavigationState; +use crate::state::app::buffer::BufferState; +use crate::state::app::highlight::HighlightState; +use crate::state::app::state::AppState; +use crate::state::pages::admin::AdminState; +use crate::state::pages::auth::AuthState; +use crate::state::pages::auth::LoginState; +use crate::state::pages::auth::RegisterState; +use crate::state::pages::canvas_state::CanvasState; +use crate::state::pages::form::FormState; +use crate::state::pages::intro::IntroState; use ratatui::{ layout::{Constraint, Direction, Layout}, Frame, }; -use crate::state::pages::canvas_state::CanvasState; -use crate::state::pages::form::FormState; -use crate::state::pages::auth::AuthState; -use crate::state::pages::auth::LoginState; -use crate::state::pages::auth::RegisterState; -use crate::state::pages::intro::IntroState; -use crate::state::app::buffer::BufferState; -use crate::state::app::state::AppState; -use crate::state::pages::admin::AdminState; -use crate::state::app::highlight::HighlightState; -use crate::modes::general::command_navigation::NavigationState; #[allow(clippy::too_many_arguments)] pub fn render_ui( @@ -63,7 +64,7 @@ pub fn render_ui( } else if event_handler_command_mode_active { 1 } else { - 0 // Neither is active + 0 }; if command_palette_area_height > 0 { @@ -76,7 +77,6 @@ pub fn render_ui( } main_layout_constraints.extend(bottom_area_constraints); - let root_chunks = Layout::default() .direction(Direction::Vertical) .constraints(main_layout_constraints) @@ -107,77 +107,99 @@ pub fn render_ui( None }; - if app_state.ui.show_intro { render_intro(f, intro_state, main_content_area, theme); } else if app_state.ui.show_register { render_register( - f, main_content_area, theme, register_state, app_state, + f, + main_content_area, + theme, + register_state, + app_state, register_state.current_field() < 4, highlight_state, ); } else if app_state.ui.show_add_table { render_add_table( - f, main_content_area, theme, app_state, &mut admin_state.add_table_state, + f, + main_content_area, + theme, + app_state, + &mut admin_state.add_table_state, is_event_handler_edit_mode, highlight_state, ); } else if app_state.ui.show_add_logic { render_add_logic( - f, main_content_area, theme, app_state, &mut admin_state.add_logic_state, - is_event_handler_edit_mode, highlight_state, + f, + main_content_area, + theme, + app_state, + &mut admin_state.add_logic_state, + is_event_handler_edit_mode, + highlight_state, ); } else if app_state.ui.show_login { render_login( - f, main_content_area, theme, login_state, app_state, + f, + main_content_area, + theme, + login_state, + app_state, login_state.current_field() < 2, highlight_state, ); } else if app_state.ui.show_admin { crate::components::admin::admin_panel::render_admin_panel( - f, app_state, auth_state, admin_state, main_content_area, theme, - &app_state.profile_tree, &app_state.selected_profile, + f, + app_state, + auth_state, + admin_state, + main_content_area, + theme, + &app_state.profile_tree, + &app_state.selected_profile, ); - } else if app_state.ui.show_form { - let (sidebar_area, form_actual_area) = calculate_sidebar_layout( - app_state.ui.show_sidebar, main_content_area - ); + let (sidebar_area, form_actual_area) = + calculate_sidebar_layout(app_state.ui.show_sidebar, main_content_area); if let Some(sidebar_rect) = sidebar_area { sidebar::render_sidebar( - f, sidebar_rect, theme, &app_state.profile_tree, &app_state.selected_profile + f, + sidebar_rect, + theme, + &app_state.profile_tree, + &app_state.selected_profile, ); } let available_width = form_actual_area.width; let form_render_area = if available_width >= 80 { - Layout::default().direction(Direction::Horizontal) + Layout::default() + .direction(Direction::Horizontal) .constraints([Constraint::Min(0), Constraint::Length(80), Constraint::Min(0)]) .split(form_actual_area)[1] } else { - Layout::default().direction(Direction::Horizontal) - .constraints([Constraint::Min(0), Constraint::Length(available_width), Constraint::Min(0)]) + Layout::default() + .direction(Direction::Horizontal) + .constraints([ + Constraint::Min(0), + Constraint::Length(available_width), + Constraint::Min(0), + ]) .split(form_actual_area)[1] }; - let fields_vec: Vec<&str> = form_state.fields.iter().map(AsRef::as_ref).collect(); - let values_vec: Vec<&String> = form_state.values.iter().collect(); - - // --- START FIX --- - // Add the missing `&form_state.table_name` argument to this function call. - render_form( + + // --- FIX START --- + // The call to `form_state.render` is now separate from the popup rendering. + form_state.render( f, form_render_area, - form_state, - &fields_vec, - &form_state.current_field, - &values_vec, - &form_state.table_name, // <-- THIS ARGUMENT WAS MISSING theme, is_event_handler_edit_mode, highlight_state, - form_state.total_count, - form_state.current_position, + app_state, ); - // --- END FIX --- + // --- FIX END --- } if let Some(area) = buffer_list_area { @@ -194,23 +216,43 @@ pub fn render_ui( app_state, ); - if let Some(palette_or_command_area) = command_render_area { // Use the calculated area + if let Some(palette_or_command_area) = command_render_area { if navigation_state.active { find_file_palette::render_find_file_palette( f, - palette_or_command_area, // Use the correct area + palette_or_command_area, theme, - navigation_state, // Pass the navigation_state directly + navigation_state, ); } else if event_handler_command_mode_active { render_command_line( f, - palette_or_command_area, // Use the correct area + palette_or_command_area, event_handler_command_input, - true, // Assuming it's always active when this branch is hit + true, theme, event_handler_command_message, ); } } + + // --- FIX START --- + // This block now handles drawing popups over any view. This is the correct place for it. + if app_state.ui.show_search_palette { + if let Some(search_state) = &app_state.search_state { + render_search_palette(f, f.area(), theme, search_state); + } + } else if app_state.ui.dialog.dialog_show { + render_dialog( + f, + f.area(), + theme, + &app_state.ui.dialog.dialog_title, + &app_state.ui.dialog.dialog_message, + &app_state.ui.dialog.dialog_buttons, + app_state.ui.dialog.dialog_active_button_index, + app_state.ui.dialog.is_loading, + ); + } + // --- FIX END --- }