/* eslint-disable prefer-const */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable react-hooks/exhaustive-deps */ 'use client' import { Box, Center, Image, Loader, Paper, Stack, Text, Tooltip } from '@mantine/core'; import { IconUsers } from '@tabler/icons-react'; import { OrganizationChart } from 'primereact/organizationchart'; import { useEffect } from 'react'; import { useProxy } from 'valtio/utils'; import stateStrukturPPID from '../../../_state/ppid/struktur_ppid/struktur_PPID'; function StrukturOrganisasiPPID() { return ( ); } function ListStrukturOrganisasiPPID() { const stateOrganisasi = useProxy(stateStrukturPPID.pegawai); useEffect(() => { stateOrganisasi.findMany.load(); }, []); if (stateOrganisasi.findMany.loading) { return (
); } if (!stateOrganisasi.findMany.data || stateOrganisasi.findMany.data.length === 0) { return ( Belum ada struktur organisasi yang ditambahkan ); } const posisiMap = new Map(); for (const pegawai of stateOrganisasi.findMany.data) { const posisiId = pegawai.posisi.id; if (!posisiMap.has(posisiId)) { posisiMap.set(posisiId, { ...pegawai.posisi, pegawaiList: [], children: [], }); } posisiMap.get(posisiId)!.pegawaiList.push(pegawai); } let root: any[] = []; posisiMap.forEach((posisi) => { if (posisi.parentId) { const parent = posisiMap.get(posisi.parentId); if (parent) { parent.children.push(posisi); } } else { root.push(posisi); } }); function toOrgChartFormat(node: any): any { return { expanded: true, type: 'person', styleClass: 'p-person', data: { name: node.pegawaiList?.[0]?.namaLengkap || 'Belum ada pegawai', status: node.nama, image: node.pegawaiList?.[0]?.image?.link || '/img/default.png', }, children: node.children.map(toOrgChartFormat), }; } const chartData = root.map(toOrgChartFormat); return ( ); } function nodeTemplate(node: any) { const imageSrc = node?.data?.image || '/img/default.png'; const name = node?.data?.name || 'Tanpa Nama'; const status = node?.data?.status || 'Tidak ada deskripsi'; return ( {name} {name} {status} ); } export default StrukturOrganisasiPPID;