export function onCardDrop()

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);
    }
  };
}