feat(tui): Extend search to path if name does not match
This commit is contained in:
parent
4691dd05d1
commit
a135e2417f
37
src/tui.rs
37
src/tui.rs
@ -1,10 +1,11 @@
|
|||||||
|
use std::collections::VecDeque;
|
||||||
use std::sync::mpsc;
|
use std::sync::mpsc;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers};
|
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers};
|
||||||
use ratatui::layout::{Constraint, Layout, Rect};
|
use ratatui::layout::{Constraint, Layout, Rect};
|
||||||
use ratatui::style::{Color, Style};
|
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::widgets::{Block, Borders, Cell, Paragraph, Row, Table, TableState};
|
||||||
use ratatui::Frame;
|
use ratatui::Frame;
|
||||||
use tracing::trace;
|
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) {
|
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() {
|
state.filtered_projects = if search_value.is_empty() {
|
||||||
return Some(project.clone());
|
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())?;
|
Vec::from(filtered)
|
||||||
trace!(?search_value, ?project, ?indices);
|
};
|
||||||
Some(project.clone())
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
let rows = state.filtered_projects.iter().map(|project| {
|
let rows = state.filtered_projects.iter().map(|project| {
|
||||||
let name = project.name();
|
let name = project.name();
|
||||||
|
Loading…
Reference in New Issue
Block a user