From 3db9809be566bfd27c8826f7ce7057bb46718980 Mon Sep 17 00:00:00 2001 From: kitos Date: Wed, 3 Jun 2026 16:42:45 +0200 Subject: [PATCH] refactor(campaigns): move CampaignTimingPanel next to Progress panel Progress and Timing now share a 2-column grid at the top of the detail page. Removed CampaignTimingPanel from the bottom Jira section. Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/pages/CampaignDetailPage.tsx | 81 ++++++++++++----------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/frontend/src/pages/CampaignDetailPage.tsx b/frontend/src/pages/CampaignDetailPage.tsx index d84a2eb..6c5ced3 100644 --- a/frontend/src/pages/CampaignDetailPage.tsx +++ b/frontend/src/pages/CampaignDetailPage.tsx @@ -309,44 +309,50 @@ export default function CampaignDetailPage() { - {/* Progress Panel */} -
-

Progress

-
-
- {progress.completion_pct}% - complete -
-
-
-
+ {/* Progress + Timing side by side */} +
+ {/* Progress Panel */} +
+

Progress

+
+
+ {progress.completion_pct}% + complete
+
+
+
+
+
+ + {progress.by_state?.validated || 0} / {progress.total} tests +
- - {progress.by_state?.validated || 0} / {progress.total} tests - + + {/* State breakdown */} + {progress.total > 0 && ( +
+ {Object.entries(progress.by_state || {}).map(([state, count]) => ( +
+ {state.replace(/_/g, " ")}: {count} +
+ ))} +
+ )}
- {/* State breakdown */} - {progress.total > 0 && ( -
- {Object.entries(progress.by_state || {}).map(([state, count]) => ( -
- {state.replace(/_/g, " ")}: {count} -
- ))} -
- )} + {/* Campaign Timing */} +
{/* Kill Chain Timeline */} @@ -630,11 +636,8 @@ export default function CampaignDetailPage() { )}
- {/* Jira + Campaign Timing */} -
- - -
+ {/* Jira */} + {/* Add Test to Campaign Modal */}