fix(campaigns): complete ACTION_LABELS map and timeline cache invalidation
Adds the 4 backend-logged campaign actions missing from ACTION_LABELS (delete_campaign, generate_campaign, schedule_campaign, recurring_campaign_run), and wires campaign-timeline invalidation into the remaining audit-logging mutations on the page (complete, schedule, approve/reject modification request) so the timeline panel updates live instead of only on next reload, consistent with submit/approve/ reject campaign.
This commit is contained in:
@@ -17,6 +17,10 @@ const ACTION_LABELS: Record<string, string> = {
|
||||
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) {
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user