From 5f7683616633312c70366baf2dfac3664ab65dad Mon Sep 17 00:00:00 2001
From: Leon Mika <lmika@lmika.org>
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' })