import { useState, FormEvent } from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import api, { getErrorMessage } from '@/lib/api'; import type { Reminder } from '@/types'; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetFooter, SheetClose, } from '@/components/ui/sheet'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Select } from '@/components/ui/select'; import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; interface ReminderFormProps { reminder: Reminder | null; onClose: () => void; } export default function ReminderForm({ reminder, onClose }: ReminderFormProps) { const queryClient = useQueryClient(); 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 (data: typeof formData) => { if (reminder) { const response = await api.put(`/reminders/${reminder.id}`, data); return response.data; } else { const response = await api.post('/reminders', data); return response.data; } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['reminders'] }); queryClient.invalidateQueries({ queryKey: ['dashboard'] }); queryClient.invalidateQueries({ queryKey: ['upcoming'] }); toast.success(reminder ? 'Reminder updated' : 'Reminder created'); onClose(); }, onError: (error) => { toast.error(getErrorMessage(error, reminder ? 'Failed to update reminder' : 'Failed to create reminder')); }, }); const handleSubmit = (e: FormEvent) => { e.preventDefault(); mutation.mutate(formData); }; return ( {reminder ? 'Edit Reminder' : 'New Reminder'}
setFormData({ ...formData, title: e.target.value })} required />