feat(frontend): c2 tasks panel + history import (sprint 8 phase 2)
- Add getC2Tasks / listCallbackHistory / importC2 API functions + types - useC2Tasks with 2500ms polling (stops when all tasks completed) - useC2CallbackHistory, useImportC2 hooks - C2TaskStatusBadge, C2TasksPanel (expandable output rows, polling indicator) - C2CallbackPicker extracted as shared component (reused in both modals) - ImportC2HistoryModal: 2-step callback picker → paginated history table - SimulationFormPage: RT card + tasks panel share left grid column; Import C2 history button - 37 new tests (api/c2, C2TasksPanel, ImportC2HistoryModal, SimulationFormPage panel visibility) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
27
frontend/src/components/C2TaskStatusBadge.tsx
Normal file
27
frontend/src/components/C2TaskStatusBadge.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
// Dedicated badge for Mythic task statuses — separate from simulation status badges.
|
||||
// submitted / processed → primary-soft (in-flight)
|
||||
// completed → success-soft
|
||||
// error* / fail* → warn-soft (task-level issue, not system error)
|
||||
// anything else → cloud / graphite (unknown/neutral)
|
||||
|
||||
interface C2TaskStatusBadgeProps {
|
||||
status: string;
|
||||
}
|
||||
|
||||
function badgeClass(status: string): string {
|
||||
const s = status.toLowerCase();
|
||||
if (s === 'completed') return 'bg-success-soft text-success';
|
||||
if (s.startsWith('error') || s.startsWith('fail')) return 'bg-warn-soft text-warn';
|
||||
if (s === 'submitted' || s === 'processed') return 'bg-primary-soft text-primary-deep';
|
||||
return 'bg-cloud text-graphite border border-hairline';
|
||||
}
|
||||
|
||||
export function C2TaskStatusBadge({ status }: C2TaskStatusBadgeProps): JSX.Element {
|
||||
return (
|
||||
<span
|
||||
className={`inline-flex items-center rounded-pill px-3 py-[4px] text-[12px] leading-[1.3] font-bold ${badgeClass(status)}`}
|
||||
>
|
||||
{status}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user