diff --git a/docker/ui/src/pages/Dashboard.tsx b/docker/ui/src/pages/Dashboard.tsx index 7e807e8..7de4d0f 100644 --- a/docker/ui/src/pages/Dashboard.tsx +++ b/docker/ui/src/pages/Dashboard.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { Cpu, HardDrive, Disc, Download, Trash2, Activity, Film, Server, RotateCcw, FileSpreadsheet, List, LayoutGrid } from 'lucide-react' +import { Cpu, HardDrive, Disc, Download, Trash2, Activity, Film, Server, RotateCcw, FileSpreadsheet } from 'lucide-react' import { api } from '../lib/api' import { useToast } from '../context/ToastContext' import { Card, CardHeader, CardTitle, CardContent } from '../components/ui/Card' @@ -9,8 +9,6 @@ import ConfirmDialog from '../components/ConfirmDialog' import DeviceDiscovery from '../components/DeviceDiscovery' import JobDetailModal from '../components/JobDetailModal' import LiveLogSection from '../components/LiveLogSection' -import { HeroCinemaBanner } from '../components/HeroCinemaBanner' -import { RadialProgress } from '../components/ui/RadialProgress' interface JobMeta { year?: number @@ -145,21 +143,16 @@ export default function Dashboard() { return (
- {/* 1. Top Hero Cinema Showcase (5 Kacheln vollständig ausgefüllt) */} - setDetailJobId(id)} - onCancelClick={id => api.post(`/jobs/${id}/cancel`).catch(() => {})} - /> + {/* 1. GANZ OBEN: Laufwerke & Erkannte Disc im Laufwerk (Akira / Auto Pre-Scan Banner) */} + - {/* 2. Main 2-Column Grid Layout (SC1 Mockup Bereich) */} + {/* 2. MAIN 2-COLUMN GRID LAYOUT (EXAKT NACH SC1 MOCKUP) */}
{/* LEFT COLUMN (lg:col-span-7) */}
- {/* Current Job Card */} + {/* Current Job Card (SC1 Left Top) */} @@ -218,28 +211,49 @@ export default function Dashboard() { - {/* Ripping Queue Card */} + {/* Ripping Queue Card (EXAKT NACH SC1 MOCKUP METHODIK) */} Ripping Queue ({queueJobs.length}) - - {queueJobs.length === 0 ? ( -
- Warteschlange ist leer (0 Jobs eingereiht) -
- ) : ( -
- {queueJobs.map((j, idx) => ( -
-
- {idx + 1}. - {j.title || 'Unbekannt'} - -
- Wartend + + {queueJobs.length > 0 ? ( + queueJobs.map((j, idx) => ( +
+
+ {posterUrl(j.meta) ? ( + + ) : ( +
+ +
+ )} + {idx + 2}. + {j.title || 'Unbekannt'} +
- ))} + + Queue {idx + 1} + +
+ )) + ) : ( + /* SC1 Styled Queue List slots (sauberes SC1 Queue Layout ohne hässliches Loch) */ +
+
+
+ 2. + Bereit für nächste Disc... +
+ Queue 1 +
+
+
+ 3. + Bereit für nächste Disc... +
+ Queue 2 +
)}
@@ -311,10 +325,10 @@ export default function Dashboard() { - {/* Recently Ripped Card */} + {/* Recently Ripped Card (SC1 Right Bottom) */} - Zuletzt gerippt ({completedJobs.length}) + Recently Ripped ({completedJobs.length}) {completedJobs.length > 0 && (
- {/* 3. Laufwerke & Disc-Erkennung (Device Discovery Slot) */} - - - {/* 4. VOLLSTÄNDIGE JOB-TABELLE & MEDIEN-BIBLIOTHEK (AUS DEM ALTEN DESIGN + METADATEN/BESCHREIBUNGEN) */} + {/* 3. VOLLSTÄNDIGE JOB-TABELLE & MEDIEN-BIBLIOTHEK (MIT INHALTSANGABEN / BESCHREIBUNGEN) */}
@@ -379,7 +390,6 @@ export default function Dashboard() {
- {/* Filter Pills */}
{(['all', 'active', 'completed', 'failed'] as const).map((f) => (