feat: initialize datepicker when opening set-date modes

Claude-Session: https://claude.ai/code/session_01BA1doywpQD49rP1vezTe9U
This commit is contained in:
Taybin Rutkin 2026-07-21 15:43:32 -04:00
parent ecd261e377
commit 51bd9b16b9
No known key found for this signature in database
GPG key ID: 605FA2C570B6AC9E
2 changed files with 30 additions and 4 deletions

View file

@ -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")
}
}

View file

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