diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 1ad61db2..eb5693b8 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -95,7 +95,7 @@ func (gui *Gui) getContainersPanel() *panels.SideListPanel[*commands.Container] return true }, - GetDisplayStrings: presentation.GetContainerDisplayStrings, + GetTableCells: presentation.GetContainerDisplayStrings, } } diff --git a/pkg/gui/images_panel.go b/pkg/gui/images_panel.go index 82d9222f..9c0a326c 100644 --- a/pkg/gui/images_panel.go +++ b/pkg/gui/images_panel.go @@ -62,7 +62,7 @@ func (gui *Gui) getImagesPanel() *panels.SideListPanel[*commands.Image] { return a.ID < b.ID }, - GetDisplayStrings: presentation.GetImageDisplayStrings, + GetTableCells: presentation.GetImageDisplayStrings, } } diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go index c1390108..4fea3707 100644 --- a/pkg/gui/menu_panel.go +++ b/pkg/gui/menu_panel.go @@ -19,11 +19,11 @@ func (gui *Gui) getMenuPanel() *panels.SideListPanel[*types.MenuItem] { List: panels.NewFilteredList[*types.MenuItem](), View: gui.Views.Menu, }, - NoItemsMessage: "", - Gui: gui.intoInterface(), - OnClick: gui.onMenuPress, - Sort: nil, - GetDisplayStrings: presentation.GetMenuItemDisplayStrings, + NoItemsMessage: "", + Gui: gui.intoInterface(), + OnClick: gui.onMenuPress, + Sort: nil, + GetTableCells: presentation.GetMenuItemDisplayStrings, OnRerender: func() error { return gui.resizePopupPanel(gui.Views.Menu) }, diff --git a/pkg/gui/panels/side_list_panel.go b/pkg/gui/panels/side_list_panel.go index 3652eeec..19c734f2 100644 --- a/pkg/gui/panels/side_list_panel.go +++ b/pkg/gui/panels/side_list_panel.go @@ -35,16 +35,19 @@ type SideListPanel[T comparable] struct { // and it has focus. Leave empty if you don't want to render anything NoItemsMessage string + // a representation of the gui Gui IGui // this Filter is applied on top of additional default filters Filter func(T) bool Sort func(a, b T) bool + // a callback to invoke when the item is clicked OnClick func(T) error - // returns the columns that we render to the view in a table formats - GetDisplayStrings func(T) []string + // returns the cells that we render to the view in a table format. The cells will + // be rendered with padding. + GetTableCells func(T) []string // function to be called after re-rendering list. Can be nil OnRerender func() error @@ -192,7 +195,7 @@ func (self *SideListPanel[T]) FilterAndSort() { } if lo.SomeBy(self.Gui.IgnoreStrings(), func(ignore string) bool { - return lo.SomeBy(self.GetDisplayStrings(item), func(searchString string) bool { + return lo.SomeBy(self.GetTableCells(item), func(searchString string) bool { return strings.Contains(searchString, ignore) }) }) { @@ -200,7 +203,7 @@ func (self *SideListPanel[T]) FilterAndSort() { } if filterString != "" { - return lo.SomeBy(self.GetDisplayStrings(item), func(searchString string) bool { + return lo.SomeBy(self.GetTableCells(item), func(searchString string) bool { return strings.Contains(searchString, filterString) }) } @@ -219,7 +222,7 @@ func (self *SideListPanel[T]) RerenderList() error { self.Gui.Update(func() error { self.View.Clear() table := lo.Map(self.List.GetItems(), func(item T, index int) []string { - return self.GetDisplayStrings(item) + return self.GetTableCells(item) }) renderedTable, err := utils.RenderTable(table) if err != nil { diff --git a/pkg/gui/project_panel.go b/pkg/gui/project_panel.go index c40edc85..5c51db72 100644 --- a/pkg/gui/project_panel.go +++ b/pkg/gui/project_panel.go @@ -64,7 +64,7 @@ func (gui *Gui) getProjectPanel() *panels.SideListPanel[*commands.Project] { Sort: func(a *commands.Project, b *commands.Project) bool { return false }, - GetDisplayStrings: presentation.GetProjectDisplayStrings, + GetTableCells: presentation.GetProjectDisplayStrings, // It doesn't make sense to filter a list of only one item. DisableFilter: true, } diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index 3fdad1f3..49e21b40 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -72,7 +72,7 @@ func (gui *Gui) getServicesPanel() *panels.SideListPanel[*commands.Service] { return a.Name < b.Name }, - GetDisplayStrings: presentation.GetServiceDisplayStrings, + GetTableCells: presentation.GetServiceDisplayStrings, Hide: func() bool { return !gui.DockerCommand.InDockerComposeProject }, diff --git a/pkg/gui/volumes_panel.go b/pkg/gui/volumes_panel.go index 123f007c..ed7dbab4 100644 --- a/pkg/gui/volumes_panel.go +++ b/pkg/gui/volumes_panel.go @@ -48,7 +48,7 @@ func (gui *Gui) getVolumesPanel() *panels.SideListPanel[*commands.Volume] { } return a.Name < b.Name }, - GetDisplayStrings: presentation.GetVolumeDisplayStrings, + GetTableCells: presentation.GetVolumeDisplayStrings, } }