in src/views/agile-board/board-actions.ts [862:916]
export function onCardDrop(data: {
columnId: string;
cellId: string;
leadingId?: string | null;
movedId: string;
}): ReduxAction {
return async (
dispatch: ReduxThunkDispatch,
getState: ReduxStateGetter,
getApi: ReduxAPIGetter,
) => {
const sprint = getState().agile.sprint!;
const api: Api = getApi();
const issueOnBoard = findIssueOnBoard(
sprint.board,
data.movedId,
);
if (!issueOnBoard) {
log.warn('Cannot find dragged issue on board');
return;
}
const currentIndex = issueOnBoard.cell.issues.indexOf(issueOnBoard.issue);
const currentLeading = issueOnBoard.cell.issues[currentIndex - 1];
if (
issueOnBoard.cell.id === data.cellId &&
currentLeading?.id === data.leadingId
) {
log.info('Agile Actions: Card dropped to original position');
return;
}
try {
log.info(`Agile Actions: Applying card move`);
animateLayout();
dispatch(moveIssue(data.movedId, data.cellId, data.leadingId));
await api.agile.updateCardPosition(
sprint.agile.id,
sprint.id,
data.columnId,
data.cellId,
data.movedId,
data.leadingId,
);
trackEvent('Card drop');
} catch (err) {
dispatch(
moveIssue(data.movedId, issueOnBoard.cell.id, currentLeading?.id),
);
log.warn('Could not move card', err);
}
};
}