the search tui is not working yet

This commit is contained in:
filipriec
2025-06-11 22:08:23 +02:00
parent c9131d4457
commit 3c0af05a3c
5 changed files with 47 additions and 55 deletions

View File

@@ -48,6 +48,7 @@ use crossterm::event::KeyCode;
use crossterm::event::{Event, KeyEvent};
use tokio::sync::mpsc;
use tokio::sync::mpsc::unbounded_channel;
use tracing::{info, error};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EventOutcome {
@@ -122,11 +123,11 @@ impl EventHandler {
self.navigation_state.activate_find_file(options);
}
// REFACTORED: This function now safely handles state changes.
// This function handles state changes.
async fn handle_search_palette_event(
&mut self,
key_event: KeyEvent,
grpc_client: &mut GrpcClient,
mut grpc_client: GrpcClient,
form_state: &mut FormState,
app_state: &mut AppState,
) -> Result<EventOutcome> {
@@ -175,6 +176,7 @@ impl EventHandler {
_ => {}
}
// --- START CORRECTED LOGIC ---
if trigger_search {
search_state.is_loading = true;
search_state.results.clear();
@@ -182,14 +184,19 @@ impl EventHandler {
let query = search_state.input.clone();
let table_name = search_state.table_name.clone();
let mut client = grpc_client.clone();
let sender = self.search_result_sender.clone();
// We now move the grpc_client into the task, just like with login.
tokio::spawn(async move {
if let Ok(response) = client.search_table(table_name, query).await {
let _ = sender.send(response.hits);
} else {
let _ = sender.send(vec![]);
match grpc_client.search_table(table_name, query).await {
Ok(response) => {
info!("Search successful. Received {} hits.", response.hits.len());
let _ = sender.send(response.hits);
}
Err(e) => {
error!("gRPC search call failed: {}", e);
let _ = sender.send(vec![]);
}
}
});
}
@@ -232,7 +239,7 @@ impl EventHandler {
if app_state.ui.show_search_palette {
if let Event::Key(key_event) = event {
return self.handle_search_palette_event(key_event, grpc_client, form_state, app_state).await;
return self.handle_search_palette_event(key_event, grpc_client.clone(), form_state, app_state).await;
}
return Ok(EventOutcome::Ok(String::new()));
}