mirror of
https://gitea.com/gitea/tea.git
synced 2025-09-03 18:38:29 +02:00
Use bubbletea instead of survey for interacting with TUI (#786)
Fix #772 Reviewed-on: https://gitea.com/gitea/tea/pulls/786 Reviewed-by: Bo-Yi Wu (吳柏毅) <appleboy.tw@gmail.com>
This commit is contained in:
@ -4,46 +4,59 @@
|
||||
package interact
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"code.gitea.io/tea/modules/config"
|
||||
"code.gitea.io/tea/modules/task"
|
||||
"code.gitea.io/tea/modules/theme"
|
||||
|
||||
"code.gitea.io/sdk/gitea"
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
"github.com/charmbracelet/huh"
|
||||
)
|
||||
|
||||
// CreateMilestone interactively creates a milestone
|
||||
func CreateMilestone(login *config.Login, owner, repo string) error {
|
||||
var title, description string
|
||||
var deadline *time.Time
|
||||
var title, description, deadline string
|
||||
|
||||
// owner, repo
|
||||
owner, repo, err := promptRepoSlug(owner, repo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
printTitleAndContent("Target repo:", fmt.Sprintf("%s/%s", owner, repo))
|
||||
|
||||
// title
|
||||
promptOpts := survey.WithValidator(survey.Required)
|
||||
promptI := &survey.Input{Message: "Milestone title:"}
|
||||
if err := survey.AskOne(promptI, &title, promptOpts); err != nil {
|
||||
if err := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewInput().
|
||||
Title("Milestone title:").
|
||||
Validate(huh.ValidateNotEmpty()).
|
||||
Value(&title),
|
||||
huh.NewText().
|
||||
Title("Milestone description(markdown):").
|
||||
ExternalEditor(config.GetPreferences().Editor).
|
||||
EditorExtension("md").
|
||||
Value(&description),
|
||||
huh.NewInput().
|
||||
Title("Milestone deadline:").
|
||||
Placeholder("YYYY-MM-DD").
|
||||
Validate(func(s string) error {
|
||||
if s == "" {
|
||||
return nil // no deadline
|
||||
}
|
||||
_, err := time.Parse("2006-01-02", s)
|
||||
return err
|
||||
}).
|
||||
Value(&deadline),
|
||||
),
|
||||
).WithTheme(theme.GetTheme()).Run(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// description
|
||||
promptM := NewMultiline(Multiline{
|
||||
Message: "Milestone description:",
|
||||
Syntax: "md",
|
||||
UseEditor: config.GetPreferences().Editor,
|
||||
})
|
||||
if err := survey.AskOne(promptM, &description); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// deadline
|
||||
if deadline, err = promptDatetime("Milestone deadline:"); err != nil {
|
||||
return err
|
||||
var deadlineTM *time.Time
|
||||
if deadline != "" {
|
||||
tm, _ := time.Parse("2006-01-02", deadline)
|
||||
deadlineTM = &tm
|
||||
}
|
||||
|
||||
return task.CreateMilestone(
|
||||
@ -52,6 +65,6 @@ func CreateMilestone(login *config.Login, owner, repo string) error {
|
||||
repo,
|
||||
title,
|
||||
description,
|
||||
deadline,
|
||||
deadlineTM,
|
||||
gitea.StateOpen)
|
||||
}
|
||||
|
Reference in New Issue
Block a user