'use client'; import { forwardRef, useState, useTransition } from 'react'; import type { YearReviewItem } from '@prisma/client'; import { updateYearReviewItem, deleteYearReviewItem } from '@/actions/year-review'; import { YEAR_REVIEW_BY_CATEGORY } from '@/lib/types'; interface YearReviewCardProps { item: YearReviewItem; sessionId: string; isDragging: boolean; } export const YearReviewCard = forwardRef( ({ item, sessionId, isDragging, ...props }, ref) => { const [isEditing, setIsEditing] = useState(false); const [content, setContent] = useState(item.content); const [isPending, startTransition] = useTransition(); const config = YEAR_REVIEW_BY_CATEGORY[item.category]; async function handleSave() { if (content.trim() === item.content) { setIsEditing(false); return; } if (!content.trim()) { // If empty, delete startTransition(async () => { await deleteYearReviewItem(item.id, sessionId); }); return; } startTransition(async () => { await updateYearReviewItem(item.id, sessionId, { content: content.trim() }); setIsEditing(false); }); } async function handleDelete() { startTransition(async () => { await deleteYearReviewItem(item.id, sessionId); }); } function handleKeyDown(e: React.KeyboardEvent) { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSave(); } else if (e.key === 'Escape') { setContent(item.content); setIsEditing(false); } } return (
{isEditing ? (