1package tui
2
3import (
4 "smoothie/tui/bubbles/commits"
5 "smoothie/tui/bubbles/repo"
6 "smoothie/tui/bubbles/selection"
7
8 tea "github.com/charmbracelet/bubbletea"
9)
10
11type windowMsg struct{}
12type errMsg struct{ err error }
13
14func (e errMsg) Error() string {
15 return e.err.Error()
16}
17
18func (b *Bubble) windowChangesCmd() tea.Msg {
19 w := <-b.windowChanges
20 b.width = w.Width
21 b.height = w.Height
22 return windowMsg{}
23}
24
25func (b *Bubble) loadGitCmd() tea.Msg {
26 b.repos = b.repoSource.AllRepos()
27 mes := make([]MenuEntry, 0)
28 rs := make([]string, 0)
29 for _, me := range b.config.Menu {
30 mes = append(mes, me)
31 }
32 if b.config.ShowAllRepos {
33 OUTER:
34 for _, r := range b.repos {
35 for _, me := range mes {
36 if r.Name == me.Repo {
37 continue OUTER
38 }
39 }
40 mes = append(mes, MenuEntry{Name: r.Name, Repo: r.Name})
41 }
42 }
43 b.repoMenu = mes
44 for _, me := range mes {
45 rs = append(rs, me.Name)
46 }
47 b.repoSelect = selection.NewBubble(rs)
48 b.boxes[0] = b.repoSelect
49 b.commitsLog = commits.NewBubble(
50 b.height-verticalPadding-2,
51 boxRightWidth-horizontalPadding-2,
52 b.repoSource.GetCommits(200),
53 )
54 msg := b.getRepoCmd("config")()
55 b.activeBox = 0
56 b.state = loadedState
57 return msg
58}
59
60func (b *Bubble) getRepoCmd(name string) tea.Cmd {
61 var tmplConfig *Config
62 if name == "config" {
63 tmplConfig = b.config
64 }
65 h := b.height - verticalPadding - viewportHeightConstant
66 w := boxRightWidth - 2
67 rb := repo.NewBubble(b.repoSource, name, w, h, tmplConfig)
68 b.boxes[1] = rb
69 return rb.Init()
70}