network/pkg/installer/steps/peer_domain.go
2026-01-20 10:03:55 +02:00

80 lines
2.0 KiB
Go

package steps
import (
"strings"
"github.com/charmbracelet/bubbles/textinput"
)
// PeerDomain step for entering existing node's domain to join
type PeerDomain struct {
Input textinput.Model
Error error
Discovering bool
DiscoveryInfo string
DiscoveredPeer string
}
// NewPeerDomain creates a new PeerDomain step
func NewPeerDomain() *PeerDomain {
ti := textinput.New()
ti.Focus()
ti.CharLimit = 256
ti.Width = 50
ti.Placeholder = "e.g., node-123.orama.network"
return &PeerDomain{
Input: ti,
}
}
// View renders the peer domain input step
func (p *PeerDomain) View() string {
var s strings.Builder
s.WriteString(titleStyle.Render("Existing Node Domain") + "\n\n")
s.WriteString("Enter the domain of an existing node to join:\n")
s.WriteString(subtitleStyle.Render("The installer will auto-discover peer info via HTTPS/HTTP") + "\n\n")
s.WriteString(p.Input.View())
if p.Discovering {
s.WriteString("\n\n" + subtitleStyle.Render("🔍 "+p.DiscoveryInfo))
}
if p.DiscoveredPeer != "" && p.Error == nil {
s.WriteString("\n\n" + successStyle.Render("✓ Discovered peer: "+p.DiscoveredPeer[:12]+"..."))
}
if p.Error != nil {
s.WriteString("\n\n" + errorStyle.Render("✗ "+p.Error.Error()))
}
s.WriteString("\n\n")
s.WriteString(helpStyle.Render("Enter to discover & continue • Esc to go back"))
return s.String()
}
// SetValue sets the input value
func (p *PeerDomain) SetValue(value string) {
p.Input.SetValue(value)
}
// Value returns the current input value
func (p *PeerDomain) Value() string {
return strings.TrimSpace(p.Input.Value())
}
// SetError sets an error message
func (p *PeerDomain) SetError(err error) {
p.Error = err
}
// SetDiscovering sets the discovery status
func (p *PeerDomain) SetDiscovering(discovering bool, info string) {
p.Discovering = discovering
p.DiscoveryInfo = info
}
// SetDiscoveredPeer sets the discovered peer ID
func (p *PeerDomain) SetDiscoveredPeer(peerID string) {
p.DiscoveredPeer = peerID
}