on main help sign in
perf(ui): dialog: preallocate slice for filterable items in ModelsList
e16eae1Ayman Bagabas
internal/ui/dialog/models_list.go+10−1
@@ -26,6 +26,15 @@ func NewModelsList(sty *styles.Styles, groups ...ModelGroup) *ModelsList {
26 return f
26 return f
27}
27}
28
28
29+// Len returns the number of model items across all groups.
30+func (f *ModelsList) Len() int {
31+ n := 0
32+ for _, g := range f.groups {
33+ n += len(g.Items)
34+ }
35+ return n
36+}
37+
29// SetGroups sets the model groups and updates the list items.
38// SetGroups sets the model groups and updates the list items.
30func (f *ModelsList) SetGroups(groups ...ModelGroup) {
39func (f *ModelsList) SetGroups(groups ...ModelGroup) {
31 f.groups = groups
40 f.groups = groups
@@ -81,7 +90,7 @@ func (f *ModelsList) VisibleItems() []list.Item {
81 return items
90 return items
82 }
91 }
83
92
84− filterableItems := []list.FilterableItem{}
93+ filterableItems := make([]list.FilterableItem, 0, f.Len())
85 for _, g := range f.groups {
94 for _, g := range f.groups {
86 for _, item := range g.Items {
95 for _, item := range g.Items {
87 filterableItems = append(filterableItems, item)
96 filterableItems = append(filterableItems, item)