From 7677f021a9c04dab942f85fed9f024f0de2f158b Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:25:57 +0530 Subject: [PATCH] [WEB-1580] chore: drag handler and sidebar improvement (#4780) * chore: sidebar width reduced * chore: drag handler added to project sidebar and ui improvement * chore: label drag handler added --- .../[workspaceSlug]/(projects)/sidebar.tsx | 7 ++- web/app/profile/sidebar.tsx | 7 ++- .../labels/label-block/label-item-block.tsx | 9 +++- .../labels/label-block/label-name.tsx | 2 +- .../labels/project-setting-label-group.tsx | 5 +- .../labels/project-setting-label-item.tsx | 5 +- .../components/project/sidebar-list-item.tsx | 52 +++++++++++++++---- web/core/components/project/sidebar-list.tsx | 4 +- 8 files changed, 64 insertions(+), 27 deletions(-) diff --git a/web/app/[workspaceSlug]/(projects)/sidebar.tsx b/web/app/[workspaceSlug]/(projects)/sidebar.tsx index c856b69b8..9ca29af3e 100644 --- a/web/app/[workspaceSlug]/(projects)/sidebar.tsx +++ b/web/app/[workspaceSlug]/(projects)/sidebar.tsx @@ -32,10 +32,9 @@ export const AppSidebar: FC = observer(() => {
diff --git a/web/app/profile/sidebar.tsx b/web/app/profile/sidebar.tsx index f3f87f8e4..8d4cebbde 100644 --- a/web/app/profile/sidebar.tsx +++ b/web/app/profile/sidebar.tsx @@ -95,10 +95,9 @@ export const ProfileLayoutSidebar = observer(() => { return (
diff --git a/web/core/components/labels/label-block/label-item-block.tsx b/web/core/components/labels/label-block/label-item-block.tsx index cfc9ae7c3..225b011bd 100644 --- a/web/core/components/labels/label-block/label-item-block.tsx +++ b/web/core/components/labels/label-block/label-item-block.tsx @@ -27,10 +27,11 @@ interface ILabelItemBlock { customMenuItems: ICustomMenuItem[]; handleLabelDelete: (label: IIssueLabel) => void; isLabelGroup?: boolean; + dragHandleRef: MutableRefObject; } export const LabelItemBlock = (props: ILabelItemBlock) => { - const { label, customMenuItems, handleLabelDelete, isLabelGroup } = props; + const { label, isDragging, customMenuItems, handleLabelDelete, isLabelGroup, dragHandleRef } = props; // states const [isMenuActive, setIsMenuActive] = useState(false); // refs @@ -41,6 +42,12 @@ export const LabelItemBlock = (props: ILabelItemBlock) => { return (
+
diff --git a/web/core/components/labels/label-block/label-name.tsx b/web/core/components/labels/label-block/label-name.tsx index ae5ffbf2e..9c84959cc 100644 --- a/web/core/components/labels/label-block/label-name.tsx +++ b/web/core/components/labels/label-block/label-name.tsx @@ -10,7 +10,7 @@ export const LabelName = (props: ILabelName) => { const { name, color, isGroup } = props; return ( -
+
{isGroup ? ( ) : ( diff --git a/web/core/components/labels/project-setting-label-group.tsx b/web/core/components/labels/project-setting-label-group.tsx index 264c93e47..3302cb6bf 100644 --- a/web/core/components/labels/project-setting-label-group.tsx +++ b/web/core/components/labels/project-setting-label-group.tsx @@ -55,13 +55,13 @@ export const ProjectSettingLabelGroup: React.FC = observer((props) => { return ( - {(isDragging, isDroppingInLabel) => ( + {(isDragging, isDroppingInLabel, dragHandleRef) => (
= observer((props) => { customMenuItems={customMenuItems} handleLabelDelete={handleLabelDelete} isLabelGroup + dragHandleRef={dragHandleRef} /> )} diff --git a/web/core/components/labels/project-setting-label-item.tsx b/web/core/components/labels/project-setting-label-item.tsx index f64e2cd7a..fbc812e12 100644 --- a/web/core/components/labels/project-setting-label-item.tsx +++ b/web/core/components/labels/project-setting-label-item.tsx @@ -64,9 +64,9 @@ export const ProjectSettingLabelItem: React.FC = (props) => { return ( - {(isDragging, isDroppingInLabel) => ( + {(isDragging, isDroppingInLabel, dragHandleRef) => (
= (props) => { isDragging={isDragging} customMenuItems={customMenuItems} handleLabelDelete={handleLabelDelete} + dragHandleRef={dragHandleRef} /> )}
diff --git a/web/core/components/project/sidebar-list-item.tsx b/web/core/components/project/sidebar-list-item.tsx index ceaa78dac..952933764 100644 --- a/web/core/components/project/sidebar-list-item.tsx +++ b/web/core/components/project/sidebar-list-item.tsx @@ -12,6 +12,7 @@ import { useParams, usePathname } from "next/navigation"; import { createRoot } from "react-dom/client"; // icons import { + MoreVertical, PenSquare, LinkIcon, Star, @@ -123,6 +124,7 @@ export const ProjectSidebarListItem: React.FC = observer((props) => { // refs const actionSectionRef = useRef(null); const projectRef = useRef(null); + const dragHandleRef = useRef(null); // router params const { workspaceSlug, projectId: URLProjectId } = useParams(); // pathname @@ -185,6 +187,7 @@ export const ProjectSidebarListItem: React.FC = observer((props) => { useEffect(() => { const element = projectRef.current; + const dragHandleElement = dragHandleRef.current; if (!element) return; @@ -192,6 +195,7 @@ export const ProjectSidebarListItem: React.FC = observer((props) => { draggable({ element, canDrag: () => !disableDrag && !isSideBarCollapsed, + dragHandle: dragHandleElement ?? undefined, getInitialData: () => ({ id: projectId, dragInstanceId: "PROJECTS" }), onDragStart: () => { setIsDragging(true); @@ -207,7 +211,7 @@ export const ProjectSidebarListItem: React.FC = observer((props) => { const root = createRoot(container); root.render(
-
+
{project && }

{project?.name}

@@ -268,7 +272,7 @@ export const ProjectSidebarListItem: React.FC = observer((props) => { }, }) ); - }, [projectRef?.current, projectId, isLastChild, projectListType, handleOnProjectDrop]); + }, [projectRef?.current, dragHandleRef?.current, projectId, isLastChild, projectListType, handleOnProjectDrop]); useOutsideClickDetector(actionSectionRef, () => setIsMenuActive(false)); useOutsideClickDetector(projectRef, () => projectRef?.current?.classList?.remove(HIGHLIGHT_CLASS)); @@ -288,12 +292,39 @@ export const ProjectSidebarListItem: React.FC = observer((props) => {
+ {!disableDrag && ( + + + + )} = observer((props) => {
-
+
{!isSideBarCollapsed &&

{project.name}

} @@ -322,7 +353,7 @@ export const ProjectSidebarListItem: React.FC = observer((props) => { {!isSideBarCollapsed && (