Skip to main content

codetether_agent/tui/ui/chat_view/
status.rs

1//! Bottom status-line span assembly.
2//!
3//! [`build_status_spans`] collects keybinding hints, auto-apply badge,
4//! bus status, latency, token usage, and status text into a single
5//! [`Span`] vector for the status bar.
6
7use ratatui::text::Span;
8
9use crate::tui::app::state::App;
10use crate::tui::ui::status_bar::{bus_status_badge_span, latency_badge_spans};
11
12use super::auto_apply::auto_apply_spans;
13use super::images_badge::pending_images_badge;
14use super::status_hints::header_spans;
15use super::status_text::status_text_span;
16use super::token_spans::push_token_spans;
17
18/// Assemble all status-bar spans in display order.
19///
20/// # Examples
21///
22/// ```rust,no_run
23/// use codetether_agent::tui::ui::chat_view::status::build_status_spans;
24/// # fn demo(app: &codetether_agent::tui::app::state::App) {
25/// let spans = build_status_spans(app, "test-session");
26/// assert!(!spans.is_empty());
27/// # }
28/// ```
29pub fn build_status_spans(app: &App, session_label: &str) -> Vec<Span<'static>> {
30    let mut spans = header_spans(session_label);
31    spans.extend(auto_apply_spans(app));
32    spans.push(Span::raw(" | "));
33    spans.push(bus_status_badge_span(app));
34    if let Some(badge) = pending_images_badge(app) {
35        spans.push(Span::raw(" | "));
36        spans.push(badge);
37    }
38    if let Some(latency) = latency_badge_spans(app) {
39        spans.push(Span::raw(" | "));
40        spans.extend(latency);
41    }
42    spans.push(Span::raw(" | "));
43    push_token_spans(&mut spans);
44    spans.push(Span::raw(" | "));
45    spans.push(status_text_span(app));
46    spans
47}