Show loading state when @ search results are pending (#3061)
## Summary - allow selection popups to specify their empty state message - show a "loading..." placeholder in the file search popup while matches are pending - update other popup call sites to continue using a "no matches" message ## Testing - just fmt - just fix -p codex-tui - cargo test -p codex-tui ------ https://chatgpt.com/codex/tasks/task_i_68b73e956e90832caf4d04a75fcc9c46
This commit is contained in:
@@ -195,7 +195,15 @@ impl WidgetRef for CommandPopup {
|
||||
})
|
||||
.collect()
|
||||
};
|
||||
render_rows(area, buf, &rows_all, &self.state, MAX_POPUP_ROWS, false);
|
||||
render_rows(
|
||||
area,
|
||||
buf,
|
||||
&rows_all,
|
||||
&self.state,
|
||||
MAX_POPUP_ROWS,
|
||||
false,
|
||||
"no matches",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -132,11 +132,20 @@ impl WidgetRef for &FileSearchPopup {
|
||||
.collect()
|
||||
};
|
||||
|
||||
if self.waiting && rows_all.is_empty() {
|
||||
// Render a minimal waiting stub using the shared renderer (no rows -> "no matches").
|
||||
render_rows(area, buf, &[], &self.state, MAX_POPUP_ROWS, false);
|
||||
let empty_message = if self.waiting {
|
||||
"loading..."
|
||||
} else {
|
||||
render_rows(area, buf, &rows_all, &self.state, MAX_POPUP_ROWS, false);
|
||||
}
|
||||
"no matches"
|
||||
};
|
||||
|
||||
render_rows(
|
||||
area,
|
||||
buf,
|
||||
&rows_all,
|
||||
&self.state,
|
||||
MAX_POPUP_ROWS,
|
||||
false,
|
||||
empty_message,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,7 +222,15 @@ impl BottomPaneView for ListSelectionView {
|
||||
})
|
||||
.collect();
|
||||
if rows_area.height > 0 {
|
||||
render_rows(rows_area, buf, &rows, &self.state, MAX_POPUP_ROWS, true);
|
||||
render_rows(
|
||||
rows_area,
|
||||
buf,
|
||||
&rows,
|
||||
&self.state,
|
||||
MAX_POPUP_ROWS,
|
||||
true,
|
||||
"no matches",
|
||||
);
|
||||
}
|
||||
|
||||
if let Some(hint) = &self.footer_hint {
|
||||
|
||||
@@ -36,11 +36,12 @@ pub(crate) fn render_rows(
|
||||
state: &ScrollState,
|
||||
max_results: usize,
|
||||
_dim_non_selected: bool,
|
||||
empty_message: &str,
|
||||
) {
|
||||
let mut rows: Vec<Row> = Vec::new();
|
||||
if rows_all.is_empty() {
|
||||
rows.push(Row::new(vec![Cell::from(Line::from(
|
||||
"no matches".dim().italic(),
|
||||
empty_message.dim().italic(),
|
||||
))]));
|
||||
} else {
|
||||
let max_rows_from_area = area.height as usize;
|
||||
|
||||
Reference in New Issue
Block a user