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"; 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 [projectDuplicateData, setProjectDuplicateData] = useState({}); const [isSearchActive, setIsSearchActive] = useState(false); const [activeFolder, setActiveFolder] = useState("myProjects"); const { projectSocket } = 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 deletedProject = await deleteProject( // projectId, // userId, // organization // ); // console.log('deletedProject: ', deletedProject); const deleteProjects = { projectId, organization, userId, }; //socket for deleting the project if (projectSocket) { projectSocket.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 handleDuplicateWorkspaceProject = async ( projectId: string, projectName: string, thumbnail: string ) => { // await handleDuplicateProjects({ // userId, // organization, // projectId, // projectName, // projectSocket, // thumbnail, // setWorkspaceProjects, // setIsSearchActive // }); const duplicateProjectData = { userId, thumbnail, organization, projectUuid: 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) => ( )); }; useEffect(() => { if (!isSearchActive) { fetchAllProjects(); } }, [isSearchActive]); return (
{renderProjects()}
{projectDuplicateData && Object.keys(projectDuplicateData).length > 0 && ( )}
); }; export default DashboardProjects;