import React, { useEffect, useState } from "react"; import DashboardNavBar from "./DashboardNavBar"; import DashboardCard from "./DashboardCard"; import { getUserData } from "../../functions/getUserData"; import { useSocketStore } from "../../store/builder/store"; import { getAllProjects } from "../../services/dashboard/getAllProjects"; import { searchProject } from "../../services/dashboard/searchProjects"; import { deleteProject } from "../../services/dashboard/deleteProject"; import ProjectSocketRes from "./socket/projectSocketRes.dev"; import { sharedWithMeProjects } from "../../services/dashboard/sharedWithMeProject"; import { duplicateProject } from "../../services/dashboard/duplicateProject"; import { generateUniqueId } from "../../functions/generateUniqueId"; interface Project { _id: string; projectName: string; thumbnail: string; createdBy: string; projectUuid?: string; createdAt: string; } interface WorkspaceProjects { [key: string]: Project[]; } const DashboardProjects: React.FC = () => { const [workspaceProjects, setWorkspaceProjects] = useState( {} ); const [sharedwithMeProject, setSharedWithMeProjects] = useState([]); const [projectDuplicateData, setProjectDuplicateData] = useState({}); const [isSearchActive, setIsSearchActive] = useState(false); const [activeFolder, setActiveFolder] = useState("myProjects"); const { projectSocket } = useSocketStore(); const { userId, organization } = getUserData(); const handleProjectsSearch = async (inputValue: string) => { if (!inputValue.trim()) { setIsSearchActive(false); return; } if (!setWorkspaceProjects || !setIsSearchActive) return; const searchedProject = await searchProject( organization, userId, inputValue ); setIsSearchActive(true); setWorkspaceProjects(searchedProject.message ? {} : searchedProject); }; const fetchAllProjects = async () => { try { const projects = await getAllProjects(userId, organization); if (!projects || !projects.Projects) return; if (JSON.stringify(projects) !== JSON.stringify(workspaceProjects)) { setWorkspaceProjects(projects); } } catch (error) {} }; const handleDeleteProject = async (projectId: any) => { try { // const deletedProject = await deleteProject( // projectId, // userId, // organization // ); // const deleteProjects = { projectId, organization, userId, }; //socket for deleting the project if (projectSocket) { projectSocket.emit("v1:project:delete", deleteProjects); } else { } setWorkspaceProjects((prevDiscardedProjects: WorkspaceProjects) => { if (!Array.isArray(prevDiscardedProjects?.Projects)) { return prevDiscardedProjects; } const updatedProjectDatas = prevDiscardedProjects.Projects.filter( (project) => project._id !== projectId ); return { ...prevDiscardedProjects, Projects: updatedProjectDatas, }; }); setIsSearchActive(false); } catch (error) {} }; const handleDuplicateWorkspaceProject = async ( projectId: string, projectName: string, thumbnail: string ) => { // const duplicatedProject = await duplicateProject( // projectId, // generateUniqueId(), // thumbnail, // projectName // ); // console.log("duplicatedProject: ", duplicatedProject); const duplicateProjectData = { userId, thumbnail, organization, projectUuid: generateUniqueId(), refProjectID: projectId, projectName, }; projectSocket.emit("v1:project:Duplicate", duplicateProjectData); }; const renderProjects = () => { if (activeFolder !== "myProjects") return null; const projectList = workspaceProjects[Object.keys(workspaceProjects)[0]]; if (!projectList?.length) { return
No projects found
; } return projectList.map((project) => ( )); }; const renderSharedProjects = () => { return sharedwithMeProject?.map((project: any) => ( )); }; const sharedProject = async () => { try { const sharedWithMe = await sharedWithMeProjects(); setSharedWithMeProjects(sharedWithMe); } catch {} }; useEffect(() => { if (!isSearchActive) { fetchAllProjects(); } }, [isSearchActive]); useEffect(() => { if (activeFolder === "shared") { sharedProject(); } }, [activeFolder]); return (
{activeFolder == "myProjects" ? renderProjects() : renderSharedProjects()}
{projectDuplicateData && Object.keys(projectDuplicateData).length > 0 && ( )}
); }; export default DashboardProjects;