diff options
Diffstat (limited to 'pkg/gui/context/list_view_model.go')
-rw-r--r-- | pkg/gui/context/list_view_model.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/pkg/gui/context/list_view_model.go b/pkg/gui/context/list_view_model.go new file mode 100644 index 000000000..b70330d7d --- /dev/null +++ b/pkg/gui/context/list_view_model.go @@ -0,0 +1,38 @@ +package context + +import "github.com/jesseduffield/lazygit/pkg/gui/context/traits" + +type ListViewModel[T any] struct { + *traits.ListCursor + getModel func() []T +} + +func NewListViewModel[T any](getModel func() []T) *ListViewModel[T] { + self := &ListViewModel[T]{ + getModel: getModel, + } + + self.ListCursor = traits.NewListCursor(self) + + return self +} + +func (self *ListViewModel[T]) Len() int { + return len(self.getModel()) +} + +func (self *ListViewModel[T]) GetSelected() T { + if self.Len() == 0 { + return Zero[T]() + } + + return self.getModel()[self.GetSelectedLineIdx()] +} + +func (self *ListViewModel[T]) GetItems() []T { + return self.getModel() +} + +func Zero[T any]() T { + return *new(T) +} |