'use client' import { useState } from 'react' interface ChecklistItemProps { id: string itemName: string status: string owner: { id: string; name: string } | null phase: string onUpdate: () => void } export function InteractiveChecklistItem({ id, itemName, status, owner, phase, onUpdate, }: ChecklistItemProps) { const [isEditing, setIsEditing] = useState(false) const [editName, setEditName] = useState(itemName) const [isUpdating, setIsUpdating] = useState(false) const handleStatusChange = async (newStatus: string) => { setIsUpdating(true) try { const response = await fetch(`/api/checklist/${id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ status: newStatus }), }) if (response.ok) { onUpdate() } } catch (error) { console.error('Failed to update status:', error) } finally { setIsUpdating(false) } } const handleNameUpdate = async () => { if (editName.trim() === itemName) { setIsEditing(false) return } setIsUpdating(true) try { const response = await fetch(`/api/checklist/${id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ itemName: editName.trim() }), }) if (response.ok) { setIsEditing(false) onUpdate() } } catch (error) { console.error('Failed to update name:', error) } finally { setIsUpdating(false) } } const handleDelete = async () => { if (!confirm('Delete this checklist item?')) return setIsUpdating(true) try { const response = await fetch(`/api/checklist/${id}`, { method: 'DELETE', }) if (response.ok) { onUpdate() } } catch (error) { console.error('Failed to delete item:', error) } finally { setIsUpdating(false) } } const statusOptions = ['Not Started', 'In Progress', 'Blocked', 'Complete'] return (
{/* Status Dropdown */} {/* Item Name - Editable */}
{isEditing ? (
setEditName(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') handleNameUpdate() if (e.key === 'Escape') { setEditName(itemName) setIsEditing(false) } }} className="flex-1 px-3 py-2 rounded-lg border-2 border-blue-500 focus:outline-none" autoFocus />
) : (
setIsEditing(true)} > {itemName} ✏️ Click to edit
)}
{/* Owner */}
Owner: {owner?.name || 'Unassigned'}
{/* Delete Button */}
) } interface AddChecklistItemProps { rfpId: string phase: string onAdd: () => void } export function AddChecklistItem({ rfpId, phase, onAdd }: AddChecklistItemProps) { const [isAdding, setIsAdding] = useState(false) const [newItemName, setNewItemName] = useState('') const [isSubmitting, setIsSubmitting] = useState(false) const handleAdd = async () => { if (!newItemName.trim()) return setIsSubmitting(true) try { const response = await fetch('/api/checklist', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ rfpId, itemName: newItemName.trim(), phase, status: 'Not Started', }), }) if (response.ok) { setNewItemName('') setIsAdding(false) onAdd() } } catch (error) { console.error('Failed to add item:', error) } finally { setIsSubmitting(false) } } if (!isAdding) { return ( ) } return (
setNewItemName(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') handleAdd() if (e.key === 'Escape') { setNewItemName('') setIsAdding(false) } }} placeholder="Enter checklist item name..." className="flex-1 px-3 py-2 rounded-lg border-2 border-gray-300 focus:border-blue-500 focus:outline-none" autoFocus />
) }