/* 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: { data: Employee[]; links: any[]; }; departments: { id: number; name: string }[]; filters: { search?: string; department_id?: string; }; [key: string]: unknown; } interface SharedData { flash: { success?: string; error?: string; }; } export default function Index({ employees, departments, filters }: PageProps) { const { flash } = usePage().props as SharedData; 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]); return (
{flash?.success && (
{flash.success}
)} Daftar Karyawan
setSearch(e.target.value)} />
{employees.data.length > 0 ? ( employees.data.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.
); }