summaryrefslogtreecommitdiffstats
path: root/pkg/gui/context/list_view_model.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/context/list_view_model.go')
-rw-r--r--pkg/gui/context/list_view_model.go38
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)
+}