Move cards between boards and projects
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
|
||||
@@ -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()),
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user