diff options
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() |