From 8efe692c802b81b802ad505c52372c92e8d0aeab Mon Sep 17 00:00:00 2001 From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Date: Mon, 10 Feb 2025 19:33:43 +0530 Subject: [PATCH 1/2] [WEB-3235]fix: transfer issues button mutation (#6549) * fix: pending issues mutation * fix: transfer issues count --- apiserver/plane/app/views/cycle/base.py | 8 ++++---- packages/types/src/cycle/cycle.d.ts | 1 - .../components/cycles/list/cycle-list-item-action.tsx | 8 ++++++-- web/core/components/cycles/quick-actions.tsx | 5 ++++- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/apiserver/plane/app/views/cycle/base.py b/apiserver/plane/app/views/cycle/base.py index c6682c15c3..84a161619b 100644 --- a/apiserver/plane/app/views/cycle/base.py +++ b/apiserver/plane/app/views/cycle/base.py @@ -134,11 +134,11 @@ class CycleViewSet(BaseViewSet): ) ) .annotate( - pending_issues=Count( + cancelled_issues=Count( "issue_cycle__issue__id", distinct=True, filter=Q( - issue_cycle__issue__state__group__in=["backlog", "unstarted", "started"], + issue_cycle__issue__state__group__in=["cancelled"], issue_cycle__issue__archived_at__isnull=True, issue_cycle__issue__is_draft=False, issue_cycle__deleted_at__isnull=True, @@ -227,7 +227,7 @@ class CycleViewSet(BaseViewSet): "is_favorite", "total_issues", "completed_issues", - "pending_issues", + "cancelled_issues", "assignee_ids", "status", "version", @@ -259,7 +259,7 @@ class CycleViewSet(BaseViewSet): # meta fields "is_favorite", "total_issues", - "pending_issues", + "cancelled_issues", "completed_issues", "assignee_ids", "status", diff --git a/packages/types/src/cycle/cycle.d.ts b/packages/types/src/cycle/cycle.d.ts index e325b81ad6..638d974e64 100644 --- a/packages/types/src/cycle/cycle.d.ts +++ b/packages/types/src/cycle/cycle.d.ts @@ -104,7 +104,6 @@ export interface ICycle extends TProgressSnapshot { project_detail: IProjectDetails; progress: any[]; version: number; - pending_issues: number; } export interface CycleIssueResponse { diff --git a/web/core/components/cycles/list/cycle-list-item-action.tsx b/web/core/components/cycles/list/cycle-list-item-action.tsx index a5b98ca5d5..f44b9bd6c1 100644 --- a/web/core/components/cycles/list/cycle-list-item-action.tsx +++ b/web/core/components/cycles/list/cycle-list-item-action.tsx @@ -86,7 +86,11 @@ export const CycleListItemAction: FC = observer((props) => { const showIssueCount = useMemo(() => cycleStatus === "draft" || cycleStatus === "upcoming", [cycleStatus]); - const showTransferIssues = routerProjectId && cycleDetails.pending_issues > 0 && cycleStatus === "completed"; + const transferableIssuesCount = cycleDetails + ? cycleDetails.total_issues - (cycleDetails.cancelled_issues + cycleDetails.completed_issues) + : 0; + + const showTransferIssues = routerProjectId && transferableIssuesCount > 0 && cycleStatus === "completed"; const isEditingAllowed = allowPermissions( [EUserPermissions.ADMIN, EUserPermissions.MEMBER], @@ -258,7 +262,7 @@ export const CycleListItemAction: FC = observer((props) => { }} > - Transfer {cycleDetails.pending_issues} work items + Transfer {transferableIssuesCount} work items )} diff --git a/web/core/components/cycles/quick-actions.tsx b/web/core/components/cycles/quick-actions.tsx index 5d27cfe107..436ed0cdda 100644 --- a/web/core/components/cycles/quick-actions.tsx +++ b/web/core/components/cycles/quick-actions.tsx @@ -44,6 +44,9 @@ export const CycleQuickActions: React.FC = observer((props) => { const isArchived = !!cycleDetails?.archived_at; const isCompleted = cycleDetails?.status?.toLowerCase() === "completed"; const isCurrentCycle = cycleDetails?.status?.toLowerCase() === "current"; + const transferrableIssuesCount = cycleDetails + ? cycleDetails.total_issues - (cycleDetails.cancelled_issues + cycleDetails.completed_issues) + : 0; // auth const isEditingAllowed = allowPermissions( [EUserPermissions.ADMIN, EUserPermissions.MEMBER], @@ -178,7 +181,7 @@ export const CycleQuickActions: React.FC = observer((props) => { cycleId={cycleId} projectId={projectId} workspaceSlug={workspaceSlug} - transferrableIssuesCount={cycleDetails.pending_issues} + transferrableIssuesCount={transferrableIssuesCount} cycleName={cycleDetails.name} /> )} From dff12729c05ac8301ffc0491da170bb79f777846 Mon Sep 17 00:00:00 2001 From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Date: Mon, 10 Feb 2025 19:35:04 +0530 Subject: [PATCH 2/2] [WEB-3287]fix: label creation in global views (#6541) * fix: label creation on enter * fix: update label creation permissions --------- Co-authored-by: sriram veeraghanta --- .../issues/issue-detail/label/select/label-select.tsx | 5 +++-- .../issues/issue-layouts/properties/label-dropdown.tsx | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/web/core/components/issues/issue-detail/label/select/label-select.tsx b/web/core/components/issues/issue-detail/label/select/label-select.tsx index 05f9956efa..78607561c4 100644 --- a/web/core/components/issues/issue-detail/label/select/label-select.tsx +++ b/web/core/components/issues/issue-detail/label/select/label-select.tsx @@ -36,7 +36,8 @@ export const IssueLabelSelect: React.FC = observer((props) => const [query, setQuery] = useState(""); const [submitting, setSubmitting] = useState(false); - const canCreateLabel = allowPermissions([EUserProjectRoles.ADMIN], EUserPermissionsLevel.PROJECT); + const canCreateLabel = + projectId && allowPermissions([EUserPermissions.ADMIN], EUserPermissionsLevel.PROJECT, workspaceSlug, projectId); const projectLabels = getProjectLabels(projectId); @@ -98,7 +99,7 @@ export const IssueLabelSelect: React.FC = observer((props) => setQuery(""); } - if (query !== "" && e.key === "Enter") { + if (query !== "" && e.key === "Enter" && canCreateLabel) { e.stopPropagation(); e.preventDefault(); await handleAddLabel(query); diff --git a/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx b/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx index 68fe34ebf6..b5b2ac03c8 100644 --- a/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx +++ b/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx @@ -81,7 +81,8 @@ export const LabelDropdown = (props: ILabelDropdownProps) => { const storeLabels = getProjectLabels(projectId); const { allowPermissions } = useUserPermissions(); - const canCreateLabel = allowPermissions([EUserProjectRoles.ADMIN], EUserPermissionsLevel.PROJECT); + const canCreateLabel = + projectId && allowPermissions([EUserPermissions.ADMIN], EUserPermissionsLevel.PROJECT, workspaceSlug, projectId); let projectLabels: IIssueLabel[] = defaultOptions; if (storeLabels && storeLabels.length > 0) projectLabels = storeLabels; @@ -157,7 +158,7 @@ export const LabelDropdown = (props: ILabelDropdownProps) => { setQuery(""); } - if (query !== "" && e.key === "Enter") { + if (query !== "" && e.key === "Enter" && canCreateLabel) { e.preventDefault(); await handleAddLabel(query); }