diff options
author | T <t@tjp.lol> | 2025-08-06 16:00:05 -0600 |
---|---|---|
committer | T <t@tjp.lol> | 2025-08-06 16:26:00 -0600 |
commit | c53e8c4e41aa88566b101431bcd104ebf7b34312 (patch) | |
tree | 614e1c911fae328cfdb1a35050bf94658d9253f8 /internal/tui/history_box.go | |
parent | 65e2ed65775d64afbc6065a3b4ac1069020093ca (diff) |
TUI fixes, and WIP modal dialog rendering
Diffstat (limited to 'internal/tui/history_box.go')
-rw-r--r-- | internal/tui/history_box.go | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/internal/tui/history_box.go b/internal/tui/history_box.go index a524d6d..10ede60 100644 --- a/internal/tui/history_box.go +++ b/internal/tui/history_box.go @@ -8,6 +8,7 @@ import ( "punchcard/internal/queries" + "github.com/charmbracelet/bubbles/viewport" "github.com/charmbracelet/lipgloss/v2" ) @@ -46,6 +47,17 @@ type HistorySummaryItem struct { EntryCount int } +func (item HistorySummaryItem) key() HistorySummaryKey { + key := HistorySummaryKey{ + Date: dateOnly(item.Date), + ClientID: item.ClientID, + } + if item.ProjectID != nil { + key.ProjectID = *item.ProjectID + } + return key +} + // NewHistoryBoxModel creates a new history box model func NewHistoryBoxModel() HistoryBoxModel { return HistoryBoxModel{} @@ -151,7 +163,7 @@ func (m HistoryBoxModel) View(width, height int, isSelected bool, timer TimerBox } else { switch m.viewLevel { case HistoryLevelSummary: - content = m.renderSummaryView() + content = m.renderSummaryView(timer) case HistoryLevelDetails: content = m.renderDetailsView(timer) } @@ -161,8 +173,11 @@ func (m HistoryBoxModel) View(width, height int, isSelected bool, timer TimerBox if isSelected { style = selectedBoxStyle } + style = style.Width(width).Height(height) - return style.Width(width).Height(height).Render(content) + vp := viewport.New(width-2, height-4) + vp.SetContent(content) + return style.Render(vp.View()) } var ( @@ -178,9 +193,20 @@ var ( ) // renderSummaryView renders the summary view (level 1) with date headers and client/project summaries -func (m HistoryBoxModel) renderSummaryView() string { +func (m HistoryBoxModel) renderSummaryView(timer TimerBoxModel) string { content := "📝 Recent History" + var activeKey HistorySummaryKey + if timer.timerInfo.IsActive { + activeKey = HistorySummaryKey{ + Date: dateOnly(timer.timerInfo.StartTime), + ClientID: timer.timerInfo.ClientID, + } + if timer.timerInfo.ProjectID != nil { + activeKey.ProjectID = *timer.timerInfo.ProjectID + } + } + if len(m.summaryItems) == 0 { return "\n\nNo recent entries found." } @@ -197,8 +223,12 @@ func (m HistoryBoxModel) renderSummaryView() string { style = selectedItemStyle } - // TODO: add in duration from the currently running timer (requires other data from AppModel) - line := fmt.Sprintf(" %s (%s)", m.formatSummaryTitle(item), FormatDuration(item.TotalDuration)) + dur := item.TotalDuration + if item.key() == activeKey { + dur += timer.currentTime.Sub(timer.timerInfo.StartTime) + } + + line := fmt.Sprintf(" %s (%s)", m.formatSummaryTitle(item), FormatDuration(dur)) content += fmt.Sprintf("\n%s", style.Render(line)) } |