From 742c947e606fba9bd2016690fd15e8da7f2d0d0c Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Wed, 23 Aug 2023 23:06:41 +0530 Subject: [PATCH 1/2] dev: group by assignees option for project issues --- .../app/components/core/views/board-view/board-header.tsx | 8 +++++--- apps/app/components/core/views/issues-view.tsx | 3 ++- apps/app/components/core/views/list-view/single-list.tsx | 2 ++ .../issues/my-issues/my-issues-view-options.tsx | 6 +++++- .../components/profile/profile-issues-view-options.tsx | 6 +++++- apps/app/constants/issue.ts | 1 + apps/app/types/issues.d.ts | 1 + 7 files changed, 21 insertions(+), 6 deletions(-) diff --git a/apps/app/components/core/views/board-view/board-header.tsx b/apps/app/components/core/views/board-view/board-header.tsx index 919bc36a34f..d83514b435f 100644 --- a/apps/app/components/core/views/board-view/board-header.tsx +++ b/apps/app/components/core/views/board-view/board-header.tsx @@ -12,7 +12,7 @@ import useProjects from "hooks/use-projects"; // component import { Avatar, Icon } from "components/ui"; // icons -import { ArrowsPointingInIcon, ArrowsPointingOutIcon, PlusIcon } from "@heroicons/react/24/outline"; +import { PlusIcon } from "@heroicons/react/24/outline"; import { getPriorityIcon, getStateGroupIcon } from "components/icons"; // helpers import { addSpaceIfCamelCase } from "helpers/string.helper"; @@ -56,10 +56,10 @@ export const BoardHeader: React.FC = ({ ); const { data: members } = useSWR( - workspaceSlug && projectId && selectedGroup === "created_by" + workspaceSlug && projectId && (selectedGroup === "created_by" || selectedGroup === "assignees") ? PROJECT_MEMBERS(projectId.toString()) : null, - workspaceSlug && projectId && selectedGroup === "created_by" + workspaceSlug && projectId && (selectedGroup === "created_by" || selectedGroup === "assignees") ? () => projectService.projectMembers(workspaceSlug.toString(), projectId.toString()) : null ); @@ -79,6 +79,7 @@ export const BoardHeader: React.FC = ({ case "project": title = projects?.find((p) => p.id === groupTitle)?.name ?? "None"; break; + case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; title = member?.display_name ?? ""; @@ -122,6 +123,7 @@ export const BoardHeader: React.FC = ({ /> ); break; + case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; icon = ; diff --git a/apps/app/components/core/views/issues-view.tsx b/apps/app/components/core/views/issues-view.tsx index d3d76f80552..54d90d9faf1 100644 --- a/apps/app/components/core/views/issues-view.tsx +++ b/apps/app/components/core/views/issues-view.tsx @@ -513,7 +513,8 @@ export const IssuesView: React.FC = ({ dragDisabled={ selectedGroup === "created_by" || selectedGroup === "labels" || - selectedGroup === "state_detail.group" + selectedGroup === "state_detail.group" || + selectedGroup === "assignees" } emptyState={{ title: cycleId diff --git a/apps/app/components/core/views/list-view/single-list.tsx b/apps/app/components/core/views/list-view/single-list.tsx index 5efc93f3ce7..bdad9d012b2 100644 --- a/apps/app/components/core/views/list-view/single-list.tsx +++ b/apps/app/components/core/views/list-view/single-list.tsx @@ -94,6 +94,7 @@ export const SingleList: React.FC = ({ case "project": title = projects?.find((p) => p.id === groupTitle)?.name ?? "None"; break; + case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; title = member?.display_name ?? ""; @@ -137,6 +138,7 @@ export const SingleList: React.FC = ({ /> ); break; + case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; icon = ; diff --git a/apps/app/components/issues/my-issues/my-issues-view-options.tsx b/apps/app/components/issues/my-issues/my-issues-view-options.tsx index 23d0d2535d4..940eae046d7 100644 --- a/apps/app/components/issues/my-issues/my-issues-view-options.tsx +++ b/apps/app/components/issues/my-issues/my-issues-view-options.tsx @@ -159,7 +159,11 @@ export const MyIssuesViewOptions: React.FC = () => { > {GROUP_BY_OPTIONS.map((option) => { if (issueView === "kanban" && option.key === null) return null; - if (option.key === "state" || option.key === "created_by") + if ( + option.key === "state" || + option.key === "created_by" || + option.key === "assignees" + ) return null; return ( diff --git a/apps/app/components/profile/profile-issues-view-options.tsx b/apps/app/components/profile/profile-issues-view-options.tsx index 904e1ea65ff..4811bc0361e 100644 --- a/apps/app/components/profile/profile-issues-view-options.tsx +++ b/apps/app/components/profile/profile-issues-view-options.tsx @@ -186,7 +186,11 @@ export const ProfileIssuesViewOptions: React.FC = () => { > {GROUP_BY_OPTIONS.map((option) => { if (issueView === "kanban" && option.key === null) return null; - if (option.key === "state" || option.key === "created_by") + if ( + option.key === "state" || + option.key === "created_by" || + option.key === "assignees" + ) return null; return ( diff --git a/apps/app/constants/issue.ts b/apps/app/constants/issue.ts index 3665f180cc4..4e8bb0944a3 100644 --- a/apps/app/constants/issue.ts +++ b/apps/app/constants/issue.ts @@ -7,6 +7,7 @@ export const GROUP_BY_OPTIONS: Array<{ { name: "Priority", key: "priority" }, { name: "Project", key: "project" }, { name: "Labels", key: "labels" }, + { name: "Assignees", key: "assignees" }, { name: "Created by", key: "created_by" }, { name: "None", key: null }, ]; diff --git a/apps/app/types/issues.d.ts b/apps/app/types/issues.d.ts index 9cbcef8470a..a263237b1c2 100644 --- a/apps/app/types/issues.d.ts +++ b/apps/app/types/issues.d.ts @@ -233,6 +233,7 @@ export type TIssueGroupByOptions = | "created_by" | "state_detail.group" | "project" + | "assignees" | null; export type TIssueOrderByOptions = From 087fa275d0f2e7e3d12a3356b1444381549045d5 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Wed, 23 Aug 2023 23:17:19 +0530 Subject: [PATCH 2/2] fix: no assignee title --- apps/app/components/core/views/board-view/board-header.tsx | 5 +++-- apps/app/components/core/views/list-view/single-list.tsx | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/app/components/core/views/board-view/board-header.tsx b/apps/app/components/core/views/board-view/board-header.tsx index d83514b435f..d5b11f5f01d 100644 --- a/apps/app/components/core/views/board-view/board-header.tsx +++ b/apps/app/components/core/views/board-view/board-header.tsx @@ -82,7 +82,8 @@ export const BoardHeader: React.FC = ({ case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; - title = member?.display_name ?? ""; + title = member ? member.display_name : "None"; + break; } @@ -126,7 +127,7 @@ export const BoardHeader: React.FC = ({ case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; - icon = ; + icon = member ? : <>; break; } diff --git a/apps/app/components/core/views/list-view/single-list.tsx b/apps/app/components/core/views/list-view/single-list.tsx index bdad9d012b2..03ef7772714 100644 --- a/apps/app/components/core/views/list-view/single-list.tsx +++ b/apps/app/components/core/views/list-view/single-list.tsx @@ -97,7 +97,7 @@ export const SingleList: React.FC = ({ case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; - title = member?.display_name ?? ""; + title = member ? member.display_name : "None"; break; } @@ -141,7 +141,7 @@ export const SingleList: React.FC = ({ case "assignees": case "created_by": const member = members?.find((member) => member.member.id === groupTitle)?.member; - icon = ; + icon = member ? : <>; break; }