From 37df0bcdd89276bd98f2c08e4a1922835673e244 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 18 Dec 2023 14:47:40 +0530 Subject: [PATCH] fix: issue with peek view properties not editable and options not being shown in `all workspace issues`. (#3100) * fix: issue with peek view properties not editable and options not being shown in `all workspace issues`.. * refactor: use projectId from props instead of router query. fix: issue in add to module/ cycle not working properly. --- .../issues/peek-overview/properties.tsx | 20 ++++++++++++++--- web/components/issues/peek-overview/root.tsx | 5 +++-- .../issues/sidebar-select/assignee.tsx | 5 +++-- .../issues/sidebar-select/cycle.tsx | 5 ++++- .../issues/sidebar-select/label.tsx | 5 +++-- .../issues/sidebar-select/module.tsx | 22 ++++++++++++++----- .../issues/sidebar-select/parent.tsx | 5 +++-- .../issues/sidebar-select/state.tsx | 5 +++-- web/components/issues/sidebar.tsx | 6 +++++ 9 files changed, 59 insertions(+), 19 deletions(-) diff --git a/web/components/issues/peek-overview/properties.tsx b/web/components/issues/peek-overview/properties.tsx index 25aaf2f88..7f3204196 100644 --- a/web/components/issues/peek-overview/properties.tsx +++ b/web/components/issues/peek-overview/properties.tsx @@ -47,7 +47,7 @@ export const PeekOverviewProperties: FC = observer((pro } = useMobxStore(); const router = useRouter(); - const { workspaceSlug, projectId } = router.query; + const { workspaceSlug, peekProjectId: projectId } = router.query; const handleState = (_state: string) => { issueUpdate({ ...issue, state: _state }); @@ -116,7 +116,12 @@ export const PeekOverviewProperties: FC = observer((pro

State

- +
@@ -129,6 +134,7 @@ export const PeekOverviewProperties: FC = observer((pro
@@ -210,7 +216,12 @@ export const PeekOverviewProperties: FC = observer((pro

Parent

- +
@@ -226,6 +237,7 @@ export const PeekOverviewProperties: FC = observer((pro
@@ -240,6 +252,7 @@ export const PeekOverviewProperties: FC = observer((pro
@@ -253,6 +266,7 @@ export const PeekOverviewProperties: FC = observer((pro
= observer((props) => { const { peekIssueId } = router.query; const { - user: { currentProjectRole }, issueDetail: { createIssueComment, updateIssueComment, @@ -58,6 +57,7 @@ export const IssuePeekOverview: FC = observer((props) => { }, archivedIssues: { deleteArchivedIssue }, project: { currentProjectDetails }, + workspaceMember: { currentWorkspaceUserProjectsRole }, } = useMobxStore(); const { setToastAlert } = useToast(); @@ -146,7 +146,8 @@ export const IssuePeekOverview: FC = observer((props) => { } }; - const userRole = currentProjectRole ?? EUserWorkspaceRoles.GUEST; + const userRole = + (currentWorkspaceUserProjectsRole && currentWorkspaceUserProjectsRole[projectId]) ?? EUserWorkspaceRoles.GUEST; return ( diff --git a/web/components/issues/sidebar-select/assignee.tsx b/web/components/issues/sidebar-select/assignee.tsx index 34e3bc06a..dffa46232 100644 --- a/web/components/issues/sidebar-select/assignee.tsx +++ b/web/components/issues/sidebar-select/assignee.tsx @@ -10,6 +10,7 @@ import { PROJECT_MEMBERS } from "constants/fetch-keys"; type Props = { value: string[]; + projectId: string; onChange: (val: string[]) => void; disabled?: boolean; }; @@ -17,9 +18,9 @@ type Props = { // services const projectMemberService = new ProjectMemberService(); -export const SidebarAssigneeSelect: React.FC = ({ value, onChange, disabled = false }) => { +export const SidebarAssigneeSelect: React.FC = ({ value, projectId, onChange, disabled = false }) => { const router = useRouter(); - const { workspaceSlug, projectId } = router.query; + const { workspaceSlug } = router.query; const { data: members } = useSWR( workspaceSlug && projectId ? PROJECT_MEMBERS(projectId as string) : null, diff --git a/web/components/issues/sidebar-select/cycle.tsx b/web/components/issues/sidebar-select/cycle.tsx index 86c9dcfca..5f5e6c386 100644 --- a/web/components/issues/sidebar-select/cycle.tsx +++ b/web/components/issues/sidebar-select/cycle.tsx @@ -14,6 +14,7 @@ import { CYCLE_ISSUES, INCOMPLETE_CYCLES_LIST, ISSUE_DETAILS } from "constants/f type Props = { issueDetail: IIssue | undefined; + projectId: string; handleCycleChange?: (cycleId: string) => void; disabled?: boolean; handleIssueUpdate?: () => void; @@ -26,7 +27,7 @@ export const SidebarCycleSelect: React.FC = (props) => { const { issueDetail, disabled = false, handleIssueUpdate, handleCycleChange } = props; // router const router = useRouter(); - const { workspaceSlug, projectId } = router.query; + const { workspaceSlug, projectId: _projectId, peekProjectId } = router.query; // mobx store const { cycleIssues: { removeIssueFromCycle, addIssueToCycle }, @@ -34,6 +35,8 @@ export const SidebarCycleSelect: React.FC = (props) => { const [isUpdating, setIsUpdating] = useState(false); + const projectId = _projectId ?? peekProjectId; + const { data: incompleteCycles } = useSWR( workspaceSlug && projectId ? INCOMPLETE_CYCLES_LIST(projectId as string) : null, workspaceSlug && projectId diff --git a/web/components/issues/sidebar-select/label.tsx b/web/components/issues/sidebar-select/label.tsx index b7ef3f48d..ca7abd8be 100644 --- a/web/components/issues/sidebar-select/label.tsx +++ b/web/components/issues/sidebar-select/label.tsx @@ -18,6 +18,7 @@ import { IIssue, IIssueLabel } from "types"; type Props = { issueDetails: IIssue | undefined; + projectId: string; labelList: string[]; submitChanges: (formData: any) => void; isNotAllowed: boolean; @@ -30,12 +31,12 @@ const defaultValues: Partial = { }; export const SidebarLabelSelect: React.FC = observer((props) => { - const { issueDetails, labelList, submitChanges, isNotAllowed, uneditable } = props; + const { issueDetails, projectId, labelList, submitChanges, isNotAllowed, uneditable } = props; // states const [createLabelForm, setCreateLabelForm] = useState(false); // router const router = useRouter(); - const { workspaceSlug, projectId } = router.query; + const { workspaceSlug } = router.query; // toast const { setToastAlert } = useToast(); // mobx store diff --git a/web/components/issues/sidebar-select/module.tsx b/web/components/issues/sidebar-select/module.tsx index c96799bc6..6b6db072b 100644 --- a/web/components/issues/sidebar-select/module.tsx +++ b/web/components/issues/sidebar-select/module.tsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import { mutate } from "swr"; +import useSWR, { mutate } from "swr"; // mobx store import { useMobxStore } from "lib/mobx/store-provider"; // ui @@ -9,28 +9,40 @@ import { CustomSearchSelect, DiceIcon, Spinner, Tooltip } from "@plane/ui"; // types import { IIssue } from "types"; // fetch-keys -import { ISSUE_DETAILS, MODULE_ISSUES } from "constants/fetch-keys"; +import { ISSUE_DETAILS, MODULE_ISSUES, MODULE_LIST } from "constants/fetch-keys"; +// services +import { ModuleService } from "services/module.service"; type Props = { issueDetail: IIssue | undefined; + projectId: string; handleModuleChange?: (moduleId: string) => void; disabled?: boolean; handleIssueUpdate?: () => void; }; +// services +const moduleService = new ModuleService(); + export const SidebarModuleSelect: React.FC = observer((props) => { - const { issueDetail, disabled = false, handleIssueUpdate, handleModuleChange } = props; + const { issueDetail, projectId, disabled = false, handleIssueUpdate, handleModuleChange } = props; // router const router = useRouter(); - const { workspaceSlug, projectId } = router.query; + const { workspaceSlug } = router.query; // mobx store const { - module: { projectModules }, moduleIssues: { removeIssueFromModule, addIssueToModule }, } = useMobxStore(); const [isUpdating, setIsUpdating] = useState(false); + const { data: projectModules } = useSWR( + workspaceSlug && projectId ? MODULE_LIST(projectId as string) : null, + workspaceSlug && projectId + ? () => moduleService.getModules(workspaceSlug as string, projectId as string) + : null + ); + const handleModuleStoreChange = async (moduleId: string) => { if (!workspaceSlug || !issueDetail || !moduleId) return; diff --git a/web/components/issues/sidebar-select/parent.tsx b/web/components/issues/sidebar-select/parent.tsx index cdeb09e90..d0a834190 100644 --- a/web/components/issues/sidebar-select/parent.tsx +++ b/web/components/issues/sidebar-select/parent.tsx @@ -12,15 +12,16 @@ import { IIssue, ISearchIssueResponse } from "types"; type Props = { onChange: (value: string) => void; issueDetails: IIssue | undefined; + projectId: string; disabled?: boolean; }; -export const SidebarParentSelect: React.FC = ({ onChange, issueDetails, disabled = false }) => { +export const SidebarParentSelect: React.FC = ({ onChange, issueDetails, projectId, disabled = false }) => { const [isParentModalOpen, setIsParentModalOpen] = useState(false); const [selectedParentIssue, setSelectedParentIssue] = useState(null); const router = useRouter(); - const { projectId, issueId } = router.query; + const { issueId } = router.query; return ( <> diff --git a/web/components/issues/sidebar-select/state.tsx b/web/components/issues/sidebar-select/state.tsx index 0fb3fe42f..decbf9459 100644 --- a/web/components/issues/sidebar-select/state.tsx +++ b/web/components/issues/sidebar-select/state.tsx @@ -15,6 +15,7 @@ import { STATES_LIST } from "constants/fetch-keys"; type Props = { value: string; + projectId: string; onChange: (val: string) => void; disabled?: boolean; }; @@ -22,9 +23,9 @@ type Props = { // services const stateService = new ProjectStateService(); -export const SidebarStateSelect: React.FC = ({ value, onChange, disabled = false }) => { +export const SidebarStateSelect: React.FC = ({ value, projectId, onChange, disabled = false }) => { const router = useRouter(); - const { workspaceSlug, projectId, inboxIssueId } = router.query; + const { workspaceSlug, inboxIssueId } = router.query; const { data: states } = useSWR( workspaceSlug && projectId ? STATES_LIST(projectId as string) : null, diff --git a/web/components/issues/sidebar.tsx b/web/components/issues/sidebar.tsx index 4cb4d74a1..49c277ae2 100644 --- a/web/components/issues/sidebar.tsx +++ b/web/components/issues/sidebar.tsx @@ -290,6 +290,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { render={({ field: { value } }) => ( submitChanges({ state: val })} disabled={!isAllowed || uneditable} /> @@ -311,6 +312,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { render={({ field: { value } }) => ( submitChanges({ assignees: val })} disabled={!isAllowed || uneditable} /> @@ -382,6 +384,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { onChange(val); }} issueDetails={issueDetail} + projectId={projectId as string} disabled={!isAllowed || uneditable} /> )} @@ -536,6 +539,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => {
@@ -551,6 +555,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => {
@@ -569,6 +574,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => {