import type { BookType } from 'xlsx' import { flatten } from 'flat' import { ChevronDownIcon, DownloadIcon, FileSpreadsheetIcon, FileTextIcon } from 'lucide-react' import * as XLSX from 'xlsx' import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from './ui/dropdown-menu' import { Button } from './ui/button' export function ExportMenu({ name, headers, selectedRows = [] }: { name: string headers: Record selectedRows: object[] }) { const exportFile = (bookType: BookType) => () => { if (!selectedRows.length) { return } const header = Object.keys(headers) const data = selectedRows.map((data) => { const obj: Record = flatten(data) return Object.fromEntries(header.map((k) => [k, obj?.[k]])) }) const workbook = XLSX.utils.book_new() const worksheet = XLSX.utils.json_to_sheet(data, { header }) XLSX.utils.sheet_add_aoa(worksheet, [Object.values(headers)], { origin: 'A1' }) XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1') XLSX.writeFile(workbook, `${name}_${+new Date()}.${bookType}`, { bookType, compression: true }) } return ( Microsoft Excel (.xlsx) CSV (.csv) ) }