'use client'; import { useState } from 'react'; import { Button, Dialog, DialogTitle, DialogContent, DialogActions, FormControl, Select, MenuItem, FormControlLabel, Checkbox, Stack, Paper, styled, TextField } from '@mui/material'; import FileUploadIcon from '@mui/icons-material/FileUpload'; import * as XLSX from 'xlsx'; import { saveAs } from 'file-saver'; import { DataGrid } from '@mui/x-data-grid'; import { columns } from './constants'; import { rows } from './mockData'; const paginationModel = { page: 0, pageSize: 50 }; export default function TransactionTable() { const [open, setOpen] = useState(false); const [fileType, setFileType] = useState<'csv' | 'xls' | 'xlsx'>('csv'); const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); const handleExport = () => { const exportRows = onlyCurrentTable ? rows.slice(0, 5) : rows; const exportData = [ columns.map(col => col.headerName), // @ts-expect-error - Dynamic field access from DataGrid columns ...exportRows.map(row => columns.map(col => row[col.field] ?? '')), ]; const worksheet = XLSX.utils.aoa_to_sheet(exportData); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, 'Transactions'); if (fileType === 'csv') { const csv = XLSX.utils.sheet_to_csv(worksheet); const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); saveAs(blob, 'transactions.csv'); } else { XLSX.writeFile(workbook, `transactions.${fileType}`, { bookType: fileType }); } setOpen(false); }; return ( console.log(`setSearchQuery(${e.target.value})`)} sx={{ width: 300 }} /> {/* Export Dialog */} setOpen(false)}> Export Transactions setOnlyCurrentTable(e.target.checked)} /> } label="Only export the results in the current table" sx={{ mt: 2 }} /> ); } const StyledPaper = styled(Paper)(() => ({ height: '90vh', }));