import { useState } from "react"; import { useSceneContext } from "../../../../modules/scene/sceneContext"; import { getRelativeTime } from "../../../ui/collaboration/function/getRelativeTime"; import { KebabIcon } from "../../../icons/ExportCommonIcons"; import { getAvatarColorUsingUserID } from "../../../../modules/collaboration/functions/getAvatarColor"; import { deleteThreadApi } from "../../../../services/builder/collab/comments/deleteThreadApi"; import { useParams } from "react-router-dom"; import { useSocketStore } from "../../../../store/socket/useSocketStore"; import { getUserData } from "../../../../functions/getUserData"; import useThreadResponseHandler from "../../../../modules/collaboration/responseHandler/useThreadResponseHandler"; const ThreadProperties = () => { const { threadStore, versionStore } = useSceneContext(); const { threads, setSelectedThread } = threadStore(); const { userId, organization } = getUserData(); const { selectedVersion } = versionStore(); const { projectId } = useParams(); const { threadSocket } = useSocketStore(); const [selectedChart, setSelectedChart] = useState(null); const [isKebabActive, setIsKebabActive] = useState(false); const { removeThreadFromScene } = useThreadResponseHandler(); const handleDeleteThread = (val: ThreadSchema) => { if (!projectId) return; const threadIdToDelete = val?.threadId; if (!threadSocket?.connected) { // API fallback deleteThreadApi(projectId, threadIdToDelete, selectedVersion?.versionId || "").then( (res) => { if (res.message === "Thread deleted Successfully") { removeThreadFromScene(res.data._id); } } ); } else { // SOCKET path const deleteThreadPayload = { projectId, userId, organization, threadId: threadIdToDelete, versionId: selectedVersion?.versionId || "", }; threadSocket.emit("v1:thread:delete", deleteThreadPayload); } }; return (
{threads && threads.map((val) => { const isMenuVisible = selectedChart?.createdAt === val.createdAt && isKebabActive; return (
{/* Avatar */}
{val?.creatorName?.charAt(0).toUpperCase()}
{/* Content */}
{/* Title + username */}
{val.threadTitle}
{val.creatorName}
{/* Last updated + kebab */}
{getRelativeTime(val.createdAt)}
{/* Kebab menu shown only for selected thread */} {isMenuVisible && (
{val.creatorId === userId && ( )}
)}
); })}
); }; export default ThreadProperties;