diff --git a/examples/textinputs/main.go b/examples/textinputs/main.go index 37becac..dae8594 100644 --- a/examples/textinputs/main.go +++ b/examples/textinputs/main.go @@ -154,14 +154,24 @@ func updateInputs(msg tea.Msg, m Model) Model { } func subscriptions(model tea.Model) tea.Subs { + m, ok := model.(Model) + if !ok { + return nil + } + + // It's a little hacky, but we're using the subscription from one + // input element to handle the blinking for all elements. It doesn't + // have to be this way, we're just feeling a bit lazy at the moment. + inputSub, err := input.MakeSub(m.nameInput) + if err != nil { + return nil + } + return tea.Subs{ // It's a little hacky, but we're using the subscription from one // input element to handle the blinking for all elements. It doesn't // have to be this way, we're just feeling a bit lazy at the moment. - "blink": func(model tea.Model) tea.Msg { - m, _ := model.(Model) - return input.Blink(m.nameInput) - }, + "blink": inputSub, } } diff --git a/spinner/spinner.go b/spinner/spinner.go index 451ce4e..7f80005 100644 --- a/spinner/spinner.go +++ b/spinner/spinner.go @@ -86,12 +86,16 @@ func View(model Model) string { return str } -// Sub is the subscription that allows the spinner to spin -func Sub(model tea.Model) tea.Msg { +// GetSub creates the subscription that allows the spinner to spin. Remember +// that you need to execute this function in order to get the subscription +// you'll need. +func MakeSub(model tea.Model) (tea.Sub, error) { m, ok := model.(Model) if !ok { - return assertionErr + return nil, assertionErr } - time.Sleep(time.Second / time.Duration(m.FPS)) - return TickMsg{} + return func() tea.Msg { + time.Sleep(time.Second / time.Duration(m.FPS)) + return TickMsg{} + }, nil } diff --git a/textinput/textinput.go b/textinput/textinput.go index 90e27b0..0233b66 100644 --- a/textinput/textinput.go +++ b/textinput/textinput.go @@ -230,13 +230,15 @@ func cursorView(s string, m Model) string { String() } -// Blink is the subscription that lets us know when to alternate the blinking -// of the cursor. -func Blink(model tea.Model) tea.Msg { +// MakeSub return a subscription that lets us know when to alternate the +// blinking of the cursor. +func MakeSub(model tea.Model) (tea.Sub, error) { m, ok := model.(Model) if !ok { - return ErrMsg(errors.New("could not assert given model to the model we expected; make sure you're passing as input model")) + return nil, errors.New("could not assert given model to the model we expected; make sure you're passing as input model") } - time.Sleep(m.BlinkSpeed) - return CursorBlinkMsg{} + return func() tea.Msg { + time.Sleep(m.BlinkSpeed) + return CursorBlinkMsg{} + }, nil }