diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 6b9527ba..ad9f8b56 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -71,10 +71,6 @@ func (gui *Gui) getContainersPanel() *SideListPanel[*commands.Container] { }, } }, - getSearchStrings: func(container *commands.Container) []string { - // TODO: think about more things to search on - return []string{container.Name} - }, getContextCacheKey: func(container *commands.Container) string { return container.ID + "-" + container.Container.State }, diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index aae2ca3c..a9f0ac3c 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -87,7 +87,6 @@ type guiState struct { } type searchingState struct { - view *gocui.View panel ISideListPanel isSearching bool searchString string diff --git a/pkg/gui/images_panel.go b/pkg/gui/images_panel.go index 1d405eab..cdfb38a3 100644 --- a/pkg/gui/images_panel.go +++ b/pkg/gui/images_panel.go @@ -37,9 +37,6 @@ func (gui *Gui) getImagesPanel() *SideListPanel[*commands.Image] { }, } }, - getSearchStrings: func(image *commands.Image) []string { - return []string{image.Name, image.Tag} - }, getContextCacheKey: func(image *commands.Image) string { return image.ID }, @@ -113,7 +110,7 @@ func (gui *Gui) refreshStateImages() error { } func (gui *Gui) filterString(view *gocui.View) string { - if gui.State.Searching.view != view { + if gui.State.Searching.panel != nil && gui.State.Searching.panel.View() != view { return "" } diff --git a/pkg/gui/list_panel.go b/pkg/gui/list_panel.go index abdd960a..08af209c 100644 --- a/pkg/gui/list_panel.go +++ b/pkg/gui/list_panel.go @@ -63,9 +63,6 @@ type SideListPanel[T comparable] struct { gui IGui - // returns strings that can be filtered on - getSearchStrings func(item T) []string - // this filter is applied on top of additional default filters filter func(T) bool sort func(a, b T) bool @@ -244,7 +241,7 @@ func (self *SideListPanel[T]) FilterAndSort() { } if lo.SomeBy(self.gui.IgnoreStrings(), func(ignore string) bool { - return lo.SomeBy(self.getSearchStrings(item), func(searchString string) bool { + return lo.SomeBy(self.getDisplayStrings(item), func(searchString string) bool { return strings.Contains(searchString, ignore) }) }) { @@ -252,7 +249,7 @@ func (self *SideListPanel[T]) FilterAndSort() { } if filterString != "" { - return lo.SomeBy(self.getSearchStrings(item), func(searchString string) bool { + return lo.SomeBy(self.getDisplayStrings(item), func(searchString string) bool { return strings.Contains(searchString, filterString) }) } diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go index c951449d..f14fae9b 100644 --- a/pkg/gui/menu_panel.go +++ b/pkg/gui/menu_panel.go @@ -31,11 +31,8 @@ func (gui *Gui) getMenuPanel() *SideListPanel[*MenuItem] { }, noItemsMessage: "", gui: gui.intoInterface(), - getSearchStrings: func(menuItem *MenuItem) []string { - return menuItem.LabelColumns - }, - onClick: gui.onMenuPress, - sort: nil, + onClick: gui.onMenuPress, + sort: nil, getDisplayStrings: func(menuItem *MenuItem) []string { return menuItem.LabelColumns }, diff --git a/pkg/gui/project_panel.go b/pkg/gui/project_panel.go index 0c5be149..3642416f 100644 --- a/pkg/gui/project_panel.go +++ b/pkg/gui/project_panel.go @@ -54,9 +54,6 @@ func (gui *Gui) getProjectPanel() *SideListPanel[*commands.Project] { }, } }, - getSearchStrings: func(project *commands.Project) []string { - return []string{project.Name} - }, getContextCacheKey: func(project *commands.Project) string { return project.Name }, diff --git a/pkg/gui/searching.go b/pkg/gui/searching.go index 437c9c30..b1e906ca 100644 --- a/pkg/gui/searching.go +++ b/pkg/gui/searching.go @@ -11,7 +11,6 @@ func (gui *Gui) handleOpenSearch() error { } gui.State.Searching.isSearching = true - gui.State.Searching.view = panel.View() gui.State.Searching.panel = panel return gui.switchFocus(gui.Views.Search) @@ -20,6 +19,7 @@ func (gui *Gui) handleOpenSearch() error { func (gui *Gui) onNewSearchString(value string) error { // need to refresh the right list panel. gui.State.Searching.searchString = value + gui.ResetOrigin(gui.State.Searching.panel.View()) return gui.State.Searching.panel.RerenderList() } @@ -45,11 +45,12 @@ func (gui *Gui) escapeSearchPrompt() error { func (gui *Gui) clearSearch() error { gui.State.Searching.searchString = "" gui.State.Searching.isSearching = false - gui.State.Searching.view = nil panel := gui.State.Searching.panel gui.State.Searching.panel = nil gui.Views.Search.ClearTextArea() + gui.ResetOrigin(panel.View()) + return panel.RerenderList() } diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index a5b035e6..03a12dba 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -52,10 +52,6 @@ func (gui *Gui) getServicesPanel() *SideListPanel[*commands.Service] { }, } }, - getSearchStrings: func(service *commands.Service) []string { - // TODO: think about more things to search on - return []string{service.Name} - }, getContextCacheKey: func(service *commands.Service) string { if service.Container == nil { return service.ID diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 8e7fcbaa..a71dc6e9 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -230,6 +230,11 @@ func (gui *Gui) FocusY(selectedY int, lineCount int, v *gocui.View) { gui.focusY(selectedY, lineCount, v) } +func (gui *Gui) ResetOrigin(v *gocui.View) { + _ = v.SetOrigin(0, 0) + _ = v.SetCursor(0, 0) +} + func (gui *Gui) cleanString(s string) string { output := string(bom.Clean([]byte(s))) return utils.NormalizeLinefeeds(output) diff --git a/pkg/gui/volumes_panel.go b/pkg/gui/volumes_panel.go index 441b191b..3c63004e 100644 --- a/pkg/gui/volumes_panel.go +++ b/pkg/gui/volumes_panel.go @@ -30,10 +30,6 @@ func (gui *Gui) getVolumesPanel() *SideListPanel[*commands.Volume] { }, } }, - getSearchStrings: func(volume *commands.Volume) []string { - // TODO: think about more things to search on - return []string{volume.Name} - }, getContextCacheKey: func(volume *commands.Volume) string { return volume.Name },