Move cards between boards and projects

This commit is contained in:
Maksim Eltyshev
2020-05-05 01:30:06 +05:00
parent 712567ac57
commit cbc942e306
24 changed files with 474 additions and 16 deletions

View File

@@ -1,7 +1,12 @@
import { call, put, select } from 'redux-saga/effects';
import { goToBoardService, goToProjectService } from './router';
import { createBoardRequest, deleteBoardRequest, updateBoardRequest } from '../requests';
import {
createBoardRequest,
deleteBoardRequest,
fetchBoardRequest,
updateBoardRequest,
} from '../requests';
import { boardByIdSelector, nextBoardPositionSelector, pathSelector } from '../../../selectors';
import { createBoard, deleteBoard, updateBoard } from '../../../actions';
import { createLocalId } from '../../../utils/local-id';
@@ -38,6 +43,10 @@ export function* createBoardInCurrentProjectService(data) {
yield call(createBoardService, projectId, data);
}
export function* fetchBoard(id) {
yield call(fetchBoardRequest, id);
}
export function* updateBoardService(id, data) {
yield put(updateBoard(id, data));
yield call(updateBoardRequest, id, data);

View File

@@ -45,6 +45,29 @@ export function* moveCardService(id, listId, index) {
});
}
export function* moveCurrentCardService(listId, index) {
const { cardId } = yield select(pathSelector);
yield call(moveCardService, cardId, listId, index);
}
export function* transferCardService(id, boardId, listId, index) {
const position = yield select(nextCardPositionSelector, listId, index, id);
yield call(updateCardService, id, {
boardId,
listId,
position,
});
}
export function* transferCurrentCardService(boardId, listId, index) {
const { cardId, boardId: currentBoardId } = yield select(pathSelector);
yield call(goToBoardService, currentBoardId);
yield call(transferCardService, cardId, boardId, listId, index);
}
export function* deleteCardService(id) {
const { cardId, boardId } = yield select(pathSelector);

View File

@@ -34,7 +34,7 @@ export function* runPathActionsService(pathsMatch) {
switch (pathsMatch.path) {
case Paths.BOARDS:
case Paths.CARDS: {
const currentBoard = yield select(currentBoardSelector);
const currentBoard = yield select(currentBoardSelector); // TODO: move to services
if (currentBoard && currentBoard.isFetching === null) {
yield call(fetchBoardRequest, currentBoard.id);

View File

@@ -3,6 +3,7 @@ import { all, takeLatest } from 'redux-saga/effects';
import {
createBoardInCurrentProjectService,
deleteBoardService,
fetchBoard,
moveBoardService,
updateBoardService,
} from '../services';
@@ -13,6 +14,7 @@ export default function* () {
takeLatest(EntryActionTypes.BOARD_IN_CURRENT_PROJECT_CREATE, ({ payload: { data } }) =>
createBoardInCurrentProjectService(data),
),
takeLatest(EntryActionTypes.BOARD_FETCH, ({ payload: { id } }) => fetchBoard(id)),
takeLatest(EntryActionTypes.BOARD_UPDATE, ({ payload: { id, data } }) =>
updateBoardService(id, data),
),

View File

@@ -5,6 +5,9 @@ import {
deleteCardService,
deleteCurrentCardService,
moveCardService,
moveCurrentCardService,
transferCardService,
transferCurrentCardService,
updateCardService,
updateCurrentCardService,
} from '../services';
@@ -24,6 +27,15 @@ export default function* () {
takeLatest(EntryActionTypes.CARD_MOVE, ({ payload: { id, listId, index } }) =>
moveCardService(id, listId, index),
),
takeLatest(EntryActionTypes.CURRENT_CARD_MOVE, ({ payload: { listId, index } }) =>
moveCurrentCardService(listId, index),
),
takeLatest(EntryActionTypes.CARD_TRANSFER, ({ payload: { id, boardId, listId, index } }) =>
transferCardService(id, boardId, listId, index),
),
takeLatest(EntryActionTypes.CURRENT_CARD_TRANSFER, ({ payload: { boardId, listId, index } }) =>
transferCurrentCardService(boardId, listId, index),
),
takeLatest(EntryActionTypes.CARD_DELETE, ({ payload: { id } }) => deleteCardService(id)),
takeLatest(EntryActionTypes.CURRENT_CARD_DELETE, () => deleteCurrentCardService()),
]);