diff --git a/packages/types/src/issues.d.ts b/packages/types/src/issues.d.ts
index a630d0ba20..fc7c14ed81 100644
--- a/packages/types/src/issues.d.ts
+++ b/packages/types/src/issues.d.ts
@@ -220,6 +220,11 @@ export type GroupByColumnTypes =
| "created_by"
| "team_project";
+type TGetColumns = {
+ isWorkspaceLevel?: boolean;
+ projectId?: string;
+};
+
export interface IGroupByColumn {
id: string;
name: string;
diff --git a/web/ce/components/issues/issue-layouts/utils.tsx b/web/ce/components/issues/issue-layouts/utils.tsx
index 1c0eed5543..62c8b35e64 100644
--- a/web/ce/components/issues/issue-layouts/utils.tsx
+++ b/web/ce/components/issues/issue-layouts/utils.tsx
@@ -13,7 +13,7 @@ import {
Users,
} from "lucide-react";
// types
-import { IGroupByColumn, IIssueDisplayProperties, TSpreadsheetColumn } from "@plane/types";
+import { IGroupByColumn, IIssueDisplayProperties, TGetColumns, TSpreadsheetColumn } from "@plane/types";
import { DiceIcon, DoubleCircleIcon, ISvgIcons } from "@plane/ui";
// components
import {
@@ -32,6 +32,36 @@ import {
SpreadsheetSubIssueColumn,
SpreadsheetUpdatedOnColumn,
} from "@/components/issues/issue-layouts/spreadsheet";
+// store
+import { store } from "@/lib/store-context";
+
+export type TGetScopeMemberIdsResult = {
+ memberIds: string[];
+ includeNone: boolean;
+};
+
+export const getScopeMemberIds = ({ isWorkspaceLevel, projectId }: TGetColumns): TGetScopeMemberIdsResult => {
+ // store values
+ const { workspaceMemberIds } = store.memberRoot.workspace;
+ const { projectMemberIds } = store.memberRoot.project;
+ // derived values
+ const memberIds = workspaceMemberIds;
+
+ if (isWorkspaceLevel) {
+ return { memberIds: memberIds ?? [], includeNone: true };
+ }
+
+ if (projectId || (projectMemberIds && projectMemberIds.length > 0)) {
+ const { getProjectMemberIds } = store.memberRoot.project;
+ const _projectMemberIds = projectId ? getProjectMemberIds(projectId, false) : projectMemberIds;
+ return {
+ memberIds: _projectMemberIds ?? [],
+ includeNone: true,
+ };
+ }
+
+ return { memberIds: [], includeNone: true };
+};
export const getTeamProjectColumns = (): IGroupByColumn[] | undefined => undefined;
diff --git a/web/core/components/issues/issue-layouts/utils.tsx b/web/core/components/issues/issue-layouts/utils.tsx
index f16bdcc49d..510fbf5a6e 100644
--- a/web/core/components/issues/issue-layouts/utils.tsx
+++ b/web/core/components/issues/issue-layouts/utils.tsx
@@ -2,7 +2,6 @@
import { CSSProperties, FC } from "react";
import { extractInstruction } from "@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item";
-import { isEmpty } from "lodash";
import clone from "lodash/clone";
import concat from "lodash/concat";
import isEqual from "lodash/isEqual";
@@ -27,6 +26,7 @@ import {
TGroupedIssues,
IWorkspaceView,
IIssueDisplayFilterOptions,
+ TGetColumns,
} from "@plane/types";
// plane ui
import { Avatar, CycleGroupIcon, DiceIcon, ISvgIcons, PriorityIcon, StateGroupIcon } from "@plane/ui";
@@ -37,7 +37,11 @@ import { Logo } from "@/components/common";
// store
import { store } from "@/lib/store-context";
// plane web store
-import { getTeamProjectColumns, SpreadSheetPropertyIconMap } from "@/plane-web/components/issues/issue-layouts/utils";
+import {
+ getScopeMemberIds,
+ getTeamProjectColumns,
+ SpreadSheetPropertyIconMap,
+} from "@/plane-web/components/issues/issue-layouts/utils";
// store
import { ISSUE_FILTER_DEFAULT_DATA } from "@/store/issue/helpers/base-issues.store";
import { DEFAULT_DISPLAY_PROPERTIES } from "@/store/issue/issue-details/sub_issues_filter.store";
@@ -60,13 +64,16 @@ export type IssueUpdates = {
};
};
-type TGetColumns = {
- isWorkspaceLevel?: boolean;
- projectId?: string;
-};
-
export const isWorkspaceLevel = (type: EIssuesStoreType) =>
- [EIssuesStoreType.PROFILE, EIssuesStoreType.GLOBAL].includes(type) ? true : false;
+ [
+ EIssuesStoreType.PROFILE,
+ EIssuesStoreType.GLOBAL,
+ EIssuesStoreType.TEAM,
+ EIssuesStoreType.TEAM_VIEW,
+ EIssuesStoreType.PROJECT_VIEW,
+ ].includes(type)
+ ? true
+ : false;
type TGetGroupByColumns = {
groupBy: GroupByColumnTypes | null;
@@ -264,40 +271,28 @@ const getLabelsColumns = ({ isWorkspaceLevel }: TGetColumns): IGroupByColumn[] =
};
const getAssigneeColumns = ({ isWorkspaceLevel, projectId }: TGetColumns): IGroupByColumn[] | undefined => {
+ // store values
+ const { getUserDetails } = store.memberRoot;
+ // derived values
+ const { memberIds, includeNone } = getScopeMemberIds({ isWorkspaceLevel, projectId });
const assigneeColumns: IGroupByColumn[] = [];
- const {
- project: { projectMemberIds, getProjectMemberIds },
- getUserDetails,
- } = store.memberRoot;
- // if workspace level
- if (isWorkspaceLevel) {
- const { workspaceMemberIds } = store.memberRoot.workspace;
- if (!workspaceMemberIds) return;
- workspaceMemberIds.forEach((memberId) => {
- const member = getUserDetails(memberId);
- assigneeColumns.push({
- id: memberId,
- name: member?.display_name || "",
- icon: ,
- payload: { assignee_ids: [memberId] },
- });
- });
- } else {
- // if project level
- const _projectMemberIds = projectId ? getProjectMemberIds(projectId, false) : projectMemberIds;
- if (!_projectMemberIds) return;
- // Map project member ids to group by assignee columns
- _projectMemberIds.forEach((memberId) => {
- const member = getUserDetails(memberId);
- assigneeColumns.push({
- id: memberId,
- name: member?.display_name || "",
- icon: ,
- payload: { assignee_ids: [memberId] },
- });
+
+ if (!memberIds) return [];
+
+ memberIds.forEach((memberId) => {
+ const member = getUserDetails(memberId);
+ if (!member) return;
+ assigneeColumns.push({
+ id: memberId,
+ name: member?.display_name || "",
+ icon: ,
+ payload: { assignee_ids: [memberId] },
});
+ });
+ if (includeNone) {
+ assigneeColumns.push({ id: "None", name: "None", icon: , payload: {} });
}
- assigneeColumns.push({ id: "None", name: "None", icon: , payload: {} });
+
return assigneeColumns;
};