From 6cd648f3a86e8987fd734d821dc37d97068d658e Mon Sep 17 00:00:00 2001 From: Kyle Pope Date: Tue, 3 Mar 2026 16:43:14 +0800 Subject: [PATCH] Replace native date/time inputs with DatePicker across calendar and todo forms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EventForm + EventDetailPanel: native → DatePicker with dynamic mode via all_day toggle - TodoForm + TodoDetailPanel: merge date + time into single datetime DatePicker, remove separate time input, move recurrence select into 2-col grid beside date picker Co-Authored-By: Claude Opus 4.6 --- .../components/calendar/EventDetailPanel.tsx | 15 ++++--- .../src/components/calendar/EventForm.tsx | 15 ++++--- .../src/components/todos/TodoDetailPanel.tsx | 41 ++++++++----------- frontend/src/components/todos/TodoForm.tsx | 41 ++++++++----------- 4 files changed, 53 insertions(+), 59 deletions(-) diff --git a/frontend/src/components/calendar/EventDetailPanel.tsx b/frontend/src/components/calendar/EventDetailPanel.tsx index 3c0c4e4..882a0bf 100644 --- a/frontend/src/components/calendar/EventDetailPanel.tsx +++ b/frontend/src/components/calendar/EventDetailPanel.tsx @@ -13,6 +13,7 @@ import { formatUpdatedAt } from '@/components/shared/utils'; import CopyableField from '@/components/shared/CopyableField'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; +import { DatePicker } from '@/components/ui/date-picker'; import { Textarea } from '@/components/ui/textarea'; import { Select } from '@/components/ui/select'; import { Checkbox } from '@/components/ui/checkbox'; @@ -633,22 +634,24 @@ export default function EventDetailPanel({
- updateField('start_datetime', e.target.value)} + onChange={(v) => updateField('start_datetime', v)} className="text-xs" required />
- updateField('end_datetime', e.target.value)} + onChange={(v) => updateField('end_datetime', v)} className="text-xs" />
diff --git a/frontend/src/components/calendar/EventForm.tsx b/frontend/src/components/calendar/EventForm.tsx index f3168e3..4bae0fc 100644 --- a/frontend/src/components/calendar/EventForm.tsx +++ b/frontend/src/components/calendar/EventForm.tsx @@ -13,6 +13,7 @@ import { SheetClose, } from '@/components/ui/sheet'; import { Input } from '@/components/ui/input'; +import { DatePicker } from '@/components/ui/date-picker'; import { Textarea } from '@/components/ui/textarea'; import { Select } from '@/components/ui/select'; import { Label } from '@/components/ui/label'; @@ -281,22 +282,24 @@ export default function EventForm({ event, templateData, templateName, initialSt
- setFormData({ ...formData, start_datetime: e.target.value })} + onChange={(v) => setFormData({ ...formData, start_datetime: v })} required />
- setFormData({ ...formData, end_datetime: e.target.value })} + onChange={(v) => setFormData({ ...formData, end_datetime: v })} />
diff --git a/frontend/src/components/todos/TodoDetailPanel.tsx b/frontend/src/components/todos/TodoDetailPanel.tsx index e65021e..a7893ec 100644 --- a/frontend/src/components/todos/TodoDetailPanel.tsx +++ b/frontend/src/components/todos/TodoDetailPanel.tsx @@ -389,38 +389,31 @@ export default function TodoDetailPanel({ updateField('due_date', v)} + mode="datetime" + value={editState.due_date ? (editState.due_date + 'T' + (editState.due_time || '00:00')) : ''} + onChange={(v) => { + updateField('due_date', v ? v.slice(0, 10) : ''); + updateField('due_time', v ? v.slice(11, 16) : ''); + }} className="text-xs" />
- - updateField('due_time', e.target.value)} + +
-
- - -
- {/* Save / Cancel at bottom */}
- - setFormData({ ...formData, due_time: e.target.value })} - /> + +
- -
- - -