diff --git a/frontend/src/components/reminders/ReminderForm.tsx b/frontend/src/components/reminders/ReminderForm.tsx index c8d1dc3..435f06d 100644 --- a/frontend/src/components/reminders/ReminderForm.tsx +++ b/frontend/src/components/reminders/ReminderForm.tsx @@ -22,53 +22,28 @@ interface ReminderFormProps { onClose: () => void; } -function parseRemindAt(remindAt?: string) { - if (!remindAt) return { date: '', hour: '12', minute: '00', period: 'PM' as const }; - const d = new Date(remindAt); - const date = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; - let hours = d.getHours(); - const period = hours >= 12 ? 'PM' as const : 'AM' as const; - hours = hours % 12 || 12; - return { - date, - hour: String(hours), - minute: String(d.getMinutes()).padStart(2, '0'), - period, - }; -} - -function buildRemindAt(date: string, hour: string, minute: string, period: 'AM' | 'PM'): string { - if (!date) return ''; - let h = parseInt(hour, 10); - if (period === 'AM' && h === 12) h = 0; - else if (period === 'PM' && h !== 12) h += 12; - return `${date}T${String(h).padStart(2, '0')}:${minute}`; -} - export default function ReminderForm({ reminder, onClose }: ReminderFormProps) { const queryClient = useQueryClient(); - const parsed = parseRemindAt(reminder?.remind_at); - const [title, setTitle] = useState(reminder?.title || ''); - const [description, setDescription] = useState(reminder?.description || ''); - const [date, setDate] = useState(parsed.date); - const [hour, setHour] = useState(parsed.hour); - const [minute, setMinute] = useState(parsed.minute); - const [period, setPeriod] = useState<'AM' | 'PM'>(parsed.period); - const [recurrenceRule, setRecurrenceRule] = useState(reminder?.recurrence_rule || ''); + const [formData, setFormData] = useState({ + title: reminder?.title || '', + description: reminder?.description || '', + remind_at: reminder?.remind_at ? reminder.remind_at.slice(0, 16) : '', + recurrence_rule: reminder?.recurrence_rule || '', + }); const mutation = useMutation({ - mutationFn: async () => { - const data = { - title, - description: description || null, - remind_at: buildRemindAt(date, hour, minute, period) || null, - recurrence_rule: recurrenceRule || null, + mutationFn: async (data: typeof formData) => { + const payload = { + ...data, + description: data.description || null, + remind_at: data.remind_at || null, + recurrence_rule: data.recurrence_rule || null, }; if (reminder) { - const response = await api.put(`/reminders/${reminder.id}`, data); + const response = await api.put(`/reminders/${reminder.id}`, payload); return response.data; } else { - const response = await api.post('/reminders', data); + const response = await api.post('/reminders', payload); return response.data; } }, @@ -86,7 +61,7 @@ export default function ReminderForm({ reminder, onClose }: ReminderFormProps) { const handleSubmit = (e: FormEvent) => { e.preventDefault(); - mutation.mutate(); + mutation.mutate(formData); }; return ( @@ -102,8 +77,8 @@ export default function ReminderForm({ reminder, onClose }: ReminderFormProps) { Title setTitle(e.target.value)} + value={formData.title} + onChange={(e) => setFormData({ ...formData, title: e.target.value })} required /> @@ -112,67 +87,37 @@ export default function ReminderForm({ reminder, onClose }: ReminderFormProps) { Description setDescription(e.target.value)} + value={formData.description} + onChange={(e) => setFormData({ ...formData, description: e.target.value })} className="min-h-[80px] flex-1" /> - - Remind At - + + + Remind At setDate(e.target.value)} - className="flex-1" + id="remind_at" + type="datetime-local" + value={formData.remind_at} + onChange={(e) => setFormData({ ...formData, remind_at: e.target.value })} /> + + + + Recurrence setHour(e.target.value)} - className="w-[4.5rem]" + id="recurrence" + value={formData.recurrence_rule} + onChange={(e) => setFormData({ ...formData, recurrence_rule: e.target.value })} > - {Array.from({ length: 12 }, (_, i) => i + 1).map((h) => ( - {h} - ))} - - : - setMinute(e.target.value)} - className="w-[4.5rem]" - > - {Array.from({ length: 12 }, (_, i) => i * 5).map((m) => ( - - {String(m).padStart(2, '0')} - - ))} - - setPeriod(e.target.value as 'AM' | 'PM')} - className="w-[4.5rem]" - > - AM - PM + None + Daily + Weekly + Monthly - - - Recurrence - setRecurrenceRule(e.target.value)} - > - None - Daily - Weekly - Monthly - -