Files
tui/widget/pipeline.go
T

82 lines
2.1 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 pipelineListItem struct {
name string
id string
}
type pipelineCreateListItem string
func (i pipelineListItem) FilterValue() string { return "" }
func (i pipelineCreateListItem) FilterValue() string { return "" }
type pipelineListItemDelegate struct{}
func (d pipelineListItemDelegate) Height() int { return 1 }
func (d pipelineListItemDelegate) Spacing() int { return 0 }
func (d pipelineListItemDelegate) Update(msg tea.Msg, m *list.Model) tea.Cmd { return nil }
func (d pipelineListItemDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) {
switch i := listItem.(type) {
case pipelineListItem:
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 pipelineCreateListItem:
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 CreatePipelineWidget(client graphql.Client) (list.Model, error) {
content := []list.Item{}
getPipelineResp, err := queries.GetPipelines(context.Background(), client)
if err != nil {
return list.Model{}, fmt.Errorf("Could not connect to server: %w", err)
}
if getPipelineResp.Pipelines != nil {
for _, pipeline := range getPipelineResp.Pipelines {
content = append(content, pipelineListItem{
name: pipeline.Name,
id: pipeline.Id,
})
}
}
content = append(content, pipelineCreateListItem("> Create Pipeline <"))
model := list.New(content, pipelineListItemDelegate{}, 50, 50)
model.SetShowStatusBar(false)
model.Title = "Pipelines"
return model, nil
}