2022-08-04 13:31:14 +02:00
|
|
|
import { call, put, select } from 'redux-saga/effects';
|
|
|
|
|
|
|
|
import { goToBoard, goToProject } from './router';
|
|
|
|
import request from '../request';
|
|
|
|
import selectors from '../../../selectors';
|
|
|
|
import actions from '../../../actions';
|
|
|
|
import api from '../../../api';
|
|
|
|
import { createLocalId } from '../../../utils/local-id';
|
|
|
|
|
2022-12-16 23:48:06 +01:00
|
|
|
export function* createBoard(projectId, { import: boardImport, ...data }) {
|
2022-08-04 13:31:14 +02:00
|
|
|
const nextData = {
|
|
|
|
...data,
|
|
|
|
position: yield select(selectors.selectNextBoardPosition, projectId),
|
|
|
|
};
|
|
|
|
|
|
|
|
const localId = yield call(createLocalId);
|
|
|
|
|
|
|
|
yield put(
|
|
|
|
actions.createBoard({
|
|
|
|
...nextData,
|
|
|
|
projectId,
|
|
|
|
id: localId,
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
|
|
|
|
let board;
|
|
|
|
let boardMemberships;
|
|
|
|
|
|
|
|
try {
|
|
|
|
({
|
|
|
|
item: board,
|
|
|
|
included: { boardMemberships },
|
2022-12-16 23:48:06 +01:00
|
|
|
} = yield boardImport
|
|
|
|
? call(
|
|
|
|
request,
|
|
|
|
api.createBoardWithImport,
|
|
|
|
projectId,
|
|
|
|
{
|
|
|
|
...nextData,
|
|
|
|
importType: boardImport.type,
|
|
|
|
importFile: boardImport.file,
|
|
|
|
},
|
|
|
|
localId,
|
|
|
|
)
|
|
|
|
: call(request, api.createBoard, projectId, nextData));
|
2022-08-04 13:31:14 +02:00
|
|
|
} catch (error) {
|
|
|
|
yield put(actions.createBoard.failure(localId, error));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
yield put(actions.createBoard.success(localId, board, boardMemberships));
|
|
|
|
yield call(goToBoard, board.id);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function* createBoardInCurrentProject(data) {
|
|
|
|
const { projectId } = yield select(selectors.selectPath);
|
|
|
|
|
|
|
|
yield call(createBoard, projectId, data);
|
|
|
|
}
|
|
|
|
|
2022-12-16 23:48:06 +01:00
|
|
|
export function* handleBoardCreate(board, requestId) {
|
|
|
|
const isExists = yield select(selectors.selectIsBoardWithIdExists, requestId);
|
|
|
|
|
|
|
|
if (!isExists) {
|
|
|
|
yield put(actions.handleBoardCreate(board));
|
|
|
|
}
|
2022-08-04 13:31:14 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export function* fetchBoard(id) {
|
|
|
|
yield put(actions.fetchBoard(id));
|
|
|
|
|
|
|
|
let board;
|
|
|
|
let users;
|
|
|
|
let projects;
|
|
|
|
let boardMemberships;
|
|
|
|
let labels;
|
|
|
|
let lists;
|
|
|
|
let cards;
|
|
|
|
let cardMemberships;
|
|
|
|
let cardLabels;
|
|
|
|
let tasks;
|
|
|
|
let attachments;
|
|
|
|
|
|
|
|
try {
|
|
|
|
({
|
|
|
|
item: board,
|
|
|
|
included: {
|
|
|
|
users,
|
|
|
|
projects,
|
|
|
|
boardMemberships,
|
|
|
|
labels,
|
|
|
|
lists,
|
|
|
|
cards,
|
|
|
|
cardMemberships,
|
|
|
|
cardLabels,
|
|
|
|
tasks,
|
|
|
|
attachments,
|
|
|
|
},
|
|
|
|
} = yield call(request, api.getBoard, id));
|
|
|
|
} catch (error) {
|
|
|
|
yield put(actions.fetchBoard.failure(id, error));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
yield put(
|
|
|
|
actions.fetchBoard.success(
|
|
|
|
board,
|
|
|
|
users,
|
|
|
|
projects,
|
|
|
|
boardMemberships,
|
|
|
|
labels,
|
|
|
|
lists,
|
|
|
|
cards,
|
|
|
|
cardMemberships,
|
|
|
|
cardLabels,
|
|
|
|
tasks,
|
|
|
|
attachments,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function* updateBoard(id, data) {
|
|
|
|
yield put(actions.updateBoard(id, data));
|
|
|
|
|
|
|
|
let board;
|
|
|
|
try {
|
|
|
|
({ item: board } = yield call(request, api.updateBoard, id, data));
|
|
|
|
} catch (error) {
|
|
|
|
yield put(actions.updateBoard.failure(id, error));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
yield put(actions.updateBoard.success(board));
|
|
|
|
}
|
|
|
|
|
|
|
|
export function* handleBoardUpdate(board) {
|
|
|
|
yield put(actions.handleBoardUpdate(board));
|
|
|
|
}
|
|
|
|
|
|
|
|
export function* moveBoard(id, index) {
|
|
|
|
const { projectId } = yield select(selectors.selectBoardById, id);
|
|
|
|
const position = yield select(selectors.selectNextBoardPosition, projectId, index, id);
|
|
|
|
|
|
|
|
yield call(updateBoard, id, {
|
|
|
|
position,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
export function* deleteBoard(id) {
|
|
|
|
const { boardId, projectId } = yield select(selectors.selectPath);
|
|
|
|
|
|
|
|
if (id === boardId) {
|
|
|
|
yield call(goToProject, projectId);
|
|
|
|
}
|
|
|
|
|
|
|
|
yield put(actions.deleteBoard(id));
|
|
|
|
|
|
|
|
let board;
|
|
|
|
try {
|
|
|
|
({ item: board } = yield call(request, api.deleteBoard, id));
|
|
|
|
} catch (error) {
|
|
|
|
yield put(actions.deleteBoard.failure(id, error));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
yield put(actions.deleteBoard.success(board));
|
|
|
|
}
|
|
|
|
|
|
|
|
export function* handleBoardDelete(board) {
|
|
|
|
const { boardId, projectId } = yield select(selectors.selectPath);
|
|
|
|
|
|
|
|
if (board.id === boardId) {
|
|
|
|
yield call(goToProject, projectId);
|
|
|
|
}
|
|
|
|
|
|
|
|
yield put(actions.handleBoardDelete(board));
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
|
|
|
createBoard,
|
|
|
|
createBoardInCurrentProject,
|
|
|
|
handleBoardCreate,
|
|
|
|
fetchBoard,
|
|
|
|
updateBoard,
|
|
|
|
handleBoardUpdate,
|
|
|
|
moveBoard,
|
|
|
|
deleteBoard,
|
|
|
|
handleBoardDelete,
|
|
|
|
};
|