Loading...
;
}
return (
Dashboard
Overview of your AWS cost simulation scenarios
{/* Add CostChart component here */}
);
}
```
### Criteri di accettazione
- [ ] Stat cards con dati reali
- [ ] Loading states
- [ ] Lista scenari recenti
- [ ] Layout responsive
---
## FE-006: Scenarios List Page
**Stima:** L (2-4 ore)
**Dipende da:** FE-005
### Obiettivo
Pagina lista scenari con filtri, pagination e azioni.
### Files da creare
```
frontend/src/pages/ScenariosPage.tsx
frontend/src/components/scenarios/
βββ ScenarioTable.tsx
βββ ScenarioFilters.tsx
βββ CreateScenarioDialog.tsx
βββ DeleteScenarioDialog.tsx
```
### Implementazione richiesta
**1. `frontend/src/components/scenarios/ScenarioTable.tsx`:**
```typescript
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from '@/components/ui/table';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import { MoreHorizontal, Play, Square, Archive, Trash2 } from 'lucide-react';
import type { Scenario } from '@/types/api';
interface ScenarioTableProps {
scenarios: Scenario[];
onStart: (id: string) => void;
onStop: (id: string) => void;
onArchive: (id: string) => void;
onDelete: (id: string) => void;
}
const statusColors = {
draft: 'secondary',
running: 'default',
completed: 'outline',
archived: 'destructive',
} as const;
export function ScenarioTable({
scenarios,
onStart,
onStop,
onArchive,
onDelete,
}: ScenarioTableProps) {
const navigate = useNavigate();
return (