import React from 'react'; import { openToast, ToastBody } from '@mongodb-js/compass-components'; import path from 'path'; import revealFile from '../utils/reveal-file'; import type { CSVExportPhase } from '../export/export-csv'; const exportToastId = 'export-toast'; const docsWrittenText = (docsWritten: number) => { return `${docsWritten} document${docsWritten !== 1 ? 's' : ''} written.`; }; export function showInProgressToast({ filePath, namespace, cancelExport, docsWritten, csvPhase, }: { filePath: string; namespace: string; cancelExport: () => void; docsWritten: number; csvPhase?: CSVExportPhase; }) { let statusMessage = docsWrittenText(docsWritten); if (csvPhase === 'DOWNLOAD') { statusMessage = `Processing documents before exporting, ${docsWritten} document${ docsWritten !== 1 ? 's' : '' } processed.`; } // Update the toast with the new progress. openToast(exportToastId, { title: `Exporting "${namespace}" to ${path.basename(filePath)}…`, description: ( ), progress: undefined, // Don't show progress as there is no total document count. variant: 'progress', dismissible: false, }); } export function showStartingToast({ namespace, cancelExport, }: { namespace: string; cancelExport: () => void; }) { openToast(exportToastId, { title: `Exporting "${namespace}"…`, description: ( ), variant: 'progress', dismissible: false, }); } export function showCompletedToast({ docsWritten, filePath, }: { docsWritten: number; filePath: string; }) { openToast(exportToastId, { title: 'Export completed.', description: ( revealFile(filePath)} actionText="show file" /> ), variant: 'success', }); } export function showCancelledToast({ docsWritten, filePath, }: { filePath: string; docsWritten: number; }) { openToast(exportToastId, { title: 'Export aborted.', description: docsWritten > 0 ? ( revealFile(filePath)} actionText="show file" /> ) : null, variant: 'warning', }); } export function showFailedToast(err: Error | undefined) { openToast(exportToastId, { title: 'Failed to export with the following error:', description: err?.message, variant: 'warning', }); }