// a little function to help us with reordering the result export const reorder = (list, startIndex, endIndex) => { const result = Array.from(list); const [removed] = result.splice(startIndex, 1); result.splice(endIndex, 0, removed); return result; }; export const reorderTasks = ({ columns, source, destination, draggableId }) => { const sourceColumn = columns[source.droppableId]; const sourceColumnTaskOrders = Array.from( columns[source.droppableId].task_orders ); const destinationColumn = columns[destination.droppableId]; const destinationColumnTaskOrders = Array.from( columns[destination.droppableId].task_orders ); // moving to same list if (source.droppableId === destination.droppableId) { sourceColumnTaskOrders.splice(source.index, 1); sourceColumnTaskOrders.splice(destination.index, 0, draggableId); const newColumns = { ...columns, [source.droppableId]: { ...sourceColumn, task_orders: sourceColumnTaskOrders, }, }; return newColumns; } // moving to different list // remove from original sourceColumnTaskOrders.splice(source.index, 1); // insert into next destinationColumnTaskOrders.splice(destination.index, 0, draggableId); const newColumns = { ...columns, [source.droppableId]: { ...sourceColumn, task_orders: sourceColumnTaskOrders, }, [destination.droppableId]: { ...destinationColumn, task_orders: destinationColumnTaskOrders, }, }; return newColumns; };