package context import ( "github.com/jesseduffield/lazygit/pkg/gui/context/traits" "github.com/jesseduffield/lazygit/pkg/gui/types" ) 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) } func (self *ListViewModel[T]) GetItem(index int) types.HasUrn { item := self.getModel()[index] return any(item).(types.HasUrn) }