in src/components/CompareResults/DownloadButton.tsx [90:140]
function DownloadButton({ resultsPromise }: DownloadButtonProps) {
const activeComparison = useAppSelector(
(state) => state.comparison.activeComparison,
);
const fileName = useAppSelector((state: RootState) => {
if (
state.comparison.activeComparison ===
Strings.components.comparisonRevisionDropdown.allRevisions.key
) {
return 'perf-compare-all-revisions.json';
} else {
return `perf-compare-${truncateHash(
state.comparison.activeComparison,
)}.json`;
}
});
const handleDownloadClick = async () => {
const results = await resultsPromise;
const processedResults = generateJsonDataFromComparisonResults(
activeComparison,
results,
);
const blob = new Blob([processedResults], {
type: 'application/json',
});
const blobUrl = URL.createObjectURL(blob);
// Trigger the download programmatically
const downloadLink = document.createElement('a');
downloadLink.href = blobUrl;
downloadLink.download = fileName;
downloadLink.click();
// Clean up the URL object
URL.revokeObjectURL(blobUrl);
};
return (
<div className={styles.downloadButton}>
<Button
variant='contained'
color='secondary'
onClick={() => void handleDownloadClick()}
>
Download JSON
</Button>
</div>
);
}