diff --git a/frontend/src/components/CampaignAuditTimeline.tsx b/frontend/src/components/CampaignAuditTimeline.tsx index 3faf17e..aa6a74f 100644 --- a/frontend/src/components/CampaignAuditTimeline.tsx +++ b/frontend/src/components/CampaignAuditTimeline.tsx @@ -17,6 +17,10 @@ const ACTION_LABELS: Record = { request_campaign_modification: "Modification requested", approve_campaign_modification: "Modification approved", reject_campaign_modification: "Modification rejected", + delete_campaign: "Campaign deleted", + generate_campaign: "Generated from threat actor", + schedule_campaign: "Schedule updated", + recurring_campaign_run: "Recurring run executed", }; export default function CampaignAuditTimeline({ entries, isLoading }: Props) { diff --git a/frontend/src/pages/CampaignDetailPage.tsx b/frontend/src/pages/CampaignDetailPage.tsx index 269f70b..5655507 100644 --- a/frontend/src/pages/CampaignDetailPage.tsx +++ b/frontend/src/pages/CampaignDetailPage.tsx @@ -140,6 +140,7 @@ export default function CampaignDetailPage() { mutationFn: () => completeCampaign(campaignId!), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["campaign", campaignId] }); + queryClient.invalidateQueries({ queryKey: ["campaign-timeline", campaignId] }); showToast("Campaign completed", "success"); }, onError: (err: Error) => showToast(err.message, "error"), @@ -159,6 +160,7 @@ export default function CampaignDetailPage() { scheduleCampaign(campaignId!, payload), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["campaign", campaignId] }); + queryClient.invalidateQueries({ queryKey: ["campaign-timeline", campaignId] }); showToast("Schedule updated", "success"); }, onError: (err: Error) => showToast(err.message, "error"), @@ -199,6 +201,7 @@ export default function CampaignDetailPage() { onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["campaign", campaignId] }); queryClient.invalidateQueries({ queryKey: ["campaign-modification-requests", campaignId] }); + queryClient.invalidateQueries({ queryKey: ["campaign-timeline", campaignId] }); showToast("Modification approved and applied", "success"); }, onError: (err: Error) => showToast(err.message, "error"), @@ -209,6 +212,7 @@ export default function CampaignDetailPage() { rejectModificationRequest(requestId, notes), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["campaign-modification-requests", campaignId] }); + queryClient.invalidateQueries({ queryKey: ["campaign-timeline", campaignId] }); showToast("Modification rejected", "success"); }, onError: (err: Error) => showToast(err.message, "error"),