Refactor Dashboard components: add createdAt prop to Project interfaces, implement ProjectSocketRes for socket event handling, and remove unused handleDuplicateProjects function.

This commit is contained in:
2025-06-04 11:48:49 +05:30
parent 5ba7457276
commit ea400847a4
8 changed files with 309 additions and 435 deletions

View File

@@ -7,7 +7,7 @@ import { useSocketStore } from "../../store/builder/store";
import { recentlyViewed } from "../../services/dashboard/recentlyViewed";
import { searchProject } from "../../services/dashboard/searchProjects";
import { deleteProject } from "../../services/dashboard/deleteProject";
import { handleDuplicateProjects } from "./functions/handleDuplicateProject";
import ProjectSocketRes from "./socket/projectSocketRes.dev";
interface Project {
_id: string;
@@ -15,6 +15,7 @@ interface Project {
thumbnail: string;
createdBy: string;
projectUuid?: string;
createdAt: string;
}
interface RecentProjectsData {
@@ -26,11 +27,13 @@ const DashboardHome: React.FC = () => {
const [isSearchActive, setIsSearchActive] = useState<boolean>(false);
const { userId, organization } = getUserData();
const { projectSocket } = useSocketStore();
const [recentDuplicateData, setRecentDuplicateData] = useState<Object>({});
console.log("duplicateData: ", recentDuplicateData);
const fetchRecentProjects = async () => {
try {
const projects = await recentlyViewed(organization, userId);
console.log('RecentlyViewed: ', projects);
console.log("RecentlyViewed: ", projects);
if (JSON.stringify(projects) !== JSON.stringify(recentProjects)) {
setRecentProjects(projects);
@@ -50,13 +53,12 @@ const DashboardHome: React.FC = () => {
userId,
inputValue
);
console.log('filterRecentProcess: ', filterRecentProcess);
setIsSearchActive(true);
setRecentProjects(filterRecentProcess.message ? {} : filterRecentProcess);
};
const handleDeleteProject = async (projectId: any) => {
console.log('projectId:delete ', projectId);
console.log("projectId:delete ", projectId);
try {
//API for delete project
// const deletedProject = await deleteProject(
@@ -74,12 +76,6 @@ const DashboardHome: React.FC = () => {
};
if (projectSocket) {
const handleResponse = (data: any) => {
console.log("Project add response:", data);
projectSocket.off("v1-project:response:delete", handleResponse);
};
projectSocket.on("v1-project:response:delete", handleResponse);
projectSocket.emit("v1:project:delete", deleteProject);
}
@@ -101,20 +97,20 @@ const DashboardHome: React.FC = () => {
}
};
const handleDuplicateRecentProject = async (projectId: string, projectName: string, thumbnail: string) => {
await handleDuplicateProjects({
const handleDuplicateRecentProject = async (
projectId: string,
projectName: string,
thumbnail: string
) => {
const duplicateRecentProjectData = {
userId,
organization,
projectId,
projectName,
projectSocket,
thumbnail,
setRecentProjects,
setIsSearchActive
});
}
organization,
projectUuid: projectId,
projectName,
};
projectSocket.emit("v1:project:Duplicate", duplicateRecentProjectData);
};
const renderProjects = () => {
const projectList = recentProjects[Object.keys(recentProjects)[0]];
@@ -123,16 +119,21 @@ const DashboardHome: React.FC = () => {
return <div className="empty-state">No recent projects found</div>;
}
return projectList && projectList.map((project) => (
<DashboardCard
key={project._id}
projectName={project.projectName}
thumbnail={project.thumbnail}
projectId={project._id}
handleDeleteProject={handleDeleteProject}
handleDuplicateRecentProject={handleDuplicateRecentProject}
/>
));
return (
projectList &&
projectList.map((project) => (
<DashboardCard
key={project._id}
projectName={project.projectName}
thumbnail={project.thumbnail}
projectId={project._id}
createdAt={project.createdAt}
handleDeleteProject={handleDeleteProject}
handleDuplicateRecentProject={handleDuplicateRecentProject}
setRecentDuplicateData={setRecentDuplicateData}
/>
))
);
};
useEffect(() => {
@@ -147,17 +148,19 @@ const DashboardHome: React.FC = () => {
page="home"
handleRecentProjectSearch={handleRecentProjectSearch}
/>
<MarketPlaceBanner />
<div className="container">
<h2 className="section-header">Recents</h2>
<div className="cards-container">{renderProjects()}</div>
</div>
{recentDuplicateData && Object.keys(recentDuplicateData).length > 0 && (
<ProjectSocketRes
setIsSearchActive={setIsSearchActive}
setRecentProjects={setRecentProjects}
/>
)}
</div>
);
};
export default DashboardHome;
export default DashboardHome;