package ui import ( "fmt" "strconv" "github.com/charmbracelet/huh" log "github.com/sirupsen/logrus" ) const ( proceedTemplate = "%s (y/n): " defaultTemplate = "%s: " chooseTemplate = "%d : %s\n" ) func AskToConfirm(question, affirmative, negative string) bool { confirm := Confirm(question, "res") confirm.Affirmative(affirmative) confirm.Negative(negative) form := huh.NewForm(huh.NewGroup(confirm)) form.Run() if form.State != huh.StateCompleted { log.Fatal("canceled") } return form.GetBool("res") } func AskToValue(question string) (string, error) { input := Input(question, "res") form := huh.NewForm(huh.NewGroup(input)) form.Run() if form.State != huh.StateCompleted { log.Fatal("canceled") } return form.GetString("res"), nil } func AskToInt(question string) (int, error) { v, err := AskToValue(question) if err != nil { return 0, err } value, err := strconv.Atoi(v) if err != nil { return 0, err } return value, nil } func AskToChoose(question string, list map[int]string) string { for i, item := range list { fmt.Printf(chooseTemplate, i, item) } answer, err := AskToInt(question) if err != nil { log.WithError(err).Error("failed to read the answer") } return list[answer] } func AskToChooseInteractive(question string, list []string) string { values := make(map[string]string) if len(list) == 0 { log.Fatal("no items found") } for _, item := range list { values[item] = item } widget := InteractiveList(question, "res", values) form := huh.NewForm(huh.NewGroup(widget)).WithShowHelp(false) form.Run() if form.State != huh.StateCompleted { log.Fatal("canceled") } return form.GetString("res") }