feat(tui): Extend search to path if name does not match
This commit is contained in:
parent
4691dd05d1
commit
a135e2417f
39
src/tui.rs
39
src/tui.rs
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user