2023-01-02 13:23:38 -05:00
|
|
|
package cmd
|
|
|
|
|
|
|
|
import tea "github.com/charmbracelet/bubbletea"
|
|
|
|
|
|
|
|
type CallType int8
|
|
|
|
|
|
|
|
const (
|
|
|
|
WinOpen CallType = iota
|
|
|
|
WinFocus
|
|
|
|
WinBlur
|
2023-01-02 14:24:07 -05:00
|
|
|
WinRefreshData
|
2023-01-02 13:23:38 -05:00
|
|
|
|
|
|
|
ViewFocus
|
|
|
|
ViewBlur
|
|
|
|
ViewRefreshData
|
|
|
|
)
|
|
|
|
|
|
|
|
type Arg struct {
|
|
|
|
Name string
|
|
|
|
Value interface{}
|
|
|
|
}
|
|
|
|
|
|
|
|
type Command struct {
|
|
|
|
Call CallType
|
|
|
|
Target string
|
|
|
|
Args map[string]interface{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func New(
|
|
|
|
call CallType,
|
|
|
|
target string,
|
|
|
|
args ...Arg,
|
|
|
|
) *Command {
|
|
|
|
cmd := new(Command)
|
|
|
|
cmd.Call = call
|
|
|
|
cmd.Target = target
|
|
|
|
cmd.Args = make(map[string]interface{})
|
|
|
|
|
|
|
|
for _, arg := range args {
|
|
|
|
cmd.Args[arg.Name] = arg.Value
|
|
|
|
}
|
|
|
|
|
|
|
|
return cmd
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cmd *Command) Tea() tea.Cmd {
|
|
|
|
return func() tea.Msg {
|
|
|
|
return *cmd
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cmd *Command) GetArg(name string) interface{} {
|
|
|
|
if iface, ok := cmd.Args[name]; ok {
|
|
|
|
return iface
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
2023-01-02 14:24:07 -05:00
|
|
|
|
|
|
|
func (cmd *Command) GetArgs() []Arg {
|
|
|
|
var args []Arg
|
|
|
|
|
|
|
|
for name, value := range cmd.Args {
|
|
|
|
args = append(args, Arg{Name: name, Value: value})
|
|
|
|
}
|
|
|
|
|
|
|
|
return args
|
|
|
|
}
|