diff options
author | T <t@tjp.lol> | 2025-08-13 13:04:05 -0600 |
---|---|---|
committer | T <t@tjp.lol> | 2025-08-13 13:42:43 -0600 |
commit | 389b72e55b04ccfc02b04eb81cb8f7bb7a5c8b59 (patch) | |
tree | be3015b2c7db90cddfc85d3e77ddc76213485494 /internal/tui/form.go | |
parent | 29c6581e08d0fe98433eff218de7701b51a6861c (diff) |
history filtering
Diffstat (limited to 'internal/tui/form.go')
-rw-r--r-- | internal/tui/form.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/internal/tui/form.go b/internal/tui/form.go index 71d5299..7dae012 100644 --- a/internal/tui/form.go +++ b/internal/tui/form.go @@ -6,6 +6,8 @@ import ( "strconv" "time" + "punchcard/internal/reports" + "github.com/charmbracelet/bubbles/textinput" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" @@ -71,6 +73,24 @@ func newOptionalFloatField(label string) FormField { return f } +func newDateRangeField(label string) FormField { + f := FormField{ + Model: textinput.New(), + label: label, + } + f.Validate = func(s string) error { + if s == "" { + return errors.New("date range is required") + } + _, err := reports.ParseDateRange(s) + if err != nil { + return fmt.Errorf("invalid date range: %v", err) + } + return nil + } + return f +} + type Form struct { fields []FormField selIdx int @@ -129,6 +149,17 @@ func NewProjectForm() Form { return form } +func NewHistoryFilterForm() Form { + form := NewForm([]FormField{ + newDateRangeField("Date Range"), + {Model: textinput.New(), label: "Client (optional)"}, + {Model: textinput.New(), label: "Project (optional)"}, + }) + form.SelectedStyle = &modalFocusedInputStyle + form.UnselectedStyle = &modalBlurredInputStyle + return form +} + func (ff Form) Update(msg tea.Msg) (Form, tea.Cmd) { if msg, ok := msg.(tea.KeyMsg); ok { switch msg.String() { |