1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-19 13:19:44 +02:00
planka/client/src/sagas/core/services/projects.js

137 lines
3.3 KiB
JavaScript
Raw Normal View History

2022-08-04 13:31:14 +02:00
import { call, put, select } from 'redux-saga/effects';
import { goToProject, goToRoot } from './router';
import request from '../request';
import selectors from '../../../selectors';
import actions from '../../../actions';
import api from '../../../api';
export function* createProject(data) {
yield put(actions.createProject(data));
let project;
let projectManagers;
try {
({
item: project,
included: { projectManagers },
} = yield call(request, api.createProject, data));
} catch (error) {
yield put(actions.createProject.failure(error));
return;
}
yield put(actions.createProject.success(project, projectManagers));
yield call(goToProject, project.id);
}
export function* handleProjectCreate({ id }) {
let project;
let users;
let projectManagers;
let boards;
let boardMemberships;
try {
({
item: project,
included: { users, projectManagers, boards, boardMemberships },
} = yield call(request, api.getProject, id));
} catch (error) {
return;
}
yield put(actions.handleProjectCreate(project, users, projectManagers, boards, boardMemberships));
}
export function* updateProject(id, data) {
yield put(actions.updateProject(id, data));
let project;
try {
({ item: project } = yield call(request, api.updateProject, id, data));
} catch (error) {
yield put(actions.updateProject.failure(id, error));
}
yield put(actions.updateProject.success(project));
}
export function* updateCurrentProject(data) {
const { projectId } = yield select(selectors.selectPath);
yield call(updateProject, projectId, data);
}
export function* handleProjectUpdate(project) {
yield put(actions.handleProjectUpdate(project));
}
export function* updateProjectBackgroundImage(id, data) {
yield put(actions.updateProjectBackgroundImage(id));
let project;
try {
({ item: project } = yield call(request, api.updateProjectBackgroundImage, id, data));
} catch (error) {
yield put(actions.updateProjectBackgroundImage.failure(id, error));
}
yield put(actions.updateProjectBackgroundImage.success(project));
}
export function* updateCurrentProjectBackgroundImage(data) {
const { projectId } = yield select(selectors.selectPath);
yield call(updateProjectBackgroundImage, projectId, data);
}
export function* deleteProject(id) {
const { projectId } = yield select(selectors.selectPath);
if (id === projectId) {
yield call(goToRoot);
}
yield put(actions.deleteProject(id));
let project;
try {
({ item: project } = yield call(request, api.deleteProject, id));
} catch (error) {
yield put(actions.deleteProject.failure(id, error));
}
yield put(actions.deleteProject.success(project));
}
export function* deleteCurrentProject() {
const { projectId } = yield select(selectors.selectPath);
yield call(deleteProject, projectId);
}
export function* handleProjectDelete(project) {
const { projectId } = yield select(selectors.selectPath);
if (project.id === projectId) {
yield call(goToRoot);
}
yield put(actions.handleProjectDelete(project));
}
export default {
createProject,
handleProjectCreate,
updateProject,
updateCurrentProject,
handleProjectUpdate,
updateProjectBackgroundImage,
updateCurrentProjectBackgroundImage,
deleteProject,
deleteCurrentProject,
handleProjectDelete,
};