From 68d18aad163a45bc59f68829824ff71ea614c8e5 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sun, 15 Mar 2026 19:59:15 +0100 Subject: [PATCH] feat(ui): add error field and red status line display --- crates/k-launcher-ui/src/app.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/k-launcher-ui/src/app.rs b/crates/k-launcher-ui/src/app.rs index 8294ebd..3ff9654 100644 --- a/crates/k-launcher-ui/src/app.rs +++ b/crates/k-launcher-ui/src/app.rs @@ -26,6 +26,7 @@ pub struct KLauncherApp { results: Arc>, selected: usize, cfg: AppearanceCfg, + error: Option, } impl KLauncherApp { @@ -41,6 +42,7 @@ impl KLauncherApp { results: Arc::new(vec![]), selected: 0, cfg, + error: None, } } } @@ -55,6 +57,7 @@ pub enum Message { fn update(state: &mut KLauncherApp, message: Message) -> Task { match message { Message::QueryChanged(q) => { + state.error = None; state.query = q.clone(); state.selected = 0; let engine = state.engine.clone(); @@ -186,7 +189,22 @@ fn view(state: &KLauncherApp) -> Element<'_, Message> { scrollable(column(result_rows).spacing(2).width(Length::Fill)).height(Length::Fill) }; - let content = column![search_bar, results_list] + let maybe_error: Option> = state.error.as_ref().map(|msg| { + container( + text(msg.as_str()) + .size(12.0) + .color(Color::from_rgba8(255, 80, 80, 1.0)), + ) + .width(Length::Fill) + .padding([4, 12]) + .into() + }); + + let mut content_children: Vec> = vec![search_bar.into(), results_list.into()]; + if let Some(err) = maybe_error { + content_children.push(err); + } + let content = column(content_children) .spacing(8) .padding(12) .width(Length::Fill)