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