33import { FileText , Download , ExternalLink , FolderOpen } from 'lucide-react'
44import { useAppSelector } from '@/lib/hooks'
55import { getFileType , FileType } from '@/lib/utils/fileTypes'
6- import { pathBasename } from '@/lib/utils/pathUtils'
6+ import { pathBasename , pathDirname } from '@/lib/utils/pathUtils'
77import { type TreeNode } from '@/lib/features/folderTree/folderTreeSlice'
88import { getFileUrl } from '@/lib/utils/apiUtils'
99import CopyToClipboard from '@/components/ui/CopyToClipboard'
@@ -17,6 +17,7 @@ import JsonPreviewer from './previewers/JsonPreviewer'
1717import YamlPreviewer from './previewers/YamlPreviewer'
1818import ColumnarTablePreviewer from './previewers/ColumnarTablePreviewer'
1919import RowTablePreviewer from './previewers/RowTablePreviewer'
20+ import LanceTablePreview from '@/components/db/LanceTablePreview'
2021import AlbumPreviewer from './previewers/AlbumPreviewer'
2122
2223// Dynamic imports to avoid SSR issues
@@ -45,6 +46,11 @@ function findNodeById(node: TreeNode | null, targetId: string): TreeNode | null
4546 return null
4647}
4748
49+ // Helper function to check if a folder is a Lance table
50+ function isLanceFolder ( folder : TreeNode ) : boolean {
51+ return folder . isDir && folder . name . endsWith ( '.lance' )
52+ }
53+
4854// Helper function to check if a folder likely contains media files
4955function folderLikelyContainsMedia ( folder : TreeNode ) : boolean {
5056 if ( ! folder . isDir || ! folder . children ) return false
@@ -102,8 +108,9 @@ export default function FSItemPreview() {
102108 }
103109 }
104110
105- // Check if the file type supports table view
106- const isTableType = fileType === FileType . ColumnarTable || fileType === FileType . RowTable
111+ // Check if the file type supports table view (including .lance folders)
112+ const isLanceTable = viewingItem ? isLanceFolder ( viewingItem ) : false
113+ const isTableType = fileType === FileType . ColumnarTable || fileType === FileType . RowTable || isLanceTable
107114
108115 const renderContent = ( ) => {
109116 if ( ! viewingItem ) {
@@ -121,6 +128,13 @@ export default function FSItemPreview() {
121128 )
122129 }
123130
131+ // Handle .lance directories (Lance tables)
132+ if ( isLanceFolder ( viewingItem ) ) {
133+ const dbPath = pathDirname ( viewingItem . path )
134+ const tableName = viewingItem . name . replace ( / \. l a n c e $ / , '' )
135+ return < LanceTablePreview dbPath = { dbPath } tableName = { tableName } tableInfo = { null } />
136+ }
137+
124138 // Handle directories that contain media files
125139 if ( viewingItem . isDir && folderLikelyContainsMedia ( viewingItem ) ) {
126140 return < AlbumPreviewer item = { viewingItem } />
0 commit comments