diff --git a/internal/app/app.go b/internal/app/app.go index 45c2369..6aa3d48 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -26,7 +26,7 @@ type GitClient interface { var _ GitClient = (*git.Client)(nil) type UIClient interface { - TextArea(value string) (string, bool, error) + TextArea(value string) (string, ui.Action, error) StartSpinner(message string) UpdateSpinner(message string) StopSpinner() @@ -97,12 +97,12 @@ func (app *App) Run(ctx context.Context, userMessage string) error { } wrapped = strings.ReplaceAll(wrapped, "\n\n\n", "\n\n") } - edited, accepted, err := app.ui.TextArea(wrapped) + edited, action, err := app.ui.TextArea(wrapped) if err != nil { return err } - if accepted { + if action == ui.Commit { return app.git.Commit(edited) } else { return ErrAborted diff --git a/internal/app/app_test.go b/internal/app/app_test.go index 860a0d7..de623c7 100644 --- a/internal/app/app_test.go +++ b/internal/app/app_test.go @@ -4,6 +4,7 @@ import ( "context" "testing" + "github.com/rm-hull/git-commit-summary/internal/ui" "github.com/stretchr/testify/assert" ) @@ -44,13 +45,13 @@ func (m *mockGitClient) Commit(message string) error { } type mockUIClient struct { - TextAreaFunc func(value string) (string, bool, error) + TextAreaFunc func(value string) (string, ui.Action, error) StartSpinnerFunc func(message string) UpdateSpinnerFunc func(message string) StopSpinnerFunc func() } -func (m *mockUIClient) TextArea(value string) (string, bool, error) { +func (m *mockUIClient) TextArea(value string) (string, ui.Action, error) { return m.TextAreaFunc(value) } @@ -189,7 +190,7 @@ func TestAppRun(t *testing.T) { DiffFunc: func() (string, error) { return "diff output", nil }, } uiClient := &mockUIClient{ - TextAreaFunc: func(value string) (string, bool, error) { return "", false, assert.AnError }, + TextAreaFunc: func(value string) (string, ui.Action, error) { return "", ui.Abort, assert.AnError }, StartSpinnerFunc: func(message string) {}, UpdateSpinnerFunc: func(message string) {}, StopSpinnerFunc: func() {}, @@ -211,7 +212,7 @@ func TestAppRun(t *testing.T) { DiffFunc: func() (string, error) { return "diff output", nil }, } uiClient := &mockUIClient{ - TextAreaFunc: func(value string) (string, bool, error) { return "", false, nil }, + TextAreaFunc: func(value string) (string, ui.Action, error) { return "", ui.Abort, nil }, StartSpinnerFunc: func(message string) {}, UpdateSpinnerFunc: func(message string) {}, StopSpinnerFunc: func() {}, @@ -233,7 +234,7 @@ func TestAppRun(t *testing.T) { CommitFunc: func(message string) error { return assert.AnError }, } uiClient := &mockUIClient{ - TextAreaFunc: func(value string) (string, bool, error) { return "edited message", true, nil }, + TextAreaFunc: func(value string) (string, ui.Action, error) { return "edited message", ui.Commit, nil }, StartSpinnerFunc: func(message string) {}, UpdateSpinnerFunc: func(message string) {}, StopSpinnerFunc: func() {}, @@ -256,7 +257,7 @@ func TestAppRun(t *testing.T) { CommitFunc: func(message string) error { return nil }, } uiClient := &mockUIClient{ - TextAreaFunc: func(value string) (string, bool, error) { return "edited message", true, nil }, + TextAreaFunc: func(value string) (string, ui.Action, error) { return "edited message", ui.Commit, nil }, StartSpinnerFunc: func(message string) {}, UpdateSpinnerFunc: func(message string) {}, StopSpinnerFunc: func() {}, diff --git a/internal/ui/client.go b/internal/ui/client.go index 4152e87..b9512e8 100644 --- a/internal/ui/client.go +++ b/internal/ui/client.go @@ -7,6 +7,13 @@ import ( "github.com/gookit/color" ) +type Action int + +const ( + Abort Action = iota + Commit +) + type Client struct { spinner *spinner.Spinner } @@ -17,7 +24,7 @@ func NewClient() *Client { } } -func (c *Client) TextArea(value string) (string, bool, error) { +func (c *Client) TextArea(value string) (string, Action, error) { return textArea(value) } diff --git a/internal/ui/text_area.go b/internal/ui/text_area.go index ab27a66..0f77eac 100644 --- a/internal/ui/text_area.go +++ b/internal/ui/text_area.go @@ -10,22 +10,22 @@ import ( "github.com/charmbracelet/lipgloss" ) -func textArea(value string) (string, bool, error) { +func textArea(value string) (string, Action, error) { p := tea.NewProgram(initialModel(value)) finalModel, err := p.Run() if err != nil { - return "", false, err + return "", Abort, err } m := finalModel.(model) - return m.Value(), m.Accepted(), nil + return m.Value(), m.Action(), nil } type model struct { textarea textarea.Model history *History - accepted bool + action Action err error } @@ -57,7 +57,7 @@ func initialModel(value string) model { return model{ textarea: ti, history: NewHistory(value), - accepted: false, + action: Abort, err: nil, } } @@ -66,8 +66,8 @@ func (m model) Value() string { return m.textarea.Value() } -func (m model) Accepted() bool { - return m.accepted +func (m model) Action() Action { + return m.action } func (m model) Init() tea.Cmd { @@ -105,12 +105,12 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, nil case tea.KeyEsc: - m.accepted = false + m.action = Abort m.textarea.Blur() return m, tea.Quit case tea.KeyCtrlX: - m.accepted = true + m.action = Commit m.textarea.Blur() return m, tea.Quit