Files
planka-zh/client/src/sagas/core/services/user.js
Maksim Eltyshev a148a3aae5 feat: Add language selector
Closes #212
2022-07-26 12:26:42 +02:00

305 lines
7.5 KiB
JavaScript

import { call, put, select } from 'redux-saga/effects';
import { logoutService } from './login';
import { changeCoreLanguageService } from './core';
import request from '../request';
import { currentUserIdSelector, currentUserSelector, pathSelector } from '../../../selectors';
import {
addUserToBoardFilter,
addUserToCard,
clearUserCreateError,
clearUserEmailUpdateError,
clearUserPasswordUpdateError,
clearUserUsernameUpdateError,
createUser,
deleteUser,
handleUserCreate,
handleUserDelete,
handleUserFromCardRemove,
handleUserToCardAdd,
handleUserUpdate,
removeUserFromBoardFilter,
removeUserFromCard,
updateUser,
updateUserAvatar,
updateUserEmail,
updateUserPassword,
updateUserUsername,
} from '../../../actions';
import api from '../../../api';
export function* createUserService(data) {
yield put(createUser(data));
let user;
try {
({ item: user } = yield call(request, api.createUser, data));
} catch (error) {
yield put(createUser.failure(error));
return;
}
yield put(createUser.success(user));
}
export function* handleUserCreateService(user) {
yield put(handleUserCreate(user));
}
export function* clearUserCreateErrorService() {
yield put(clearUserCreateError());
}
export function* updateUserService(id, data) {
yield put(updateUser(id, data));
let user;
try {
({ item: user } = yield call(request, api.updateUser, id, data));
} catch (error) {
yield put(updateUser.failure(id, error));
return;
}
yield put(updateUser.success(user));
}
export function* updateCurrentUserService(data) {
const id = yield select(currentUserIdSelector);
yield call(updateUserService, id, data);
}
export function* handleUserUpdateService(user) {
const currentUser = yield select(currentUserSelector);
const isCurrent = user.id === currentUser.id;
let users;
if (isCurrent && !currentUser.isAdmin && user.isAdmin) {
({ items: users } = yield call(request, api.getUsers));
}
yield put(handleUserUpdate(user, users, isCurrent));
}
// TODO: add loading state
export function* updateUserLanguageService(id, language) {
yield call(changeCoreLanguageService, language);
yield call(updateUserService, id, {
language,
});
}
export function* updateCurrentUserLanguageService(language) {
const id = yield select(currentUserIdSelector);
yield call(updateUserLanguageService, id, language);
}
export function* updateUserEmailService(id, data) {
yield put(updateUserEmail(id, data));
let user;
try {
({ item: user } = yield call(request, api.updateUserEmail, id, data));
} catch (error) {
yield put(updateUserEmail.failure(id, error));
return;
}
yield put(updateUserEmail.success(user));
}
export function* updateCurrentUserEmailService(data) {
const id = yield select(currentUserIdSelector);
yield call(updateUserEmailService, id, data);
}
export function* clearUserEmailUpdateErrorService(id) {
yield put(clearUserEmailUpdateError(id));
}
export function* clearCurrentUserEmailUpdateErrorService() {
const id = yield select(currentUserIdSelector);
yield call(clearUserEmailUpdateErrorService, id);
}
export function* updateUserPasswordService(id, data) {
yield put(updateUserPassword(id, data));
let user;
try {
({ item: user } = yield call(request, api.updateUserPassword, id, data));
} catch (error) {
yield put(updateUserPassword.failure(id, error));
return;
}
yield put(updateUserPassword.success(user));
}
export function* updateCurrentUserPasswordService(data) {
const id = yield select(currentUserIdSelector);
yield call(updateUserPasswordService, id, data);
}
export function* clearUserPasswordUpdateErrorService(id) {
yield put(clearUserPasswordUpdateError(id));
}
export function* clearCurrentUserPasswordUpdateErrorService() {
const id = yield select(currentUserIdSelector);
yield call(clearUserPasswordUpdateErrorService, id);
}
export function* updateUserUsernameService(id, data) {
yield put(updateUserUsername(id, data));
let user;
try {
({ item: user } = yield call(request, api.updateUserUsername, id, data));
} catch (error) {
yield put(updateUserUsername.failure(id, error));
return;
}
yield put(updateUserUsername.success(user));
}
export function* updateCurrentUserUsernameService(data) {
const id = yield select(currentUserIdSelector);
yield call(updateUserUsernameService, id, data);
}
export function* clearUserUsernameUpdateErrorService(id) {
yield put(clearUserUsernameUpdateError(id));
}
export function* clearCurrentUserUsernameUpdateErrorService() {
const id = yield select(currentUserIdSelector);
yield call(clearUserUsernameUpdateErrorService, id);
}
export function* updateUserAvatarService(id, data) {
yield put(updateUserAvatar(id));
let user;
try {
({ item: user } = yield call(request, api.updateUserAvatar, id, data));
} catch (error) {
yield put(updateUserAvatar.failure(id, error));
return;
}
yield put(updateUserAvatar.success(user));
}
export function* updateCurrentUserAvatarService(data) {
const id = yield select(currentUserIdSelector);
yield call(updateUserAvatarService, id, data);
}
export function* deleteUserService(id) {
yield put(deleteUser(id));
let user;
try {
({ item: user } = yield call(request, api.deleteUser, id));
} catch (error) {
yield put(deleteUser.failure(id, error));
return;
}
yield put(deleteUser.success(user));
}
export function* handleUserDeleteService(user) {
const currentUserId = yield select(currentUserIdSelector);
if (user.id === currentUserId) {
yield call(logoutService);
}
yield put(handleUserDelete(user));
}
export function* addUserToCardService(id, cardId) {
const currentUserId = yield select(currentUserIdSelector);
yield put(addUserToCard(id, cardId, id === currentUserId));
let cardMembership;
try {
({ item: cardMembership } = yield call(request, api.createCardMembership, cardId, {
userId: id,
}));
} catch (error) {
yield put(addUserToCard.failure(id, cardId, error));
return;
}
yield put(addUserToCard.success(cardMembership));
}
export function* addUserToCurrentCardService(id) {
const { cardId } = yield select(pathSelector);
yield call(addUserToCardService, id, cardId);
}
export function* handleUserToCardAddService(cardMembership) {
yield put(handleUserToCardAdd(cardMembership));
}
export function* removeUserFromCardService(id, cardId) {
yield put(removeUserFromCard(id, cardId));
let cardMembership;
try {
({ item: cardMembership } = yield call(request, api.deleteCardMembership, cardId, id));
} catch (error) {
yield put(removeUserFromCard.failure(id, cardId, error));
return;
}
yield put(removeUserFromCard.success(cardMembership));
}
export function* removeUserFromCurrentCardService(id) {
const { cardId } = yield select(pathSelector);
yield call(removeUserFromCardService, id, cardId);
}
export function* handleUserFromCardRemoveService(cardMembership) {
yield put(handleUserFromCardRemove(cardMembership));
}
export function* addUserToBoardFilterService(id, boardId) {
yield put(addUserToBoardFilter(id, boardId));
}
export function* addUserToFilterInCurrentBoardService(id) {
const { boardId } = yield select(pathSelector);
yield call(addUserToBoardFilterService, id, boardId);
}
export function* removeUserFromBoardFilterService(id, boardId) {
yield put(removeUserFromBoardFilter(id, boardId));
}
export function* removeUserFromFilterInCurrentBoardService(id) {
const { boardId } = yield select(pathSelector);
yield call(removeUserFromBoardFilterService, id, boardId);
}