feat: implement dashboard page for QR code listing, statistics, and management.

This commit is contained in:
Timo
2026-01-02 20:38:57 +01:00
parent 49673e84b6
commit eea8c8b33a
3 changed files with 22 additions and 10 deletions

View File

@@ -41,6 +41,7 @@ export default function DashboardPage() {
totalScans: 0,
activeQRCodes: 0,
conversionRate: 0,
uniqueScans: 0,
});
const [analyticsData, setAnalyticsData] = useState<any>(null);
@@ -218,13 +219,15 @@ export default function DashboardPage() {
// Calculate real stats
const totalScans = data.reduce((sum: number, qr: QRCodeData) => sum + (qr.scans || 0), 0);
const activeQRCodes = data.filter((qr: QRCodeData) => qr.status === 'ACTIVE').length;
// Calculate "Unique Rate" (Conversion)
const conversionRate = totalScans > 0 ? Math.round((data.reduce((acc: number, qr: any) => acc + (qr.uniqueScans || 0), 0) / totalScans) * 100) : 0;
// Calculate unique scans (absolute count)
const uniqueScans = data.reduce((acc: number, qr: any) => acc + (qr.uniqueScans || 0), 0);
const conversionRate = totalScans > 0 ? Math.round((uniqueScans / totalScans) * 100) : 0;
setStats({
totalScans,
activeQRCodes,
conversionRate,
uniqueScans,
});
} else {
// If not logged in, show zeros
@@ -233,6 +236,7 @@ export default function DashboardPage() {
totalScans: 0,
activeQRCodes: 0,
conversionRate: 0,
uniqueScans: 0,
});
}
@@ -256,6 +260,7 @@ export default function DashboardPage() {
totalScans: 0,
activeQRCodes: 0,
conversionRate: 0,
uniqueScans: 0,
});
} finally {
setLoading(false);
@@ -317,6 +322,7 @@ export default function DashboardPage() {
totalScans: 0,
activeQRCodes: 0,
conversionRate: 0,
uniqueScans: 0,
});
showToast(`Successfully deleted ${data.deletedCount} QR code${data.deletedCount !== 1 ? 's' : ''}`, 'success');
} else {