log.go

  1package repo
  2
  3import (
  4	tea "github.com/charmbracelet/bubbletea"
  5	"github.com/charmbracelet/soft-serve/ui/common"
  6	"github.com/charmbracelet/soft-serve/ui/components/selector"
  7	"github.com/charmbracelet/soft-serve/ui/components/viewport"
  8)
  9
 10type view int
 11
 12const (
 13	logView view = iota
 14	commitView
 15)
 16
 17type Log struct {
 18	common     common.Common
 19	selector   *selector.Selector
 20	vp         *viewport.Viewport
 21	activeView view
 22}
 23
 24func NewLog(common common.Common) *Log {
 25	l := &Log{
 26		common:     common,
 27		vp:         viewport.New(),
 28		activeView: logView,
 29	}
 30	selector := selector.New(common, []selector.IdentifiableItem{}, LogItemDelegate{common.Styles})
 31	selector.SetShowFilter(false)
 32	selector.SetShowHelp(false)
 33	selector.SetShowPagination(true)
 34	selector.SetShowStatusBar(false)
 35	selector.SetShowTitle(false)
 36	selector.SetFilteringEnabled(false)
 37	selector.DisableQuitKeybindings()
 38	selector.KeyMap.NextPage = common.Keymap.NextPage
 39	selector.KeyMap.PrevPage = common.Keymap.PrevPage
 40	l.selector = selector
 41	return l
 42}
 43
 44func (l *Log) SetSize(width, height int) {
 45	l.common.SetSize(width, height)
 46	l.selector.SetSize(width, height)
 47	l.vp.SetSize(width, height)
 48}
 49
 50// func (b *Bubble) countCommits() tea.Msg {
 51// 	if b.ref == nil {
 52// 		ref, err := b.repo.HEAD()
 53// 		if err != nil {
 54// 			return common.ErrMsg{Err: err}
 55// 		}
 56// 		b.ref = ref
 57// 	}
 58// 	count, err := b.repo.CountCommits(b.ref)
 59// 	if err != nil {
 60// 		return common.ErrMsg{Err: err}
 61// 	}
 62// 	return countMsg(count)
 63// }
 64
 65// func (b *Bubble) updateItems() tea.Msg {
 66// 	if b.count == 0 {
 67// 		b.count = int64(b.countCommits().(countMsg))
 68// 	}
 69// 	count := b.count
 70// 	items := make([]list.Item, count)
 71// 	page := b.nextPage
 72// 	limit := b.list.Paginator.PerPage
 73// 	skip := page * limit
 74// 	// CommitsByPage pages start at 1
 75// 	cc, err := b.repo.CommitsByPage(b.ref, page+1, limit)
 76// 	if err != nil {
 77// 		return common.ErrMsg{Err: err}
 78// 	}
 79// 	for i, c := range cc {
 80// 		idx := i + skip
 81// 		if int64(idx) >= count {
 82// 			break
 83// 		}
 84// 		items[idx] = item{c}
 85// 	}
 86// 	b.list.SetItems(items)
 87// 	b.SetSize(b.width, b.height)
 88// 	return itemsMsg{}
 89// }
 90
 91func (l *Log) Init() tea.Cmd {
 92	return nil
 93}
 94
 95func (l *Log) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 96	return l, nil
 97}
 98
 99func (l *Log) View() string {
100	switch l.activeView {
101	case logView:
102		return l.selector.View()
103	case commitView:
104		return l.vp.View()
105	default:
106		return ""
107	}
108}