[WEB-4634]chore: refactor for work items store (#7538)
* chore: refactor for work items store * chore: updated conditions order
This commit is contained in:
parent
21c59692f9
commit
9de5b1a009
15 changed files with 90 additions and 7 deletions
|
|
@ -0,0 +1,3 @@
|
||||||
|
import { observer } from "mobx-react";
|
||||||
|
|
||||||
|
export const TeamProjectWorkItemEmptyState: React.FC = observer(() => <></>);
|
||||||
|
|
@ -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),
|
||||||
|
});
|
||||||
12
apps/web/ce/store/issue/team-project/filter.store.ts
Normal file
12
apps/web/ce/store/issue/team-project/filter.store.ts
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
2
apps/web/ce/store/issue/team-project/index.ts
Normal file
2
apps/web/ce/store/issue/team-project/index.ts
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
export * from "./filter.store";
|
||||||
|
export * from "./issue.store";
|
||||||
13
apps/web/ce/store/issue/team-project/issue.store.ts
Normal file
13
apps/web/ce/store/issue/team-project/issue.store.ts
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
|
|
@ -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[] = [];
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue