Added download functionality.

This commit is contained in:
Mike Cao 2025-07-22 00:24:37 -07:00
parent 0debe89d05
commit 7670ec4136
17 changed files with 216 additions and 5 deletions

View file

@ -0,0 +1,41 @@
import Papa from 'papaparse';
import { Button, Icon, TooltipPopup } from 'react-basics';
import Icons from '@/components/icons';
import { useMessages } from '@/components/hooks';
export function DownloadButton({
filename = 'data',
data,
}: {
filename?: string;
data?: any;
onClick?: () => void;
}) {
const { formatMessage, labels } = useMessages();
const handleClick = async () => {
downloadCsv(`${filename}.csv`, Papa.unparse(data));
};
return (
<TooltipPopup label={formatMessage(labels.download)} position="top">
<Button variant="quiet" onClick={handleClick} disabled={!data}>
<Icon>
<Icons.Download />
</Icon>
</Button>
</TooltipPopup>
);
}
function downloadCsv(filename: string, data: any) {
const blob = new Blob([data], { type: 'text/csv' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}