From 9fe46ad19b24fc7bfef23505fe4c6f1a7f954d04 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:15:13 +0100 Subject: [PATCH] fix: voice drop zone was swallowing channel reorder drops handleVoiceDropZoneDrop called stopPropagation and clearState unconditionally, preventing container's handleContainerDrop from firing when dropping a channel onto a voice channel. Add early return for non-voiceUser drags so channel/category drops bubble through to the container handler correctly. --- packages/web/src/hooks/useDragManager.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/web/src/hooks/useDragManager.ts b/packages/web/src/hooks/useDragManager.ts index 8e287e4d..1d1364c9 100644 --- a/packages/web/src/hooks/useDragManager.ts +++ b/packages/web/src/hooks/useDragManager.ts @@ -180,9 +180,11 @@ export function useDragManager(opts: UseDragManagerOpts) { }, [activeDrag]); const handleVoiceDropZoneDrop = useCallback((e: React.DragEvent, channelId: string) => { + // Only handle voice user drops — let channel/category drops bubble to container + if (activeDrag?.type !== 'voiceUser') return; e.preventDefault(); e.stopPropagation(); // Prevent bubbling to container's onDrop - if (activeDrag?.type === 'voiceUser' && activeDrag.sourceId && activeDrag.sourceId !== channelId) { + if (activeDrag.sourceId && activeDrag.sourceId !== channelId) { onVoiceUserDrop(activeDrag.dragId, activeDrag.sourceId, channelId); } clearState();