diff options
author | T <t@tjp.lol> | 2025-09-29 15:04:44 -0600 |
---|---|---|
committer | T <t@tjp.lol> | 2025-09-30 11:40:45 -0600 |
commit | 7ba68d333bc20b5795ccfd3870546a05eee60470 (patch) | |
tree | 12dc4b017803b7d01844fd42b9e3be281cbbd986 /internal/tui/app.go | |
parent | bce8dbb58165e443902d9dae3909225ef42630c4 (diff) |
Diffstat (limited to 'internal/tui/app.go')
-rw-r--r-- | internal/tui/app.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/tui/app.go b/internal/tui/app.go index fe5f364..38457ff 100644 --- a/internal/tui/app.go +++ b/internal/tui/app.go @@ -5,6 +5,7 @@ import ( "fmt" "time" + "git.tjp.lol/punchcard/internal/actions" "git.tjp.lol/punchcard/internal/queries" tea "github.com/charmbracelet/bubbletea" @@ -180,6 +181,13 @@ func (m AppModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case modalClosed: m.modalBox.deactivate() + case reportGenerationSucceeded: + m.modalBox.deactivate() + + case reportGenerationFailed: + m.modalBox.form.err = msg.err + m.modalBox.Active = true + case openTimeEntryEditor: if m.selectedBox == HistoryBox && m.historyBox.viewLevel == HistoryLevelDetails { m.openEntryEditor() @@ -232,6 +240,32 @@ func (m AppModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.filterHistoryByProjectBox() } cmds = append(cmds, m.refreshCmd) + + case toggleShowArchivedMsg: + if m.selectedBox == ProjectsBox { + m.projectsBox.showArchived = !m.projectsBox.showArchived + m.projectsBox.restoreSelection(msg.restoreClientID, msg.restoreProjectID) + } + + case archiveSelectedMsg: + if m.selectedBox == ProjectsBox { + cmds = append(cmds, m.archiveSelectedClientOrProject(msg.clientID, msg.projectID, msg.restoreClientID, msg.restoreProjectID)) + } + + case unarchiveSelectedMsg: + if m.selectedBox == ProjectsBox { + cmds = append(cmds, m.unarchiveSelectedClientOrProject(msg.clientID, msg.projectID, msg.restoreClientID, msg.restoreProjectID)) + } + + case restoreSelectionMsg: + if m.selectedBox == ProjectsBox { + m.projectsBox.restoreSelection(msg.clientID, msg.projectID) + } + + case showArchivedWarningMsg: + m.modalBox.Active = true + m.modalBox.Type = ModalTypeArchivedWarning + m.modalBox.archivedPunchInParams = msg.params } return m, tea.Batch(cmds...) @@ -249,6 +283,50 @@ func (m *AppModel) filterHistoryByProjectBox() { m.historyBox.resetSelection() } +func (m *AppModel) archiveSelectedClientOrProject(clientID int64, projectID *int64, restoreClientID int64, restoreProjectID *int64) tea.Cmd { + return tea.Sequence( + func() tea.Msg { + a := actions.New(m.queries) + + if projectID == nil { + // Archive client + _ = a.ArchiveClient(context.Background(), clientID) + } else { + // Archive project + _ = a.ArchiveProject(context.Background(), *projectID) + } + + return nil + }, + m.refreshCmd, + func() tea.Msg { + return restoreSelectionMsg{clientID: restoreClientID, projectID: restoreProjectID} + }, + ) +} + +func (m *AppModel) unarchiveSelectedClientOrProject(clientID int64, projectID *int64, restoreClientID int64, restoreProjectID *int64) tea.Cmd { + return tea.Sequence( + func() tea.Msg { + a := actions.New(m.queries) + + if projectID == nil { + // Unarchive client + _ = a.UnarchiveClient(context.Background(), clientID) + } else { + // Unarchive project + _ = a.UnarchiveProject(context.Background(), *projectID) + } + + return nil + }, + m.refreshCmd, + func() tea.Msg { + return restoreSelectionMsg{clientID: restoreClientID, projectID: restoreProjectID} + }, + ) +} + func (m *AppModel) openEntryEditor() { m.modalBox.activate(ModalTypeEntry, m.historyBox.selectedEntry().ID, *m) m.modalBox.form.fields[0].Focus() |