feat(tui): Extend search to path if name does not match

This commit is contained in:
Patrick Auernig 2024-12-06 22:06:13 +01:00
parent 4691dd05d1
commit a135e2417f

View File

@ -1,10 +1,11 @@
use std::collections::VecDeque;
use std::sync::mpsc;
use anyhow::Result;
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers};
use ratatui::layout::{Constraint, Layout, Rect};
use ratatui::style::{Color, Style};
use ratatui::text::{Line, Span};
use ratatui::text::Span;
use ratatui::widgets::{Block, Borders, Cell, Paragraph, Row, Table, TableState};
use ratatui::Frame;
use tracing::trace;
@ -208,22 +209,32 @@ fn draw_search(state: &mut State, frame: &mut Frame, area: Rect) {
fn draw_list(state: &mut State, frame: &mut Frame, area: Rect) {
state.filtered_projects = state
.projects
.list
.iter()
.filter_map(|project| {
let search_value = state.search.value();
let search_value = state.search.value();
let projects = &state.projects.list;
if search_value.is_empty() {
return Some(project.clone());
state.filtered_projects = if search_value.is_empty() {
projects.clone()
} else {
let mut filtered = VecDeque::new();
for project in projects.iter() {
match fuzzy_search(search_value, &project.name()) {
Some(indices) => {
trace!(?search_value, ?project, ?indices);
filtered.push_front(project.clone());
}
None => {
let path = project.path().to_str().unwrap();
if let Some(indices) = fuzzy_search(search_value, path) {
trace!(?search_value, ?project, ?indices);
filtered.push_back(project.clone());
}
}
}
}
let indices = fuzzy_search(search_value, &project.name())?;
trace!(?search_value, ?project, ?indices);
Some(project.clone())
})
.collect();
Vec::from(filtered)
};
let rows = state.filtered_projects.iter().map(|project| {
let name = project.name();