summaryrefslogtreecommitdiff
path: root/internal/tui/commands.go
blob: c54df29bc6bdceb5168e661821ae6136eb7087c6 (plain)
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} }
}