84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package widget
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/Khan/genqlient/graphql"
|
|
"github.com/charmbracelet/bubbles/list"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
|
|
"git.ohea.xyz/cursorius/tui/queries"
|
|
)
|
|
|
|
type cloneCredentialListItem struct {
|
|
name string
|
|
widgetType string
|
|
id string
|
|
}
|
|
|
|
type cloneCredentialCreateListItem string
|
|
|
|
func (i cloneCredentialListItem) FilterValue() string { return "" }
|
|
func (i cloneCredentialCreateListItem) FilterValue() string { return "" }
|
|
|
|
type cloneCredentialListItemDelegate struct{}
|
|
|
|
func (d cloneCredentialListItemDelegate) Height() int { return 1 }
|
|
func (d cloneCredentialListItemDelegate) Spacing() int { return 0 }
|
|
func (d cloneCredentialListItemDelegate) Update(msg tea.Msg, m *list.Model) tea.Cmd { return nil }
|
|
func (d cloneCredentialListItemDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) {
|
|
switch i := listItem.(type) {
|
|
case cloneCredentialListItem:
|
|
fn := itemStyle.Render
|
|
faintFn := faintItemStyle.Render
|
|
if index == m.Index() {
|
|
fn = func(s string) string {
|
|
return selectedItemStyle.Render("> " + s)
|
|
}
|
|
faintFn = faintSelectedItemStyle.Render
|
|
}
|
|
|
|
str := fn(i.name) + faintFn(" ("+i.id+")")
|
|
fmt.Fprint(w, str)
|
|
case cloneCredentialCreateListItem:
|
|
fn := itemStyle.Render
|
|
if index == m.Index() {
|
|
fn = func(s string) string {
|
|
return selectedItemStyle.Render("> " + s)
|
|
}
|
|
}
|
|
|
|
str := string(i)
|
|
fmt.Fprint(w, fn(str))
|
|
}
|
|
}
|
|
|
|
func CreateCloneCredentialWidget(client graphql.Client) (list.Model, error) {
|
|
content := []list.Item{}
|
|
|
|
getCloneCredentialResp, err := queries.GetCloneCredentials(context.Background(), client)
|
|
if err != nil {
|
|
return list.Model{}, fmt.Errorf("Could not connect to server: %w", err)
|
|
}
|
|
|
|
if getCloneCredentialResp.CloneCredentials == nil {
|
|
|
|
for _, cloneCredential := range getCloneCredentialResp.CloneCredentials {
|
|
content = append(content, cloneCredentialListItem{
|
|
name: cloneCredential.Name,
|
|
id: cloneCredential.Id,
|
|
})
|
|
}
|
|
}
|
|
|
|
content = append(content, cloneCredentialCreateListItem("[Create Clone Credential]"))
|
|
|
|
model := list.New(content, cloneCredentialListItemDelegate{}, 50, 50)
|
|
model.SetShowStatusBar(false)
|
|
model.Title = "Clone Credentials"
|
|
|
|
return model, nil
|
|
}
|