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):