[WEB-4634]chore: refactor for work items store (#7538)

* chore: refactor for work items store

* chore: updated conditions order
This commit is contained in:
Vamsi Krishna 2025-08-06 22:44:33 +05:30 committed by GitHub
parent 21c59692f9
commit 9de5b1a009
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 90 additions and 7 deletions

View file

@ -0,0 +1,3 @@
import { observer } from "mobx-react";
export const TeamProjectWorkItemEmptyState: React.FC = observer(() => <></>);

View file

@ -13,3 +13,10 @@ export const useTeamViewIssueActions: () => IssueActions = () => ({
removeIssue: () => Promise.resolve(undefined), removeIssue: () => Promise.resolve(undefined),
updateFilters: () => 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),
});

View file

@ -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);
}
}

View file

@ -0,0 +1,2 @@
export * from "./filter.store";
export * from "./issue.store";

View file

@ -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);
}
}

View file

@ -1,6 +1,7 @@
// plane web components // plane web components
import { EIssuesStoreType } from "@plane/types"; import { EIssuesStoreType } from "@plane/types";
import { TeamEmptyState, TeamViewEmptyState } from "@/plane-web/components/issues/issue-layouts/empty-states"; 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 // components
import { ProjectArchivedEmptyState } from "./archived-issues"; import { ProjectArchivedEmptyState } from "./archived-issues";
import { CycleEmptyState } from "./cycle"; import { CycleEmptyState } from "./cycle";
@ -40,6 +41,8 @@ export const IssueLayoutEmptyState = (props: Props) => {
return <TeamEmptyState />; return <TeamEmptyState />;
case EIssuesStoreType.TEAM_VIEW: case EIssuesStoreType.TEAM_VIEW:
return <TeamViewEmptyState />; return <TeamViewEmptyState />;
case EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS:
return <TeamProjectWorkItemEmptyState />;
default: default:
return null; return null;
} }

View file

