summaryrefslogtreecommitdiff
path: root/internal/tui/app.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/tui/app.go')
-rw-r--r--internal/tui/app.go78
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()