mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-03 07:06:30 +00:00
72 lines
1.1 KiB
Go
72 lines
1.1 KiB
Go
|
package ui
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/charmbracelet/bubbles/textinput"
|
||
|
tea "github.com/charmbracelet/bubbletea"
|
||
|
)
|
||
|
|
||
|
type confirmModel struct {
|
||
|
confirmed bool
|
||
|
prompt string
|
||
|
err error
|
||
|
}
|
||
|
|
||
|
func (m confirmModel) Init() tea.Cmd {
|
||
|
return textinput.Blink
|
||
|
}
|
||
|
|
||
|
func (m confirmModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||
|
var cmd tea.Cmd
|
||
|
|
||
|
switch msg := msg.(type) {
|
||
|
case tea.KeyMsg:
|
||
|
if msg.Runes != nil {
|
||
|
switch msg.Runes[0] {
|
||
|
case 'y':
|
||
|
m.confirmed = true
|
||
|
return m, tea.Quit
|
||
|
case 'n':
|
||
|
m.confirmed = false
|
||
|
return m, tea.Quit
|
||
|
}
|
||
|
}
|
||
|
|
||
|
switch msg.Type {
|
||
|
case tea.KeyCtrlC, tea.KeyEsc:
|
||
|
return m, tea.Quit
|
||
|
}
|
||
|
default:
|
||
|
return m, nil
|
||
|
}
|
||
|
|
||
|
return m, cmd
|
||
|
}
|
||
|
|
||
|
func (m confirmModel) View() string {
|
||
|
return fmt.Sprintf(
|
||
|
"%s y / n (esc to quit)",
|
||
|
m.prompt,
|
||
|
) + "\n"
|
||
|
}
|
||
|
|
||
|
func Confirm(prompt string) (bool, error) {
|
||
|
p := tea.NewProgram(confirmModel{
|
||
|
prompt: prompt,
|
||
|
err: nil,
|
||
|
})
|
||
|
|
||
|
_m, err := p.Run()
|
||
|
if err != nil {
|
||
|
return false, err
|
||
|
}
|
||
|
|
||
|
m, ok := _m.(confirmModel)
|
||
|
if !ok {
|
||
|
return false, fmt.Errorf("unexpected model: %T", _m)
|
||
|
}
|
||
|
|
||
|
return m.confirmed, nil
|
||
|
}
|