diff --git a/cmd/search/model.go b/cmd/search/model.go index 87ff1bb9..793c8432 100644 --- a/cmd/search/model.go +++ b/cmd/search/model.go @@ -2,6 +2,8 @@ package search import ( "context" + "sort" + "strings" "time" "github.com/buildsafedev/bsf/cmd/styles" @@ -26,11 +28,31 @@ func (i pkgitem) FilterValue() string { return i.name } -func convLPR2Items(packages *buildsafev1.ListPackagesResponse) []list.Item { +func convLPR2Items(packages *buildsafev1.ListPackagesResponse, args ...string) []list.Item { items := make([]list.Item, 0, len(packages.Packages)) - for _, name := range packages.Packages { - items = append(items, pkgitem{name: name}) + + if len(args) == 0 || args[0] == "" { + return nil + } + + for _, pkg := range packages.Packages { + if strings.Contains(pkg, args[0]) { + items = append(items, pkgitem{name: pkg}) + } } + sort.Slice(items, func(i, j int) bool { + nameI := items[i].(pkgitem).name + nameJ := items[j].(pkgitem).name + + if strings.HasPrefix(nameI, args[0]) && !strings.HasPrefix(nameJ, args[0]) { + return true + } + if !strings.HasPrefix(nameI, args[0]) && strings.HasPrefix(nameJ, args[0]) { + return false + } + + return nameI < nameJ + }) return items } diff --git a/cmd/search/search.go b/cmd/search/search.go index a59dfc42..a343628b 100644 --- a/cmd/search/search.go +++ b/cmd/search/search.go @@ -73,7 +73,7 @@ var SearchCmd = &cobra.Command{ fmt.Println(errorStyle.Render(fmt.Errorf("error: %v", err).Error())) os.Exit(1) } - items := convLPR2Items(packages) + items := convLPR2Items(packages, args...) m := InitSearch(items) if _, err := tea.NewProgram(m, tea.WithAltScreen()).Run(); err != nil { fmt.Println(errorStyle.Render(fmt.Errorf("error: %v", err).Error()))