import { useState, useEffect } from 'react'; import axios from 'axios'; interface DashboardStats { permintaanHariIni: number; menungguPersetujuan: number; totalBarang: number; penggunaAktif: number; stokHampirHabis: number; } export default function Hero() { // 1. Ambil data profil dari LocalStorage hasil login sebelumnya const userName = localStorage.getItem('user_name') || 'User'; const userRole = localStorage.getItem('user_role') || 'Siswa'; // State untuk menampung angka statistik dari database const [stats, setStats] = useState({ permintaanHariIni: 0, menungguPersetujuan: 0, totalBarang: 0, penggunaAktif: 0, stokHampirHabis: 0 }); // 2. Fungsi membuat inisial nama (Contoh: "Bu Sari" -> "BS", "Admin" -> "AD") const dapatkanInisial = (nama: string) => { const kata = nama.split(' '); if (kata.length >= 2) { return (kata[0][0] + kata[1][0]).toUpperCase(); } return nama.substring(0, 2).toUpperCase(); }; // 3. Efek untuk mengambil data counter statistik dari backend pas halaman dibuka useEffect(() => { const ambilStatistikDashboard = async () => { try { // Silahkan buat rute /api/dashboard-stats di backend jika ingin memisahkan kueri count-nya // Sebagai alternatif awal, kita ambil total barang & total bast dari rute yang sudah ada const resBarang = await axios.get('http://localhost:5000/api/barang'); const resBast = await axios.get('http://localhost:5000/api/bast'); const resUser = await axios.get('http://localhost:5000/api/users'); // Hitung total data berdasarkan respon database const totalBarang = resBarang.data.success ? resBarang.data.data.length : 0; const listBast = resBast.data.success ? resBast.data.data : []; const totalUser = resUser.data.success ? resUser.data.data.length : 0; // Filter data untuk counter spesifik dokumen BAST const menunggu = listBast.filter((b: any) => b.status_serah === 'Menunggu' || b.status_terima === 'Menunggu').length; // Simulasi hitung permintaan hari ini dari tanggal dibuat_pada (UKK basic) const hariIniFormat = new Date().toISOString().split('T')[0]; const hariIni = listBast.filter((b: any) => b.dibuat_pada && b.dibuat_pada.startsWith(hariIniFormat)).length; // Hitung barang dengan stok kritis (di bawah 5 buah) const kritis = resBarang.data.success ? resBarang.data.data.filter((brg: any) => brg.stok <= 3).length : 0; setStats({ permintaanHariIni: hariIni, menungguPersetujuan: menunggu, totalBarang: totalBarang, penggunaAktif: totalUser, stokHampirHabis: kritis }); } catch (error) { console.error("Gagal memuat statistik dashboard:", error); } }; ambilStatistikDashboard(); }, []); return (
{/* HEADER */}

Selamat datang kembali 👋

Dashboard

{/* PROFILE */}
{dapatkanInisial(userName)}

{userName}

{userRole}

{/* STAT CARDS */}
{/* CARD 1 */}

Permintaan Hari Ini

{stats.permintaanHariIni}

Dokumen baru masuk

{/* CARD 2 */}

Menunggu Persetujuan

{stats.menungguPersetujuan}

Perlu tindakan segera

{/* CARD 3 */}

Total Ragam Barang

{stats.totalBarang}

{stats.stokHampirHabis} stok hampir habis

{/* CARD 4 */}

Total Terdaftar

{stats.penggunaAktif}

Siswa & petugas aktif

); }