on main help sign in
perf(ui): dialog: preallocate slice for filterable items in ModelsList
commite16eae1a23ea4849429d0f69f711dd58d3e12638 authorAyman Bagabas <ayman.bagabas@gmail.com> dateThu 18 Dec 2025, 16:37 (1 year ago) parent67ac46a
1 file changed+10−1
internal/ui/dialog/models_list.go+10−1
internal/ui/dialog/models_list.go+10−1
@@ -26,6 +26,15 @@ func NewModelsList(sty *styles.Styles, groups ...ModelGroup) *ModelsList {
2626 return f
2727}
2828
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+
2938// SetGroups sets the model groups and updates the list items.
3039func (f *ModelsList) SetGroups(groups ...ModelGroup) {
3140 f.groups = groups
@@ -81,7 +90,7 @@ func (f *ModelsList) VisibleItems() []list.Item {
8190 return items
8291 }
8392
84− filterableItems := []list.FilterableItem{}
93+ filterableItems := make([]list.FilterableItem, 0, f.Len())
8594 for _, g := range f.groups {
8695 for _, item := range g.Items {
8796 filterableItems = append(filterableItems, item)