From 3d6965ccbbd992adc7cd68015dfd38309cbc8835 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 8 Oct 2023 16:46:04 +0200 Subject: Add inline status for pushing tags and deleting remote tags --- pkg/commands/models/tag.go | 4 ++++ pkg/gui/context/tags_context.go | 5 ++++- pkg/gui/controllers/tags_controller.go | 13 ++++++++++--- pkg/gui/presentation/tags.go | 21 +++++++++++++++++---- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/pkg/commands/models/tag.go b/pkg/commands/models/tag.go index ab6076a7a..24cb83254 100644 --- a/pkg/commands/models/tag.go +++ b/pkg/commands/models/tag.go @@ -24,6 +24,10 @@ func (t *Tag) ID() string { return t.RefName() } +func (t *Tag) URN() string { + return "tag-" + t.ID() +} + func (t *Tag) Description() string { return t.Message } diff --git a/pkg/gui/context/tags_context.go b/pkg/gui/context/tags_context.go index 4a9f525f6..3da5a9576 100644 --- a/pkg/gui/context/tags_context.go +++ b/pkg/gui/context/tags_context.go @@ -27,7 +27,10 @@ func NewTagsContext( ) getDisplayStrings := func(_ int, _ int) [][]string { - return presentation.GetTagListDisplayStrings(viewModel.GetItems(), c.Modes().Diffing.Ref) + return presentation.GetTagListDisplayStrings( + viewModel.GetItems(), + c.State().GetItemOperation, + c.Modes().Diffing.Ref, c.Tr) } return &TagsContext{ diff --git a/pkg/gui/controllers/tags_controller.go b/pkg/gui/controllers/tags_controller.go index 2fa24f734..224ad83a4 100644 --- a/pkg/gui/controllers/tags_controller.go +++ b/pkg/gui/controllers/tags_controller.go @@ -129,9 +129,9 @@ func (self *TagsController) remoteDelete(tag *models.Tag) error { Title: confirmTitle, Prompt: confirmPrompt, HandleConfirm: func() error { - return self.c.WithWaitingStatus(self.c.Tr.DeletingStatus, func(t gocui.Task) error { + return self.c.WithInlineStatus(tag, types.ItemOperationDeleting, context.TAGS_CONTEXT_KEY, func(task gocui.Task) error { self.c.LogAction(self.c.Tr.Actions.DeleteRemoteTag) - if err := self.c.Git().Remote.DeleteRemoteTag(t, upstream, tag.Name); err != nil { + if err := self.c.Git().Remote.DeleteRemoteTag(task, upstream, tag.Name); err != nil { return err } self.c.Toast(self.c.Tr.RemoteTagDeletedMessage) @@ -188,9 +188,16 @@ func (self *TagsController) push(tag *models.Tag) error { InitialContent: "origin", FindSuggestionsFunc: self.c.Helpers().Suggestions.GetRemoteSuggestionsFunc(), HandleConfirm: func(response string) error { - return self.c.WithWaitingStatus(self.c.Tr.PushingTagStatus, func(task gocui.Task) error { + return self.c.WithInlineStatus(tag, types.ItemOperationPushing, context.TAGS_CONTEXT_KEY, func(task gocui.Task) error { self.c.LogAction(self.c.Tr.Actions.PushTag) err := self.c.Git().Tag.Push(task, response, tag.Name) + + // Render again to remove the inline status: + self.c.OnUIThread(func() error { + _ = self.c.Contexts().Tags.HandleRender() + return nil + }) + return err }) }, diff --git a/pkg/gui/presentation/tags.go b/pkg/gui/presentation/tags.go index 13a0c9d77..9bdabcf40 100644 --- a/pkg/gui/presentation/tags.go +++ b/pkg/gui/presentation/tags.go @@ -4,19 +4,27 @@ import ( "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/gui/presentation/icons" "github.com/jesseduffield/lazygit/pkg/gui/style" + "github.com/jesseduffield/lazygit/pkg/gui/types" + "github.com/jesseduffield/lazygit/pkg/i18n" "github.com/jesseduffield/lazygit/pkg/theme" + "github.com/jesseduffield/lazygit/pkg/utils" "github.com/samber/lo" ) -func GetTagListDisplayStrings(tags []*models.Tag, diffName string) [][]string { +func GetTagListDisplayStrings( + tags []*models.Tag, + getItemOperation func(item types.HasUrn) types.ItemOperation, + diffName string, + tr *i18n.TranslationSet, +) [][]string { return lo.Map(tags, func(tag *models.Tag, _ int) []string { diffed := tag.Name == diffName - return getTagDisplayStrings(tag, diffed) + return getTagDisplayStrings(tag, getItemOperation(tag), diffed, tr) }) } // getTagDisplayStrings returns the display string of branch -func getTagDisplayStrings(t *models.Tag, diffed bool) []string { +func getTagDisplayStrings(t *models.Tag, itemOperation types.ItemOperation, diffed bool, tr *i18n.TranslationSet) []string { textStyle := theme.DefaultTextColor if diffed { textStyle = theme.DiffTerminalColor @@ -26,6 +34,11 @@ func getTagDisplayStrings(t *models.Tag, diffed bool) []string { res = append(res, textStyle.Sprint(icons.IconForTag(t))) } descriptionColor := style.FgYellow - res = append(res, textStyle.Sprint(t.Name), descriptionColor.Sprint(t.Description())) + descriptionStr := descriptionColor.Sprint(t.Description()) + itemOperationStr := itemOperationToString(itemOperation, tr) + if itemOperationStr != "" { + descriptionStr = style.FgCyan.Sprint(itemOperationStr+" "+utils.Loader()) + " " + descriptionStr + } + res = append(res, textStyle.Sprint(t.Name), descriptionStr) return res } -- cgit v1.2.3