chore: reduce component overhead (#3)
Reviewed-on: #3
This commit was merged in pull request #3.
This commit is contained in:
@@ -206,24 +206,18 @@ where
|
||||
.position(|option| &option.value == value)
|
||||
});
|
||||
|
||||
let trigger_options = self.options.clone();
|
||||
let trigger_selected = self.selected.clone();
|
||||
let trigger_placeholder = self.placeholder.clone();
|
||||
// The trigger's text is fixed at render time; only it moves into the closure.
|
||||
let trigger_text = selected_index
|
||||
.and_then(|index| self.options.get(index))
|
||||
.map(|option| option.label.clone())
|
||||
.unwrap_or_else(|| self.placeholder.clone());
|
||||
|
||||
let trigger_has_value = self.selected.is_some();
|
||||
let trigger_id = self.id.clone();
|
||||
let trigger_label = label.clone();
|
||||
let trigger_style = self.style;
|
||||
|
||||
let trigger = move |_window: &mut Window, _cx: &mut App| {
|
||||
let text = trigger_selected
|
||||
.as_ref()
|
||||
.and_then(|value| {
|
||||
trigger_options
|
||||
.iter()
|
||||
.find(|option| &option.value == value)
|
||||
.map(|option| option.label.clone())
|
||||
})
|
||||
.unwrap_or_else(|| trigger_placeholder.clone());
|
||||
|
||||
h_flex()
|
||||
.id((trigger_id.clone(), "select-trigger"))
|
||||
.debug_selector(|| "select-trigger".to_string())
|
||||
@@ -240,7 +234,7 @@ where
|
||||
.border_color(rest_border)
|
||||
.bg(input)
|
||||
.text_size(metrics.text_size)
|
||||
.text_color(if trigger_selected.is_some() {
|
||||
.text_color(if trigger_has_value {
|
||||
foreground
|
||||
} else {
|
||||
muted_foreground
|
||||
@@ -249,7 +243,7 @@ where
|
||||
trigger.shadow(focus_ring(ring))
|
||||
})
|
||||
.hover(|style| style.bg(muted).border_color(hover_border))
|
||||
.child(text)
|
||||
.child(trigger_text.clone())
|
||||
.child(
|
||||
icon(IconRole::ChevronDown)
|
||||
.size(icon_size)
|
||||
|
||||
Reference in New Issue
Block a user