import { useEffect, useMemo, useRef, useState } from "react"; import { useNavigate } from "react-router-dom"; import { SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; import { AnswerRenderer } from "./AnswerRenderer"; function SortableEntryRow({ entry, expanded, readOnly, onToggle, onEdit, onDelete, onOpen, isLast }) { const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: entry._id }); const rowRef = useRef(null); const style = { transform: CSS.Transform.toString(transform), transition }; useEffect(() => { if (expanded && rowRef.current) { const timeoutId = setTimeout(() => { rowRef.current.scrollIntoView({ behavior: "smooth", block: "start" }); }, 100); return () => clearTimeout(timeoutId); } }, [expanded]); const setCombinedRef = (node) => { setNodeRef(node); rowRef.current = node; }; return (
onToggle(entry._id)} style={{ cursor: "pointer", display: "flex", alignItems: "flex-start", gap: "16px", flexWrap: "wrap" }}>
{!readOnly && ( )}
{isLast && expanded && (
)}
); } export function EntryList({ entries, mode, onEdit, onDelete, expandedIds, onToggle }) { const navigate = useNavigate(); const readOnly = mode === "read"; const ids = useMemo(() => entries.map((entry) => entry._id), [entries]); return (
{entries.map((entry, index) => ( navigate(`/app/entry/${item._id}`)} onToggle={onToggle} isLast={index === entries.length - 1} /> ))}
); }