From 7d67711cdf4106a8e8c5bdf77ac41da74365df03 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Fri, 21 Aug 2020 18:49:45 -0400 Subject: [PATCH] Show spinner while stashing in the pager --- ui/pager.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/ui/pager.go b/ui/pager.go index f1e327f..be21b39 100644 --- a/ui/pager.go +++ b/ui/pager.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "github.com/charmbracelet/bubbles/spinner" "github.com/charmbracelet/bubbles/textinput" "github.com/charmbracelet/bubbles/viewport" tea "github.com/charmbracelet/bubbletea" @@ -95,6 +96,7 @@ type pagerModel struct { height int textInput textinput.Model showHelp bool + spinner spinner.Model statusMessageHeader string statusMessageBody string @@ -124,11 +126,16 @@ func newPagerModel(glamourStyle string) pagerModel { ti.CharLimit = noteCharacterLimit ti.Focus() + sp := spinner.NewModel() + sp.ForegroundColor = statusBarNoteFg.String() + sp.BackgroundColor = statusBarBg.String() + return pagerModel{ state: pagerStateBrowse, glamourStyle: glamourStyle, textInput: ti, viewport: vp, + spinner: sp, } } @@ -228,7 +235,11 @@ func pagerUpdate(msg tea.Msg, m pagerModel) (pagerModel, tea.Cmd) { // Stash a local document if m.state != pagerStateStashing && m.currentDocument.markdownType == localMarkdown { m.state = pagerStateStashing - return m, stashDocument(m.cc, m.currentDocument) + cmds = append( + cmds, + stashDocument(m.cc, m.currentDocument), + spinner.Tick(m.spinner), + ) } case "?": m.toggleHelp() @@ -238,6 +249,13 @@ func pagerUpdate(msg tea.Msg, m pagerModel) (pagerModel, tea.Cmd) { } } + case spinner.TickMsg: + if m.state == pagerStateStashing { + newSpinnerModel, cmd := spinner.Update(msg, m.spinner) + m.spinner = newSpinnerModel + cmds = append(cmds, cmd) + } + // Glow has rendered the content case contentRenderedMsg: m.setContent(string(msg)) @@ -330,7 +348,9 @@ func pagerStatusBarView(b *strings.Builder, m pagerModel) { // Status indicator; spinner or stash dot var statusIndicator string - if m.currentDocument.markdownType == stashedMarkdown { + if m.state == pagerStateStashing { + statusIndicator = statusBarNoteStyle(" ") + spinner.View(m.spinner) + } else if m.currentDocument.markdownType == stashedMarkdown { statusIndicator = te.String(" •"). Foreground(common.Green.Color()). Background(statusBarBg.Color()).