summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/peeradd
diff options
context:
space:
mode:
Diffstat (limited to 'internal/client/ui/core/peeradd')
-rw-r--r--internal/client/ui/core/peeradd/peeradd.go190
1 files changed, 0 insertions, 190 deletions
diff --git a/internal/client/ui/core/peeradd/peeradd.go b/internal/client/ui/core/peeradd/peeradd.go
deleted file mode 100644
index 5306c12..0000000
--- a/internal/client/ui/core/peeradd/peeradd.go
+++ /dev/null
@@ -1,190 +0,0 @@
-package peeradd
-
-import (
- "errors"
- "log"
- "slices"
- "strconv"
- "strings"
-
- tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/lipgloss"
- "github.com/kyren223/eko/internal/client/gateway"
- "github.com/kyren223/eko/internal/client/ui/colors"
- "github.com/kyren223/eko/internal/client/ui/core/state"
- "github.com/kyren223/eko/internal/client/ui/field"
- "github.com/kyren223/eko/internal/client/ui/layouts/flex"
- "github.com/kyren223/eko/internal/packet"
- "github.com/kyren223/eko/pkg/assert"
- "github.com/kyren223/eko/pkg/snowflake"
-)
-
-var (
- width = 48
-
- style = lipgloss.NewStyle().
- Border(lipgloss.ThickBorder()).
- Padding(1, 4).
- Align(lipgloss.Center, lipgloss.Center)
-
- headerStyle = lipgloss.NewStyle().Foreground(colors.Turquoise)
-
- fieldBlurredStyle = lipgloss.NewStyle().
- PaddingLeft(1).
- Border(lipgloss.RoundedBorder()).
- BorderForeground(colors.DarkCyan)
- fieldFocusedStyle = fieldBlurredStyle.
- BorderForeground(colors.Focus).
- Border(lipgloss.ThickBorder())
-
- blurredCreate = lipgloss.NewStyle().
- Background(colors.Gray).Padding(0, 1).Render("Add user signal")
- focusedCreate = lipgloss.NewStyle().
- Background(colors.Blue).Padding(0, 1).Render("Add user signal")
-)
-
-const (
- MaxIconLength = 2
- MaxHexDigits = 6
-)
-
-const (
- NameField = iota
- CreateField
- FieldCount
-)
-
-type Model struct {
- name field.Model
- create string
-
- selected int
- nameWidth int
-}
-
-func New() Model {
- name := field.New(width)
- name.Header = "User ID"
- name.HeaderStyle = headerStyle
- name.FocusedStyle = fieldFocusedStyle
- name.BlurredStyle = fieldBlurredStyle
- name.ErrorStyle = lipgloss.NewStyle().Foreground(colors.Error)
- name.Input.CharLimit = width
- name.Focus()
- name.Input.Validate = func(s string) error {
- if strings.TrimSpace(s) == "" {
- return errors.New("cannot be empty")
- }
- if _, err := strconv.ParseInt(s, 10, 64); err != nil {
- return errors.New("invalid user id")
- }
-
- return nil
- }
-
- nameWidth := lipgloss.Width(name.View())
-
- return Model{
- name: name,
- create: blurredCreate,
- nameWidth: nameWidth,
- }
-}
-
-func (m Model) Init() tea.Cmd {
- return nil
-}
-
-func (m Model) View() string {
- name := m.name.View()
- create := lipgloss.NewStyle().
- Width(m.nameWidth).Align(lipgloss.Center).
- Render(m.create)
-
- content := flex.NewVertical(name, create).WithGap(1).View()
- return style.Render(content)
-}
-
-func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
- switch msg := msg.(type) {
- case tea.KeyMsg:
- key := msg.Type
- switch key {
- case tea.KeyTab:
- return m, m.cycle(1)
- case tea.KeyShiftTab:
- return m, m.cycle(-1)
-
- default:
- var cmd tea.Cmd
- switch m.selected {
- case NameField:
- m.name, cmd = m.name.Update(msg)
- }
- return m, cmd
- }
- }
-
- return m, nil
-}
-
-func (m *Model) cycle(step int) tea.Cmd {
- m.selected += step
- if m.selected < 0 {
- m.selected = FieldCount - 1
- } else {
- m.selected %= FieldCount
- }
- return m.updateFocus()
-}
-
-func (m *Model) updateFocus() tea.Cmd {
- m.name.Blur()
- m.create = blurredCreate
- switch m.selected {
- case NameField:
- return m.name.Focus()
- case CreateField:
- m.create = focusedCreate
- return nil
- default:
- assert.Never("missing switch statement field in update focus", "selected", m.selected)
- return nil
- }
-}
-
-func (m *Model) Select() (tea.Cmd, int) {
- if m.selected != CreateField {
- return nil, -1
- }
-
- m.name.Input.Err = m.name.Input.Validate(m.name.Input.Value())
- if m.name.Input.Err != nil {
- return nil, -1
- }
- name := m.name.Input.Value()
- num, err := strconv.ParseInt(name, 10, 64)
- id := snowflake.ID(num)
- assert.NoError(err, "input is already validated to be valid")
-
- index := -1
- for i, peer := range state.Data.Peers {
- if peer == id {
- index = i
- break
- }
- }
-
- if index != -1 {
- return nil, index
- }
-
- state.Data.Peers = slices.Insert(state.Data.Peers, 0, id)
- log.Println("Peers:", state.Data.Peers)
-
- data := state.JsonUserData()
- return gateway.Send(&packet.SetUserData{
- Data: &data,
- User: nil,
- }), 0
-}