2021-07-07 15:13:44 +00:00
|
|
|
import { put, select } from "redux-saga/effects";
|
2021-10-04 08:01:46 +00:00
|
|
|
import { APP_LEVEL_SOCKET_EVENTS } from "./socketEvents";
|
2021-06-09 14:32:17 +00:00
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
newCommentEvent,
|
|
|
|
|
newCommentThreadEvent,
|
|
|
|
|
updateCommentThreadEvent,
|
|
|
|
|
updateCommentEvent,
|
2021-08-18 07:21:21 +00:00
|
|
|
deleteCommentThreadEvent,
|
|
|
|
|
deleteCommentEvent,
|
2021-06-09 14:32:17 +00:00
|
|
|
} from "actions/commentActions";
|
2021-10-01 16:44:19 +00:00
|
|
|
import { collabSetAppEditors } from "actions/appCollabActions";
|
2021-06-09 14:32:17 +00:00
|
|
|
import { newNotificationEvent } from "actions/notificationActions";
|
2021-07-07 15:13:44 +00:00
|
|
|
import { getCurrentUser } from "selectors/usersSelectors";
|
2021-06-09 14:32:17 +00:00
|
|
|
|
2021-10-01 16:44:19 +00:00
|
|
|
export default function* handleAppLevelSocketEvents(event: any) {
|
2021-07-07 15:13:44 +00:00
|
|
|
const currentUser = yield select(getCurrentUser);
|
|
|
|
|
|
2021-06-09 14:32:17 +00:00
|
|
|
switch (event.type) {
|
|
|
|
|
// comments
|
2021-10-01 16:44:19 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.INSERT_COMMENT_THREAD: {
|
2021-07-07 15:13:44 +00:00
|
|
|
const { thread } = event.payload[0];
|
2021-10-19 10:26:56 +00:00
|
|
|
const isThreadFromEventViewed = thread?.viewedByUsers?.includes(
|
|
|
|
|
currentUser?.username,
|
|
|
|
|
);
|
|
|
|
|
yield put(
|
|
|
|
|
newCommentThreadEvent({
|
|
|
|
|
...thread,
|
|
|
|
|
// This is necessary to be done from the start, as client depends on
|
|
|
|
|
// these values to find if there is an unread thread.
|
|
|
|
|
isViewed: isThreadFromEventViewed || thread?.resolvedState?.active,
|
|
|
|
|
}),
|
|
|
|
|
);
|
2021-06-09 14:32:17 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2021-10-01 16:44:19 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.INSERT_COMMENT: {
|
2021-06-09 14:32:17 +00:00
|
|
|
yield put(newCommentEvent(event.payload[0]));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2021-10-01 16:44:19 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.REPLACE_COMMENT_THREAD:
|
|
|
|
|
case APP_LEVEL_SOCKET_EVENTS.UPDATE_COMMENT_THREAD: {
|
2021-07-28 07:02:11 +00:00
|
|
|
const { thread } = event.payload[0];
|
2021-08-05 11:53:03 +00:00
|
|
|
|
2021-07-28 07:02:11 +00:00
|
|
|
const isThreadFromEventViewed = thread?.viewedByUsers?.includes(
|
|
|
|
|
currentUser?.username,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
yield put(
|
|
|
|
|
updateCommentThreadEvent({
|
|
|
|
|
...thread,
|
2021-08-05 11:53:03 +00:00
|
|
|
isViewed: isThreadFromEventViewed || thread?.resolvedState?.active, // resolved threads can't be unread
|
2021-07-28 07:02:11 +00:00
|
|
|
}),
|
|
|
|
|
);
|
2021-06-09 14:32:17 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2021-10-01 16:44:19 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.UPDATE_COMMENT: {
|
2021-06-09 14:32:17 +00:00
|
|
|
yield put(updateCommentEvent(event.payload[0].comment));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2021-10-01 16:44:19 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.DELETE_COMMENT_THREAD: {
|
2021-08-18 07:21:21 +00:00
|
|
|
yield put(deleteCommentThreadEvent(event.payload[0].thread));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2021-10-01 16:44:19 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.DELETE_COMMENT: {
|
2021-08-18 07:21:21 +00:00
|
|
|
yield put(deleteCommentEvent(event.payload[0].comment));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2021-06-09 14:32:17 +00:00
|
|
|
// notifications
|
2021-10-01 16:44:19 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.INSERT_NOTIFICATION: {
|
2021-06-09 14:32:17 +00:00
|
|
|
yield put(newNotificationEvent(event.payload[0].notification));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2021-08-09 09:04:24 +00:00
|
|
|
// Collab V2 - Realtime Editing
|
2021-10-04 08:01:46 +00:00
|
|
|
case APP_LEVEL_SOCKET_EVENTS.LIST_ONLINE_APP_EDITORS: {
|
2021-10-01 16:44:19 +00:00
|
|
|
yield put(collabSetAppEditors(event.payload[0]));
|
2021-08-09 09:04:24 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2021-06-09 14:32:17 +00:00
|
|
|
}
|
|
|
|
|
}
|