'use client' import colors from '@/con/colors'; import { Box, Button, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title } from '@mantine/core'; import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; import { IconEdit, IconSearch, IconTrash } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { Bar, BarChart, Legend, Tooltip, XAxis, YAxis } from 'recharts'; import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../_com/header'; import JudulList from '../../_com/judulList'; import { ModalKonfirmasiHapus } from '../../_com/modalKonfirmasiHapus'; import dataPendidikan from '../../_state/pendidikan/data-pendidikan'; function DataPendidikan() { const [search, setSearch] = useState(""); return ( } value={search} onChange={(e) => setSearch(e.currentTarget.value)} /> ); } function ListDataPendidikan({ search }: { search: string }) { type DPMrafik = { id: string; name: string; jumlah: number; } const stateDPM = useProxy(dataPendidikan); const [chartData, setChartData] = useState([]); const [mounted, setMounted] = useState(false); // untuk memastikan DOM sudah ready const isTablet = useMediaQuery('(max-width: 1024px)') const isMobile = useMediaQuery('(max-width: 768px)') const [modalHapus, setModalHapus] = useState(false) const [selectedId, setSelectedId] = useState(null) const router = useRouter(); const handleDelete = () => { if (selectedId) { stateDPM.delete.byId(selectedId) setModalHapus(false) setSelectedId(null) stateDPM.findMany.load() } } useShallowEffect(() => { setMounted(true) stateDPM.findMany.load() }, []) useEffect(() => { setMounted(true); if (stateDPM.findMany.data) { setChartData(stateDPM.findMany.data.map((item) => ({ id: item.id, name: item.name, jumlah: Number(item.jumlah) }))); } }, [stateDPM.findMany.data]); const filteredData = (stateDPM.findMany.data || []).filter(item => { const keyword = search.toLowerCase(); return ( item.name.toLowerCase().includes(keyword) || item.jumlah.toLowerCase().includes(keyword) ); }); if (!stateDPM.findMany.data) { return ( ) } return ( Nama Jumlah Edit Delete {filteredData.map((item) => ( {item.name} {item.jumlah} ))}
{/* Chart */} {!mounted && !chartData ? ( Grafik Data Pendidikan Belum ada data untuk ditampilkan dalam grafik ) : ( Grafik Data Pendidikan {mounted && chartData.length > 0 && ( )} )}
{/* Modal Konfirmasi Hapus */} setModalHapus(false)} onConfirm={handleDelete} text='Apakah anda yakin ingin menghapus grafik data pendidikan ini?' />
); } export default DataPendidikan;