update:wip

This commit is contained in:
2026-04-06 01:39:29 +09:00
parent 09c78206a8
commit ed19e0ba4e
10 changed files with 475 additions and 58 deletions

78
internal/tui/form.go Normal file
View File

@@ -0,0 +1,78 @@
package tui
import (
"strings"
"charm.land/bubbles/v2/textinput"
)
const (
fieldName = iota
fieldHost
fieldUser
fieldPrivateKey
fieldPort
fieldSave
fieldBack
fieldCount
)
type addServerForm struct {
inputs [5]textinput.Model
focused int // 06: inputs 0-4, save 5, back 6
}
func newAddServerForm() addServerForm {
mkInput := func(placeholder string, limit int) textinput.Model {
ti := textinput.New()
ti.Prompt = ""
ti.CharLimit = limit
ti.SetWidth(40)
ti.Placeholder = placeholder
return ti
}
f := addServerForm{}
f.inputs[fieldName] = mkInput("production-web", 64)
f.inputs[fieldHost] = mkInput("192.168.1.1 or example.com", 253)
f.inputs[fieldUser] = mkInput("deploy", 64)
f.inputs[fieldPrivateKey] = mkInput("~/.ssh/id_rsa", 512)
f.inputs[fieldPort] = mkInput("22 (optional)", 5)
f.inputs[fieldName].Focus()
return f
}
func (f *addServerForm) focusField(i int) {
for j := range f.inputs {
f.inputs[j].Blur()
}
if i < len(f.inputs) {
f.inputs[i].Focus()
}
f.focused = i
}
func (f addServerForm) canSave() bool {
return strings.TrimSpace(f.inputs[fieldName].Value()) != "" &&
strings.TrimSpace(f.inputs[fieldHost].Value()) != "" &&
strings.TrimSpace(f.inputs[fieldUser].Value()) != "" &&
strings.TrimSpace(f.inputs[fieldPrivateKey].Value()) != ""
}
func (f addServerForm) focusNext() addServerForm {
next := f.focused + 1
if next >= fieldCount {
next = fieldCount - 1
}
f.focusField(next)
return f
}
func (f addServerForm) focusPrev() addServerForm {
prev := f.focused - 1
if prev < 0 {
prev = 0
}
f.focusField(prev)
return f
}