summaryrefslogtreecommitdiffstats
path: root/pkg/gui/context/remotes_context.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-02-05 17:04:10 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-03-17 19:13:40 +1100
commitd82f175e79f18756769d91de94458b095130297c (patch)
tree63c0c5b17a698a5a202a85b930edd0cf9e85ebf7 /pkg/gui/context/remotes_context.go
parent145c69d9ae32ec8fbdd6d1e6116efec466a0a709 (diff)
refactor contexts
Diffstat (limited to 'pkg/gui/context/remotes_context.go')
-rw-r--r--pkg/gui/context/remotes_context.go86
1 files changed, 86 insertions, 0 deletions
diff --git a/pkg/gui/context/remotes_context.go b/pkg/gui/context/remotes_context.go
new file mode 100644
index 000000000..28d0db20a
--- /dev/null
+++ b/pkg/gui/context/remotes_context.go
@@ -0,0 +1,86 @@
+package context
+
+import (
+ "github.com/jesseduffield/gocui"
+ "github.com/jesseduffield/lazygit/pkg/commands/models"
+ "github.com/jesseduffield/lazygit/pkg/gui/context/traits"
+ "github.com/jesseduffield/lazygit/pkg/gui/types"
+)
+
+type RemotesContext struct {
+ *RemotesViewModel
+ *ListContextTrait
+}
+
+var _ types.IListContext = (*RemotesContext)(nil)
+
+func NewRemotesContext(
+ getModel func() []*models.Remote,
+ view *gocui.View,
+ getDisplayStrings func(startIdx int, length int) [][]string,
+
+ onFocus func(...types.OnFocusOpts) error,
+ onRenderToMain func(...types.OnFocusOpts) error,
+ onFocusLost func() error,
+
+ c *types.ControllerCommon,
+) *RemotesContext {
+ viewModel := NewRemotesViewModel(getModel)
+
+ return &RemotesContext{
+ RemotesViewModel: viewModel,
+ ListContextTrait: &ListContextTrait{
+ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{
+ ViewName: "branches",
+ WindowName: "branches",
+ Key: REMOTES_CONTEXT_KEY,
+ Kind: types.SIDE_CONTEXT,
+ Focusable: true,
+ }), ContextCallbackOpts{
+ OnFocus: onFocus,
+ OnFocusLost: onFocusLost,
+ OnRenderToMain: onRenderToMain,
+ }),
+ list: viewModel,
+ viewTrait: NewViewTrait(view),
+ getDisplayStrings: getDisplayStrings,
+ c: c,
+ },
+ }
+}
+
+func (self *RemotesContext) GetSelectedItemId() string {
+ item := self.GetSelected()
+ if item == nil {
+ return ""
+ }
+
+ return item.ID()
+}
+
+type RemotesViewModel struct {
+ *traits.ListCursor
+ getModel func() []*models.Remote
+}
+
+func NewRemotesViewModel(getModel func() []*models.Remote) *RemotesViewModel {
+ self := &RemotesViewModel{
+ getModel: getModel,
+ }
+
+ self.ListCursor = traits.NewListCursor(self)
+
+ return self
+}
+
+func (self *RemotesViewModel) GetItemsLength() int {
+ return len(self.getModel())
+}
+
+func (self *RemotesViewModel) GetSelected() *models.Remote {
+ if self.GetItemsLength() == 0 {
+ return nil
+ }
+
+ return self.getModel()[self.GetSelectedLineIdx()]
+}