diff --git a/src/shared/types/drag-and-drop.ts b/src/shared/types/drag-and-drop.ts index fb2076a24..66646ce23 100644 --- a/src/shared/types/drag-and-drop.ts +++ b/src/shared/types/drag-and-drop.ts @@ -87,27 +87,25 @@ export const dndUtils = { return list; } - // If dragging to the right, but is left edge, do nothing - if (edge === 'left' && indexTo > indexFrom) { + let newIndex: number; + + if (edge === 'bottom') { + newIndex = indexFrom > indexTo ? indexTo + 1 : indexTo; + } else if (edge === 'top' || edge === null) { + newIndex = indexTo; + } else if (edge === 'left' && indexTo > indexFrom) { + return list; + } else if (edge === 'right' && indexTo < indexFrom) { + return list; + } else { + newIndex = indexTo; + } + + if (newIndex === indexFrom) { return list; } - // If dragging to the left, but is right edge, do nothing - if (edge === 'right' && indexTo < indexFrom) { - return list; - } - - // If dragging to the top, but is bottom edge, do nothing - if (edge === 'top' && indexTo > indexFrom) { - return list; - } - - // If dragging to the bottom, but is top edge, do nothing - if (edge === 'bottom' && indexTo < indexFrom) { - return list; - } - - return dndUtils.reorderByIndex({ index: indexFrom, list, newIndex: indexTo }); + return dndUtils.reorderByIndex({ index: indexFrom, list, newIndex }); }, reorderByIndex: (args: { index: number; list: string[]; newIndex: number }) => { const { index, list, newIndex } = args;