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 }