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"; interface Project { _id: string; projectName: string; thumbnail: string; createdBy: string; projectUuid?: string; } interface WorkspaceProjects { [key: string]: Project[]; } const DashboardProjects: React.FC = () => { const [workspaceProjects, setWorkspaceProjects] = useState( {} ); const [isSearchActive, setIsSearchActive] = useState(false); const [activeFolder, setActiveFolder] = useState("myProjects"); const { dashBoardSocket } = useSocketStore(); const { userId, organization } = getUserData(); const fetchAllProjects = async () => { try { const projects = await getAllProjects(userId, organization); if (JSON.stringify(projects) !== JSON.stringify(workspaceProjects)) { setWorkspaceProjects(projects); } } catch (error) { console.error("Error fetching projects:", error); } }; 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 handleDeleteProject = async (projectId: any) => { try { const Organization = organization; const deletedProject = await deleteProject( projectId, userId, Organization ); const deleteProjects = { projectId, organization: organization, userId, }; //socket for deleting the project // if (dashBoardSocket) { // const handleResponse = (data: any) => { // console.log("Project add response:", data); // dashBoardSocket.off("v1-project:response:delete", handleResponse); // Clean up // }; // dashBoardSocket.on("v1-project:response:delete", handleResponse); // dashBoardSocket.emit("v1:project:delete", deleteProjects); // } else { // console.error("Socket is not connected."); // } 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) { console.error("Error deleting project:", error); } }; 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) => ( )); }; useEffect(() => { if (!isSearchActive) { fetchAllProjects(); } }, [isSearchActive]); return (
{renderProjects()}
); }; export default DashboardProjects;