From 5f7683616633312c70366baf2dfac3664ab65dad Mon Sep 17 00:00:00 2001 From: Leon Mika Date: Wed, 31 Aug 2022 20:46:53 +1000 Subject: [PATCH] Fixed a few cosmetic bugs - Clear status messages when setting or deleting fields - Fixed "Filter" status label --- internal/common/ui/events/commands.go | 6 ++++-- internal/dynamo-browse/controllers/events.go | 2 +- internal/dynamo-browse/controllers/keybinding.go | 4 ++-- internal/dynamo-browse/controllers/tableread.go | 4 ++-- internal/dynamo-browse/controllers/tablewrite.go | 4 ++-- internal/dynamo-browse/ui/model.go | 7 +++++-- .../dynamo-browse/ui/teamodels/statusandprompt/model.go | 7 ++++++- 7 files changed, 22 insertions(+), 12 deletions(-) diff --git a/internal/common/ui/events/commands.go b/internal/common/ui/events/commands.go index 8aca1a7..d1dca0c 100644 --- a/internal/common/ui/events/commands.go +++ b/internal/common/ui/events/commands.go @@ -10,8 +10,10 @@ func Error(err error) tea.Msg { return ErrorMsg(err) } -func SetStatus(msg string) tea.Msg { - return StatusMsg(msg) +func SetStatus(msg string) tea.Cmd { + return func() tea.Msg { + return StatusMsg(msg) + } } func PromptForInput(prompt string, onDone func(value string) tea.Msg) tea.Msg { diff --git a/internal/dynamo-browse/controllers/events.go b/internal/dynamo-browse/controllers/events.go index 7896902..9e1bbae 100644 --- a/internal/dynamo-browse/controllers/events.go +++ b/internal/dynamo-browse/controllers/events.go @@ -27,7 +27,7 @@ func (rs NewResultSet) ModeMessage() string { } if rs.currentFilter != "" { - modeLine = fmt.Sprintf("%v - PromptForFilter: '%v'", modeLine, rs.currentFilter) + modeLine = fmt.Sprintf("%v - Filter: '%v'", modeLine, rs.currentFilter) } return modeLine } diff --git a/internal/dynamo-browse/controllers/keybinding.go b/internal/dynamo-browse/controllers/keybinding.go index 6d1ec8e..a06492d 100644 --- a/internal/dynamo-browse/controllers/keybinding.go +++ b/internal/dynamo-browse/controllers/keybinding.go @@ -19,7 +19,7 @@ func NewKeyBindingController(service *keybindings.Service) *KeyBindingController func (kb *KeyBindingController) Rebind(bindingName string, newKey string, force bool) tea.Msg { err := kb.service.Rebind(bindingName, newKey, force) if err == nil { - return events.SetStatus(fmt.Sprintf("Binding '%v' now bound to '%v'", bindingName, newKey)) + return events.StatusMsg(fmt.Sprintf("Binding '%v' now bound to '%v'", bindingName, newKey)) } else if force { return events.Error(errors.Wrapf(err, "cannot bind '%v' to '%v'", bindingName, newKey)) } @@ -32,7 +32,7 @@ func (kb *KeyBindingController) Rebind(bindingName string, newKey string, force if err != nil { return events.Error(err) } - return events.SetStatus(fmt.Sprintf("Binding '%v' now bound to '%v'", bindingName, newKey)) + return events.StatusMsg(fmt.Sprintf("Binding '%v' now bound to '%v'", bindingName, newKey)) }) } diff --git a/internal/dynamo-browse/controllers/tableread.go b/internal/dynamo-browse/controllers/tableread.go index c4d4be0..3d2edd7 100644 --- a/internal/dynamo-browse/controllers/tableread.go +++ b/internal/dynamo-browse/controllers/tableread.go @@ -152,7 +152,7 @@ func (c *TableReadController) doIfNoneDirty(cmd tea.Cmd) tea.Msg { Prompt: "reset modified items? ", OnDone: func(value string) tea.Msg { if value != "y" { - return events.SetStatus("operation aborted") + return events.StatusMsg("operation aborted") } return cmd() @@ -321,7 +321,7 @@ func (c *TableReadController) CopyItemToClipboard(idx int) tea.Msg { clipboard.Write(clipboard.FmtText, []byte(sb.String())) }) - return events.SetStatus(applyToN("", itemCount, "item", "items", " copied to clipboard")) + return events.StatusMsg(applyToN("", itemCount, "item", "items", " copied to clipboard")) } func (c *TableReadController) initClipboard() error { diff --git a/internal/dynamo-browse/controllers/tablewrite.go b/internal/dynamo-browse/controllers/tablewrite.go index 14df92a..1d574ad 100644 --- a/internal/dynamo-browse/controllers/tablewrite.go +++ b/internal/dynamo-browse/controllers/tablewrite.go @@ -288,7 +288,7 @@ func (twc *TableWriteController) PutItems() tea.Msg { Prompt: promptMessage, OnDone: func(value string) tea.Msg { if value != "y" { - return events.SetStatus("operation aborted") + return events.StatusMsg("operation aborted") } if err := twc.state.withResultSetReturningError(func(rs *models.ResultSet) error { @@ -370,7 +370,7 @@ func (twc *TableWriteController) DeleteMarked() tea.Msg { Prompt: applyToN("delete ", len(markedItems), "item", "items", "? "), OnDone: func(value string) tea.Msg { if value != "y" { - return events.SetStatus("operation aborted") + return events.StatusMsg("operation aborted") } ctx := context.Background() diff --git a/internal/dynamo-browse/ui/model.go b/internal/dynamo-browse/ui/model.go index 9f03df1..5c32200 100644 --- a/internal/dynamo-browse/ui/model.go +++ b/internal/dynamo-browse/ui/model.go @@ -139,7 +139,7 @@ func NewModel( for _, arg := range args { s.WriteString(arg) } - return events.SetStatus(s.String()) + return events.StatusMsg(s.String()) }, "rebind": func(ctx commandctrl.ExecContext, args []string) tea.Msg { if len(args) != 2 { @@ -189,7 +189,10 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { cmd := m.setMainViewIndex(msg.ViewIndex) return m, cmd case controllers.ResultSetUpdated: - return m, m.tableView.Refresh() + return m, tea.Batch( + m.tableView.Refresh(), + events.SetStatus(msg.StatusMessage()), + ) case tea.KeyMsg: if !m.statusAndPrompt.InPrompt() && !m.tableSelect.Visible() { switch { diff --git a/internal/dynamo-browse/ui/teamodels/statusandprompt/model.go b/internal/dynamo-browse/ui/teamodels/statusandprompt/model.go index a48dd4f..e2d2f4f 100644 --- a/internal/dynamo-browse/ui/teamodels/statusandprompt/model.go +++ b/internal/dynamo-browse/ui/teamodels/statusandprompt/model.go @@ -7,6 +7,7 @@ import ( "github.com/lmika/audax/internal/common/sliceutils" "github.com/lmika/audax/internal/common/ui/events" "github.com/lmika/audax/internal/dynamo-browse/ui/teamodels/layout" + "log" ) // StatusAndPrompt is a resizing model which displays a submodel and a status bar. When the start prompt @@ -67,7 +68,11 @@ func (s *StatusAndPrompt) Update(msg tea.Msg) (tea.Model, tea.Cmd) { pendingInput := s.pendingInput s.pendingInput = nil - return s, func() tea.Msg { return pendingInput.OnDone(s.textInput.Value()) } + return s, func() tea.Msg { + m := pendingInput.OnDone(s.textInput.Value()) + log.Printf("return msg type = %T", m) + return m + } default: if msg.Type == tea.KeyRunes { msg.Runes = sliceutils.Filter(msg.Runes, func(r rune) bool { return r != '\x0d' && r != '\x0a' })