import { useState } from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { Plus, Pencil } from 'lucide-react'; import { toast } from 'sonner'; import api, { getErrorMessage } from '@/lib/api'; import type { Calendar } from '@/types'; import { useCalendars } from '@/hooks/useCalendars'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import CalendarForm from './CalendarForm'; export default function CalendarSidebar() { const queryClient = useQueryClient(); const { data: calendars = [] } = useCalendars(); const [showForm, setShowForm] = useState(false); const [editingCalendar, setEditingCalendar] = useState(null); const toggleMutation = useMutation({ mutationFn: async ({ id, is_visible }: { id: number; is_visible: boolean }) => { await api.put(`/calendars/${id}`, { is_visible }); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['calendars'] }); queryClient.invalidateQueries({ queryKey: ['calendar-events'] }); }, onError: (error) => { toast.error(getErrorMessage(error, 'Failed to update calendar')); }, }); const handleToggle = (calendar: Calendar) => { toggleMutation.mutate({ id: calendar.id, is_visible: !calendar.is_visible }); }; const handleEdit = (calendar: Calendar) => { setEditingCalendar(calendar); setShowForm(true); }; const handleCloseForm = () => { setShowForm(false); setEditingCalendar(null); }; return (
Calendars
{calendars.map((cal) => (
handleToggle(cal)} className="shrink-0" style={{ accentColor: cal.color, borderColor: cal.is_visible ? cal.color : undefined, backgroundColor: cal.is_visible ? cal.color : undefined, }} /> {cal.name} {!cal.is_system && ( )}
))}
{showForm && ( )}
); }