aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-20 22:08:04 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-20 22:08:04 +0300
commitc584037c77c63f6a08f8837f357c89432b8043e7 (patch)
tree16647d6628a11dbbf5e576fb86f2a87b507e202e /src/ui
parentf7b26a911772dab16a49d982002d2bbe58e0956b (diff)
feat: badge outdated integration updates
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/menus.rs65
-rw-r--r--src/ui/settings.rs15
-rw-r--r--src/ui/sidebar.rs8
3 files changed, 40 insertions, 48 deletions
diff --git a/src/ui/menus.rs b/src/ui/menus.rs
index d17aa897..aa5e3b79 100644
--- a/src/ui/menus.rs
+++ b/src/ui/menus.rs
@@ -148,53 +148,32 @@ pub(super) fn render_global_launcher_menu(app: &AppState, frame: &mut Frame) {
let selected = idx == app.global_menu.highlighted;
let rect = Rect::new(inner.x, y, inner.width, 1);
- if *item == "update ready" {
- let line = if selected {
- Line::from(vec![
- Span::styled(
- " update ready ",
- Style::default()
- .fg(panel_contrast_fg(&app.palette))
- .bg(app.palette.accent)
- .add_modifier(Modifier::BOLD),
- ),
- Span::styled(
- "● ",
- Style::default()
- .fg(panel_contrast_fg(&app.palette))
- .bg(app.palette.accent)
- .add_modifier(Modifier::BOLD),
- ),
- ])
- } else {
- Line::from(vec![
- Span::styled(" update ready ", Style::default().fg(app.palette.text)),
- Span::styled(
- "● ",
- Style::default()
- .fg(app.palette.accent)
- .add_modifier(Modifier::BOLD),
- ),
- ])
- };
- frame.render_widget(Paragraph::new(line).alignment(Alignment::Left), rect);
- continue;
- }
-
- let style = if selected {
+ let selected_style = Style::default()
+ .fg(panel_contrast_fg(&app.palette))
+ .bg(app.palette.accent)
+ .add_modifier(Modifier::BOLD);
+ let item_style = if selected {
+ selected_style
+ } else {
+ Style::default().fg(app.palette.text)
+ };
+ let badge_style = if selected {
+ selected_style
+ } else {
Style::default()
- .fg(panel_contrast_fg(&app.palette))
- .bg(app.palette.accent)
+ .fg(app.palette.accent)
.add_modifier(Modifier::BOLD)
+ };
+
+ let line = if app.global_menu_item_has_badge(item) {
+ Line::from(vec![
+ Span::styled(" ●", badge_style),
+ Span::styled(format!(" {item} "), item_style),
+ ])
} else {
- Style::default().fg(app.palette.text)
+ Line::from(Span::styled(format!(" {item} "), item_style))
};
- frame.render_widget(
- Paragraph::new(format!(" {item} "))
- .style(style)
- .alignment(Alignment::Left),
- rect,
- );
+ frame.render_widget(Paragraph::new(line).alignment(Alignment::Left), rect);
}
}
diff --git a/src/ui/settings.rs b/src/ui/settings.rs
index c191eef2..f104c882 100644
--- a/src/ui/settings.rs
+++ b/src/ui/settings.rs
@@ -48,7 +48,20 @@ pub(super) fn render_settings_overlay(app: &AppState, frame: &mut Frame, area: R
header_rows[0],
);
- let tabs = Tabs::new(SettingsSection::ALL.iter().map(|s| s.label()))
+ let tab_labels = SettingsSection::ALL.iter().map(|section| {
+ if app.settings_section_has_badge(*section) {
+ Line::from(vec![
+ Span::styled(
+ "● ",
+ Style::default().fg(p.accent).add_modifier(Modifier::BOLD),
+ ),
+ Span::raw(section.label()),
+ ])
+ } else {
+ Line::from(section.label())
+ }
+ });
+ let tabs = Tabs::new(tab_labels)
.select(
SettingsSection::ALL
.iter()
diff --git a/src/ui/sidebar.rs b/src/ui/sidebar.rs
index b6b5bc9e..1d722d2a 100644
--- a/src/ui/sidebar.rs
+++ b/src/ui/sidebar.rs
@@ -731,13 +731,13 @@ fn render_workspace_list(app: &AppState, frame: &mut Frame, area: Rect, is_navig
);
let menu_rect = app.global_launcher_rect();
- let menu_line = if app.update_available.is_some() {
+ let menu_line = if app.global_menu_attention_badge_visible() {
Line::from(vec![
- Span::styled("menu", Style::default().fg(p.overlay0)),
Span::styled(
- " ●",
+ "● ",
Style::default().fg(p.accent).add_modifier(Modifier::BOLD),
),
+ Span::styled("menu", Style::default().fg(p.overlay0)),
])
} else {
Line::from(vec![Span::styled("menu", Style::default().fg(p.overlay0))])
@@ -887,7 +887,7 @@ fn render_sidebar_toggle(
if toggle_area == Rect::default() {
return;
}
- let icon_style = if app.update_available.is_some() {
+ let icon_style = if app.global_menu_attention_badge_visible() {
Style::default().fg(p.accent).add_modifier(Modifier::BOLD)
} else {
Style::default().fg(p.overlay0)