Skip to content

Commit 51c2ea6

Browse files
fix: cmd-k project level action in work item detail page (#6637)
1 parent 64752de commit 51c2ea6

File tree

2 files changed

+47
-22
lines changed

2 files changed

+47
-22
lines changed

web/ce/components/command-palette/modals/issue-level.tsx

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { FC } from "react";
12
import { observer } from "mobx-react";
23
import { useParams, usePathname } from "next/navigation";
3-
import useSWR from "swr";
44
// components
55
import { BulkDeleteIssuesModal } from "@/components/core";
66
import { CreateUpdateIssueModal, DeleteIssueModal } from "@/components/issues";
@@ -10,17 +10,25 @@ import { useCommandPalette, useIssueDetail, useUser } from "@/hooks/store";
1010
import { useAppRouter } from "@/hooks/use-app-router";
1111
import { useIssuesStore } from "@/hooks/use-issue-layout-store";
1212

13-
export const IssueLevelModals = observer(() => {
13+
type Props = {
14+
projectId: string | undefined;
15+
issueId: string | undefined;
16+
};
17+
18+
export const IssueLevelModals: FC<Props> = observer((props) => {
19+
const { projectId, issueId } = props;
1420
// router
1521
const pathname = usePathname();
16-
const { workspaceSlug, projectId: paramsProjectId, workItem, cycleId, moduleId } = useParams();
22+
const { workspaceSlug, cycleId, moduleId } = useParams();
1723
const router = useAppRouter();
1824
// store hooks
1925
const { data: currentUser } = useUser();
26+
const {
27+
issue: { getIssueById },
28+
} = useIssueDetail();
2029
const {
2130
issues: { removeIssue },
2231
} = useIssuesStore();
23-
const { fetchIssueWithIdentifier } = useIssueDetail();
2432
const {
2533
isCreateIssueModalOpen,
2634
toggleCreateIssueModal,
@@ -30,21 +38,9 @@ export const IssueLevelModals = observer(() => {
3038
toggleBulkDeleteIssueModal,
3139
} = useCommandPalette();
3240
// derived values
41+
const issueDetails = issueId ? getIssueById(issueId) : undefined;
3342
const isDraftIssue = pathname?.includes("draft-issues") || false;
3443

35-
const projectIdentifier = workItem?.toString().split("-")[0];
36-
const sequence_id = workItem?.toString().split("-")[1];
37-
38-
const { data: issueDetails } = useSWR(
39-
workspaceSlug && workItem ? `ISSUE_DETAIL_${workspaceSlug}_${projectIdentifier}_${sequence_id}` : null,
40-
workspaceSlug && workItem
41-
? () => fetchIssueWithIdentifier(workspaceSlug.toString(), projectIdentifier, sequence_id)
42-
: null
43-
);
44-
45-
const issueId = issueDetails?.id;
46-
const projectId = paramsProjectId ?? issueDetails?.project_id;
47-
4844
return (
4945
<>
5046
<CreateUpdateIssueModal

web/core/components/command-palette/command-palette.tsx

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import React, { useCallback, useEffect, FC, useMemo } from "react";
44
import { observer } from "mobx-react";
55
import { useParams } from "next/navigation";
6+
import useSWR from "swr";
67
// ui
78
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
89
import { TOAST_TYPE, setToast } from "@plane/ui";
@@ -11,7 +12,14 @@ import { CommandModal, ShortcutsModal } from "@/components/command-palette";
1112
// helpers
1213
import { copyTextToClipboard } from "@/helpers/string.helper";
1314
// hooks
14-
import { useEventTracker, useUser, useAppTheme, useCommandPalette, useUserPermissions } from "@/hooks/store";
15+
import {
16+
useEventTracker,
17+
useUser,
18+
useAppTheme,
19+
useCommandPalette,
20+
useUserPermissions,
21+
useIssueDetail,
22+
} from "@/hooks/store";
1523
import { usePlatformOS } from "@/hooks/use-platform-os";
1624
// plane web components
1725
import {
@@ -30,8 +38,9 @@ import {
3038

3139
export const CommandPalette: FC = observer(() => {
3240
// router params
33-
const { workspaceSlug, projectId, workItem } = useParams();
41+
const { workspaceSlug, projectId: paramsProjectId, workItem } = useParams();
3442
// store hooks
43+
const { fetchIssueWithIdentifier } = useIssueDetail();
3544
const { toggleSidebar } = useAppTheme();
3645
const { setTrackElement } = useEventTracker();
3746
const { platform } = usePlatformOS();
@@ -40,15 +49,35 @@ export const CommandPalette: FC = observer(() => {
4049
const { allowPermissions } = useUserPermissions();
4150

4251
// derived values
52+
const projectIdentifier = workItem?.toString().split("-")[0];
53+
const sequence_id = workItem?.toString().split("-")[1];
54+
55+
const { data: issueDetails } = useSWR(
56+
workspaceSlug && workItem ? `ISSUE_DETAIL_${workspaceSlug}_${projectIdentifier}_${sequence_id}` : null,
57+
workspaceSlug && workItem
58+
? () => fetchIssueWithIdentifier(workspaceSlug.toString(), projectIdentifier, sequence_id)
59+
: null
60+
);
61+
62+
const issueId = issueDetails?.id;
63+
const projectId = paramsProjectId?.toString() ?? issueDetails?.project_id;
64+
4365
const canPerformWorkspaceMemberActions = allowPermissions(
4466
[EUserPermissions.ADMIN, EUserPermissions.MEMBER],
4567
EUserPermissionsLevel.WORKSPACE
4668
);
4769
const canPerformProjectMemberActions = allowPermissions(
4870
[EUserPermissions.ADMIN, EUserPermissions.MEMBER],
49-
EUserPermissionsLevel.PROJECT
71+
EUserPermissionsLevel.PROJECT,
72+
workspaceSlug?.toString(),
73+
projectId
74+
);
75+
const canPerformProjectAdminActions = allowPermissions(
76+
[EUserPermissions.ADMIN],
77+
EUserPermissionsLevel.PROJECT,
78+
workspaceSlug?.toString(),
79+
projectId
5080
);
51-
const canPerformProjectAdminActions = allowPermissions([EUserPermissions.ADMIN], EUserPermissionsLevel.PROJECT);
5281

5382
const copyIssueUrlToClipboard = useCallback(() => {
5483
if (!workItem) return;
@@ -236,7 +265,7 @@ export const CommandPalette: FC = observer(() => {
236265
{workspaceSlug && projectId && (
237266
<ProjectLevelModals workspaceSlug={workspaceSlug.toString()} projectId={projectId.toString()} />
238267
)}
239-
<IssueLevelModals />
268+
<IssueLevelModals projectId={projectId} issueId={issueId} />
240269
<CommandModal />
241270
</>
242271
);

0 commit comments

Comments
 (0)