/* eslint-disable @typescript-eslint/no-explicit-any */ import { Head, Link, usePage, router } from '@inertiajs/react'; import React, { useState, useEffect } from 'react'; import { useDebounce } from 'use-debounce'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Separator } from '@/components/ui/separator'; import AppLayout from '@/layouts/app-layout'; interface Employee { id: number; nip: string; status: string; join_date: string; position: { id: number; name: string; }; department: { id: number; name: string; }; user: { name: string; email: string; } | null; } interface PageProps { employees: Employee[]; departments: { id: number; name: string }[]; filters: { search?: string; department_id?: string; }; [key: string]: unknown; } import * as XLSX from 'xlsx'; export default function Index({ employees, departments, filters }: PageProps) { const [search, setSearch] = useState(filters.search || ''); const [departmentId, setDepartmentId] = useState(filters.department_id || 'all'); const [debouncedSearch] = useDebounce(search, 500); useEffect(() => { if (debouncedSearch !== filters.search || (departmentId !== 'all' && departmentId !== filters.department_id)) { router.get( '/admin/employees', { search: debouncedSearch, department_id: departmentId === 'all' ? '' : departmentId }, { preserveState: true, replace: true } ); } }, [debouncedSearch, departmentId]); const exportExcel = () => { const rows = employees.map((p, i) => ({ No: i + 1, Nama: p.user?.name || '-', Email: p.user?.email || '-', NIP: p.nip, Departemen: p.department?.name || '-', Jabatan: p.position?.name || '-', Status: p.status, Bergabung: new Date(p.join_date).toLocaleDateString('id-ID'), })); const ws = XLSX.utils.json_to_sheet(rows); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Data Karyawan'); XLSX.writeFile(wb, `Data_Karyawan_${new Date().toISOString().slice(0, 10)}.xlsx`); }; return (
{/* Page Header */}

Manajemen Karyawan

Kelola data seluruh karyawan perusahaan.

Daftar Karyawan
setSearch(e.target.value)} />
{employees.length > 0 ? ( employees.map((employee) => ( )) ) : ( )}
Karyawan Posisi & Dept Status Bergabung Aksi
{employee.user?.name}
{employee.user?.email}
NIP: {employee.nip}
{employee.position?.name || '-'}
{employee.department?.name || '-'}
{employee.status} {new Date(employee.join_date).toLocaleDateString('id-ID')} Hapus
Tidak ada data ditemukan.
); }