diff --git a/apps/web/ce/components/issues/issue-layouts/empty-states/index.ts b/apps/web/ce/components/issues/issue-layouts/empty-states/index.ts
index 319b4c68440..9b19efab997 100644
--- a/apps/web/ce/components/issues/issue-layouts/empty-states/index.ts
+++ b/apps/web/ce/components/issues/issue-layouts/empty-states/index.ts
@@ -1,2 +1,2 @@
export * from "./team-issues";
-export * from "./team-view-issues";
+export * from "./team-view-issues";
\ No newline at end of file
diff --git a/apps/web/ce/components/issues/issue-layouts/empty-states/team-project.tsx b/apps/web/ce/components/issues/issue-layouts/empty-states/team-project.tsx
new file mode 100644
index 00000000000..95adbf9a053
--- /dev/null
+++ b/apps/web/ce/components/issues/issue-layouts/empty-states/team-project.tsx
@@ -0,0 +1,3 @@
+import { observer } from "mobx-react";
+
+export const TeamProjectWorkItemEmptyState: React.FC = observer(() => <>>);
diff --git a/apps/web/ce/helpers/issue-action-helper.ts b/apps/web/ce/helpers/issue-action-helper.ts
index b1644e2aa26..42aca8a9e38 100644
--- a/apps/web/ce/helpers/issue-action-helper.ts
+++ b/apps/web/ce/helpers/issue-action-helper.ts
@@ -13,3 +13,10 @@ export const useTeamViewIssueActions: () => IssueActions = () => ({
removeIssue: () => Promise.resolve(undefined),
updateFilters: () => Promise.resolve(undefined),
});
+
+export const useTeamProjectWorkItemsActions: () => IssueActions = () => ({
+ fetchIssues: () => Promise.resolve(undefined),
+ fetchNextIssues: () => Promise.resolve(undefined),
+ removeIssue: () => Promise.resolve(undefined),
+ updateFilters: () => Promise.resolve(undefined),
+});
\ No newline at end of file
diff --git a/apps/web/ce/store/issue/team-project/filter.store.ts b/apps/web/ce/store/issue/team-project/filter.store.ts
new file mode 100644
index 00000000000..7905325bcb7
--- /dev/null
+++ b/apps/web/ce/store/issue/team-project/filter.store.ts
@@ -0,0 +1,12 @@
+import { IProjectIssuesFilter, ProjectIssuesFilter } from "@/store/issue/project";
+import { IIssueRootStore } from "@/store/issue/root.store";
+
+// @ts-nocheck - This class will never be used, extending similar class to avoid type errors
+export type ITeamProjectWorkItemsFilter = IProjectIssuesFilter;
+
+// @ts-nocheck - This class will never be used, extending similar class to avoid type errors
+export class TeamProjectWorkItemsFilter extends ProjectIssuesFilter implements ITeamProjectWorkItemsFilter {
+ constructor(_rootStore: IIssueRootStore) {
+ super(_rootStore);
+ }
+}
diff --git a/apps/web/ce/store/issue/team-project/index.ts b/apps/web/ce/store/issue/team-project/index.ts
new file mode 100644
index 00000000000..904aa8e1de9
--- /dev/null
+++ b/apps/web/ce/store/issue/team-project/index.ts
@@ -0,0 +1,2 @@
+export * from "./filter.store";
+export * from "./issue.store";
\ No newline at end of file
diff --git a/apps/web/ce/store/issue/team-project/issue.store.ts b/apps/web/ce/store/issue/team-project/issue.store.ts
new file mode 100644
index 00000000000..2b2d408b68e
--- /dev/null
+++ b/apps/web/ce/store/issue/team-project/issue.store.ts
@@ -0,0 +1,13 @@
+import { IProjectIssues, ProjectIssues } from "@/store/issue/project";
+import { IIssueRootStore } from "@/store/issue/root.store";
+import { ITeamProjectWorkItemsFilter } from "./filter.store";
+
+// @ts-nocheck - This class will never be used, extending similar class to avoid type errors
+export type ITeamProjectWorkItems = IProjectIssues;
+
+// @ts-nocheck - This class will never be used, extending similar class to avoid type errors
+export class TeamProjectWorkItems extends ProjectIssues implements ITeamProjectWorkItems {
+ constructor(_rootStore: IIssueRootStore, teamProjectWorkItemsFilterStore: ITeamProjectWorkItemsFilter) {
+ super(_rootStore, teamProjectWorkItemsFilterStore);
+ }
+}
diff --git a/apps/web/core/components/issues/issue-layouts/empty-states/index.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/index.tsx
index e51fa932d77..1db3a3d8d11 100644
--- a/apps/web/core/components/issues/issue-layouts/empty-states/index.tsx
+++ b/apps/web/core/components/issues/issue-layouts/empty-states/index.tsx
@@ -1,6 +1,7 @@
// plane web components
import { EIssuesStoreType } from "@plane/types";
import { TeamEmptyState, TeamViewEmptyState } from "@/plane-web/components/issues/issue-layouts/empty-states";
+import { TeamProjectWorkItemEmptyState } from "@/plane-web/components/issues/issue-layouts/empty-states/team-project";
// components
import { ProjectArchivedEmptyState } from "./archived-issues";
import { CycleEmptyState } from "./cycle";
@@ -40,6 +41,8 @@ export const IssueLayoutEmptyState = (props: Props) => {
return ;
case EIssuesStoreType.TEAM_VIEW:
return ;
+ case EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS:
+ return ;
default:
return null;
}
diff --git a/apps/web/core/hooks/store/use-issues.ts b/apps/web/core/hooks/store/use-issues.ts
index 4ea9e54bf35..6c99a5f111d 100644
--- a/apps/web/core/hooks/store/use-issues.ts
+++ b/apps/web/core/hooks/store/use-issues.ts
@@ -6,6 +6,7 @@ import { StoreContext } from "@/lib/store-context";
import { IProjectEpics, IProjectEpicsFilter } from "@/plane-web/store/issue/epic";
// types
import { ITeamIssues, ITeamIssuesFilter } from "@/plane-web/store/issue/team";
+import { ITeamProjectWorkItemsFilter, ITeamProjectWorkItems } from "@/plane-web/store/issue/team-project";
import { ITeamViewIssues, ITeamViewIssuesFilter } from "@/plane-web/store/issue/team-views";
import { IWorkspaceIssues } from "@/plane-web/store/issue/workspace/issue.store";
import { IArchivedIssues, IArchivedIssuesFilter } from "@/store/issue/archived";
@@ -76,6 +77,10 @@ export type TStoreIssues = {
issues: IProjectEpics;
issuesFilter: IProjectEpicsFilter;
};
+ [EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS]: defaultIssueStore & {
+ issues: ITeamProjectWorkItems;
+ issuesFilter: ITeamProjectWorkItemsFilter;
+ };
};
export const useIssues = (storeType?: T): TStoreIssues[T] => {
@@ -147,6 +152,11 @@ export const useIssues = (storeType?: T): TStoreIssu
issues: context.issue.projectEpics,
issuesFilter: context.issue.projectEpicsFilter,
}) as TStoreIssues[T];
+ case EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS:
+ return merge(defaultStore, {
+ issues: context.issue.teamProjectWorkItems,
+ issuesFilter: context.issue.teamProjectWorkItemsFilter,
+ }) as TStoreIssues[T];
default:
return merge(defaultStore, {
issues: context.issue.projectIssues,
diff --git a/apps/web/core/hooks/use-group-dragndrop.ts b/apps/web/core/hooks/use-group-dragndrop.ts
index e52d6ea9e83..75aa54b84f6 100644
--- a/apps/web/core/hooks/use-group-dragndrop.ts
+++ b/apps/web/core/hooks/use-group-dragndrop.ts
@@ -19,7 +19,8 @@ type DNDStoreType =
| EIssuesStoreType.WORKSPACE_DRAFT
| EIssuesStoreType.TEAM
| EIssuesStoreType.TEAM_VIEW
- | EIssuesStoreType.EPIC;
+ | EIssuesStoreType.EPIC
+ | EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS;
export const useGroupIssuesDragNDrop = (
storeType: DNDStoreType,
diff --git a/apps/web/core/hooks/use-issue-layout-store.ts b/apps/web/core/hooks/use-issue-layout-store.ts
index df419cec9d0..b2ecb57772f 100644
--- a/apps/web/core/hooks/use-issue-layout-store.ts
+++ b/apps/web/core/hooks/use-issue-layout-store.ts
@@ -17,6 +17,10 @@ export const useIssueStoreType = () => {
if (userId) return EIssuesStoreType.PROFILE;
+ if (teamspaceId && viewId) return EIssuesStoreType.TEAM_VIEW;
+
+ if (teamspaceId && projectId) return EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS;
+
if (viewId) return EIssuesStoreType.PROJECT_VIEW;
if (cycleId) return EIssuesStoreType.CYCLE;
@@ -29,8 +33,6 @@ export const useIssueStoreType = () => {
if (teamspaceId) return EIssuesStoreType.TEAM;
- if (teamspaceId && viewId) return EIssuesStoreType.TEAM_VIEW;
-
return EIssuesStoreType.PROJECT;
};
diff --git a/apps/web/core/hooks/use-issues-actions.tsx b/apps/web/core/hooks/use-issues-actions.tsx
index 848accc34c5..2c02d149d40 100644
--- a/apps/web/core/hooks/use-issues-actions.tsx
+++ b/apps/web/core/hooks/use-issues-actions.tsx
@@ -14,7 +14,11 @@ import {
TLoader,
TProfileViews,
} from "@plane/types";
-import { useTeamIssueActions, useTeamViewIssueActions } from "@/plane-web/helpers/issue-action-helper";
+import {
+ useTeamIssueActions,
+ useTeamViewIssueActions,
+ useTeamProjectWorkItemsActions,
+} from "@/plane-web/helpers/issue-action-helper";
import { useIssues } from "./store";
export interface IssueActions {
@@ -51,6 +55,7 @@ export const useIssuesActions = (storeType: EIssuesStoreType): IssueActions => {
const draftIssueActions = useDraftIssueActions();
const archivedIssueActions = useArchivedIssueActions();
const workspaceDraftIssueActions = useWorkspaceDraftIssueActions();
+ const teamProjectWorkItemsActions = useTeamProjectWorkItemsActions();
switch (storeType) {
case EIssuesStoreType.TEAM_VIEW:
@@ -76,6 +81,8 @@ export const useIssuesActions = (storeType: EIssuesStoreType): IssueActions => {
return workspaceDraftIssueActions;
case EIssuesStoreType.EPIC:
return projectEpicsActions;
+ case EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS:
+ return teamProjectWorkItemsActions;
case EIssuesStoreType.PROJECT:
default:
return projectIssueActions;
diff --git a/apps/web/core/store/issue/root.store.ts b/apps/web/core/store/issue/root.store.ts
index 5178f2cd54f..a43c7147211 100644
--- a/apps/web/core/store/issue/root.store.ts
+++ b/apps/web/core/store/issue/root.store.ts
@@ -15,6 +15,11 @@ import {
import { IProjectEpics, IProjectEpicsFilter, ProjectEpics, ProjectEpicsFilter } from "@/plane-web/store/issue/epic";
import { IIssueDetail, IssueDetail } from "@/plane-web/store/issue/issue-details/root.store";
import { ITeamIssuesFilter, ITeamIssues, TeamIssues, TeamIssuesFilter } from "@/plane-web/store/issue/team";
+import {
+ ITeamProjectWorkItemsFilter,
+ TeamProjectWorkItemsFilter,
+} from "@/plane-web/store/issue/team-project/filter.store";
+import { ITeamProjectWorkItems, TeamProjectWorkItems } from "@/plane-web/store/issue/team-project/issue.store";
import {
ITeamViewIssues,
ITeamViewIssuesFilter,
@@ -101,6 +106,9 @@ export interface IIssueRootStore {
teamViewIssuesFilter: ITeamViewIssuesFilter;
teamViewIssues: ITeamViewIssues;
+ teamProjectWorkItemsFilter: ITeamProjectWorkItemsFilter;
+ teamProjectWorkItems: ITeamProjectWorkItems;
+
projectViewIssuesFilter: IProjectViewIssuesFilter;
projectViewIssues: IProjectViewIssues;
@@ -172,6 +180,9 @@ export class IssueRootStore implements IIssueRootStore {
projectViewIssuesFilter: IProjectViewIssuesFilter;
projectViewIssues: IProjectViewIssues;
+ teamProjectWorkItemsFilter: ITeamProjectWorkItemsFilter;
+ teamProjectWorkItems: ITeamProjectWorkItems;
+
archivedIssuesFilter: IArchivedIssuesFilter;
archivedIssues: IArchivedIssues;
@@ -263,6 +274,9 @@ export class IssueRootStore implements IIssueRootStore {
this.projectViewIssuesFilter = new ProjectViewIssuesFilter(this);
this.projectViewIssues = new ProjectViewIssues(this, this.projectViewIssuesFilter);
+ this.teamProjectWorkItemsFilter = new TeamProjectWorkItemsFilter(this);
+ this.teamProjectWorkItems = new TeamProjectWorkItems(this, this.teamProjectWorkItemsFilter);
+
this.archivedIssuesFilter = new ArchivedIssuesFilter(this);
this.archivedIssues = new ArchivedIssues(this, this.archivedIssuesFilter);
diff --git a/packages/constants/src/issue/common.ts b/packages/constants/src/issue/common.ts
index b6fa8368ac4..665fa930ad9 100644
--- a/packages/constants/src/issue/common.ts
+++ b/packages/constants/src/issue/common.ts
@@ -101,7 +101,8 @@ export type TCreateModalStoreTypes =
| EIssuesStoreType.PROFILE
| EIssuesStoreType.CYCLE
| EIssuesStoreType.MODULE
- | EIssuesStoreType.EPIC;
+ | EIssuesStoreType.EPIC
+ | EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS;
export const ISSUE_GROUP_BY_OPTIONS: {
key: TIssueGroupByOptions;
diff --git a/packages/types/src/issues/issue.ts b/packages/types/src/issues/issue.ts
index dbcb9521818..33470b48298 100644
--- a/packages/types/src/issues/issue.ts
+++ b/packages/types/src/issues/issue.ts
@@ -33,6 +33,7 @@ export enum EIssuesStoreType {
DEFAULT = "DEFAULT",
WORKSPACE_DRAFT = "WORKSPACE_DRAFT",
EPIC = "EPIC",
+ TEAM_PROJECT_WORK_ITEMS = "TEAM_PROJECT_WORK_ITEMS",
}
export type TBaseIssue = {
diff --git a/packages/utils/src/work-item/base.ts b/packages/utils/src/work-item/base.ts
index 6cef74175ab..b16289c934b 100644
--- a/packages/utils/src/work-item/base.ts
+++ b/packages/utils/src/work-item/base.ts
@@ -102,7 +102,14 @@ export const handleIssuesMutation: THandleIssuesMutation = (
export const handleIssueQueryParamsByLayout = (
layout: EIssueLayoutTypes | undefined,
- viewType: "my_issues" | "issues" | "profile_issues" | "archived_issues" | "draft_issues" | "team_issues"
+ viewType:
+ | "my_issues"
+ | "issues"
+ | "profile_issues"
+ | "archived_issues"
+ | "draft_issues"
+ | "team_issues"
+ | "team_project_work_items"
): TIssueParams[] | null => {
const queryParams: TIssueParams[] = [];