From a14f7fcf6aa5be28f197ebdc5c3d84b6ee8d2b20 Mon Sep 17 00:00:00 2001 From: Vishnu Date: Fri, 29 Aug 2025 15:14:24 +0530 Subject: [PATCH] dashboard kebab bug fix --- .../components/Dashboard/DashboardCard.tsx | 74 +++++++++++-------- app/src/styles/pages/dashboard.scss | 67 ++++++++--------- 2 files changed, 79 insertions(+), 62 deletions(-) diff --git a/app/src/components/Dashboard/DashboardCard.tsx b/app/src/components/Dashboard/DashboardCard.tsx index 8ac05b6..7dfb283 100644 --- a/app/src/components/Dashboard/DashboardCard.tsx +++ b/app/src/components/Dashboard/DashboardCard.tsx @@ -1,4 +1,5 @@ -import React, { useState, useRef, useEffect, act } from "react"; +import React, { useState, useRef } from "react"; +import { createPortal } from "react-dom"; import img from "../../assets/image/image.png"; import { useNavigate } from "react-router-dom"; import { getUserData } from "../../functions/getUserData"; @@ -7,11 +8,11 @@ import { useProjectName, useSocketStore, } from "../../store/builder/store"; -import { viewProject } from "../../services/dashboard/viewProject"; import OuterClick from "../../utils/outerClick"; import { KebabIcon } from "../icons/ExportCommonIcons"; import { getAllProjects } from "../../services/dashboard/getAllProjects"; -import { updateProject } from "../../services/dashboard/updateProject"; +// import { viewProject } from "../../services/dashboard/viewProject"; +// import { updateProject } from "../../services/dashboard/updateProject"; interface DashBoardCardProps { projectName: string; @@ -69,9 +70,9 @@ const DashboardCard: React.FC = ({ const kebabRef = useRef(null); const navigateToProject = async (e: any) => { - if (active && active == "trash") return; + if (active && active === "trash") return; try { - const viewProjects = await viewProject(organization, projectId, userId); + // const viewProjects = await viewProject(organization, projectId, userId); setLoadingProgress(1); setProjectName(projectName); @@ -96,13 +97,13 @@ const DashboardCard: React.FC = ({ case "open in new tab": try { if (active === "shared" && createdBy) { - const newTab = await viewProject( - organization, - projectId, - createdBy?._id - ); + // const newTab = await viewProject( + // organization, + // projectId, + // createdBy?._id + // ); } else { - const newTab = await viewProject(organization, projectId, userId); + // const newTab = await viewProject(organization, projectId, userId); setProjectName(projectName); setIsKebabOpen(false); @@ -226,7 +227,7 @@ const DashboardCard: React.FC = ({ className="dashboard-card-container" onClick={navigateToProject} title={projectName} - onMouseLeave={() => setIsKebabOpen(false)} + // onMouseLeave={() => setIsKebabOpen(false)} >
@@ -267,7 +268,7 @@ const DashboardCard: React.FC = ({ )} {createdAt && (
- {active && active == "trash" ? `Trashed by you` : `Edited `}{" "} + {active && active === "trash" ? `Trashed by you` : `Edited `}{" "} {getRelativeTime(createdAt)}
)} @@ -292,22 +293,37 @@ const DashboardCard: React.FC = ({
- {isKebabOpen && ( -
- {getOptions().map((option) => ( - - ))} -
- )} + {isKebabOpen && + createPortal( +
+ {getOptions().map((option) => ( + + ))} +
, + document.body + )} ); }; diff --git a/app/src/styles/pages/dashboard.scss b/app/src/styles/pages/dashboard.scss index 01024d0..cfb2770 100644 --- a/app/src/styles/pages/dashboard.scss +++ b/app/src/styles/pages/dashboard.scss @@ -239,38 +239,6 @@ } } - .kebab-options-wrapper { - position: absolute; - bottom: 40px; - right: 40px; - background: var(--background-color); - border: 1px solid var(--border-color); - border-radius: 8px; - z-index: 100; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(20px); - flex-direction: column; - transform: translate(100%, 100%); - overflow: hidden; - display: none; - - .option { - padding: 8px 12px; - font-size: 14px; - text-align: left; - background: transparent; - border: none; - color: var(--text-color); - cursor: pointer; - transition: background 0.2s ease; - text-transform: capitalize; - - &:hover { - background-color: var(--background-color-selected); - } - } - } - &:hover { overflow: visible; @@ -337,4 +305,37 @@ font-family: #{$font-roboto}; cursor: pointer; } -} \ No newline at end of file +} + +.kebab-options-wrapper { + // position: absolute; + // bottom: 40px; + // right: 40px; + // z-index: 100; + background: var(--background-color); + border: 1px solid var(--border-color); + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(20px); + flex-direction: column; + // transform: translate(100%, 100%); + overflow: hidden; + display: flex; + flex-direction: column; + transform: translate(0%, 0%); + .option { + padding: 8px 12px; + font-size: 14px; + text-align: left; + background: transparent; + border: none; + color: var(--text-color); + cursor: pointer; + transition: background 0.2s ease; + text-transform: capitalize; + + &:hover { + background-color: var(--background-color-selected); + } + } +}