Add versioning support to collaboration features and API calls

- Adjust logic in socket responses to handle versioning for comments and threads.
This commit is contained in:
2025-06-24 11:56:26 +05:30
parent b49f431ebf
commit 3fe52e3e7c
8 changed files with 99 additions and 57 deletions

View File

@@ -3,6 +3,7 @@ import {
useLoadingProgress, useLoadingProgress,
useRenameModeStore, useRenameModeStore,
useSaveVersion, useSaveVersion,
useSelectedComment,
useSelectedFloorItem, useSelectedFloorItem,
useSocketStore, useSocketStore,
useWidgetSubOption, useWidgetSubOption,
@@ -39,6 +40,7 @@ import { useVersionHistoryStore } from "../../../store/builder/useVersionHistory
import { useVersionContext } from "../../../modules/builder/version/versionContext"; import { useVersionContext } from "../../../modules/builder/version/versionContext";
import VersionSaved from "../sidebarRight/versionHisory/VersionSaved"; import VersionSaved from "../sidebarRight/versionHisory/VersionSaved";
import Footer from "../../footer/Footer"; import Footer from "../../footer/Footer";
import ThreadChat from "../../ui/collaboration/ThreadChat";
function MainScene() { function MainScene() {
const { setMainProduct } = useMainProduct(); const { setMainProduct } = useMainProduct();
@@ -64,6 +66,7 @@ function MainScene() {
const { versionHistory } = useVersionHistoryStore(); const { versionHistory } = useVersionHistoryStore();
const { selectedVersionStore } = useVersionContext(); const { selectedVersionStore } = useVersionContext();
const { selectedVersion, setSelectedVersion } = selectedVersionStore(); const { selectedVersion, setSelectedVersion } = selectedVersionStore();
const { selectedComment, commentPositionState } = useSelectedComment();
useEffect(() => { useEffect(() => {
if (activeModule !== 'simulation') { if (activeModule !== 'simulation') {
@@ -185,6 +188,7 @@ function MainScene() {
{activeModule !== "market" && !selectedUser && <Footer />} {activeModule !== "market" && !selectedUser && <Footer />}
<VersionSaved /> <VersionSaved />
{(commentPositionState !== null || selectedComment !== null) && <ThreadChat/>}
</> </>
); );

View File

@@ -10,6 +10,7 @@ import { useCommentStore } from "../../../store/collaboration/useCommentStore";
import { useSelectedComment, useSocketStore } from "../../../store/builder/store"; import { useSelectedComment, useSocketStore } from "../../../store/builder/store";
import { getRelativeTime } from "./function/getRelativeTime"; import { getRelativeTime } from "./function/getRelativeTime";
import { editThreadTitleApi } from "../../../services/factoryBuilder/comments/editThreadTitleApi"; import { editThreadTitleApi } from "../../../services/factoryBuilder/comments/editThreadTitleApi";
import { useVersionContext } from "../../../modules/builder/version/versionContext";
interface MessageProps { interface MessageProps {
@@ -34,8 +35,9 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
const { threadSocket } = useSocketStore(); const { threadSocket } = useSocketStore();
const { userName, userId, organization } = getUserData(); const { userName, userId, organization } = getUserData();
const [isEditComment, setIsEditComment] = useState(false) const [isEditComment, setIsEditComment] = useState(false)
const { selectedComment, setCommentPositionState } = useSelectedComment(); const { selectedComment, setCommentPositionState } = useSelectedComment();
const { selectedVersionStore } = useVersionContext();
const { selectedVersion } = selectedVersionStore();
// input // input
const [value, setValue] = useState<string>( const [value, setValue] = useState<string>(
@@ -59,11 +61,11 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
const handleSaveAction = async () => { const handleSaveAction = async () => {
if (!projectId) return if (!projectId || !selectedVersion) return
if (isEditableThread && editedThread) { if (isEditableThread && editedThread) {
try { try {
// const editThreadTitle = await editThreadTitleApi(projectId, (val as CommentSchema).threadId, value) // const editThreadTitle = await editThreadTitleApi(projectId, (val as CommentSchema).threadId, value, selectedVersion?.versionId || "")
// if (editThreadTitle.message == "ThreadTitle updated Successfully") { // if (editThreadTitle.message == "ThreadTitle updated Successfully") {
// const editedThread: CommentSchema = { // const editedThread: CommentSchema = {
// state: 'active', // state: 'active',
@@ -74,7 +76,8 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
// lastUpdatedAt: new Date().toISOString(), // lastUpdatedAt: new Date().toISOString(),
// position: editThreadTitle.data.position, // position: editThreadTitle.data.position,
// rotation: [0, 0, 0], // rotation: [0, 0, 0],
// comments: [] // comments: [],
// versionId: selectedVersion?.versionId || ""
// } // }
// updateComment((val as CommentSchema).threadId, editedThread) // updateComment((val as CommentSchema).threadId, editedThread)
// } // }
@@ -84,17 +87,17 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
userId, userId,
threadTitle: value, threadTitle: value,
organization, organization,
threadId: (val as CommentSchema).threadId threadId: (val as CommentSchema).threadId || selectedComment.threadId,
versionId: selectedVersion?.versionId || ""
} }
threadSocket.emit('v1:thread:updateTitle', threadEdit) threadSocket.emit('v1:thread:updateTitle', threadEdit)
} catch { } catch {
} }
} else { } else {
if (mode === "edit") { if (mode === "edit") {
try { try {
// const editComments = await addCommentsApi(projectId, value, selectedComment?.threadId, (val as Reply).replyId) // const editComments = await addCommentsApi(projectId, value, selectedComment?.threadId, (val as Reply).replyId, selectedVersion?.versionId || "")
// //
// const commentData = { // const commentData = {
// replyId: `${editComments.data?.replyId}`, // replyId: `${editComments.data?.replyId}`,
@@ -102,6 +105,7 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
// createdAt: getRelativeTime(editComments.data?.createdAt), // createdAt: getRelativeTime(editComments.data?.createdAt),
// lastUpdatedAt: "2 hrs ago", // lastUpdatedAt: "2 hrs ago",
// comment: value, // comment: value,
// versionId: selectedVersion?.versionId || ""
// } // }
// updateReply((val as CommentSchema).threadId, (val as Reply)?.replyId, commentData); // updateReply((val as CommentSchema).threadId, (val as Reply)?.replyId, commentData);
@@ -114,7 +118,8 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
comment: value, comment: value,
organization, organization,
threadId: selectedComment?.threadId, threadId: selectedComment?.threadId,
commentId: (val as Reply).replyId ?? "" commentId: (val as Reply).replyId ?? "",
versionId: selectedVersion?.versionId || ""
} }
@@ -133,10 +138,10 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
} }
const handleDeleteAction = async (replyID: any) => { const handleDeleteAction = async (replyID: any) => {
if (!projectId) return if (!projectId || !selectedVersion) return
setOpenOptions(false); setOpenOptions(false);
try { try {
// const deletedComment = await deleteCommentApi(projectId, selectedComment?.threadId, (val as Reply).replyId) // const deletedComment = await deleteCommentApi(projectId, selectedComment?.threadId, (val as Reply).replyId , selectedVersion?.versionId || "")
// //
// if (deletedComment === "'Thread comment deleted Successfully'") { // if (deletedComment === "'Thread comment deleted Successfully'") {
// setMessages && setMessages(prev => prev.filter(message => message.replyId !== replyID)); // setMessages && setMessages(prev => prev.filter(message => message.replyId !== replyID));
@@ -151,13 +156,16 @@ const Messages: React.FC<MessageProps> = ({ val, i, setMessages, mode, setIsEdit
userId, userId,
commentId: (val as Reply).replyId, commentId: (val as Reply).replyId,
organization, organization,
threadId: selectedComment?.threadId threadId: selectedComment?.threadId,
versionId: selectedVersion?.versionId || ""
} }
setMessages(prev => {
console.log("Previous messages:", prev.map((val) => val)); // 👈 logs the current state
setMessages(prev => prev.filter(message => message.replyId !== (val as Reply).replyId)) return prev.filter(message => message.replyId !== (val as Reply).replyId);
});
removeReply(selectedComment?.threadId, (val as Reply).replyId); // Remove listener after response removeReply(selectedComment?.threadId, (val as Reply).replyId); // Remove listener after response
console.log('(val as Reply).replyId: ', (val as Reply).replyId);
threadSocket.emit("v1-Comment:delete", deleteComment); threadSocket.emit("v1-Comment:delete", deleteComment);
} }
} catch { } catch {

View File

@@ -12,6 +12,7 @@ import { addCommentsApi } from "../../../services/factoryBuilder/comments/addCom
import { deleteThreadApi } from "../../../services/factoryBuilder/comments/deleteThreadApi"; import { deleteThreadApi } from "../../../services/factoryBuilder/comments/deleteThreadApi";
import { createThreadApi } from "../../../services/factoryBuilder/comments/createThreadApi"; import { createThreadApi } from "../../../services/factoryBuilder/comments/createThreadApi";
import { getRelativeTime } from "./function/getRelativeTime"; import { getRelativeTime } from "./function/getRelativeTime";
import { useVersionContext } from "../../../modules/builder/version/versionContext";
const ThreadChat: React.FC = () => { const ThreadChat: React.FC = () => {
const { userId, organization } = getUserData(); const { userId, organization } = getUserData();
@@ -34,6 +35,8 @@ const ThreadChat: React.FC = () => {
const { threadSocket } = useSocketStore(); const { threadSocket } = useSocketStore();
const modeRef = useRef<'create' | 'edit' | null>(null); const modeRef = useRef<'create' | 'edit' | null>(null);
const messagesRef = useRef<HTMLDivElement>(null); const messagesRef = useRef<HTMLDivElement>(null);
const { selectedVersionStore } = useVersionContext();
const { selectedVersion } = selectedVersionStore();
useEffect(() => { useEffect(() => {
modeRef.current = mode; modeRef.current = mode;
@@ -48,12 +51,12 @@ const ThreadChat: React.FC = () => {
) )
.map((c) => { .map((c) => {
return { return {
replyId: c._id ?? "", replyId: c._id ?? c.replyId,
creatorId: c.creatorId || c.userId, creatorId: c.creatorId || c.userId,
createdAt: c.createdAt, createdAt: c.createdAt,
lastUpdatedAt: "1 hr ago", lastUpdatedAt: "1 hr ago",
comment: c.comment, comment: c.comment,
_id: c._id ?? "", _id: c._id ?? c.replyId,
}; };
}); });
@@ -61,7 +64,7 @@ const ThreadChat: React.FC = () => {
} }
}, [selectedComment]) }, [])
useEffect(() => { useEffect(() => {
if (textareaRef.current) adjustHeight(textareaRef.current); if (textareaRef.current) adjustHeight(textareaRef.current);
@@ -143,7 +146,7 @@ const ThreadChat: React.FC = () => {
const handleCreateComments = async (e: any) => { const handleCreateComments = async (e: any) => {
e.preventDefault(); e.preventDefault();
try { try {
// const createComments = await addCommentsApi(projectId, value, selectedComment?.threadId)/ // const createComments = await addCommentsApi(projectId, value, selectedComment?.threadId, selectedVersion?.versionId || "")/
// if (createComments.message === 'Thread comments add Successfully' && createComments.data) { // if (createComments.message === 'Thread comments add Successfully' && createComments.data) {
// const commentData = { // const commentData = {
// replyId: `${createComments.data?._id}`, // replyId: `${createComments.data?._id}`,
@@ -151,6 +154,7 @@ const ThreadChat: React.FC = () => {
// createdAt: "2 hrs ago", // createdAt: "2 hrs ago",
// lastUpdatedAt: "2 hrs ago", // lastUpdatedAt: "2 hrs ago",
// comment: value, // comment: value,
// versionId: selectedVersion?.versionId || ""
// } // }
// setMessages((prevMessages) => [ // setMessages((prevMessages) => [
// ...prevMessages, // ...prevMessages,
@@ -162,11 +166,13 @@ const ThreadChat: React.FC = () => {
if (threadSocket && mode === "create") { if (threadSocket && mode === "create") {
const addComment = { const addComment = {
versionId: selectedVersion?.versionId || "",
projectId, projectId,
userId, userId,
comment: value, comment: value,
organization, organization,
threadId: selectedComment?.threadId threadId: selectedComment?.threadId,
} }
threadSocket.emit("v1-Comment:add", addComment); threadSocket.emit("v1-Comment:add", addComment);
@@ -179,19 +185,21 @@ const ThreadChat: React.FC = () => {
const handleDeleteThread = async () => { const handleDeleteThread = async () => {
if (!projectId) return; if (!projectId) return;
try { try {
// const deleteThread = await deleteThreadApi(projectId, selectedComment?.threadId) // const deleteThread = await deleteThreadApi(projectId, selectedComment?.threadId, selectedVersion?.versionId || "")
// //
// if (deleteThread.message === "Thread deleted Successfully") { // if (deleteThread.message === "Thread deleted Successfully") {
// removeComment(selectedComment?.threadId) // removeComment(selectedComment?.threadId)
// setSelectedComment([]) // setSelectedComment([])
// } // }
console.log('threadSocket:threadChat ', threadSocket);
if (threadSocket) { if (threadSocket) {
// projectId, userId, organization, threadId // projectId, userId, organization, threadId
const deleteThread = { const deleteThread = {
projectId, projectId,
userId, userId,
organization, organization,
threadId: selectedComment?.threadId threadId: selectedComment?.threadId,
versionId: selectedVersion?.versionId || ""
} }
setSelectedComment(null) setSelectedComment(null)
@@ -211,11 +219,12 @@ const ThreadChat: React.FC = () => {
try { try {
// try { // try {
// const thread = await createThreadApi( // const thread = await createThreadApi(
// projectId, // projectId,
// "active", // "active",
// commentPositionState[0].position, // commentPositionState[0].position,
// [0, 0, 0], // [0, 0, 0],
// value // value,
// selectedVersion?.versionId || ""
// ); // );
// //
// //
@@ -241,15 +250,17 @@ const ThreadChat: React.FC = () => {
const createThread = { const createThread = {
projectId, projectId,
versionId: selectedVersion?.versionId || "",
userId, userId,
organization, organization,
state: "active", state: "active",
position: commentPositionState.position, position: commentPositionState.position,
rotation: [0, 0, 0], rotation: [0, 0, 0],
threadTitle: value threadTitle: value,
}; };
if (threadSocket) { if (threadSocket) {
console.log('createThread: ', createThread);
setInputActive(false); setInputActive(false);
threadSocket.emit("v1:thread:create", createThread); threadSocket.emit("v1:thread:create", createThread);

View File

@@ -5,16 +5,19 @@ import { getAllThreads } from '../../../../services/factoryBuilder/comments/getA
import { useParams } from 'react-router-dom'; import { useParams } from 'react-router-dom';
import { getUserData } from '../../../../functions/getUserData'; import { getUserData } from '../../../../functions/getUserData';
import { getRelativeTime } from '../../../../components/ui/collaboration/function/getRelativeTime'; import { getRelativeTime } from '../../../../components/ui/collaboration/function/getRelativeTime';
import { useVersionContext } from '../../../builder/version/versionContext';
function CommentInstances() { function CommentInstances() {
const { comments, setComments } = useCommentStore(); const { comments, setComments } = useCommentStore();
const { projectId } = useParams(); const { projectId } = useParams();
const { userId } = getUserData() const { userId } = getUserData();
const { selectedVersionStore } = useVersionContext();
const { selectedVersion } = selectedVersionStore();
const getThreads = async () => { const getThreads = async () => {
if (!projectId) return; if (!projectId || !selectedVersion) return;
try { try {
const getComments = await getAllThreads(projectId); const getComments = await getAllThreads(projectId, selectedVersion?.versionId);
const formattedThreads = Array.isArray(getComments.data) const formattedThreads = Array.isArray(getComments.data)
? getComments.data.map((thread: any) => ({ ? getComments.data.map((thread: any) => ({

View File

@@ -14,12 +14,13 @@ interface ThreadSocketProps {
const ThreadSocketResponsesDev = ({ setMessages, modeRef, messages }: ThreadSocketProps) => { const ThreadSocketResponsesDev = ({ setMessages, modeRef, messages }: ThreadSocketProps) => {
const { threadSocket } = useSocketStore(); const { threadSocket } = useSocketStore();
const { selectedComment, setSelectedComment, setCommentPositionState, commentPositionState } = useSelectedComment(); const { selectedComment, setSelectedComment, setCommentPositionState, commentPositionState } = useSelectedComment();
const { comments, addComment, addReply, updateComment, updateReply } = useCommentStore(); const { comments, removeReply, addComment, addReply, updateComment, updateReply } = useCommentStore();
const { userId } = getUserData(); const { userId } = getUserData();
useEffect(() => { useEffect(() => {
if (!threadSocket) return; if (!threadSocket) return;
// --- Add Comment Handler --- // --- Add Comment Handler ---
// const handleAddComment = (data: any) => { // const handleAddComment = (data: any) => {
// //
@@ -55,52 +56,56 @@ const ThreadSocketResponsesDev = ({ setMessages, modeRef, messages }: ThreadSock
// }; // };
// threadSocket.on('v1-Comment:response:add', handleAddComment); // threadSocket.on('v1-Comment:response:add', handleAddComment);
const handleAddComment = (data: any) => { const handleAddComment = (data: any) => {
// console.log('Add: ', data);
const commentData = { const commentData = {
replyId: data.data?._id, replyId: data.data?._id,
creatorId: data.data?.userId, creatorId: data.data?.userId,
createdAt: getRelativeTime(data.data?.createdAt), createdAt: getRelativeTime(data.data?.createdAt),
lastUpdatedAt: "2 hrs ago", lastUpdatedAt: "2 hrs ago",
comment: data.data.comment, comment: data.data?.comment,
}; };
if (modeRef.current === "create") { if (modeRef.current === "create") {
addReply(selectedComment?.threadId, commentData); addReply(selectedComment?.threadId, commentData);
setMessages((prevMessages) => [...prevMessages, commentData]); setMessages((prevMessages) => [...prevMessages, commentData]);
} else if (modeRef.current === "edit") { } else if (modeRef.current === "edit") {
updateReply(selectedComment?.threadId, data.data?._id, commentData); updateReply(selectedComment?.threadId, data.data?._id, commentData);
setMessages((prev) => setMessages((prev) =>
prev.map((message) => { prev.map((message) => {
// 👈 log each message // 👈 log each message
return message.replyId === data.data?._id return message.replyId === data.data?._id
? { ...message, comment: data.data?.comment } ? { ...message, comment: data.data?.comment }
: message; : message;
}) })
); );
// console.log('data.data?.comment: ', data.data?.comment);
} else { } else {
} }
threadSocket.off("v1-Comment:response:add", handleAddComment);
}; };
threadSocket.on('v1-Comment:response:add', handleAddComment); threadSocket.on('v1-Comment:response:add', handleAddComment);
// --- Delete Comment Handler --- // --- Delete Comment Handler ---
const handleDeleteComment = (data: any) => { const handleDeleteComment = (data: any) => {
// console.log('delete: ', data);
threadSocket.off('v1-Comment:response:delete', handleDeleteComment); // setMessages(prev => {
// // 👈 logs the current state
// return prev.filter(message => message.replyId !== data.data._id);
// });
// removeReply(selectedComment?.threadId, data.data._id);
//
}; };
threadSocket.on('v1-Comment:response:delete', handleDeleteComment); threadSocket.on('v1-Comment:response:delete', handleDeleteComment);
// --- Create Thread Handler --- // --- Create Thread Handler ---
const handleCreateThread = (data: any) => { const handleCreateThread = (data: any) => {
// console.log('createThread: ', data);
const comment: CommentSchema = { const comment: CommentSchema = {
state: 'active', state: 'active',
@@ -117,20 +122,28 @@ const ThreadSocketResponsesDev = ({ setMessages, modeRef, messages }: ThreadSock
addComment(comment); addComment(comment);
setCommentPositionState(null); setCommentPositionState(null);
// setSelectedComment(null); // setSelectedComment(null);
threadSocket.off('v1-thread:response:create', handleCreateThread);
}; };
threadSocket.on('v1-thread:response:create', handleCreateThread); threadSocket.on('v1-thread:response:create', handleCreateThread);
// --- Delete Thread Handler --- // --- Delete Thread Handler ---
// const handleDeleteThread = (data: any) => {
//
// };
// threadSocket.on("v1-thread:response:delete", handleDeleteThread);
console.log(
"del"
);
const handleDeleteThread = (data: any) => { const handleDeleteThread = (data: any) => {
threadSocket.off('v1-thread:response:delete', handleDeleteThread);
}; };
threadSocket.on('v1-thread:response:delete', handleDeleteThread); threadSocket.on("v1-thread:response:delete", handleDeleteThread);
const handleEditThread = (data: any) => { const handleEditThread = (data: any) => {
const editedThread: CommentSchema = { const editedThread: CommentSchema = {
state: 'active', state: 'active',
threadId: data.data?._id, threadId: data.data?._id,
@@ -138,17 +151,16 @@ const ThreadSocketResponsesDev = ({ setMessages, modeRef, messages }: ThreadSock
createdAt: data.data?.createdAt, createdAt: data.data?.createdAt,
threadTitle: data.data?.threadTitle, threadTitle: data.data?.threadTitle,
lastUpdatedAt: new Date().toISOString(), lastUpdatedAt: new Date().toISOString(),
position: data.data.position, position: data.data?.position,
rotation: [0, 0, 0], rotation: [0, 0, 0],
comments: data.data.comments, comments: data.data?.comments,
}; };
// console.log('data.data?._id: ', data.data?._id); //
updateComment(data.data?._id, editedThread); updateComment(data.data?._id, editedThread);
setSelectedComment(editedThread) setSelectedComment(editedThread)
// setSelectedComment(null); // setSelectedComment(null);
}; };
threadSocket.on('v1-thread:response:updateTitle', handleEditThread); threadSocket.on('v1-thread:response:updateTitle', handleEditThread);

View File

@@ -29,7 +29,6 @@ import { SceneProvider } from "../modules/scene/sceneContext";
import { getVersionHistoryApi } from "../services/factoryBuilder/versionControl/getVersionHistoryApi"; import { getVersionHistoryApi } from "../services/factoryBuilder/versionControl/getVersionHistoryApi";
import { useVersionHistoryStore } from "../store/builder/useVersionHistoryStore"; import { useVersionHistoryStore } from "../store/builder/useVersionHistoryStore";
import { VersionProvider } from "../modules/builder/version/versionContext"; import { VersionProvider } from "../modules/builder/version/versionContext";
import ThreadChat from "../components/ui/collaboration/ThreadChat";
const Project: React.FC = () => { const Project: React.FC = () => {
let navigate = useNavigate(); let navigate = useNavigate();
@@ -47,7 +46,7 @@ const Project: React.FC = () => {
const { selectedUser } = useSelectedUserStore(); const { selectedUser } = useSelectedUserStore();
const { isLogListVisible } = useLogger(); const { isLogListVisible } = useLogger();
const { setVersions } = useVersionHistoryStore(); const { setVersions } = useVersionHistoryStore();
const { selectedComment, commentPositionState } = useSelectedComment();
useEffect(() => { useEffect(() => {
if (!email || !userId) { if (!email || !userId) {
@@ -132,7 +131,7 @@ const Project: React.FC = () => {
<LogList /> <LogList />
</RenderOverlay> </RenderOverlay>
)} )}
{(commentPositionState !== null || selectedComment !== null) && <ThreadChat />}
</div> </div>
); );
}; };

View File

@@ -1,10 +1,15 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`; let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
// let url_Backend_dwinzo = `http://192.168.0.102:5000`; // let url_Backend_dwinzo = `http://192.168.0.102:5000`;
export const deleteThreadApi = async (projectId: string, threadId: string) => { export const deleteThreadApi = async (
projectId: string,
threadId: string,
versionId: string
) => {
const body: any = { const body: any = {
projectId, projectId,
threadId, threadId,
versionId,
}; };
try { try {

View File

@@ -1,9 +1,10 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`; let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const getAllThreads = async (projectId: string) => { export const getAllThreads = async (projectId: string, versionId: string) => {
console.log("projectId: ", projectId, versionId);
try { try {
const response = await fetch( const response = await fetch(
`${url_Backend_dwinzo}/api/v1/Threads/${projectId}`, `${url_Backend_dwinzo}/api/v1/Threads/${projectId}/${versionId}`,
{ {
method: "GET", method: "GET",
headers: { headers: {
@@ -21,7 +22,6 @@ export const getAllThreads = async (projectId: string) => {
} }
const result = await response.json(); const result = await response.json();
console.log('result: ', result);
return result; return result;
} catch (error) { } catch (error) {