123 lines
4.5 KiB
TypeScript
123 lines
4.5 KiB
TypeScript
import { useEffect } from "react";
|
|
import { useSocketStore } from "../../../store/socket/useSocketStore";
|
|
import { getRelativeTime } from "../../../components/ui/collaboration/function/getRelativeTime";
|
|
import useThreadResponseHandler from "../responseHandler/useThreadResponseHandler";
|
|
|
|
const CollaborationResponses = () => {
|
|
const { threadSocket } = useSocketStore();
|
|
const {
|
|
addThreadToScene,
|
|
updateThreadInScene,
|
|
removeThreadFromScene,
|
|
addReplyToThread,
|
|
removeReplyFromThread,
|
|
} = useThreadResponseHandler();
|
|
|
|
//#region Thread
|
|
useEffect(() => {
|
|
if (!threadSocket) return;
|
|
|
|
threadSocket.on("v1-thread:response:create", (data: any) => {
|
|
if (!data.message || !data.data) {
|
|
echo.error(`Error adding or updating thread`);
|
|
return;
|
|
}
|
|
if (data.message === "Thread created Successfully") {
|
|
const comment: ThreadSchema = {
|
|
state: data.data.state,
|
|
threadId: data.data._id,
|
|
creatorId: data.data.createdBy,
|
|
creatorName: data.data.creatorName,
|
|
threadTitle: data.data.threadTitle,
|
|
createdAt: getRelativeTime(data.data.createdAt),
|
|
position: data.data.position,
|
|
rotation: data.data.rotation,
|
|
comments: [],
|
|
};
|
|
|
|
addThreadToScene(comment, () => {
|
|
echo.log("Thread created successfully");
|
|
});
|
|
}
|
|
});
|
|
|
|
threadSocket.on("v1-thread:response:delete", (data: any) => {
|
|
if (!data.message || !data.data) {
|
|
echo.error(`Error in deleting thread`);
|
|
return;
|
|
}
|
|
if (data.message === "Thread deleted Successfully") {
|
|
removeThreadFromScene(data.data._id, () => {
|
|
echo.log("Thread Deleted successfully");
|
|
});
|
|
}
|
|
});
|
|
|
|
threadSocket.on("v1-thread:response:updateTitle", (data: any) => {
|
|
if (!data.message || !data.data) {
|
|
echo.error(`Error updating thread`);
|
|
return;
|
|
}
|
|
if (data.message === "ThreadTitle updated Successfully") {
|
|
const updatedThread: ThreadSchema = {
|
|
state: data.data.state,
|
|
threadId: data.data._id,
|
|
creatorId: data.data.createdBy._id,
|
|
creatorName: data.data.createdBy.userName,
|
|
threadTitle: data.data.threadTitle,
|
|
createdAt: getRelativeTime(data.data.createdAt),
|
|
position: data.data.position,
|
|
rotation: data.data.rotation,
|
|
comments: data.data.comments,
|
|
};
|
|
|
|
updateThreadInScene(data.data._id, updatedThread, () => {
|
|
echo.log("Thread title is updated");
|
|
});
|
|
}
|
|
});
|
|
|
|
threadSocket.on("v1-Comment:response:add", (data: any) => {
|
|
if (data.message === "Thread comments add Successfully") {
|
|
const reply: Reply = {
|
|
creatorName: data.data.creatorName,
|
|
creatorId: data.data.userId,
|
|
createdAt: getRelativeTime(data.data.createdAt),
|
|
comment: data.data.comment,
|
|
lastUpdatedAt: "2hrs",
|
|
replyId: data.data._id,
|
|
};
|
|
|
|
addReplyToThread(data.data.threadId[0], reply);
|
|
}
|
|
});
|
|
|
|
threadSocket.on("v1-Comment:response:delete", (data: any) => {
|
|
if (!data.message || !data.data) {
|
|
echo.error(`Error deleting reply`);
|
|
return;
|
|
}
|
|
if (data.message === "Thread comment deleted Successfully") {
|
|
removeReplyFromThread(data.data._id, data.data.comments[0]._id, () => {
|
|
echo.log("Reply added Successfully");
|
|
});
|
|
}
|
|
});
|
|
|
|
return () => {
|
|
if (threadSocket) {
|
|
threadSocket.off("v1-thread:response:create");
|
|
threadSocket.off("v1-thread:response:delete");
|
|
threadSocket.off("v1-thread:response:updateTitle");
|
|
threadSocket.off("v1-Comment:response:add");
|
|
threadSocket.off("v1-Comment:response:delete");
|
|
}
|
|
};
|
|
}, [threadSocket]);
|
|
//#endregion
|
|
|
|
return null;
|
|
};
|
|
|
|
export default CollaborationResponses;
|