From 711494b72e6313592a502fa44ff9b2f4d313fe23 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Tue, 25 Jun 2024 17:35:43 +0530 Subject: [PATCH] [WEB-1716] fix: sidebar UI inconsistencies (#4933) * fix: sidebar UI inconsistencies * fix: minor UI fixes --- .../[workspaceSlug]/(projects)/sidebar.tsx | 6 +- .../workspace/sidebar/projects-list-item.tsx | 37 ++-- .../workspace/sidebar/projects-list.tsx | 179 ++++++++++-------- .../workspace/sidebar/user-menu.tsx | 4 +- .../workspace/sidebar/workspace-menu.tsx | 50 +++-- web/core/constants/dashboard.ts | 10 +- 6 files changed, 160 insertions(+), 126 deletions(-) diff --git a/web/app/[workspaceSlug]/(projects)/sidebar.tsx b/web/app/[workspaceSlug]/(projects)/sidebar.tsx index 5199928d3..35fbaff4b 100644 --- a/web/app/[workspaceSlug]/(projects)/sidebar.tsx +++ b/web/app/[workspaceSlug]/(projects)/sidebar.tsx @@ -53,19 +53,19 @@ export const AppSidebar: FC = observer(() => {


diff --git a/web/core/components/workspace/sidebar/projects-list-item.tsx b/web/core/components/workspace/sidebar/projects-list-item.tsx index 4b8a16b78..33c4947d2 100644 --- a/web/core/components/workspace/sidebar/projects-list-item.tsx +++ b/web/core/components/workspace/sidebar/projects-list-item.tsx @@ -288,7 +288,7 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { "group/project-item relative w-full px-2 py-1.5 flex items-center rounded-md text-custom-sidebar-text-100 hover:bg-custom-sidebar-background-90", { "bg-custom-sidebar-background-90": isMenuActive, - "p-0 size-7 aspect-square justify-center mx-auto": isSidebarCollapsed, + "p-0 size-8 aspect-square justify-center mx-auto": isSidebarCollapsed, } )} > @@ -317,7 +317,7 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { )} {isSidebarCollapsed ? ( - +
@@ -344,21 +344,6 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { )} - - - = observer((props) => { )} + + + )} @@ -482,7 +483,7 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { >
{ key: "all" | "favorite"; type: "FAVORITES" | "JOINED"; title: string; - shortTitle: string; + icon: LucideIcon; projects: string[]; isOpen: boolean; }[] = [ @@ -154,7 +154,7 @@ export const SidebarProjectsList: FC = observer(() => { key: "favorite", type: "FAVORITES", title: "Favorites", - shortTitle: "FP", + icon: Star, projects: favoriteProjects, isOpen: isFavoriteProjectsListOpen, }, @@ -162,7 +162,7 @@ export const SidebarProjectsList: FC = observer(() => { key: "all", type: "JOINED", title: "My projects", - shortTitle: "MP", + icon: Briefcase, projects: joinedProjects, isOpen: isAllProjectsListOpen, }, @@ -180,90 +180,117 @@ export const SidebarProjectsList: FC = observer(() => { )}
- {projectSections.map((section) => { + {projectSections.map((section, index) => { if (!section.projects || section.projects.length === 0) return; return ( - - <> -
- + + <> +
toggleListDisclosure(!section.isOpen, section.key)} > - - {isCollapsed ? section.shortTitle : section.title} - - {!isCollapsed && ( - - )} - - {!isCollapsed && isAuthorizedUser && ( - - - - )} -
- - {section.isOpen && ( - - {section.projects.map((projectId, index) => ( - handleCopyText(projectId)} - projectListType={section.type} - disableDrag={section.key === "favorite"} - disableDrop={section.key === "favorite"} - isLastChild={index === section.projects.length - 1} - handleOnProjectDrop={handleOnProjectDrop} - /> - ))} - - )} - - -
+ {isCollapsed ? : section.title} + +
+ {!isCollapsed && isAuthorizedUser && ( +
+ + + + toggleListDisclosure(!section.isOpen, section.key)} + > + + +
+ )} +
+ + {section.isOpen && ( + + {section.projects.map((projectId, index) => ( + handleCopyText(projectId)} + projectListType={section.type} + disableDrag={section.key === "favorite"} + disableDrop={section.key === "favorite"} + isLastChild={index === section.projects.length - 1} + handleOnProjectDrop={handleOnProjectDrop} + /> + ))} + + )} + + +
+
+ ); })} {isAuthorizedUser && joinedProjects?.length === 0 && ( diff --git a/web/core/components/workspace/sidebar/user-menu.tsx b/web/core/components/workspace/sidebar/user-menu.tsx index 2a5ccfb3d..4c78e3e50 100644 --- a/web/core/components/workspace/sidebar/user-menu.tsx +++ b/web/core/components/workspace/sidebar/user-menu.tsx @@ -71,7 +71,9 @@ export const SidebarUserMenu = observer(() => { } )} > - {} + + + {!sidebarCollapsed &&

{link.label}

}
diff --git a/web/core/components/workspace/sidebar/workspace-menu.tsx b/web/core/components/workspace/sidebar/workspace-menu.tsx index c5ef23bf8..82594b1cb 100644 --- a/web/core/components/workspace/sidebar/workspace-menu.tsx +++ b/web/core/components/workspace/sidebar/workspace-menu.tsx @@ -4,7 +4,7 @@ import React, { useEffect, useState } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; import { useParams, usePathname } from "next/navigation"; -import { ChevronRight, Crown, Settings } from "lucide-react"; +import { ChevronRight, Crown } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; // ui import { Tooltip } from "@plane/ui"; @@ -51,28 +51,24 @@ export const SidebarWorkspaceMenu = observer(() => { return ( {!sidebarCollapsed && ( -
- setIsWorkspaceMenuOpen((prev) => !prev)} - > - Workspace - - - - - - - -
+ setIsWorkspaceMenuOpen((prev) => !prev)} + > + {({ open }) => ( + <> + Workspace + + + + + )} + )} { {isWorkspaceMenuOpen && ( @@ -117,13 +113,13 @@ export const SidebarWorkspaceMenu = observer(() => { } )} > - { + - } + {!sidebarCollapsed &&

{link.label}

} {!sidebarCollapsed && link.key === "active-cycles" && ( diff --git a/web/core/constants/dashboard.ts b/web/core/constants/dashboard.ts index e3e38ddf9..25306911f 100644 --- a/web/core/constants/dashboard.ts +++ b/web/core/constants/dashboard.ts @@ -2,7 +2,7 @@ import { linearGradientDef } from "@nivo/core"; // icons -import { BarChart2, Briefcase, CheckCircle, Home } from "lucide-react"; +import { BarChart2, Briefcase, CheckCircle, Home, Settings } from "lucide-react"; // types import { TIssuesListTypes, TStateGroups } from "@plane/types"; // ui @@ -291,6 +291,14 @@ export const SIDEBAR_WORKSPACE_MENU_ITEMS: { highlight: (pathname: string, baseUrl: string) => pathname.includes(`${baseUrl}/analytics/`), Icon: BarChart2, }, + { + key: "settings", + label: "Settings", + href: `/settings`, + access: EUserWorkspaceRoles.GUEST, + highlight: (pathname: string, baseUrl: string) => pathname.includes(`${baseUrl}/analytics/`), + Icon: Settings, + }, ]; export const SIDEBAR_USER_MENU_ITEMS: {