ArinDash/widgets/textInput.go
2025-12-22 18:49:05 +01:00

56 lines
1.4 KiB
Go

package widgets
import (
"ArinDash/util"
"context"
"github.com/mum4k/termdash/cell"
"github.com/mum4k/termdash/terminal/terminalapi"
"github.com/mum4k/termdash/widgetapi"
"github.com/mum4k/termdash/widgets/textinput"
)
type TextInputOptions struct {
updateText chan<- string
options []textinput.Option
}
var defaultOptions = []textinput.Option{
textinput.Label("Enter Text", cell.FgColor(cell.ColorNumber(33))),
textinput.MaxWidthCells(20),
textinput.PlaceHolder("enter any text"),
}
func TextInput(updateText chan<- string, options ...textinput.Option) TextInputOptions {
widgetOptions["TextInputOptions"] = createTextInput
return TextInputOptions{
options: createOptions(updateText, options),
}
}
func createOptions(updateText chan<- string, options []textinput.Option) []textinput.Option {
result := defaultOptions
if options != nil && len(options) != 0 {
for _, option := range options {
result = append(result, option)
}
}
result = append(result, textinput.ClearOnSubmit())
result = append(result, textinput.OnSubmit(func(text string) error {
updateText <- text
return nil
}))
return result
}
func createTextInput(_ context.Context, _ terminalapi.Terminal, opt interface{}) widgetapi.Widget {
options, ok := opt.(TextInputOptions)
if !ok {
panic("invalid options type")
}
return util.PanicOnErrorWithResult(textinput.New(
options.options...,
))
}