summaryrefslogtreecommitdiff
path: root/internal/tui/app.go
diff options
context:
space:
mode:
authorT <t@tjp.lol>2025-08-13 21:37:59 -0600
committerT <t@tjp.lol>2025-08-13 21:38:26 -0600
commit5c076e605185a09b1e570f9aa3c5ddb784ace0f3 (patch)
tree67b8103ab7d95302bb403388cfb0a61b70d606eb /internal/tui/app.go
parent7d0d21ba8663ab7ff777a06f4b113337fa717ff3 (diff)
edit contractor via modal
Diffstat (limited to 'internal/tui/app.go')
-rw-r--r--internal/tui/app.go45
1 files changed, 32 insertions, 13 deletions
diff --git a/internal/tui/app.go b/internal/tui/app.go
index f434034..0b67933 100644
--- a/internal/tui/app.go
+++ b/internal/tui/app.go
@@ -67,6 +67,7 @@ type AppModel struct {
projectsBox ClientsProjectsModel
historyBox HistoryBoxModel
modalBox ModalBoxModel
+ contractor ContractorInfo
width int
height int
@@ -81,6 +82,12 @@ type TimeStats struct {
WeekTotal time.Duration
}
+type ContractorInfo struct {
+ name string
+ label string
+ email string
+}
+
// NewApp creates a new TUI application
func NewApp(ctx context.Context, q *queries.Queries) *AppModel {
return &AppModel{
@@ -129,6 +136,7 @@ func (m AppModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
cmds = append(cmds, doTick())
case dataUpdatedMsg:
+ m.contractor = msg.contractor
m.timerBox.timerInfo = msg.timerInfo
m.timerBox.timerInfo.setNames(msg.clients, msg.projects)
m.timeStats = msg.stats
@@ -177,6 +185,9 @@ func (m AppModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.openEntryEditor()
}
+ case openContractorEditor:
+ m.openContractorEditor()
+
case openModalUnchanged:
m.modalBox.Active = true
@@ -246,6 +257,12 @@ func (m *AppModel) openEntryEditor() {
}
}
+func (m *AppModel) openContractorEditor() {
+ m.modalBox.activate(ModalTypeContractor, 0, *m)
+ m.modalBox.populateContractorFields(m.contractor)
+ m.modalBox.form.fields[0].Focus()
+}
+
func (m *AppModel) openHistoryFilterModal() {
m.modalBox.activate(ModalTypeHistoryFilter, 0, *m)
m.modalBox.form.fields[0].Focus()
@@ -369,17 +386,18 @@ func (m AppModel) View() string {
// dataUpdatedMsg is sent when data is updated from the database
type dataUpdatedMsg struct {
- timerInfo TimerInfo
- stats TimeStats
- clients []queries.Client
- projects map[int64][]queries.Project
- entries []queries.TimeEntry
- err error
+ contractor ContractorInfo
+ timerInfo TimerInfo
+ stats TimeStats
+ clients []queries.Client
+ projects map[int64][]queries.Project
+ entries []queries.TimeEntry
+ err error
}
// refreshCmd is a command to update all app data
func (m AppModel) refreshCmd() tea.Msg {
- timerInfo, stats, clients, projects, entries, err := getAppData(m.ctx, m.queries, m.historyBox.filter)
+ contractor, timerInfo, stats, clients, projects, entries, err := getAppData(m.ctx, m.queries, m.historyBox.filter)
if err != nil {
msg := dataUpdatedMsg{}
msg.err = err
@@ -387,12 +405,13 @@ func (m AppModel) refreshCmd() tea.Msg {
}
return dataUpdatedMsg{
- timerInfo: timerInfo,
- stats: stats,
- clients: clients,
- projects: projects,
- entries: entries,
- err: nil,
+ contractor: contractor,
+ timerInfo: timerInfo,
+ stats: stats,
+ clients: clients,
+ projects: projects,
+ entries: entries,
+ err: nil,
}
}