1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package tui
import (
"context"
"punchcard/internal/actions"
tea "github.com/charmbracelet/bubbletea"
)
type (
navigationMsg struct{ Forward bool }
selectionMsg struct{ Forward bool }
drillDownMsg struct{}
drillUpMsg struct{}
)
func navigate(forward bool) tea.Cmd {
return func() tea.Msg { return navigationMsg{forward} }
}
func punchIn(m AppModel) tea.Cmd {
return func() tea.Msg {
_, _ = actions.New(m.queries).PunchInMostRecent(context.Background(), "", nil)
// TODO: use the returned TimerSession instead of re-querying everything
return m.refreshCmd()
}
}
func punchOut(m AppModel) tea.Cmd {
return func() tea.Msg {
_, _ = actions.New(m.queries).PunchOut(context.Background())
// TODO: use the returned TimerSession instead of re-querying everything
return m.refreshCmd()
}
}
func punchInOnSelection(m AppModel) tea.Cmd {
return func() tea.Msg {
var clientID, projectID, description string
var entryRate *float64
switch m.selectedBox {
case ProjectsBox:
clientID, projectID, description, entryRate = m.projectsBox.selection()
case HistoryBox:
clientID, projectID, description, entryRate = m.historyBox.selection()
}
_, _ = actions.New(m.queries).PunchIn(context.Background(), clientID, projectID, description, entryRate)
// TODO: use the returned TimerSession instead of re-querying everything
return m.refreshCmd()
}
}
func selectHistorySummary() tea.Cmd {
return func() tea.Msg { return drillDownMsg{} }
}
func backToHistorySummary() tea.Cmd {
return func() tea.Msg { return drillUpMsg{} }
}
func changeSelection(forward bool) tea.Cmd {
return func() tea.Msg { return selectionMsg{forward} }
}
|