import React, { useState, useRef, useEffect } from "react"; import styles from "./Dashboard.module.css"; import { useNavigate } from "react-router-dom"; // Pastikan Anda sudah menginstal Recharts: npm install recharts // import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts'; // Contoh Recharts const Dashboard = () => { const navigate = useNavigate(); const [isMenuOpen, setIsMenuOpen] = useState(false); const menuRef = useRef(null); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [successMessage, setSuccessMessage] = useState(""); const [errorMessage, setErrorMessage] = useState(""); const [user, setUser] = useState({}); const [totalFilesSentToday, setTotalFilesSentToday] = useState(0); const [totalFilesSentMonth, setTotalFilesSentMonth] = useState(0); const [totalFilesSentOverall, setTotalFilesSentOverall] = useState(0); const [officerPerformanceData, setOfficerPerformanceData] = useState([]); useEffect(() => { const token = localStorage.getItem("token"); if (!token) { window.location.href = "/login"; } }, []); useEffect(() => { const verifyTokenAndFetchData = async () => { const token = localStorage.getItem("token"); if (!token) { window.location.href = "/login"; return; } try { const response = await fetch( "https://bot.kediritechnopark.com/webhook/dashboard/psi", { method: "GET", headers: { Authorization: `Bearer ${token}`, }, } ); const data = await response.json(); if (!response.ok || !data[0].payload.username) { throw new Error("Unauthorized"); } setUser(data[0].payload); // Pastikan API Anda mengembalikan data ini, contoh: // data[0].payload.stats = { today: 120, month: 2500, overall: 15000 }; // data[0].payload.officerPerformance = [{ name: "Budi", filesSent: 50 }, { name: "Ani", filesSent: 70 }]; if (data[0].payload.stats) { setTotalFilesSentToday(data[0].payload.stats.today); setTotalFilesSentMonth(data[0].payload.stats.month); setTotalFilesSentOverall(data[0].payload.stats.overall); } if (data[0].payload.officerPerformance) { setOfficerPerformanceData(data[0].payload.officerPerformance); } } catch (error) { console.error("Token tidak valid:", error.message); localStorage.removeItem("token"); window.location.href = "/login"; } }; verifyTokenAndFetchData(); }, []); const handleLogout = () => { localStorage.removeItem("token"); localStorage.removeItem("user"); window.location.reload(); }; const handleAddOfficer = async (e) => { e.preventDefault(); const token = localStorage.getItem("token"); try { const response = await fetch( "https://bot.kediritechnopark.com/webhook/add-officer", { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, body: JSON.stringify({ username, password, }), } ); const data = await response.json(); if (!response.ok || data.success === false) { throw new Error(data.message || "Gagal menambahkan officer"); } setSuccessMessage("Officer berhasil ditambahkan"); setUsername(""); setPassword(""); setErrorMessage(""); // Pertimbangkan untuk memuat ulang data performa jika penambahan officer baru mempengaruhi grafik } catch (error) { setErrorMessage(error.message || "Gagal menambahkan officer"); setSuccessMessage(""); } }; useEffect(() => { const handleClickOutside = (event) => { if (menuRef.current && !menuRef.current.contains(event.target)) { setIsMenuOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); return (
{totalFilesSentToday.toLocaleString()}
{totalFilesSentMonth.toLocaleString()}
{totalFilesSentOverall.toLocaleString()}
{successMessage}
)} {errorMessage &&{errorMessage}
}