add loader for loading scripts (#265)

This commit is contained in:
Guy Ben-Aharon
2024-10-08 19:45:29 +03:00
committed by GitHub
parent d35127576d
commit 5956018cdc
2 changed files with 33 additions and 27 deletions

View File

@@ -8,6 +8,7 @@ export interface CodeSnippetProps {
codeProps?: CopyBlockProps; codeProps?: CopyBlockProps;
code: string; code: string;
language?: 'sql' | 'bash'; language?: 'sql' | 'bash';
loading?: boolean;
} }
const CopyBlock = React.lazy(() => const CopyBlock = React.lazy(() =>
@@ -19,21 +20,25 @@ const CopyBlock = React.lazy(() =>
); );
export const CodeSnippet: React.FC<CodeSnippetProps> = React.memo( export const CodeSnippet: React.FC<CodeSnippetProps> = React.memo(
({ className, codeProps, code, language = 'sql' }) => ( ({ className, codeProps, code, loading, language = 'sql' }) => (
<div className={cn('flex flex-1 justify-center', className)}> <div className={cn('flex flex-1 justify-center', className)}>
<Suspense fallback={<Spinner />}> {loading ? (
<CopyBlock <Spinner />
language={language} ) : (
text={code} <Suspense fallback={<Spinner />}>
customStyle={{ <CopyBlock
display: 'flex', language={language}
flex: '1', text={code}
fontSize: '14px', customStyle={{
width: '100%', display: 'flex',
}} flex: '1',
{...codeProps} fontSize: '14px',
/> width: '100%',
</Suspense> }}
{...codeProps}
/>
</Suspense>
)}
</div> </div>
) )
); );

View File

@@ -71,12 +71,7 @@ export const ImportDatabase: React.FC<ImportDatabaseProps> = ({
>(); >();
const { t } = useTranslation(); const { t } = useTranslation();
const [importMetadataScripts, setImportMetadataScripts] = const [importMetadataScripts, setImportMetadataScripts] =
useState<ImportMetadataScripts>( useState<ImportMetadataScripts | null>(null);
Object.values(DatabaseType).reduce((acc, val) => {
acc[val] = () => '';
return acc;
}, {} as ImportMetadataScripts)
);
useEffect(() => { useEffect(() => {
const loadScripts = async () => { const loadScripts = async () => {
@@ -252,19 +247,25 @@ export const ImportDatabase: React.FC<ImportDatabaseProps> = ({
</div> </div>
<CodeSnippet <CodeSnippet
className="max-h-40 w-full" className="max-h-40 w-full"
code={importMetadataScripts[databaseType]({ loading={!importMetadataScripts}
databaseEdition, code={
databaseClient, importMetadataScripts?.[databaseType]?.({
})} databaseEdition,
databaseClient,
}) ?? ''
}
language={databaseClient ? 'bash' : 'sql'} language={databaseClient ? 'bash' : 'sql'}
/> />
</Tabs> </Tabs>
) : ( ) : (
<CodeSnippet <CodeSnippet
className="max-h-40 w-full" className="max-h-40 w-full"
code={importMetadataScripts[databaseType]({ loading={!importMetadataScripts}
databaseEdition, code={
})} importMetadataScripts?.[databaseType]?.({
databaseEdition,
}) ?? ''
}
/> />
)} )}
</div> </div>