feat: add CC and BCC inputs if --cc or --bcc is specified. (#65)
This commit adds CC + BCC hidden inputs and are shown if the user passes in some value to the `-cc` or `--bcc` flags.
This commit is contained in:
2
email.go
2
email.go
@@ -156,6 +156,8 @@ func sendResendEmail(to, _, _ []string, from, subject, body string, attachments
|
|||||||
From: from,
|
From: from,
|
||||||
To: to,
|
To: to,
|
||||||
Subject: subject,
|
Subject: subject,
|
||||||
|
Cc: cc,
|
||||||
|
Bcc: bcc,
|
||||||
Html: html.String(),
|
Html: html.String(),
|
||||||
Text: body,
|
Text: body,
|
||||||
Attachments: makeAttachments(attachments),
|
Attachments: makeAttachments(attachments),
|
||||||
|
|||||||
2
main.go
2
main.go
@@ -138,6 +138,8 @@ var rootCmd = &cobra.Command{
|
|||||||
p := tea.NewProgram(NewModel(resend.SendEmailRequest{
|
p := tea.NewProgram(NewModel(resend.SendEmailRequest{
|
||||||
From: from,
|
From: from,
|
||||||
To: to,
|
To: to,
|
||||||
|
Bcc: bcc,
|
||||||
|
Cc: cc,
|
||||||
Subject: subject,
|
Subject: subject,
|
||||||
Text: body,
|
Text: body,
|
||||||
Attachments: makeAttachments(attachments),
|
Attachments: makeAttachments(attachments),
|
||||||
|
|||||||
74
model.go
74
model.go
@@ -23,6 +23,8 @@ type State int
|
|||||||
const (
|
const (
|
||||||
editingFrom State = iota
|
editingFrom State = iota
|
||||||
editingTo
|
editingTo
|
||||||
|
editingCc
|
||||||
|
editingBcc
|
||||||
editingSubject
|
editingSubject
|
||||||
editingBody
|
editingBody
|
||||||
editingAttachments
|
editingAttachments
|
||||||
@@ -68,6 +70,7 @@ type Model struct {
|
|||||||
// This is a list of file paths which are picked with a filepicker.
|
// This is a list of file paths which are picked with a filepicker.
|
||||||
Attachments list.Model
|
Attachments list.Model
|
||||||
|
|
||||||
|
showCc bool
|
||||||
Cc textinput.Model
|
Cc textinput.Model
|
||||||
Bcc textinput.Model
|
Bcc textinput.Model
|
||||||
|
|
||||||
@@ -102,6 +105,24 @@ func NewModel(defaults resend.SendEmailRequest, deliveryMethod DeliveryMethod) M
|
|||||||
to.Placeholder = "you@example.com"
|
to.Placeholder = "you@example.com"
|
||||||
to.SetValue(strings.Join(defaults.To, ToSeparator))
|
to.SetValue(strings.Join(defaults.To, ToSeparator))
|
||||||
|
|
||||||
|
cc := textinput.New()
|
||||||
|
cc.Prompt = "Cc "
|
||||||
|
cc.PromptStyle = labelStyle.Copy()
|
||||||
|
cc.Cursor.Style = cursorStyle
|
||||||
|
cc.PlaceholderStyle = placeholderStyle
|
||||||
|
cc.TextStyle = textStyle
|
||||||
|
cc.Placeholder = "cc@example.com"
|
||||||
|
cc.SetValue(strings.Join(defaults.Cc, ToSeparator))
|
||||||
|
|
||||||
|
bcc := textinput.New()
|
||||||
|
bcc.Prompt = "Bcc "
|
||||||
|
bcc.PromptStyle = labelStyle.Copy()
|
||||||
|
bcc.Cursor.Style = cursorStyle
|
||||||
|
bcc.PlaceholderStyle = placeholderStyle
|
||||||
|
bcc.TextStyle = textStyle
|
||||||
|
bcc.Placeholder = "bcc@example.com"
|
||||||
|
bcc.SetValue(strings.Join(defaults.Bcc, ToSeparator))
|
||||||
|
|
||||||
subject := textinput.New()
|
subject := textinput.New()
|
||||||
subject.Prompt = "Subject "
|
subject.Prompt = "Subject "
|
||||||
subject.PromptStyle = labelStyle.Copy()
|
subject.PromptStyle = labelStyle.Copy()
|
||||||
@@ -172,6 +193,9 @@ func NewModel(defaults resend.SendEmailRequest, deliveryMethod DeliveryMethod) M
|
|||||||
state: state,
|
state: state,
|
||||||
From: from,
|
From: from,
|
||||||
To: to,
|
To: to,
|
||||||
|
showCc: len(cc.Value()) > 0 || len(bcc.Value()) > 0,
|
||||||
|
Cc: cc,
|
||||||
|
Bcc: bcc,
|
||||||
Subject: subject,
|
Subject: subject,
|
||||||
Body: body,
|
Body: body,
|
||||||
Attachments: attachments,
|
Attachments: attachments,
|
||||||
@@ -225,6 +249,14 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
m.state = editingTo
|
m.state = editingTo
|
||||||
m.To.Focus()
|
m.To.Focus()
|
||||||
case editingTo:
|
case editingTo:
|
||||||
|
if m.showCc {
|
||||||
|
m.state = editingCc
|
||||||
|
} else {
|
||||||
|
m.state = editingSubject
|
||||||
|
}
|
||||||
|
case editingCc:
|
||||||
|
m.state = editingBcc
|
||||||
|
case editingBcc:
|
||||||
m.state = editingSubject
|
m.state = editingSubject
|
||||||
case editingSubject:
|
case editingSubject:
|
||||||
m.state = editingBody
|
m.state = editingBody
|
||||||
@@ -244,8 +276,16 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
m.state = hoveringSendButton
|
m.state = hoveringSendButton
|
||||||
case editingTo:
|
case editingTo:
|
||||||
m.state = editingFrom
|
m.state = editingFrom
|
||||||
case editingSubject:
|
case editingCc:
|
||||||
m.state = editingTo
|
m.state = editingTo
|
||||||
|
case editingBcc:
|
||||||
|
m.state = editingCc
|
||||||
|
case editingSubject:
|
||||||
|
if m.showCc {
|
||||||
|
m.state = editingBcc
|
||||||
|
} else {
|
||||||
|
m.state = editingTo
|
||||||
|
}
|
||||||
case editingBody:
|
case editingBody:
|
||||||
m.state = editingSubject
|
m.state = editingSubject
|
||||||
case editingAttachments:
|
case editingAttachments:
|
||||||
@@ -286,6 +326,12 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
cmds = append(cmds, cmd)
|
cmds = append(cmds, cmd)
|
||||||
m.To, cmd = m.To.Update(msg)
|
m.To, cmd = m.To.Update(msg)
|
||||||
cmds = append(cmds, cmd)
|
cmds = append(cmds, cmd)
|
||||||
|
if m.showCc {
|
||||||
|
m.Cc, cmd = m.Cc.Update(msg)
|
||||||
|
cmds = append(cmds, cmd)
|
||||||
|
m.Bcc, cmd = m.Bcc.Update(msg)
|
||||||
|
cmds = append(cmds, cmd)
|
||||||
|
}
|
||||||
m.Subject, cmd = m.Subject.Update(msg)
|
m.Subject, cmd = m.Subject.Update(msg)
|
||||||
cmds = append(cmds, cmd)
|
cmds = append(cmds, cmd)
|
||||||
m.Body, cmd = m.Body.Update(msg)
|
m.Body, cmd = m.Body.Update(msg)
|
||||||
@@ -320,8 +366,18 @@ func (m *Model) blurInputs() {
|
|||||||
m.To.Blur()
|
m.To.Blur()
|
||||||
m.Subject.Blur()
|
m.Subject.Blur()
|
||||||
m.Body.Blur()
|
m.Body.Blur()
|
||||||
|
if m.showCc {
|
||||||
|
m.Cc.Blur()
|
||||||
|
m.Bcc.Blur()
|
||||||
|
}
|
||||||
m.From.PromptStyle = labelStyle
|
m.From.PromptStyle = labelStyle
|
||||||
m.To.PromptStyle = labelStyle
|
m.To.PromptStyle = labelStyle
|
||||||
|
if m.showCc {
|
||||||
|
m.Cc.PromptStyle = labelStyle
|
||||||
|
m.Cc.TextStyle = textStyle
|
||||||
|
m.Bcc.PromptStyle = labelStyle
|
||||||
|
m.Bcc.TextStyle = textStyle
|
||||||
|
}
|
||||||
m.Subject.PromptStyle = labelStyle
|
m.Subject.PromptStyle = labelStyle
|
||||||
m.From.TextStyle = textStyle
|
m.From.TextStyle = textStyle
|
||||||
m.To.TextStyle = textStyle
|
m.To.TextStyle = textStyle
|
||||||
@@ -342,6 +398,16 @@ func (m *Model) focusActiveInput() {
|
|||||||
m.To.TextStyle = activeTextStyle
|
m.To.TextStyle = activeTextStyle
|
||||||
m.To.Focus()
|
m.To.Focus()
|
||||||
m.To.CursorEnd()
|
m.To.CursorEnd()
|
||||||
|
case editingCc:
|
||||||
|
m.Cc.PromptStyle = activeLabelStyle
|
||||||
|
m.Cc.TextStyle = activeTextStyle
|
||||||
|
m.Cc.Focus()
|
||||||
|
m.Cc.CursorEnd()
|
||||||
|
case editingBcc:
|
||||||
|
m.Bcc.PromptStyle = activeLabelStyle
|
||||||
|
m.Bcc.TextStyle = activeTextStyle
|
||||||
|
m.Bcc.Focus()
|
||||||
|
m.Bcc.CursorEnd()
|
||||||
case editingSubject:
|
case editingSubject:
|
||||||
m.Subject.PromptStyle = activeLabelStyle
|
m.Subject.PromptStyle = activeLabelStyle
|
||||||
m.Subject.TextStyle = activeTextStyle
|
m.Subject.TextStyle = activeTextStyle
|
||||||
@@ -376,6 +442,12 @@ func (m Model) View() string {
|
|||||||
s.WriteString("\n")
|
s.WriteString("\n")
|
||||||
s.WriteString(m.To.View())
|
s.WriteString(m.To.View())
|
||||||
s.WriteString("\n")
|
s.WriteString("\n")
|
||||||
|
if m.showCc {
|
||||||
|
s.WriteString(m.Cc.View())
|
||||||
|
s.WriteString("\n")
|
||||||
|
s.WriteString(m.Bcc.View())
|
||||||
|
s.WriteString("\n")
|
||||||
|
}
|
||||||
s.WriteString(m.Subject.View())
|
s.WriteString(m.Subject.View())
|
||||||
s.WriteString("\n\n")
|
s.WriteString("\n\n")
|
||||||
s.WriteString(m.Body.View())
|
s.WriteString(m.Body.View())
|
||||||
|
|||||||
Reference in New Issue
Block a user