feat: clear filter in multi-select download screen function
This commit is contained in:
+36
-17
@@ -926,6 +926,11 @@ impl FileSelector {
|
|||||||
KeyCode::Char('/') => {
|
KeyCode::Char('/') => {
|
||||||
self.is_searching = true;
|
self.is_searching = true;
|
||||||
}
|
}
|
||||||
|
KeyCode::Char('c') => {
|
||||||
|
// Clear filter
|
||||||
|
self.search_query.clear();
|
||||||
|
self.apply_filter();
|
||||||
|
}
|
||||||
KeyCode::Up | KeyCode::Char('k') => self.select_previous(),
|
KeyCode::Up | KeyCode::Char('k') => self.select_previous(),
|
||||||
KeyCode::Down | KeyCode::Char('j') => self.select_next(),
|
KeyCode::Down | KeyCode::Char('j') => self.select_next(),
|
||||||
KeyCode::Home | KeyCode::Char('g') => self.select_first(),
|
KeyCode::Home | KeyCode::Char('g') => self.select_first(),
|
||||||
@@ -1018,6 +1023,7 @@ impl FileSelector {
|
|||||||
|
|
||||||
let (table_area, info_area) = if self.is_searching
|
let (table_area, info_area) = if self.is_searching
|
||||||
|| !self.selected_indices.is_empty()
|
|| !self.selected_indices.is_empty()
|
||||||
|
|| !self.search_query.is_empty()
|
||||||
{
|
{
|
||||||
let chunks =
|
let chunks =
|
||||||
Layout::vertical([Constraint::Min(0), Constraint::Length(3)])
|
Layout::vertical([Constraint::Min(0), Constraint::Length(3)])
|
||||||
@@ -1048,6 +1054,12 @@ impl FileSelector {
|
|||||||
self.items.len(),
|
self.items.len(),
|
||||||
self.all_items.len()
|
self.all_items.len()
|
||||||
)
|
)
|
||||||
|
} else if !self.search_query.is_empty() {
|
||||||
|
format!(
|
||||||
|
"Multi-select files to download ({} selected, {} filtered, Space: toggle, a: select-all, A: deselect-all, Enter: download, Esc/q: cancel, /: modify filter, c: clear filter)",
|
||||||
|
self.selected_indices.len(),
|
||||||
|
self.items.len()
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
format!(
|
format!(
|
||||||
"Multi-select files to download ({} selected, Space: toggle, a: select-all, A: deselect-all, Enter: download, Esc/q: cancel, /: search)",
|
"Multi-select files to download ({} selected, Space: toggle, a: select-all, A: deselect-all, Enter: download, Esc/q: cancel, /: search)",
|
||||||
@@ -1182,28 +1194,35 @@ impl FileSelector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(info_area) = info_area {
|
if let Some(info_area) = info_area {
|
||||||
let info_text = if self.is_searching {
|
let (info_text, title, color) = if self.is_searching {
|
||||||
format!("Search: {}", self.search_query)
|
(
|
||||||
|
format!("Search: {}", self.search_query),
|
||||||
|
"Filter",
|
||||||
|
Color::Yellow,
|
||||||
|
)
|
||||||
|
} else if !self.search_query.is_empty() {
|
||||||
|
(
|
||||||
|
format!(
|
||||||
|
"Current filter: {} (press / to modify, c to clear)",
|
||||||
|
self.search_query
|
||||||
|
),
|
||||||
|
"Filter",
|
||||||
|
Color::Cyan,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
format!(
|
(
|
||||||
"{} file(s) selected for download",
|
format!(
|
||||||
self.selected_indices.len()
|
"{} file(s) selected for download",
|
||||||
|
self.selected_indices.len()
|
||||||
|
),
|
||||||
|
"Selection",
|
||||||
|
Color::Green,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let info_widget = Paragraph::new(info_text)
|
let info_widget = Paragraph::new(info_text)
|
||||||
.block(Block::default().borders(Borders::ALL).title(
|
.block(Block::default().borders(Borders::ALL).title(title))
|
||||||
if self.is_searching {
|
.style(Style::default().fg(color));
|
||||||
"Filter"
|
|
||||||
} else {
|
|
||||||
"Selection"
|
|
||||||
},
|
|
||||||
))
|
|
||||||
.style(Style::default().fg(if self.is_searching {
|
|
||||||
Color::Yellow
|
|
||||||
} else {
|
|
||||||
Color::Green
|
|
||||||
}));
|
|
||||||
|
|
||||||
frame.render_widget(info_widget, info_area);
|
frame.render_widget(info_widget, info_area);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user