feat: Add view stack to BottomPane (#4026)

Adds a "View Stack" to the bottom pane to allow for pushing/popping
bottom panels.

`esc` will go back instead of dismissing.

Benefit: We retain the "selection state" of a parent panel (e.g. the
review panel).
This commit is contained in:
dedrisian-oai
2025-09-22 11:29:39 -07:00
committed by GitHub
parent d2940bd4c3
commit 8daba53808
9 changed files with 70 additions and 109 deletions

View File

@@ -851,7 +851,7 @@ fn interrupt_exec_marks_failed_snapshot() {
/// parent popup, pressing Esc again dismisses all panels (back to normal mode).
#[test]
fn review_custom_prompt_escape_navigates_back_then_dismisses() {
let (mut chat, mut rx, _op_rx) = make_chatwidget_manual();
let (mut chat, _rx, _op_rx) = make_chatwidget_manual();
// Open the Review presets parent popup.
chat.open_review_popup();
@@ -868,13 +868,6 @@ fn review_custom_prompt_escape_navigates_back_then_dismisses() {
// Esc once: child view closes, parent (review presets) remains.
chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE));
// Process emitted app events to reopen the parent review popup.
while let Ok(ev) = rx.try_recv() {
if let AppEvent::OpenReviewPopup = ev {
chat.open_review_popup();
break;
}
}
let header = render_bottom_first_row(&chat, 60);
assert!(
header.contains("Select a review preset"),
@@ -893,7 +886,7 @@ fn review_custom_prompt_escape_navigates_back_then_dismisses() {
/// parent popup, pressing Esc again dismisses all panels (back to normal mode).
#[tokio::test(flavor = "current_thread")]
async fn review_branch_picker_escape_navigates_back_then_dismisses() {
let (mut chat, mut rx, _op_rx) = make_chatwidget_manual();
let (mut chat, _rx, _op_rx) = make_chatwidget_manual();
// Open the Review presets parent popup.
chat.open_review_popup();
@@ -911,13 +904,6 @@ async fn review_branch_picker_escape_navigates_back_then_dismisses() {
// Esc once: child view closes, parent remains.
chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE));
// Process emitted app events to reopen the parent review popup.
while let Ok(ev) = rx.try_recv() {
if let AppEvent::OpenReviewPopup = ev {
chat.open_review_popup();
break;
}
}
let header = render_bottom_first_row(&chat, 60);
assert!(
header.contains("Select a review preset"),