import { Head, Link } from '@inertiajs/react';
import AppLayout from '@/layouts/app-layout';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Users, Building2, Briefcase, UserPlus, Banknote } from 'lucide-react';
import {
BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip as RechartsTooltip, ResponsiveContainer,
PieChart, Pie, Cell, Legend
} from 'recharts';
interface DashboardProps {
stats: {
total_employees: number;
total_departments: number;
total_positions: number;
payroll_realisasi: number;
};
genderData: { name: string; value: number; fill: string }[];
deptData: { name: string; employees: number }[];
latestEmployees: {
id: number;
join_date: string;
user: { name: string };
position: { name: string };
department: { name: string };
}[];
currentPeriod: string;
}
function formatRupiah(value: number): string {
return new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR',
minimumFractionDigits: 0,
}).format(value);
}
function formatPeriod(period: string): string {
const [year, month] = period.split('-');
return new Date(Number(year), Number(month) - 1, 1)
.toLocaleDateString('id-ID', { month: 'long', year: 'numeric' });
}
export default function Dashboard({ stats, genderData, deptData, latestEmployees, currentPeriod }: DashboardProps) {
return (
Pegawai aktif saat ini
Divisi terdaftar
Posisi pekerjaan
Status "Telah Dikirim" · {formatPeriod(currentPeriod)}
Belum ada data karyawan.
) : latestEmployees.map((emp) => ({emp.user?.name ?? '-'}
{emp.position?.name ?? '-'} • {emp.department?.name ?? '-'}