From 4c75d53b5b824c330fd553e2a17f81ba1ebb8a0e Mon Sep 17 00:00:00 2001 From: Taybin Rutkin Date: Tue, 21 Jul 2026 10:39:16 -0400 Subject: [PATCH] feat: initialize datepicker when opening set-date modes Claude-Session: https://claude.ai/code/session_01BA1doywpQD49rP1vezTe9U --- internal/ui/datepicker_test.go | 22 ++++++++++++++++++++++ internal/ui/modes.go | 12 ++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/internal/ui/datepicker_test.go b/internal/ui/datepicker_test.go index 7274990..e2e249c 100644 --- a/internal/ui/datepicker_test.go +++ b/internal/ui/datepicker_test.go @@ -159,3 +159,25 @@ func TestCalendarEscCancels(t *testing.T) { t.Fatalf("expected mode to return to list, got %v", rm.mode) } } + +func TestOpeningDeadlineModeInitializesCalendar(t *testing.T) { + cfg := config.DefaultConfig() + item := &model.Item{Title: "Task", Level: 1} + of := &model.OrgFile{Items: []*model.Item{item}} + m := InitialModel(of, cfg, false, "") + // default deadline key is "d" + res, _ := m.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'d'}}) + rm := res.(uiModel) + if rm.mode != modeSetDeadline { + t.Fatalf("expected modeSetDeadline, got %v", rm.mode) + } + if !rm.datepicker.Selected { + t.Fatal("expected datepicker to have a selected date") + } + if rm.dateTextFocused { + t.Fatal("expected calendar focus (dateTextFocused false)") + } + if rm.editingItem != item { + t.Fatal("expected editingItem to be the cursor item") + } +} diff --git a/internal/ui/modes.go b/internal/ui/modes.go index 5007bf6..b100a3c 100644 --- a/internal/ui/modes.go +++ b/internal/ui/modes.go @@ -318,10 +318,12 @@ func (m uiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if len(items) > 0 && m.cursor < len(items) { m.editingItem = items[m.cursor] m.mode = modeSetDeadline + m.datepicker = newDatePicker(m.editingItem.Deadline) + m.dateTextFocused = false m.textinput.SetValue("") m.textinput.Placeholder = "YYYY-MM-DD or +N (days from today)" - m.textinput.Focus() - return m, textinput.Blink + m.textinput.Blur() + return m, nil } case key.Matches(msg, m.keys.SetScheduled): @@ -329,10 +331,12 @@ func (m uiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if len(items) > 0 && m.cursor < len(items) { m.editingItem = items[m.cursor] m.mode = modeSetScheduled + m.datepicker = newDatePicker(m.editingItem.Scheduled) + m.dateTextFocused = false m.textinput.SetValue("") m.textinput.Placeholder = "YYYY-MM-DD or +N (days from today)" - m.textinput.Focus() - return m, textinput.Blink + m.textinput.Blur() + return m, nil } case key.Matches(msg, m.keys.SetPriority):