'use client' import { useState, useOptimistic } from 'react' import { useRouter } from 'next/navigation' import { toggleItem } from '@/lib/actions' import { CheckCircle2, Circle } from 'lucide-react' import { useToast } from './ToastContainer' interface ToggleItemButtonProps { itemId: string completed: boolean variant?: 'full' | 'icon' } export default function ToggleItemButton({ itemId, completed, variant = 'full' }: ToggleItemButtonProps) { const router = useRouter() const { showToast } = useToast() const [isToggling, setIsToggling] = useState(false) const [optimisticCompleted, setOptimisticCompleted] = useOptimistic(completed) const handleToggle = async (e: React.MouseEvent) => { e.preventDefault() e.stopPropagation() if (isToggling) return setIsToggling(true) // Optimistically update UI setOptimisticCompleted(!completed) try { await toggleItem(itemId) showToast(completed ? 'Task marked incomplete' : 'Task completed', 'success') router.refresh() } catch (error) { console.error('Error toggling item:', error) showToast('Failed to update task', 'error') // Revert optimistic update on error setOptimisticCompleted(completed) } finally { setIsToggling(false) } } if (variant === 'icon') { return ( ) } return ( ) }