'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}
router.push(`/admin/pendidikan/data-pendidikan/${item.id}`)}>
{
setSelectedId(item.id)
setModalHapus(true)
}}>
))}
{/* 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;