sortable-widget.tsx 974 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use client";
  2. import { useSortable } from "@dnd-kit/sortable";
  3. import { CSS } from "@dnd-kit/utilities";
  4. import type { Spec } from "@json-render/react";
  5. import { Widget } from "./widget";
  6. export interface SavedWidget {
  7. id: string;
  8. prompt: string;
  9. spec: Spec;
  10. }
  11. interface SortableWidgetProps {
  12. widget: SavedWidget;
  13. onDeleted: () => void;
  14. }
  15. export function SortableWidget({ widget, onDeleted }: SortableWidgetProps) {
  16. const {
  17. attributes,
  18. listeners,
  19. setNodeRef,
  20. transform,
  21. transition,
  22. isDragging,
  23. } = useSortable({ id: widget.id });
  24. const style = {
  25. transform: CSS.Transform.toString(transform),
  26. transition,
  27. opacity: isDragging ? 0.5 : 1,
  28. };
  29. return (
  30. <div ref={setNodeRef} style={style}>
  31. <Widget
  32. id={widget.id}
  33. initialPrompt={widget.prompt}
  34. initialSpec={widget.spec}
  35. onDeleted={onDeleted}
  36. dragHandleProps={{ ...attributes, ...listeners }}
  37. />
  38. </div>
  39. );
  40. }