1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-24 07:39:44 +02:00
planka/client/src/sagas/core/services/users.js
2022-09-07 18:39:33 +05:00

333 lines
8.2 KiB
JavaScript

import { call, put, select } from 'redux-saga/effects';
import { changeCoreLanguage, logout } from './core';
import request from '../request';
import selectors from '../../../selectors';
import actions from '../../../actions';
import api from '../../../api';
import { setAccessToken } from '../../../utils/access-token-storage';
export function* createUser(data) {
yield put(actions.createUser(data));
let user;
try {
({ item: user } = yield call(request, api.createUser, data));
} catch (error) {
yield put(actions.createUser.failure(error));
return;
}
yield put(actions.createUser.success(user));
}
export function* handleUserCreate(user) {
yield put(actions.handleUserCreate(user));
}
export function* clearUserCreateError() {
yield put(actions.clearUserCreateError());
}
export function* updateUser(id, data) {
yield put(actions.updateUser(id, data));
let user;
try {
({ item: user } = yield call(request, api.updateUser, id, data));
} catch (error) {
yield put(actions.updateUser.failure(id, error));
return;
}
yield put(actions.updateUser.success(user));
}
export function* updateCurrentUser(data) {
const id = yield select(selectors.selectCurrentUserId);
yield call(updateUser, id, data);
}
export function* handleUserUpdate(user) {
const currentUser = yield select(selectors.selectCurrentUser);
const isCurrent = user.id === currentUser.id;
let users;
if (isCurrent && !currentUser.isAdmin && user.isAdmin) {
({ items: users } = yield call(request, api.getUsers));
}
yield put(actions.handleUserUpdate(user, users, isCurrent));
}
// TODO: add loading state
export function* updateUserLanguage(id, language) {
yield call(changeCoreLanguage, language);
yield call(updateUser, id, {
language,
});
}
export function* updateCurrentUserLanguage(language) {
const id = yield select(selectors.selectCurrentUserId);
yield call(updateUserLanguage, id, language);
}
export function* updateUserEmail(id, data) {
yield put(actions.updateUserEmail(id, data));
let user;
try {
({ item: user } = yield call(request, api.updateUserEmail, id, data));
} catch (error) {
yield put(actions.updateUserEmail.failure(id, error));
return;
}
yield put(actions.updateUserEmail.success(user));
}
export function* updateCurrentUserEmail(data) {
const id = yield select(selectors.selectCurrentUserId);
yield call(updateUserEmail, id, data);
}
export function* clearUserEmailUpdateError(id) {
yield put(actions.clearUserEmailUpdateError(id));
}
export function* clearCurrentUserEmailUpdateError() {
const id = yield select(selectors.selectCurrentUserId);
yield call(clearUserEmailUpdateError, id);
}
export function* updateUserPassword(id, data) {
yield put(actions.updateUserPassword(id, data));
let user;
let accessTokens;
try {
({ item: user, included: { accessTokens } = {} } = yield call(
request,
api.updateUserPassword,
id,
data,
));
} catch (error) {
yield put(actions.updateUserPassword.failure(id, error));
return;
}
const accessToken = accessTokens && accessTokens[0];
if (accessToken) {
yield call(setAccessToken, accessToken);
}
yield put(actions.updateUserPassword.success(user, accessToken));
}
export function* updateCurrentUserPassword(data) {
const id = yield select(selectors.selectCurrentUserId);
yield call(updateUserPassword, id, data);
}
export function* clearUserPasswordUpdateError(id) {
yield put(actions.clearUserPasswordUpdateError(id));
}
export function* clearCurrentUserPasswordUpdateError() {
const id = yield select(selectors.selectCurrentUserId);
yield call(clearUserPasswordUpdateError, id);
}
export function* updateUserUsername(id, data) {
yield put(actions.updateUserUsername(id, data));
let user;
try {
({ item: user } = yield call(request, api.updateUserUsername, id, data));
} catch (error) {
yield put(actions.updateUserUsername.failure(id, error));
return;
}
yield put(actions.updateUserUsername.success(user));
}
export function* updateCurrentUserUsername(data) {
const id = yield select(selectors.selectCurrentUserId);
yield call(updateUserUsername, id, data);
}
export function* clearUserUsernameUpdateError(id) {
yield put(actions.clearUserUsernameUpdateError(id));
}
export function* clearCurrentUserUsernameUpdateError() {
const id = yield select(selectors.selectCurrentUserId);
yield call(clearUserUsernameUpdateError, id);
}
export function* updateUserAvatar(id, data) {
yield put(actions.updateUserAvatar(id));
let user;
try {
({ item: user } = yield call(request, api.updateUserAvatar, id, data));
} catch (error) {
yield put(actions.updateUserAvatar.failure(id, error));
return;
}
yield put(actions.updateUserAvatar.success(user));
}
export function* updateCurrentUserAvatar(data) {
const id = yield select(selectors.selectCurrentUserId);
yield call(updateUserAvatar, id, data);
}
export function* deleteUser(id) {
yield put(actions.deleteUser(id));
let user;
try {
({ item: user } = yield call(request, api.deleteUser, id));
} catch (error) {
yield put(actions.deleteUser.failure(id, error));
return;
}
yield put(actions.deleteUser.success(user));
}
export function* handleUserDelete(user) {
const currentUserId = yield select(selectors.selectCurrentUserId);
if (user.id === currentUserId) {
yield call(logout, false);
}
yield put(actions.handleUserDelete(user));
}
export function* addUserToCard(id, cardId) {
const currentUserId = yield select(selectors.selectCurrentUserId);
yield put(actions.addUserToCard(id, cardId, id === currentUserId));
let cardMembership;
try {
({ item: cardMembership } = yield call(request, api.createCardMembership, cardId, {
userId: id,
}));
} catch (error) {
yield put(actions.addUserToCard.failure(id, cardId, error));
return;
}
yield put(actions.addUserToCard.success(cardMembership));
}
export function* addUserToCurrentCard(id) {
const { cardId } = yield select(selectors.selectPath);
yield call(addUserToCard, id, cardId);
}
export function* handleUserToCardAdd(cardMembership) {
yield put(actions.handleUserToCardAdd(cardMembership));
}
export function* removeUserFromCard(id, cardId) {
yield put(actions.removeUserFromCard(id, cardId));
let cardMembership;
try {
({ item: cardMembership } = yield call(request, api.deleteCardMembership, cardId, id));
} catch (error) {
yield put(actions.removeUserFromCard.failure(id, cardId, error));
return;
}
yield put(actions.removeUserFromCard.success(cardMembership));
}
export function* removeUserFromCurrentCard(id) {
const { cardId } = yield select(selectors.selectPath);
yield call(removeUserFromCard, id, cardId);
}
export function* handleUserFromCardRemove(cardMembership) {
yield put(actions.handleUserFromCardRemove(cardMembership));
}
export function* addUserToBoardFilter(id, boardId) {
yield put(actions.addUserToBoardFilter(id, boardId));
}
export function* addUserToFilterInCurrentBoard(id) {
const { boardId } = yield select(selectors.selectPath);
yield call(addUserToBoardFilter, id, boardId);
}
export function* removeUserFromBoardFilter(id, boardId) {
yield put(actions.removeUserFromBoardFilter(id, boardId));
}
export function* removeUserFromFilterInCurrentBoard(id) {
const { boardId } = yield select(selectors.selectPath);
yield call(removeUserFromBoardFilter, id, boardId);
}
export default {
createUser,
handleUserCreate,
clearUserCreateError,
updateUser,
updateCurrentUser,
handleUserUpdate,
updateUserLanguage,
updateCurrentUserLanguage,
updateUserEmail,
updateCurrentUserEmail,
clearUserEmailUpdateError,
clearCurrentUserEmailUpdateError,
updateUserPassword,
updateCurrentUserPassword,
clearUserPasswordUpdateError,
clearCurrentUserPasswordUpdateError,
updateUserUsername,
updateCurrentUserUsername,
clearUserUsernameUpdateError,
clearCurrentUserUsernameUpdateError,
updateUserAvatar,
updateCurrentUserAvatar,
deleteUser,
handleUserDelete,
addUserToCard,
addUserToCurrentCard,
handleUserToCardAdd,
removeUserFromCard,
removeUserFromCurrentCard,
handleUserFromCardRemove,
addUserToBoardFilter,
addUserToFilterInCurrentBoard,
removeUserFromBoardFilter,
removeUserFromFilterInCurrentBoard,
};