diff --git a/apiserver/plane/app/views/project/member.py b/apiserver/plane/app/views/project/member.py index e201ab5a796..ccb5e75216e 100644 --- a/apiserver/plane/app/views/project/member.py +++ b/apiserver/plane/app/views/project/member.py @@ -414,6 +414,7 @@ def get(self, request, slug): project_members = ProjectMember.objects.filter( workspace__slug=slug, member_id=request.user.id, + is_active=True, ).values("project_id", "role") project_members = { diff --git a/web/core/components/issues/issue-modal/base.tsx b/web/core/components/issues/issue-modal/base.tsx index 88ca5ad0cd7..ab1123f4f20 100644 --- a/web/core/components/issues/issue-modal/base.tsx +++ b/web/core/components/issues/issue-modal/base.tsx @@ -13,7 +13,7 @@ import { ISSUE_CREATED, ISSUE_UPDATED } from "@/constants/event-tracker"; import { EIssuesStoreType } from "@/constants/issue"; // hooks import { useIssueModal } from "@/hooks/context/use-issue-modal"; -import { useEventTracker, useCycle, useIssues, useModule, useProject, useIssueDetail } from "@/hooks/store"; +import { useEventTracker, useCycle, useIssues, useModule, useProject, useIssueDetail, useUser } from "@/hooks/store"; import { useIssueStoreType } from "@/hooks/use-issue-layout-store"; import { useIssuesActions } from "@/hooks/use-issues-actions"; import useLocalStorage from "@/hooks/use-local-storage"; @@ -44,7 +44,7 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( // store hooks const { captureIssueEvent } = useEventTracker(); const { workspaceSlug, projectId, cycleId, moduleId } = useParams(); - const { workspaceProjectIds } = useProject(); + const { projectsWithCreatePermissions } = useUser(); const { fetchCycleDetails } = useCycle(); const { fetchModuleDetails } = useModule(); const { issues } = useIssues(storeType); @@ -60,6 +60,8 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( >("draftedIssue", {}); // current store details const { createIssue, updateIssue } = useIssuesActions(storeType); + // derived values + const projectIdsWithCreatePermissions = Object.keys(projectsWithCreatePermissions ?? {}); const fetchIssueDetail = async (issueId: string | undefined) => { setDescription(undefined); @@ -98,8 +100,8 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( // if data is not present, set active project to the project // in the url. This has the least priority. - if (workspaceProjectIds && workspaceProjectIds.length > 0 && !activeProjectId) - setActiveProjectId(projectId?.toString() ?? workspaceProjectIds?.[0]); + if (projectIdsWithCreatePermissions && projectIdsWithCreatePermissions.length > 0 && !activeProjectId) + setActiveProjectId(projectId?.toString() ?? projectIdsWithCreatePermissions?.[0]); // clearing up the description state when we leave the component return () => setDescription(undefined); @@ -288,7 +290,7 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( const handleFormChange = (formData: Partial | null) => setChangesMade(formData); // don't open the modal if there are no projects - if (!workspaceProjectIds || workspaceProjectIds.length === 0 || !activeProjectId) return null; + if (!projectIdsWithCreatePermissions || projectIdsWithCreatePermissions.length === 0 || !activeProjectId) return null; return (