import { Button } from '@/components/button/button'; import { CodeSnippet } from '@/components/code-snippet/code-snippet'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/dialog/dialog'; import { Label } from '@/components/label/label'; import { Spinner } from '@/components/spinner/spinner'; import { useChartDB } from '@/hooks/use-chartdb'; import { useDialog } from '@/hooks/use-dialog'; import { exportBaseSQL, exportSQL, } from '@/lib/data/export-metadata/export-sql-script'; import { databaseTypeToLabelMap } from '@/lib/databases'; import { DatabaseType } from '@/lib/domain/database-type'; import { DialogProps } from '@radix-ui/react-dialog'; import { WandSparkles } from 'lucide-react'; import React, { useCallback, useEffect } from 'react'; export interface ExportSQLDialogProps { dialog: DialogProps; targetDatabaseType: DatabaseType; } export const ExportSQLDialog: React.FC = ({ dialog, targetDatabaseType, }) => { const { closeExportSQLDialog } = useDialog(); const { currentDiagram } = useChartDB(); const [script, setScript] = React.useState(); const exportSQLScript = useCallback(async () => { if (targetDatabaseType === DatabaseType.GENERIC) { return Promise.resolve(exportBaseSQL(currentDiagram)); } else { return exportSQL(currentDiagram, targetDatabaseType); } }, [targetDatabaseType, currentDiagram]); useEffect(() => { if (!dialog.open) return; setScript(undefined); const fetchScript = async () => { const script = await exportSQLScript(); setScript(script); }; fetchScript(); }, [dialog.open, setScript, exportSQLScript]); const renderLoader = useCallback( () => (
), [targetDatabaseType] ); return ( { if (!open) { closeExportSQLDialog(); } }} > Export SQL Export the SQL of the current diagram
{(script?.length ?? 0) === 0 ? ( renderLoader() ) : ( )}
); };