You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
planka_custom/client/src/sagas/app/services/socket.js

253 lines
6.6 KiB
JavaScript

import { call, put, select } from 'redux-saga/effects';
import { goToBoardService, goToProjectService, goToRootService } from './router';
import { logoutService } from './login';
import { closeModalService } from './modal';
import { deleteNotificationsRequest, fetchUsersRequest } from '../requests';
import {
attachmentWithIdExistsSelector,
currentModalSelector,
currentUserIdSelector,
currentUserSelector,
pathSelector,
} from '../../../selectors';
import {
createActionReceived,
createAttachmentReceived,
createBoardReceived,
createCardLabelReceived,
createCardMembershipReceived,
createCardReceived,
createLabelReceived,
createListReceived,
createNotificationReceived,
createProjectMembershipReceived,
createProjectReceived,
createTaskReceived,
createUserReceived,
deleteActionReceived,
deleteAttachmentReceived,
deleteCardLabelReceived,
deleteCardMembershipReceived,
deleteCardReceived,
deleteBoardReceived,
deleteLabelReceived,
deleteListReceived,
deleteNotificationReceived,
deleteProjectMembershipReceived,
deleteProjectReceived,
deleteTaskReceived,
deleteUserReceived,
socketDisconnected,
socketReconnected,
updateActionReceived,
updateAttachmentReceived,
updateBoardReceived,
updateCardReceived,
updateLabelReceived,
updateListReceived,
updateProjectReceived,
updateTaskReceived,
updateUserReceived,
} from '../../../actions';
import ModalTypes from '../../../constants/ModalTypes';
export function* socketDisconnectedService() {
yield put(socketDisconnected());
}
// TODO: refetch state on reconnect
export function* socketReconnectedService() {
yield put(socketReconnected());
}
export function* createUserReceivedService(user) {
yield put(createUserReceived(user));
}
export function* updateUserReceivedService(user) {
const currentUser = yield select(currentUserSelector);
if (user.id === currentUser.id) {
if (currentUser.isAdmin) {
if (!user.isAdmin) {
const currentModal = yield select(currentModalSelector);
if (currentModal === ModalTypes.USERS) {
yield call(closeModalService);
}
}
} else if (user.isAdmin) {
yield call(fetchUsersRequest);
}
}
yield put(updateUserReceived(user));
}
export function* deleteUserReceivedService(user) {
const currentUserId = yield select(currentUserIdSelector);
if (user.id === currentUserId) {
yield call(logoutService);
}
yield put(deleteUserReceived(user));
}
export function* createProjectReceivedService(project, users, projectMemberships, boards) {
yield put(createProjectReceived(project, users, projectMemberships, boards));
}
export function* updateProjectReceivedService(project) {
yield put(updateProjectReceived(project));
}
export function* deleteProjectReceivedService(project) {
const { projectId } = yield select(pathSelector);
if (project.id === projectId) {
yield call(goToRootService);
}
yield put(deleteProjectReceived(project));
}
export function* createProjectMembershipReceivedService(projectMembership, user) {
yield put(createProjectMembershipReceived(projectMembership, user));
}
export function* deleteProjectMembershipReceivedService(projectMembership) {
yield put(deleteProjectMembershipReceived(projectMembership));
}
export function* createBoardReceivedService(board, lists, labels) {
yield put(createBoardReceived(board, lists, labels));
}
export function* updateBoardReceivedService(board) {
yield put(updateBoardReceived(board));
}
export function* deleteBoardReceivedService(board) {
const { boardId, projectId } = yield select(pathSelector);
if (board.id === boardId) {
yield call(goToProjectService, projectId);
}
yield put(deleteBoardReceived(board));
}
export function* createListReceivedService(list) {
yield put(createListReceived(list));
}
export function* updateListReceivedService(list) {
yield put(updateListReceived(list));
}
export function* deleteListReceivedService(list) {
yield put(deleteListReceived(list));
}
export function* createLabelReceivedService(label) {
yield put(createLabelReceived(label));
}
export function* updateLabelReceivedService(label) {
yield put(updateLabelReceived(label));
}
export function* deleteLabelReceivedService(label) {
yield put(deleteLabelReceived(label));
}
export function* createCardReceivedService(card) {
yield put(createCardReceived(card));
}
export function* updateCardReceivedService(card) {
yield put(updateCardReceived(card));
}
export function* deleteCardReceivedService(card) {
const { cardId, boardId } = yield select(pathSelector);
if (card.id === cardId) {
yield call(goToBoardService, boardId);
}
yield put(deleteCardReceived(card));
}
export function* createCardMembershipReceivedService(cardMembership) {
yield put(createCardMembershipReceived(cardMembership));
}
export function* deleteCardMembershipReceivedService(cardMembership) {
yield put(deleteCardMembershipReceived(cardMembership));
}
export function* createCardLabelReceivedService(cardLabel) {
yield put(createCardLabelReceived(cardLabel));
}
export function* deleteCardLabelReceivedService(cardLabel) {
yield put(deleteCardLabelReceived(cardLabel));
}
export function* createTaskReceivedService(task) {
yield put(createTaskReceived(task));
}
export function* updateTaskReceivedService(task) {
yield put(updateTaskReceived(task));
}
export function* deleteTaskReceivedService(task) {
yield put(deleteTaskReceived(task));
}
export function* createAttachmentReceivedService(attachment, requestId) {
const exists = yield select(attachmentWithIdExistsSelector, requestId);
if (!exists) {
yield put(createAttachmentReceived(attachment));
}
}
export function* updateAttachmentReceivedService(attachment) {
yield put(updateAttachmentReceived(attachment));
}
export function* deleteAttachmentReceivedService(attachment) {
yield put(deleteAttachmentReceived(attachment));
}
export function* createActionReceivedService(action) {
yield put(createActionReceived(action));
}
export function* updateActionReceivedService(action) {
yield put(updateActionReceived(action));
}
export function* deleteActionReceivedService(action) {
yield put(deleteActionReceived(action));
}
export function* createNotificationReceivedService(notification, user, card, action) {
const { cardId } = yield select(pathSelector);
if (card.id === cardId) {
yield call(deleteNotificationsRequest, [notification.id]);
} else {
yield put(createNotificationReceived(notification, user, card, action));
}
}
export function* deleteNotificationReceivedService(notification) {
yield put(deleteNotificationReceived(notification));
}