"use client"; import { useState, useTransition } from "react"; import { DndContext, closestCenter, PointerSensor, useSensor, useSensors, DragEndEvent, } from "@dnd-kit/core"; import { SortableContext, verticalListSortingStrategy, useSortable, arrayMove, } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; import Link from "next/link"; import { createModule, deleteModule, updateModule, reorderModules } from "@/lib/actions/course-actions"; interface Module { id: string; title: string; description: string | null; order: number; _count: { lessons: number }; } function SortableModule({ mod, courseId }: { mod: Module; courseId: string }) { const [editing, setEditing] = useState(false); const [editValue, setEditValue] = useState(mod.title); const [editDesc, setEditDesc] = useState(mod.description ?? ""); const [pending, startTransition] = useTransition(); const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: mod.id }); const style = { transform: CSS.Transform.toString(transform), transition, opacity: isDragging ? 0.4 : 1, }; function handleUpdate(e: React.FormEvent) { e.preventDefault(); const fd = new FormData(e.currentTarget); startTransition(() => updateModule(mod.id, courseId, fd)); setEditing(false); } function handleDelete() { if (!confirm(`Удалить модуль "${mod.title}"? Все уроки будут удалены.`)) return; startTransition(() => deleteModule(mod.id, courseId)); } return (
{editing ? (
setEditValue(e.target.value)} autoFocus required placeholder="Название модуля" className="flex-1 px-2 py-1 text-sm" style={{ border: "2px solid var(--foreground)", background: "var(--background)", outline: "none" }} />