Files
Dwinzo_Demo/app/src/components/Dashboard/socket/projectSocketRes.tsx
Vishnu dac81894c0 Refactor Dashboard components and styles; update icon colors
- Updated icon stroke and fill colors from `var(--text-button-color)` to `var(--text-color)` for consistency.
- Refactored `Dashboard` component to utilize a new `DashboardMain` component for better structure.
- Enhanced `DashboardMain` to manage project data fetching and rendering based on active folder and subfolder.
- Implemented socket handling for project actions (add, delete, update, duplicate) in `ProjectSocketRes`.
- Improved styles in `_dashboard.scss` for buttons and project cards, including hover effects and layout adjustments.
2025-09-03 16:42:40 +05:30

91 lines
3.0 KiB
TypeScript

import React, { useEffect } from "react";
import { useSocketStore } from "../../../store/builder/store";
import { getUserData } from "../../../functions/getUserData";
import { getAllProjects } from "../../../services/dashboard/getAllProjects";
import { recentlyViewed } from "../../../services/dashboard/recentlyViewed";
interface Project {
_id: string;
projectName: string;
thumbnail: string;
createdBy: { _id: string; userName: string };
projectUuid?: string;
createdAt?: string;
DeletedAt?: string;
isViewed?: string;
}
interface ProjectCollection {
[key: string]: Project[];
}
interface ProjectSocketResProps {
setRecentProjects?: React.Dispatch<React.SetStateAction<ProjectCollection>>;
setWorkspaceProjects?: React.Dispatch<React.SetStateAction<ProjectCollection>>;
setIsSearchActive?: React.Dispatch<React.SetStateAction<boolean>>;
}
const ProjectSocketRes = ({
setRecentProjects,
setWorkspaceProjects,
setIsSearchActive,
}: ProjectSocketResProps) => {
const { projectSocket } = useSocketStore();
const { userId, organization } = getUserData();
useEffect(() => {
if (!projectSocket) return;
const handleAdd = (data: any) => {
// console.log("Add:", data);
};
const handleDelete = (data: any) => {
// console.log("Delete:", data);
};
const handleUpdate = (data: any) => {
// console.log("Update:", data);
};
const handleTrashDelete = (data: any) => {
// console.log("Trash Delete:", data);
};
const handleDuplicate = async (data: any) => {
console.log("Project duplicate response:", data);
if (data?.message === "Project Duplicated successfully") {
if (setWorkspaceProjects) {
const allProjects = await getAllProjects(userId, organization);
setWorkspaceProjects(allProjects);
} else if (setRecentProjects) {
const recentProjects = await recentlyViewed(organization, userId);
setRecentProjects(recentProjects);
}
setIsSearchActive && setIsSearchActive(false);
} else {
console.warn("Duplication failed or unexpected response.");
}
};
projectSocket.on("v1-project:response:add", handleAdd);
projectSocket.on("v1-project:response:delete", handleDelete);
projectSocket.on("v1-project:response:update", handleUpdate);
projectSocket.on("v1-project:response:Duplicate", handleDuplicate);
projectSocket.on("v1:trash:response:delete", handleTrashDelete);
return () => {
projectSocket.off("v1-project:response:add", handleAdd);
projectSocket.off("v1-project:response:delete", handleDelete);
projectSocket.off("v1-project:response:update", handleUpdate);
projectSocket.off("v1-project:response:Duplicate", handleDuplicate);
projectSocket.off("v1:trash:response:delete", handleTrashDelete);
};
// eslint-disable-next-line
}, [projectSocket, userId, organization]);
return null;
};
export default ProjectSocketRes;