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}