mirror of
https://github.com/anotherhadi/default-creds-tui.git
synced 2026-10-05 10:58:25 +02:00
+61
@@ -0,0 +1,61 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
tea "charm.land/bubbletea/v2"
|
||||
zone "github.com/lrstanley/bubblezone/v2"
|
||||
|
||||
"github.com/anotherhadi/ilovetui/notification"
|
||||
|
||||
"github.com/anotherhadi/default-creds-tui/internal/creds"
|
||||
)
|
||||
|
||||
type copyField int
|
||||
|
||||
const (
|
||||
fieldUser copyField = iota
|
||||
fieldPass
|
||||
)
|
||||
|
||||
func (m Model) updateMouseClick(msg tea.MouseClickMsg) (Model, tea.Cmd) {
|
||||
if zone.Get(searchBoxZone).InBounds(msg) {
|
||||
m.searching = true
|
||||
return m, m.searchInput.Focus()
|
||||
}
|
||||
|
||||
items := m.list.VisibleItems()
|
||||
for i, item := range items {
|
||||
e := item.(creds.Entry)
|
||||
switch {
|
||||
case zone.Get(entryUserZoneID(i)).InBounds(msg):
|
||||
return m, copyEntryField(e, fieldUser)
|
||||
case zone.Get(entryPassZoneID(i)).InBounds(msg):
|
||||
return m, copyEntryField(e, fieldPass)
|
||||
case zone.Get(entryZoneID(i)).InBounds(msg):
|
||||
m.list.Select(i)
|
||||
return m, nil
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (m Model) copySelected(field copyField) tea.Cmd {
|
||||
e, ok := m.selectedEntry()
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return copyEntryField(e, field)
|
||||
}
|
||||
|
||||
func copyEntryField(e creds.Entry, field copyField) tea.Cmd {
|
||||
label, value := "username", e.User
|
||||
if field == fieldPass {
|
||||
label, value = "password", e.Pass
|
||||
}
|
||||
if value == "" {
|
||||
return notification.Show("Copy", "No "+label+" set for '"+e.Name+"'.", notification.Warning)
|
||||
}
|
||||
return tea.Batch(
|
||||
tea.SetClipboard(value),
|
||||
notification.Show("Copied", "'"+e.Name+"' "+label+" copied to clipboard.", notification.Success),
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user