'use client'; import { useState } from 'react'; import { SortableContext, rectSortingStrategy } from '@dnd-kit/sortable'; import { useDroppable } from '@dnd-kit/core'; import SortableCounter from './SortableCounter'; import { Counter } from './CounterCard'; import { Group } from './CounterModal'; interface Props { group: Group | null; // null = ungrouped section counters: Counter[]; onIncrement: (id: number) => void; onDecrement: (id: number) => void; onEdit: (counter: Counter) => void; onHistory: (id: number) => void; onPrefetch?: (id: number) => void; editMode: boolean; dragHandleProps?: Record; onRenameGroup?: (group: Group) => void; onDeleteGroup?: (id: number) => void; } export default function GroupSection({ group, counters, onIncrement, onDecrement, onEdit, onHistory, onPrefetch, editMode, dragHandleProps, onRenameGroup, onDeleteGroup, }: Props) { const droppableId = group ? `group-${group.id}` : 'ungrouped'; const { setNodeRef, isOver } = useDroppable({ id: droppableId, data: { groupId: group?.id ?? null } }); const [editingName, setEditingName] = useState(false); const [newName, setNewName] = useState(group?.name ?? ''); const [confirmDelete, setConfirmDelete] = useState(false); function commitRename() { if (group && newName.trim() && newName.trim() !== group.name) { onRenameGroup?.({ ...group, name: newName.trim() }); } setEditingName(false); } const isEmpty = counters.length === 0; return (
{/* Section header */}
{group && editMode && dragHandleProps && (
)} {group ? ( editingName ? ( setNewName(e.target.value)} onBlur={commitRename} onKeyDown={e => { if (e.key === 'Enter') commitRename(); if (e.key === 'Escape') setEditingName(false); }} className="text-lg font-bold bg-transparent border-b-2 border-ctp-mauve outline-none text-ctp-text" /> ) : ( editMode ? (

{ setNewName(group.name); setEditingName(true); }} > {group.name}

) : (

{group.name}

) ) ) : (

Ungrouped

)} {group && editMode && ( )}
{/* Drop zone */}
c.id)} strategy={rectSortingStrategy}> {counters.map(counter => ( ))} {isEmpty && (

Drop counters here

)}
); }