@ -6,6 +6,7 @@ import { StoreContext } from "@/lib/store-context";
import { IProjectEpics, IProjectEpicsFilter } from "@/plane-web/store/issue/epic"; import { IProjectEpics, IProjectEpicsFilter } from "@/plane-web/store/issue/epic";
// types // types
import { ITeamIssues, ITeamIssuesFilter } from "@/plane-web/store/issue/team"; 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 { ITeamViewIssues, ITeamViewIssuesFilter } from "@/plane-web/store/issue/team-views";
import { IWorkspaceIssues } from "@/plane-web/store/issue/workspace/issue.store"; import { IWorkspaceIssues } from "@/plane-web/store/issue/workspace/issue.store";
import { IArchivedIssues, IArchivedIssuesFilter } from "@/store/issue/archived"; import { IArchivedIssues, IArchivedIssuesFilter } from "@/store/issue/archived";
@ -76,6 +77,10 @@ export type TStoreIssues = {
issues: IProjectEpics; issues: IProjectEpics;
issuesFilter: IProjectEpicsFilter; issuesFilter: IProjectEpicsFilter;
}; };
[EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS]: defaultIssueStore & {
issues: ITeamProjectWorkItems;
issuesFilter: ITeamProjectWorkItemsFilter;
};
}; };
export const useIssues = <T extends EIssuesStoreType>(storeType?: T): TStoreIssues[T] => { export const useIssues = <T extends EIssuesStoreType>(storeType?: T): TStoreIssues[T] => {
@ -147,6 +152,11 @@ export const useIssues = <T extends EIssuesStoreType>(storeType?: T): TStoreIssu
issues: context.issue.projectEpics, issues: context.issue.projectEpics,
issuesFilter: context.issue.projectEpicsFilter, issuesFilter: context.issue.projectEpicsFilter,
}) as TStoreIssues[T]; }) as TStoreIssues[T];
case EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS:
return merge(defaultStore, {
issues: context.issue.teamProjectWorkItems,
issuesFilter: context.issue.teamProjectWorkItemsFilter,
}) as TStoreIssues[T];
default: default:
return merge(defaultStore, { return merge(defaultStore, {
issues: context.issue.projectIssues, issues: context.issue.projectIssues,

View file

@ -19,7 +19,8 @@ type DNDStoreType =
| EIssuesStoreType.WORKSPACE_DRAFT | EIssuesStoreType.WORKSPACE_DRAFT
| EIssuesStoreType.TEAM | EIssuesStoreType.TEAM
| EIssuesStoreType.TEAM_VIEW | EIssuesStoreType.TEAM_VIEW
| EIssuesStoreType.EPIC; | EIssuesStoreType.EPIC
| EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS;
export const useGroupIssuesDragNDrop = ( export const useGroupIssuesDragNDrop = (
storeType: DNDStoreType, storeType: DNDStoreType,

View file

@ -17,6 +17,10 @@ export const useIssueStoreType = () => {
if (userId) return EIssuesStoreType.PROFILE; 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 (viewId) return EIssuesStoreType.PROJECT_VIEW;
if (cycleId) return EIssuesStoreType.CYCLE; if (cycleId) return EIssuesStoreType.CYCLE;
@ -29,8 +33,6 @@ export const useIssueStoreType = () => {
if (teamspaceId) return EIssuesStoreType.TEAM; if (teamspaceId) return EIssuesStoreType.TEAM;
if (teamspaceId && viewId) return EIssuesStoreType.TEAM_VIEW;
return EIssuesStoreType.PROJECT; return EIssuesStoreType.PROJECT;
}; };

View file

@ -14,7 +14,11 @@ import {
TLoader, TLoader,
TProfileViews, TProfileViews,
} from "@plane/types"; } 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"; import { useIssues } from "./store";
export interface IssueActions { export interface IssueActions {
@ -51,6 +55,7 @@ export const useIssuesActions = (storeType: EIssuesStoreType): IssueActions => {
const draftIssueActions = useDraftIssueActions(); const draftIssueActions = useDraftIssueActions();
const archivedIssueActions = useArchivedIssueActions(); const archivedIssueActions = useArchivedIssueActions();
const workspaceDraftIssueActions = useWorkspaceDraftIssueActions(); const workspaceDraftIssueActions = useWorkspaceDraftIssueActions();
const teamProjectWorkItemsActions = useTeamProjectWorkItemsActions();
switch (storeType) { switch (storeType) {
case EIssuesStoreType.TEAM_VIEW: case EIssuesStoreType.TEAM_VIEW:
@ -76,6 +81,8 @@ export const useIssuesActions = (storeType: EIssuesStoreType): IssueActions => {
return workspaceDraftIssueActions; return workspaceDraftIssueActions;
case EIssuesStoreType.EPIC: case EIssuesStoreType.EPIC:
return projectEpicsActions; return projectEpicsActions;
case EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS:
return teamProjectWorkItemsActions;
case EIssuesStoreType.PROJECT: case EIssuesStoreType.PROJECT:
default: default:
return projectIssueActions; return projectIssueActions;

View file

@ -15,6 +15,11 @@ import {
import { IProjectEpics, IProjectEpicsFilter, ProjectEpics, ProjectEpicsFilter } from "@/plane-web/store/issue/epic"; import { IProjectEpics, IProjectEpicsFilter, ProjectEpics, ProjectEpicsFilter } from "@/plane-web/store/issue/epic";
import { IIssueDetail, IssueDetail } from "@/plane-web/store/issue/issue-details/root.store"; import { IIssueDetail, IssueDetail } from "@/plane-web/store/issue/issue-details/root.store";
import { ITeamIssuesFilter, ITeamIssues, TeamIssues, TeamIssuesFilter } from "@/plane-web/store/issue/team"; 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 { import {
ITeamViewIssues, ITeamViewIssues,
ITeamViewIssuesFilter, ITeamViewIssuesFilter,
@ -101,6 +106,9 @@ export interface IIssueRootStore {
teamViewIssuesFilter: ITeamViewIssuesFilter; teamViewIssuesFilter: ITeamViewIssuesFilter;
teamViewIssues: ITeamViewIssues; teamViewIssues: ITeamViewIssues;
teamProjectWorkItemsFilter: ITeamProjectWorkItemsFilter;
teamProjectWorkItems: ITeamProjectWorkItems;
projectViewIssuesFilter: IProjectViewIssuesFilter; projectViewIssuesFilter: IProjectViewIssuesFilter;
projectViewIssues: IProjectViewIssues; projectViewIssues: IProjectViewIssues;
@ -172,6 +180,9 @@ export class IssueRootStore implements IIssueRootStore {
projectViewIssuesFilter: IProjectViewIssuesFilter; projectViewIssuesFilter: IProjectViewIssuesFilter;
projectViewIssues: IProjectViewIssues; projectViewIssues: IProjectViewIssues;
teamProjectWorkItemsFilter: ITeamProjectWorkItemsFilter;
teamProjectWorkItems: ITeamProjectWorkItems;
archivedIssuesFilter: IArchivedIssuesFilter; archivedIssuesFilter: IArchivedIssuesFilter;
archivedIssues: IArchivedIssues; archivedIssues: IArchivedIssues;
@ -263,6 +274,9 @@ export class IssueRootStore implements IIssueRootStore {
this.projectViewIssuesFilter = new ProjectViewIssuesFilter(this); this.projectViewIssuesFilter = new ProjectViewIssuesFilter(this);
this.projectViewIssues = new ProjectViewIssues(this, this.projectViewIssuesFilter); 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.archivedIssuesFilter = new ArchivedIssuesFilter(this);
this.archivedIssues = new ArchivedIssues(this, this.archivedIssuesFilter); this.archivedIssues = new ArchivedIssues(this, this.archivedIssuesFilter);

View file

@ -101,7 +101,8 @@ export type TCreateModalStoreTypes =
| EIssuesStoreType.PROFILE | EIssuesStoreType.PROFILE
| EIssuesStoreType.CYCLE | EIssuesStoreType.CYCLE
| EIssuesStoreType.MODULE | EIssuesStoreType.MODULE
| EIssuesStoreType.EPIC; | EIssuesStoreType.EPIC
| EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS;
export const ISSUE_GROUP_BY_OPTIONS: { export const ISSUE_GROUP_BY_OPTIONS: {
key: TIssueGroupByOptions; key: TIssueGroupByOptions;

View file

@ -33,6 +33,7 @@ export enum EIssuesStoreType {
DEFAULT = "DEFAULT", DEFAULT = "DEFAULT",
WORKSPACE_DRAFT = "WORKSPACE_DRAFT", WORKSPACE_DRAFT = "WORKSPACE_DRAFT",
EPIC = "EPIC", EPIC = "EPIC",
TEAM_PROJECT_WORK_ITEMS = "TEAM_PROJECT_WORK_ITEMS",
} }
export type TBaseIssue = { export type TBaseIssue = {

View file

@ -102,7 +102,14 @@ export const handleIssuesMutation: THandleIssuesMutation = (
export const handleIssueQueryParamsByLayout = ( export const handleIssueQueryParamsByLayout = (
layout: EIssueLayoutTypes | undefined, 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 => { ): TIssueParams[] | null => {
const queryParams: TIssueParams[] = []; const queryParams: TIssueParams[] = [];