MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / render

Method render

crates/opencode-tui/src/components/dialogs/tag.rs:82–115  ·  view source on GitHub ↗
(&self, frame: &mut Frame, area: Rect, theme: &Theme)

Source from the content-addressed store, hash-verified

80 }
81
82 pub fn render(&self, frame: &mut Frame, area: Rect, theme: &Theme) {
83 if !self.open || self.tags.is_empty() {
84 return;
85 }
86
87 let height = (self.tags.len() as u16 + 2).min(15);
88 let width = 40u16;
89 let popup_area = super::centered_rect(width, height, area);
90 let block = Block::default()
91 .title(" Select Tags ")
92 .borders(Borders::ALL)
93 .border_style(Style::default().fg(theme.border))
94 .style(Style::default().bg(theme.background_panel));
95 let content_area = super::dialog_inner(block.inner(popup_area));
96
97 let items: Vec<ListItem> = self
98 .tags
99 .iter()
100 .map(|tag| {
101 let is_checked = self.selected_tags.contains(&tag.id);
102 let check_mark = if is_checked { "☑" } else { "☐" };
103 ListItem::new(Line::from(vec![
104 Span::styled(check_mark, Style::default().fg(theme.primary)),
105 Span::styled(format!(" {}", tag.name), Style::default().fg(theme.text)),
106 ]))
107 })
108 .collect();
109
110 frame.render_widget(block, popup_area);
111
112 let list = List::new(items).highlight_style(Style::default().fg(theme.primary));
113
114 frame.render_widget(list, content_area);
115 }
116}
117
118impl Default for TagDialog {

Callers

nothing calls this directly

Calls 6

dialog_innerFunction · 0.85
newFunction · 0.85
is_emptyMethod · 0.80
containsMethod · 0.80
centered_rectFunction · 0.70
titleMethod · 0.45

Tested by

no test coverage detected