From 4c57ae276788080282da0f967eb04db439f44c46 Mon Sep 17 00:00:00 2001 From: gakshita Date: Tue, 4 Feb 2025 17:45:00 +0530 Subject: [PATCH 01/19] feat: ui changes for workspace switcher --- .../workspace/sidebar/dropdown-item.tsx | 103 ++++++++++++ .../components/workspace/sidebar/dropdown.tsx | 148 ++++++------------ 2 files changed, 147 insertions(+), 104 deletions(-) create mode 100644 web/core/components/workspace/sidebar/dropdown-item.tsx diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx new file mode 100644 index 00000000000..d8e3beb830d --- /dev/null +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -0,0 +1,103 @@ +import Link from "next/link"; +import { useParams } from "next/navigation"; +import { Check, Settings, UserPlus } from "lucide-react"; +import { Menu } from "@headlessui/react"; +import { useTranslation } from "@plane/i18n"; +import { IWorkspace } from "@plane/types"; +import { cn, getFileURL } from "@plane/utils"; + +type TProps = { + workspace: IWorkspace; + activeWorkspace: IWorkspace | null; + handleItemClick: () => void; + handleWorkspaceNavigation: (workspace: IWorkspace) => void; +}; +const SidebarDropdownItem = (props: TProps) => { + const { workspace, activeWorkspace, handleItemClick, handleWorkspaceNavigation } = props; + + // router params + const { workspaceSlug } = useParams(); + const { t } = useTranslation(); + + return ( + { + handleWorkspaceNavigation(workspace); + handleItemClick(); + }} + className="w-full" + > + +
+
+ + {workspace?.logo_url && workspace.logo_url !== "" ? ( + {t("workspace_logo")} + ) : ( + (workspace?.name?.[0] ?? "...") + )} + +
+
+ {workspace.name} +
+
+ Admin +
+ + {workspace.total_members} {t("members", { count: workspace.total_members })} + +
+
+
+ {workspace.id === activeWorkspace?.id ? ( + + + + ) : ( +
+

Free

+
+ )} +
+ {workspace.id === activeWorkspace?.id && ( +
+ + + {t("settings")} + + + + {t("invite")} + +
+ )} + + + ); +}; + +export default SidebarDropdownItem; diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index 93eb92bc08e..b38278952c8 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -1,12 +1,11 @@ "use client"; -import { Fragment, Ref, useState, useMemo } from "react"; +import { Fragment, Ref, useState } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; -import { useParams } from "next/navigation"; import { usePopper } from "react-popper"; // icons -import { Check, ChevronDown, LogOut, Mails, PlusSquare, Settings } from "lucide-react"; +import { ChevronDown, LogOut, Mails, Plus, Settings } from "lucide-react"; // ui import { Menu, Transition } from "@headlessui/react"; // types @@ -25,32 +24,11 @@ import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/u import { getIsWorkspaceCreationDisabled } from "@/plane-web/helpers/instance.helper"; // components import { WorkspaceLogo } from "../logo"; - - +import SidebarDropdownItem from "./dropdown-item"; export const SidebarDropdown = observer(() => { const { t } = useTranslation(); - const userLinks = useMemo( - () => (workspaceSlug: string) => [ - { - key: "workspace_invites", - name: t("workspace_invites"), - href: "/invitations", - icon: Mails, - access: [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], - }, - { - key: "settings", - name: t("workspace_settings"), - href: `/${workspaceSlug}/settings`, - icon: Settings, - access: [EUserPermissions.ADMIN], - }, - ], - [t] - ); - // router params - const { workspaceSlug } = useParams(); + // store hooks const { sidebarCollapsed, toggleSidebar } = useAppTheme(); const { data: currentUser } = useUser(); @@ -152,57 +130,20 @@ export const SidebarDropdown = observer(() => { >
-
-
+
+
{currentUser?.email}
{workspacesList ? ( -
+
{workspacesList.map((workspace) => ( - { - handleWorkspaceNavigation(workspace); - handleItemClick(); - }} - className="w-full" - > - -
- - {workspace?.logo_url && workspace.logo_url !== "" ? ( - {t("workspace_logo")} - ) : ( - (workspace?.name?.[0] ?? "...") - )} - -
- {workspace.name} -
-
- {workspace.id === activeWorkspace?.id && ( - - - - )} -
- + workspace={workspace} + activeWorkspace={activeWorkspace} + handleItemClick={handleItemClick} + handleWorkspaceNavigation={handleWorkspaceNavigation} + /> ))}
) : ( @@ -221,43 +162,42 @@ export const SidebarDropdown = observer(() => { as="div" className="flex items-center gap-2 rounded px-2 py-1 text-sm font-medium text-custom-sidebar-text-200 hover:bg-custom-sidebar-background-80" > - +
+ +
{t("create_workspace")} )} - {userLinks(workspaceSlug?.toString() ?? "").map( - (link, index) => - allowPermissions(link.access, EUserPermissionsLevel.WORKSPACE) && ( - { - if (index > 0) handleItemClick(); - }} - > - - - {link.name} - - - ) + + {allowPermissions( + [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], + EUserPermissionsLevel.WORKSPACE + ) && ( + + + + {t("workspace_invites")} + + )} -
-
- - - {t("sign_out")} - +
+ + + {t("sign_out")} + +
From a60079fdd79c3248cb37cdd7859f8c2d8c0c9939 Mon Sep 17 00:00:00 2001 From: gakshita Date: Tue, 4 Feb 2025 18:55:30 +0530 Subject: [PATCH 02/19] fix: hover --- web/core/components/workspace/sidebar/dropdown-item.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index d8e3beb830d..b3005fc69f4 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -31,8 +31,9 @@ const SidebarDropdownItem = (props: TProps) => { >
From 4634ca9ea11699502f224a9947a9b0dca78e666f Mon Sep 17 00:00:00 2001 From: gakshita Date: Wed, 5 Feb 2025 13:04:43 +0530 Subject: [PATCH 03/19] fix: added current plan --- packages/types/src/workspace.d.ts | 9 ++------- web/core/components/workspace/sidebar/dropdown-item.tsx | 8 ++++---- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/types/src/workspace.d.ts b/packages/types/src/workspace.d.ts index 500eaa7b513..e9c00827217 100644 --- a/packages/types/src/workspace.d.ts +++ b/packages/types/src/workspace.d.ts @@ -1,10 +1,4 @@ -import type { - ICycle, - IProjectMember, - IUser, - IUserLite, - IWorkspaceViewProps, -} from "@plane/types"; +import type { ICycle, IProjectMember, IUser, IUserLite, IWorkspaceViewProps } from "@plane/types"; import { TUserPermissions } from "./enums"; export interface IWorkspace { @@ -22,6 +16,7 @@ export interface IWorkspace { organization_size: string; total_issues: number; total_projects?: number; + current_plan?: string; } export interface IWorkspaceLite { diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index b3005fc69f4..54a93caee86 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -73,8 +73,8 @@ const SidebarDropdownItem = (props: TProps) => { ) : ( -
-

Free

+
+

{workspace.current_plan?.toLowerCase() || "Free"}

)}
@@ -82,14 +82,14 @@ const SidebarDropdownItem = (props: TProps) => {
{t("settings")} {t("invite")} From 4c4d9e053d5ed4a48c8d3686ff1245413e6968b8 Mon Sep 17 00:00:00 2001 From: sangeethailango Date: Wed, 5 Feb 2025 13:27:30 +0530 Subject: [PATCH 04/19] feat: Return user role --- apiserver/plane/app/serializers/workspace.py | 2 +- apiserver/plane/app/views/workspace/base.py | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apiserver/plane/app/serializers/workspace.py b/apiserver/plane/app/serializers/workspace.py index 68e12608517..826943b8f13 100644 --- a/apiserver/plane/app/serializers/workspace.py +++ b/apiserver/plane/app/serializers/workspace.py @@ -32,10 +32,10 @@ class WorkSpaceSerializer(DynamicBaseSerializer): - owner = UserLiteSerializer(read_only=True) total_members = serializers.IntegerField(read_only=True) total_issues = serializers.IntegerField(read_only=True) logo_url = serializers.CharField(read_only=True) + role = serializers.CharField(read_only=True) def validate_slug(self, value): # Check if the slug is restricted diff --git a/apiserver/plane/app/views/workspace/base.py b/apiserver/plane/app/views/workspace/base.py index 058f7702abd..4899d603125 100644 --- a/apiserver/plane/app/views/workspace/base.py +++ b/apiserver/plane/app/views/workspace/base.py @@ -6,9 +6,11 @@ from dateutil.relativedelta import relativedelta from django.db import IntegrityError -from django.db.models import Count, F, Func, OuterRef, Prefetch, Q +from django.db.models import Count, F, Func, OuterRef, Prefetch, Q, Value, TextField + from django.db.models.fields import DateField from django.db.models.functions import Cast, ExtractDay, ExtractWeek +from django.db.models.functions import Coalesce # Django imports from django.http import HttpResponse @@ -173,6 +175,11 @@ def get(self, request): .values("count") ) + role = ( + WorkspaceMember.objects.filter(workspace=OuterRef("id"), member=request.user, is_active=True) + .values("role") + ) + workspace = ( Workspace.objects.prefetch_related( Prefetch( @@ -184,17 +191,19 @@ def get(self, request): ) .select_related("owner") .annotate(total_members=member_count) - .annotate(total_issues=issue_count) + .annotate(total_issues=issue_count, role=role) .filter( workspace_member__member=request.user, workspace_member__is_active=True ) .distinct() ) + workspaces = WorkSpaceSerializer( self.filter_queryset(workspace), fields=fields if fields else None, many=True, ).data + return Response(workspaces, status=status.HTTP_200_OK) From c4b4caf568509c30ee2421ec04b7f00484da8724 Mon Sep 17 00:00:00 2001 From: sangeethailango Date: Wed, 5 Feb 2025 13:33:19 +0530 Subject: [PATCH 05/19] chore: remove unused imports --- apiserver/plane/app/views/workspace/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apiserver/plane/app/views/workspace/base.py b/apiserver/plane/app/views/workspace/base.py index 4899d603125..4d81eb1607d 100644 --- a/apiserver/plane/app/views/workspace/base.py +++ b/apiserver/plane/app/views/workspace/base.py @@ -6,11 +6,11 @@ from dateutil.relativedelta import relativedelta from django.db import IntegrityError -from django.db.models import Count, F, Func, OuterRef, Prefetch, Q, Value, TextField +from django.db.models import Count, F, Func, OuterRef, Prefetch, Q from django.db.models.fields import DateField from django.db.models.functions import Cast, ExtractDay, ExtractWeek -from django.db.models.functions import Coalesce + # Django imports from django.http import HttpResponse From 3e90e8f328b5528b38e659851e9892a3a523f016 Mon Sep 17 00:00:00 2001 From: gakshita Date: Wed, 5 Feb 2025 14:10:13 +0530 Subject: [PATCH 06/19] fix: css --- web/core/components/workspace/sidebar/dropdown.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index b38278952c8..41b9c6011cd 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -130,7 +130,7 @@ export const SidebarDropdown = observer(() => { >
-
+
{currentUser?.email}
@@ -162,7 +162,7 @@ export const SidebarDropdown = observer(() => { as="div" className="flex items-center gap-2 rounded px-2 py-1 text-sm font-medium text-custom-sidebar-text-200 hover:bg-custom-sidebar-background-80" > -
+
Date: Wed, 5 Feb 2025 19:53:27 +0530 Subject: [PATCH 07/19] fix: added user role in workspace switcher --- packages/types/src/workspace.d.ts | 1 + web/core/components/workspace/sidebar/dropdown-item.tsx | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/types/src/workspace.d.ts b/packages/types/src/workspace.d.ts index e9c00827217..24f535aa1a3 100644 --- a/packages/types/src/workspace.d.ts +++ b/packages/types/src/workspace.d.ts @@ -17,6 +17,7 @@ export interface IWorkspace { total_issues: number; total_projects?: number; current_plan?: string; + role: number; } export interface IWorkspaceLite { diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index 54a93caee86..c276931a53d 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -5,6 +5,7 @@ import { Menu } from "@headlessui/react"; import { useTranslation } from "@plane/i18n"; import { IWorkspace } from "@plane/types"; import { cn, getFileURL } from "@plane/utils"; +import { getUserRole } from "@/helpers/user.helper"; type TProps = { workspace: IWorkspace; @@ -60,7 +61,7 @@ const SidebarDropdownItem = (props: TProps) => { {workspace.name}
- Admin + {getUserRole(workspace.role)}
{workspace.total_members} {t("members", { count: workspace.total_members })} From 09c6323cf957527a0ab11ab13c6605913a6d43d8 Mon Sep 17 00:00:00 2001 From: sangeethailango Date: Wed, 5 Feb 2025 22:08:09 +0530 Subject: [PATCH 08/19] fix: return role as integer --- apiserver/plane/app/serializers/workspace.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apiserver/plane/app/serializers/workspace.py b/apiserver/plane/app/serializers/workspace.py index 826943b8f13..3467fff9960 100644 --- a/apiserver/plane/app/serializers/workspace.py +++ b/apiserver/plane/app/serializers/workspace.py @@ -35,7 +35,7 @@ class WorkSpaceSerializer(DynamicBaseSerializer): total_members = serializers.IntegerField(read_only=True) total_issues = serializers.IntegerField(read_only=True) logo_url = serializers.CharField(read_only=True) - role = serializers.CharField(read_only=True) + role = serializers.IntegerField(read_only=True) def validate_slug(self, value): # Check if the slug is restricted From a4b49e962981c5862f7b3769660e4682e1f05569 Mon Sep 17 00:00:00 2001 From: gakshita Date: Thu, 6 Feb 2025 12:06:58 +0530 Subject: [PATCH 09/19] fix: role casing --- web/core/components/workspace/sidebar/dropdown-item.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index c276931a53d..992923ab19d 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -60,8 +60,8 @@ const SidebarDropdownItem = (props: TProps) => { > {workspace.name} -
- {getUserRole(workspace.role)} +
+ {getUserRole(workspace.role)?.toLowerCase() || "guest"}
{workspace.total_members} {t("members", { count: workspace.total_members })} From 8d26d7ebc5cf964782850d451935eb00f2d810d0 Mon Sep 17 00:00:00 2001 From: gakshita Date: Thu, 6 Feb 2025 13:34:48 +0530 Subject: [PATCH 10/19] fix: refactor --- .../components/workspace/sidebar/dropdown.tsx | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index 41b9c6011cd..530bc8ce0ae 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -18,8 +18,6 @@ import { GOD_MODE_URL, cn } from "@/helpers/common.helper"; import { getFileURL } from "@/helpers/file.helper"; // hooks import { useAppTheme, useUser, useUserPermissions, useUserProfile, useWorkspace } from "@/hooks/store"; -// plane web constants -import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions"; // plane web helpers import { getIsWorkspaceCreationDisabled } from "@/plane-web/helpers/instance.helper"; // components @@ -173,20 +171,16 @@ export const SidebarDropdown = observer(() => { )} - {allowPermissions( - [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], - EUserPermissionsLevel.WORKSPACE - ) && ( - - - - {t("workspace_invites")} - - - )} + + + + {t("workspace_invites")} + + +
Date: Thu, 6 Feb 2025 15:14:39 +0530 Subject: [PATCH 11/19] fix: plan pill fix --- web/ce/components/common/subscription-pill.tsx | 1 + web/core/components/workspace/sidebar/dropdown-item.tsx | 5 ++--- web/ee/components/common/subscription-pill.tsx | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 web/ce/components/common/subscription-pill.tsx create mode 100644 web/ee/components/common/subscription-pill.tsx diff --git a/web/ce/components/common/subscription-pill.tsx b/web/ce/components/common/subscription-pill.tsx new file mode 100644 index 00000000000..844f69f430b --- /dev/null +++ b/web/ce/components/common/subscription-pill.tsx @@ -0,0 +1 @@ +export const SubscriptionPill = () => <>; diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index 992923ab19d..febbd599002 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -6,6 +6,7 @@ import { useTranslation } from "@plane/i18n"; import { IWorkspace } from "@plane/types"; import { cn, getFileURL } from "@plane/utils"; import { getUserRole } from "@/helpers/user.helper"; +import { SubscriptionPill } from "@/plane-web/components/common/subscription-pill"; type TProps = { workspace: IWorkspace; @@ -74,9 +75,7 @@ const SidebarDropdownItem = (props: TProps) => { ) : ( -
-

{workspace.current_plan?.toLowerCase() || "Free"}

-
+ )}
{workspace.id === activeWorkspace?.id && ( diff --git a/web/ee/components/common/subscription-pill.tsx b/web/ee/components/common/subscription-pill.tsx new file mode 100644 index 00000000000..38bcdebd5ad --- /dev/null +++ b/web/ee/components/common/subscription-pill.tsx @@ -0,0 +1 @@ +export * from "ce/components/common/subscription-pill"; From 59ac4f29f419983e605bb14e042d1880760a8af1 Mon Sep 17 00:00:00 2001 From: gakshita Date: Thu, 6 Feb 2025 16:36:55 +0530 Subject: [PATCH 12/19] fix: design updates --- web/ce/components/common/subscription-pill.tsx | 8 +++++++- web/core/components/workspace/sidebar/dropdown-item.tsx | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/web/ce/components/common/subscription-pill.tsx b/web/ce/components/common/subscription-pill.tsx index 844f69f430b..c557ce204b5 100644 --- a/web/ce/components/common/subscription-pill.tsx +++ b/web/ce/components/common/subscription-pill.tsx @@ -1 +1,7 @@ -export const SubscriptionPill = () => <>; +import { IWorkspace } from "@plane/types"; + +type TProps = { + workspace: IWorkspace; +}; + +export const SubscriptionPill = (props: TProps) => <>; diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index febbd599002..1a9b004a99c 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -34,8 +34,8 @@ const SidebarDropdownItem = (props: TProps) => {
@@ -75,7 +75,7 @@ const SidebarDropdownItem = (props: TProps) => { ) : ( - + )}
{workspace.id === activeWorkspace?.id && ( From 0faa18495e933c4675959691aa372709b38f7de9 Mon Sep 17 00:00:00 2001 From: gakshita Date: Thu, 6 Feb 2025 17:18:03 +0530 Subject: [PATCH 13/19] fix: refactor --- web/core/components/workspace/sidebar/dropdown-item.tsx | 4 ++-- web/core/components/workspace/sidebar/dropdown.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index 1a9b004a99c..369830d2c14 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -64,8 +64,8 @@ const SidebarDropdownItem = (props: TProps) => {
{getUserRole(workspace.role)?.toLowerCase() || "guest"}
- - {workspace.total_members} {t("members", { count: workspace.total_members })} + + {workspace.total_members} {t("member", { count: workspace.total_members })}
diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index 530bc8ce0ae..182aaa1c29c 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -129,7 +129,7 @@ export const SidebarDropdown = observer(() => {
-
+
{currentUser?.email}
{workspacesList ? ( From e74c57d9e589a6e97faf0a6c9e1cc93b293e2c39 Mon Sep 17 00:00:00 2001 From: gakshita Date: Fri, 7 Feb 2025 14:10:07 +0530 Subject: [PATCH 14/19] fix: member translation --- web/core/components/workspace/sidebar/dropdown-item.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index 369830d2c14..b70b2627131 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -64,9 +64,7 @@ const SidebarDropdownItem = (props: TProps) => {
{getUserRole(workspace.role)?.toLowerCase() || "guest"}
- - {workspace.total_members} {t("member", { count: workspace.total_members })} - + {t("member", { count: workspace.total_members })}
From bde4d436e06504dac2e57081fede1ddf8c83ab59 Mon Sep 17 00:00:00 2001 From: gakshita Date: Fri, 7 Feb 2025 16:17:49 +0530 Subject: [PATCH 15/19] fix: css improvements --- .../workspace/sidebar/dropdown-item.tsx | 9 ++++--- .../components/workspace/sidebar/dropdown.tsx | 26 +++++++++++-------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index b70b2627131..d7b2204426d 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -30,6 +30,7 @@ const SidebarDropdownItem = (props: TProps) => { handleItemClick(); }} className="w-full" + id={workspace.id} > {
@@ -57,14 +58,14 @@ const SidebarDropdownItem = (props: TProps) => {
{workspace.name}
-
+
{getUserRole(workspace.role)?.toLowerCase() || "guest"}
- {t("member", { count: workspace.total_members })} + {t("member", { count: workspace.total_members || 0 })}
diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index 187b28aebe9..cb3736f9395 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import Link from "next/link"; import { usePopper } from "react-popper"; // icons -import { ChevronDown, LogOut, Mails, Plus, Settings } from "lucide-react"; +import { ChevronDown, CirclePlus, LogOut, Mails, Settings } from "lucide-react"; // ui import { Menu, Transition } from "@headlessui/react"; // types @@ -126,13 +126,22 @@ export const SidebarDropdown = observer(() => { >
-
-
+
+ {currentUser?.email} -
+ {workspacesList ? (
- {workspacesList.map((workspace) => ( + {(activeWorkspace + ? [ + activeWorkspace, + ...workspacesList.filter((workspace) => workspace.id !== activeWorkspace?.id), + ] + : workspacesList + ).map((workspace) => ( { as="div" className="flex items-center gap-2 rounded px-2 py-1 text-sm font-medium text-custom-sidebar-text-200 hover:bg-custom-sidebar-background-80" > -
- -
+ {t("create_workspace")} From 93c0453b491e8c7578165b040e41105f32cee2f3 Mon Sep 17 00:00:00 2001 From: gakshita Date: Fri, 7 Feb 2025 16:59:41 +0530 Subject: [PATCH 16/19] fix: truncate issue --- web/core/components/workspace/sidebar/dropdown-item.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index d7b2204426d..f47c20c96ce 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -40,7 +40,7 @@ const SidebarDropdownItem = (props: TProps) => { })} >
-
+
{ (workspace?.name?.[0] ?? "...") )} -
-
+
{workspace.name} -
+
{getUserRole(workspace.role)?.toLowerCase() || "guest"}
From b03673b5ea4e4c9f3d1d387f336b5cfc953deb76 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Fri, 7 Feb 2025 17:19:54 +0530 Subject: [PATCH 17/19] fix: workspace switcher dropdown email truncate --- web/core/components/workspace/sidebar/dropdown.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index cb3736f9395..92be6179534 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -127,10 +127,7 @@ export const SidebarDropdown = observer(() => {
- + {currentUser?.email} {workspacesList ? ( From 42117097ad49404faadb96896282ee689b86b4e0 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Fri, 7 Feb 2025 17:48:56 +0530 Subject: [PATCH 18/19] fix: workspace switcher dropdown email truncate --- web/core/components/workspace/sidebar/dropdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index 92be6179534..59b40397ff1 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -127,7 +127,7 @@ export const SidebarDropdown = observer(() => {
- + {currentUser?.email} {workspacesList ? ( From 795095b7bbd597cfd61437b2649779c80282dd3b Mon Sep 17 00:00:00 2001 From: gakshita Date: Fri, 7 Feb 2025 19:33:37 +0530 Subject: [PATCH 19/19] fix: role --- .../workspace/sidebar/dropdown-item.tsx | 17 ++++++++++------- .../components/workspace/sidebar/dropdown.tsx | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/web/core/components/workspace/sidebar/dropdown-item.tsx index f47c20c96ce..b2519783135 100644 --- a/web/core/components/workspace/sidebar/dropdown-item.tsx +++ b/web/core/components/workspace/sidebar/dropdown-item.tsx @@ -2,6 +2,7 @@ import Link from "next/link"; import { useParams } from "next/navigation"; import { Check, Settings, UserPlus } from "lucide-react"; import { Menu } from "@headlessui/react"; +import { EUserPermissions } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IWorkspace } from "@plane/types"; import { cn, getFileURL } from "@plane/utils"; @@ -79,13 +80,15 @@ const SidebarDropdownItem = (props: TProps) => {
{workspace.id === activeWorkspace?.id && (
- - - {t("settings")} - + {workspace?.role > EUserPermissions.GUEST && ( + + + {t("settings")} + + )} {
- + {currentUser?.email} {workspacesList ? (