import { DndContext, DragOverlay, useDraggable } from '@dnd-kit/core';
import { restrictToHorizontalAxis } from '@dnd-kit/modifiers';
import { useClipDragHandlers } from '@waveform-playlist/browser';
function DraggableClip({ clip, trackIndex, clipIndex }) {
const { attributes, listeners, setNodeRef, transform } = useDraggable({
id: clip.id,
data: {
clipId: clip.id,
trackIndex,
clipIndex,
},
});
const style = transform ? {
transform: `translateX(${transform.x}px)`,
} : undefined;
return (
<div ref={setNodeRef} style={style} {...listeners} {...attributes}>
{/* Clip visualization */}
</div>
);
}
function PlaylistWithDragDrop() {
const { tracks, samplesPerPixel, sampleRate, playoutRef, isDraggingRef } = usePlaylistData();
const [localTracks, setLocalTracks] = useState(tracks);
const dragHandlers = useClipDragHandlers({
tracks: localTracks,
onTracksChange: setLocalTracks,
samplesPerPixel,
sampleRate,
engineRef: playoutRef,
isDraggingRef,
});
return (
<DndContext
{...dragHandlers}
modifiers={[restrictToHorizontalAxis, dragHandlers.collisionModifier]}
>
{localTracks.map((track, trackIndex) => (
<div key={track.id}>
{track.clips.map((clip, clipIndex) => (
<DraggableClip
key={clip.id}
clip={clip}
trackIndex={trackIndex}
clipIndex={clipIndex}
/>
))}
</div>
))}
</DndContext>
);
}