import React, { useState } from "react"; import { Ionicons, MaterialIcons } from "@expo/vector-icons"; // I import { View, Text, StyleSheet, Button, Modal, TouchableOpacity, FlatList, } from "react-native"; import * as Print from "expo-print"; import * as FileSystem from "expo-file-system"; import { useNavigation } from "@react-navigation/native"; // Import useNavigation untuk navigasi const Laporan = () => { const navigation = useNavigation(); const [bulan, setBulan] = useState("Januari"); const [modalVisible, setModalVisible] = useState(false); const [selectedReport, setSelectedReport] = useState(null); const data = { tpsData: [ { tps: "TPS 1", jumlah: 150 }, { tps: "TPS 2", jumlah: 200 }, { tps: "TPS 3", jumlah: 180 }, ], pengaduanData: [ { bulan: "Januari", jumlah: 25 }, { bulan: "Februari", jumlah: 30 }, { bulan: "Maret", jumlah: 18 }, ], penukaranKoinData: [ { bulan: "Januari", jumlah: 1500 }, { bulan: "Februari", jumlah: 2000 }, { bulan: "Maret", jumlah: 1200 }, ], donasiData: [ { bulan: "Januari", jumlah: 100000 }, { bulan: "Februari", jumlah: 120000 }, { bulan: "Maret", jumlah: 80000 }, ], }; const filterDataByMonth = (month) => { const filteredData = { tpsData: data.tpsData, pengaduanData: data.pengaduanData.filter((item) => item.bulan === month), penukaranKoinData: data.penukaranKoinData.filter( (item) => item.bulan === month ), donasiData: data.donasiData.filter((item) => item.bulan === month), }; return filteredData; }; const generatePDF = async (reportType) => { const filteredData = filterDataByMonth(bulan); let htmlContent = ""; if (reportType === "tps") { htmlContent = `

Laporan TPS di Nganjuk

${filteredData.tpsData .map( (item) => ` ` ) .join("")}
TPS Jumlah
${item.tps} ${item.jumlah}
`; } else if (reportType === "pengaduan") { htmlContent = `

Laporan Pengaduan Sampah - ${bulan}

${filteredData.pengaduanData .map( (item) => ` ` ) .join("")}
Bulan Jumlah Pengaduan
${item.bulan} ${item.jumlah}
`; } else if (reportType === "penukaran") { htmlContent = `

Laporan Penukaran Koin - ${bulan}

${filteredData.penukaranKoinData .map( (item) => ` ` ) .join("")}
Bulan Jumlah Koin
${item.bulan} ${item.jumlah}
`; } else if (reportType === "donasi") { htmlContent = `

Laporan Donasi - ${bulan}

${filteredData.donasiData .map( (item) => ` ` ) .join("")}
Bulan Jumlah Donasi
${item.bulan} Rp ${item.jumlah.toLocaleString()}
`; } try { const { uri } = await Print.printToFileAsync({ html: htmlContent }); console.log("PDF berhasil dibuat di:", uri); alert(`PDF berhasil dibuat! File disimpan di: ${uri}`); } catch (error) { console.error("Error saat membuat PDF:", error); alert("Gagal membuat PDF."); } }; const months = [ "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember", ]; return ( {/* Laporan Data */} navigation.navigate("AdminScreen")} > LAPORAN {/* Tombol untuk Memilih Laporan */} { setSelectedReport("tps"); setModalVisible(true); }} > TPS di Nganjuk { setSelectedReport("pengaduan"); setModalVisible(true); }} > Pengaduan Sampah { setSelectedReport("penukaran"); setModalVisible(true); }} > Penukaran Koin { setSelectedReport("donasi"); setModalVisible(true); }} > Donasi {/* Modal untuk memilih bulan */} setModalVisible(false)} > Pilih Bulan item} renderItem={({ item }) => ( { setBulan(item); generatePDF(selectedReport); setModalVisible(false); }} > {item} )} /> setModalVisible(false)} > Tutup ); }; const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: "#fff", padding: 16, }, header: { marginTop: 40, flexDirection: "row", alignItems: "center", marginBottom: 20, }, backButton: { marginRight: 12, }, title: { fontSize: 22, fontWeight: "bold", color: "#000", }, headerTitle: { fontSize: 22, fontWeight: "bold", marginBottom: 20, textAlign: "center", }, buttonContainer: { marginBottom: 20, flexDirection: "row", flexWrap: "wrap", justifyContent: "space-around", }, reportButton: { backgroundColor: "#2D572C", padding: 20, borderRadius: 8, marginBottom: 10, width: "100%", alignItems: "center", }, buttonText: { color: "#fff", fontSize: 20, textAlign: "center", }, modalContainer: { flex: 1, justifyContent: "center", alignItems: "center", backgroundColor: "rgba(0, 0, 0, 0.5)", }, modalContent: { backgroundColor: "#fff", padding: 20, borderRadius: 10, width: 300, }, modalTitle: { fontSize: 18, fontWeight: "bold", marginBottom: 10, textAlign: "center", }, monthButton: { backgroundColor: "#4CAF50", margin: 5, padding: 10, borderRadius: 5, flex: 1, justifyContent: "center", alignItems: "center", }, monthButtonText: { color: "#fff", fontSize: 14, }, closeButton: { backgroundColor: "#ddd", padding: 10, borderRadius: 5, marginTop: 20, alignItems: "center", borderWidth: 1, }, closeButtonText: { color: "#000", fontSize: 16, }, }); export default Laporan;