import * as XLSX from "xlsx"; import { getMediaTrackingResult } from "@/service/media-tracking/media-tracking"; import { saveAs } from "file-saver"; type ExportParams = { mediaTrackingId: number; }; export async function exportMediaTrackingToExcel({ mediaTrackingId, }: ExportParams) { let page = 0; let totalPages = 1; const allData: any[] = []; while (page < totalPages) { const res = await getMediaTrackingResult({ id: mediaTrackingId, page, }); const data = res?.data?.data; if (!data) break; totalPages = data.totalPages; allData.push(...data.content); page++; } if (allData.length === 0) { throw new Error("Tidak ada data untuk di-export"); } function extractDomain(url?: string): string { if (!url) return "-"; try { return new URL(url).hostname; } catch { return "-"; } } const rows = allData.map((item, index) => ({ No: index + 1, "Media Online": extractDomain(item.link), "Judul Berita": item.title ?? "-", "Link Berita": item.link ?? "-", Validasi: item.validationStatus ?? "-", View: item.viewCount ?? 0, Share: item.shareCount ?? 0, Komentar: item.commentCount ?? 0, Tanggal: item.createdAt ? new Date(item.createdAt).toLocaleString("id-ID") : "-", })); const worksheet = XLSX.utils.json_to_sheet(rows); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, "Media Tracking"); const excelBuffer = XLSX.write(workbook, { bookType: "xlsx", type: "array", }); const blob = new Blob([excelBuffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", }); saveAs(blob, `media-tracking-${mediaTrackingId}.xlsx`); }