import * as React from 'react' import { useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import Loading from '@/app/components/base/loading' import { useSQLiteDatabase } from '../../hooks/use-sqlite-database' import { PREVIEW_ROW_LIMIT } from './constants' import TablePanel from './table-panel' import TableSelector from './table-selector' import { useSQLiteTable } from './use-sqlite-table' type SQLiteFilePreviewProps = { downloadUrl: string } const SQLiteFilePreview = ({ downloadUrl, }: SQLiteFilePreviewProps) => { const { t } = useTranslation('workflow') const { tables, isLoading, error, queryTable } = useSQLiteDatabase(downloadUrl) const [selectedTableId, setSelectedTableId] = useState('') const tableScrollRef = useRef(null) const selectedTable = useMemo(() => { if (tables.length === 0) return '' if (selectedTableId && tables.includes(selectedTableId)) return selectedTableId return tables[0] }, [selectedTableId, tables]) const tableState = useSQLiteTable({ selectedTable, queryTable }) const isTruncated = tableState.data !== null && tableState.data.values.length >= PREVIEW_ROW_LIMIT if (!downloadUrl) { return (
{t('skillEditor.previewUnavailable')}
) } if (isLoading) { return (
) } if (error) { return (
{t('skillSidebar.sqlitePreview.loadError')}
) } if (tables.length === 0) { return (
{t('skillSidebar.sqlitePreview.emptyTables')}
) } return (
) } export default React.memo(SQLiteFilePreview)