From b156b0333afb9de45fdb8510fbc0448ca2e1b8fe Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 29 Jul 2026 15:44:13 +0000 Subject: [PATCH] Allow deleting access review campaigns in any status Drop the backend status gate on campaign delete and show delete in the console whenever the user has delete permission, regardless of whether the campaign is draft, in progress, or completed. Signed-off-by: Cursor Agent Co-authored-by: Bryan FRIMIN --- .../campaigns/AccessReviewCampaignsTab.tsx | 11 ++-------- .../campaigns/CampaignDetailPage.tsx | 4 +--- pkg/accessreview/campaign_service.go | 6 ------ pkg/accessreview/errors.go | 20 ------------------- pkg/accessreview/errors_test.go | 9 --------- .../v1/access_review_campaign_resolvers.go | 4 ---- 6 files changed, 3 insertions(+), 51 deletions(-) diff --git a/apps/console/src/pages/organizations/access-reviews/campaigns/AccessReviewCampaignsTab.tsx b/apps/console/src/pages/organizations/access-reviews/campaigns/AccessReviewCampaignsTab.tsx index 82fc277c6..d25852045 100644 --- a/apps/console/src/pages/organizations/access-reviews/campaigns/AccessReviewCampaignsTab.tsx +++ b/apps/console/src/pages/organizations/access-reviews/campaigns/AccessReviewCampaignsTab.tsx @@ -132,10 +132,6 @@ export default function AccessReviewCampaignsTab({ queryRef }: Props) { deleteCampaignMutation, ); - // Only DRAFT, CANCELLED, and COMPLETED campaigns can be deleted (enforced by the backend). - const isDeletableStatus = (status: string) => - status === "DRAFT" || status === "CANCELLED" || status === "COMPLETED"; - const handleDelete = (campaignId: string, campaignName: string) => { confirm( () => { @@ -182,9 +178,7 @@ export default function AccessReviewCampaignsTab({ queryRef }: Props) { ); }; - const hasActions = accessReviewCampaigns.edges.some( - edge => edge.node.canDelete && isDeletableStatus(edge.node.status), - ); + const hasActions = accessReviewCampaigns.edges.some(edge => edge.node.canDelete); return (
@@ -215,8 +209,7 @@ export default function AccessReviewCampaignsTab({ queryRef }: Props) { {accessReviewCampaigns.edges.map((edge) => { - const canDeleteRow - = edge.node.canDelete && isDeletableStatus(edge.node.status); + const canDeleteRow = edge.node.canDelete; return (