'use client'; import colors from '@/con/colors'; import { Badge, Box, Button, Center, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title, } from '@mantine/core'; import { useDebouncedValue, useShallowEffect } from '@mantine/hooks'; import { IconDeviceImacCog, IconSearch } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../../_com/header'; import perpustakaanDigitalState from '../../../_state/pendidikan/perpustakaan-digital'; function PeminjamBuku() { const [search, setSearch] = useState(''); return ( } value={search} onChange={(e) => setSearch(e.currentTarget.value)} /> ); } function ListPeminjamBuku({ search }: { search: string }) { const statePeminjam = useProxy(perpustakaanDigitalState.peminjamanBuku); const router = useRouter(); const { data, page, totalPages, loading, load } = statePeminjam.findMany; const [debouncedSearch] = useDebouncedValue(search, 1000); useShallowEffect(() => { load(page, 10, debouncedSearch); }, [page, debouncedSearch]); const filteredData = data || []; // 🔹 Fungsi helper untuk badge status const renderStatusBadge = (status: string) => { const normalized = status?.toUpperCase(); switch (normalized) { case 'DIPINJAM': return Dipinjam; case 'DIKEMBALIKAN': return Dikembalikan; case 'TERLAMBAT': return Terlambat; case 'DIBATALKAN': return Dibatalkan; default: return Tidak diketahui; } }; if (loading || !data) { return ( ); } return ( Daftar Peminjam Buku {/* Desktop Table */} No Nama Peminjam Status Alamat Detail {filteredData.length > 0 ? ( filteredData.map((item, index) => ( {index + 1} {item.nama} {renderStatusBadge(item.status)} {item.alamat} )) ) : (
Tidak ada data Peminjam buku yang cocok
)}
{/* Mobile Cards */} {filteredData.length > 0 ? ( filteredData.map((item, index) => ( No {index + 1} Nama Peminjam {item.nama} Status {renderStatusBadge(item.status)} Alamat {item.alamat} Detail )) ) : (
Tidak ada data Peminjam buku yang cocok
)}
{ load(newPage, 10); window.scrollTo({ top: 0, behavior: 'smooth' }); }} total={totalPages} mt="md" mb="md" color="blue" radius="md" />
); } export default PeminjamBuku;