[WEB-2388] dev: workspace draft issues (#5772)
* chore: workspace draft page added * chore: workspace draft issues services added * chore: workspace draft issue store added * chore: workspace draft issue filter store added * chore: issue rendering * conflicts: resolved merge conflicts * conflicts: handled draft issue store * chore: draft issue modal * chore: code optimisation * chore: ui changes * chore: workspace draft store and modal updated * chore: workspace draft issue component added * chore: updated store and workflow in draft issues * chore: updated issue draft store * chore: updated issue type cleanup in components * chore: code refactor * fix: build error * fix: quick actions * fix: update mutation * fix: create update modal * chore: commented project draft issue code --------- Co-authored-by: gurusainath <gurusainath007@gmail.com> Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
This commit is contained in:
parent
e9158f820f
commit
332d2d5c68
45 changed files with 1895 additions and 190 deletions
|
|
@ -31,3 +31,4 @@ export * from "./use-webhook";
|
|||
export * from "./use-workspace";
|
||||
export * from "./user";
|
||||
export * from "./use-transient";
|
||||
export * from "./workspace-draft";
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import { IProfileIssues, IProfileIssuesFilter } from "@/store/issue/profile";
|
|||
import { IProjectIssues, IProjectIssuesFilter } from "@/store/issue/project";
|
||||
import { IProjectViewIssues, IProjectViewIssuesFilter } from "@/store/issue/project-views";
|
||||
import { IWorkspaceIssues, IWorkspaceIssuesFilter } from "@/store/issue/workspace";
|
||||
import { IWorkspaceDraftIssues, IWorkspaceDraftIssuesFilter } from "@/store/issue/workspace-draft";
|
||||
// constants
|
||||
|
||||
type defaultIssueStore = {
|
||||
|
|
@ -24,6 +25,10 @@ export type TStoreIssues = {
|
|||
issues: IWorkspaceIssues;
|
||||
issuesFilter: IWorkspaceIssuesFilter;
|
||||
};
|
||||
[EIssuesStoreType.WORKSPACE_DRAFT]: defaultIssueStore & {
|
||||
issues: IWorkspaceDraftIssues;
|
||||
issuesFilter: IWorkspaceDraftIssuesFilter;
|
||||
};
|
||||
[EIssuesStoreType.PROFILE]: defaultIssueStore & {
|
||||
issues: IProfileIssues;
|
||||
issuesFilter: IProfileIssuesFilter;
|
||||
|
|
@ -72,6 +77,16 @@ export const useIssues = <T extends EIssuesStoreType>(storeType?: T): TStoreIssu
|
|||
issues: context.issue.workspaceIssues,
|
||||
issuesFilter: context.issue.workspaceIssuesFilter,
|
||||
}) as TStoreIssues[T];
|
||||
case EIssuesStoreType.WORKSPACE_DRAFT:
|
||||
return merge(defaultStore, {
|
||||
issues: context.issue.workspaceDraftIssues,
|
||||
issuesFilter: context.issue.workspaceDraftIssuesFilter,
|
||||
}) as TStoreIssues[T];
|
||||
case EIssuesStoreType.WORKSPACE_DRAFT:
|
||||
return merge(defaultStore, {
|
||||
issues: context.issue.workspaceDraftIssues,
|
||||
issuesFilter: context.issue.workspaceDraftIssuesFilter,
|
||||
}) as TStoreIssues[T];
|
||||
case EIssuesStoreType.PROFILE:
|
||||
return merge(defaultStore, {
|
||||
issues: context.issue.profileIssues,
|
||||
|
|
|
|||
2
web/core/hooks/store/workspace-draft/index.ts
Normal file
2
web/core/hooks/store/workspace-draft/index.ts
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
export * from "./use-workspace-draft-issue";
|
||||
export * from "./use-workspace-draft-issue-filters";
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import { useContext } from "react";
|
||||
// mobx store
|
||||
import { StoreContext } from "@/lib/store-context";
|
||||
// types
|
||||
import { IWorkspaceDraftIssues } from "@/store/issue/workspace-draft";
|
||||
|
||||
export const useWorkspaceDraftIssueFilters = (): IWorkspaceDraftIssues => {
|
||||
const context = useContext(StoreContext);
|
||||
if (context === undefined) throw new Error("useWorkspaceDraftIssueFilters must be used within StoreProvider");
|
||||
|
||||
return context.issue.workspaceDraftIssues;
|
||||
};
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import { useContext } from "react";
|
||||
// mobx store
|
||||
import { StoreContext } from "@/lib/store-context";
|
||||
// types
|
||||
import { IWorkspaceDraftIssues } from "@/store/issue/workspace-draft";
|
||||
|
||||
export const useWorkspaceDraftIssues = (): IWorkspaceDraftIssues => {
|
||||
const context = useContext(StoreContext);
|
||||
if (context === undefined) throw new Error("useWorkspaceDraftIssues must be used within StoreProvider");
|
||||
|
||||
return context.issue.workspaceDraftIssues;
|
||||
};
|
||||
|
|
@ -45,6 +45,7 @@ export const useIssuesActions = (storeType: EIssuesStoreType): IssueActions => {
|
|||
const profileIssueActions = useProfileIssueActions();
|
||||
const draftIssueActions = useDraftIssueActions();
|
||||
const archivedIssueActions = useArchivedIssueActions();
|
||||
const workspaceDraftIssueActions = useWorkspaceDraftIssueActions();
|
||||
|
||||
switch (storeType) {
|
||||
case EIssuesStoreType.PROJECT_VIEW:
|
||||
|
|
@ -61,6 +62,8 @@ export const useIssuesActions = (storeType: EIssuesStoreType): IssueActions => {
|
|||
return moduleIssueActions;
|
||||
case EIssuesStoreType.GLOBAL:
|
||||
return globalIssueActions;
|
||||
case EIssuesStoreType.WORKSPACE_DRAFT:
|
||||
return workspaceDraftIssueActions;
|
||||
case EIssuesStoreType.PROJECT:
|
||||
default:
|
||||
return projectIssueActions;
|
||||
|
|
@ -737,3 +740,80 @@ const useGlobalIssueActions = () => {
|
|||
[createIssue, updateIssue, removeIssue, updateFilters]
|
||||
);
|
||||
};
|
||||
|
||||
const useWorkspaceDraftIssueActions = () => {
|
||||
// router
|
||||
const { workspaceSlug: routerWorkspaceSlug, globalViewId: routerGlobalViewId } = useParams();
|
||||
const workspaceSlug = routerWorkspaceSlug?.toString();
|
||||
const globalViewId = routerGlobalViewId?.toString();
|
||||
// store hooks
|
||||
const { issues, issuesFilter } = useIssues(EIssuesStoreType.WORKSPACE_DRAFT);
|
||||
const fetchIssues = useCallback(
|
||||
async (loadType: TLoader, options: IssuePaginationOptions) => {
|
||||
if (!workspaceSlug) return;
|
||||
return issues.fetchIssues(workspaceSlug.toString(), loadType, options);
|
||||
},
|
||||
[workspaceSlug, issues]
|
||||
);
|
||||
|
||||
const fetchNextIssues = useCallback(async () => {
|
||||
if (!workspaceSlug) return;
|
||||
return issues.fetchNextIssues(workspaceSlug.toString());
|
||||
}, [workspaceSlug, issues]);
|
||||
|
||||
const createIssue = useCallback(
|
||||
async (projectId: string | undefined | null, data: Partial<TIssue>) => {
|
||||
if (!workspaceSlug || !projectId) return;
|
||||
return await issues.createWorkspaceDraftIssue(workspaceSlug, data);
|
||||
},
|
||||
[issues, workspaceSlug]
|
||||
);
|
||||
const updateIssue = useCallback(
|
||||
async (projectId: string | undefined | null, issueId: string, data: Partial<TIssue>) => {
|
||||
if (!workspaceSlug || !projectId) return;
|
||||
return await issues.updateWorkspaceDraftIssue(workspaceSlug, issueId, data);
|
||||
},
|
||||
[issues, workspaceSlug]
|
||||
);
|
||||
const removeIssue = useCallback(
|
||||
async (projectId: string | undefined | null, issueId: string) => {
|
||||
if (!workspaceSlug || !projectId) return;
|
||||
return await issues.deleteWorkspaceDraftIssue(workspaceSlug, issueId);
|
||||
},
|
||||
[issues, workspaceSlug]
|
||||
);
|
||||
|
||||
const moveToIssue = useCallback(
|
||||
async (workspaceSlug: string, issueId: string, data: Partial<TIssue>) => {
|
||||
if (!workspaceSlug || !issueId || !data) return;
|
||||
return await issues.moveToIssues(workspaceSlug, issueId, data);
|
||||
},
|
||||
[issues]
|
||||
);
|
||||
|
||||
const updateFilters = useCallback(
|
||||
async (
|
||||
projectId: string,
|
||||
filterType: EIssueFilterType,
|
||||
filters: IIssueFilterOptions | IIssueDisplayFilterOptions | IIssueDisplayProperties | TIssueKanbanFilters
|
||||
) => {
|
||||
filters = filters as IIssueFilterOptions | IIssueDisplayFilterOptions | IIssueDisplayProperties;
|
||||
if (!globalViewId || !workspaceSlug) return;
|
||||
return await issuesFilter.updateFilters(workspaceSlug, filterType, filters);
|
||||
},
|
||||
[globalViewId, workspaceSlug, issuesFilter]
|
||||
);
|
||||
|
||||
return useMemo(
|
||||
() => ({
|
||||
fetchIssues,
|
||||
fetchNextIssues,
|
||||
createIssue,
|
||||
updateIssue,
|
||||
removeIssue,
|
||||
updateFilters,
|
||||
moveToIssue,
|
||||
}),
|
||||
[fetchIssues, fetchNextIssues, createIssue, updateIssue, removeIssue, updateFilters, moveToIssue]
|
||||
);
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue