Skip to content

Commit 841bba0

Browse files
committed
Preview lance table in folder browser
1 parent 4f041ad commit 841bba0

4 files changed

Lines changed: 29 additions & 6 deletions

File tree

smoosense-gui/src/components/db/DBContent.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { ResizablePanels } from '@/components/ui/resizable-panels'
55
import { Badge } from '@/components/ui/badge'
66
import { AlertCircle, Database, Loader2, Table } from 'lucide-react'
77
import { pathJoin } from '@/lib/utils/pathUtils'
8-
import TablePreview from './TablePreview'
8+
import LanceTablePreview from './LanceTablePreview'
99

1010
export interface TableInfo {
1111
name: string
@@ -151,7 +151,7 @@ export default function DBContent({ dbPath }: { dbPath: string }) {
151151
className="h-full"
152152
>
153153
<TablesList tables={tables} selectedTable={selectedTable} onTableClick={handleTableClick} onTableDoubleClick={handleTableDoubleClick} />
154-
<TablePreview dbPath={dbPath} tableName={selectedTable} tableInfo={selectedTableInfo} />
154+
<LanceTablePreview dbPath={dbPath} tableName={selectedTable} tableInfo={selectedTableInfo} />
155155
</ResizablePanels>
156156
</div>
157157
)
File renamed without changes.

smoosense-gui/src/components/folder-browser/FSItemPreview.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { FileText, Download, ExternalLink, FolderOpen } from 'lucide-react'
44
import { useAppSelector } from '@/lib/hooks'
55
import { getFileType, FileType } from '@/lib/utils/fileTypes'
6-
import { pathBasename } from '@/lib/utils/pathUtils'
6+
import { pathBasename, pathDirname } from '@/lib/utils/pathUtils'
77
import { type TreeNode } from '@/lib/features/folderTree/folderTreeSlice'
88
import { getFileUrl } from '@/lib/utils/apiUtils'
99
import CopyToClipboard from '@/components/ui/CopyToClipboard'
@@ -17,6 +17,7 @@ import JsonPreviewer from './previewers/JsonPreviewer'
1717
import YamlPreviewer from './previewers/YamlPreviewer'
1818
import ColumnarTablePreviewer from './previewers/ColumnarTablePreviewer'
1919
import RowTablePreviewer from './previewers/RowTablePreviewer'
20+
import LanceTablePreview from '@/components/db/LanceTablePreview'
2021
import 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
4955
function 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(/\.lance$/, '')
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} />

smoosense-gui/src/components/folder-browser/TreeNodeComponent.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,18 @@ export default function TreeNodeComponent({ node, style }: TreeNodeComponentProp
9090
const handleOpenInNewTab = useCallback((e: React.MouseEvent) => {
9191
e.stopPropagation()
9292
e.preventDefault()
93+
94+
// For .lance folders, open in Table view
95+
if (nodeData.name.endsWith('.lance')) {
96+
const url = `./Table?tablePath=${encodeURIComponent(nodeData.path)}`
97+
window.open(url, '_blank')
98+
return
99+
}
100+
101+
// For other folders, open in FolderBrowser
93102
const url = `./FolderBrowser?rootFolder=${encodeURIComponent(nodeData.path)}`
94103
window.open(url, '_blank')
95-
}, [nodeData.path])
104+
}, [nodeData.path, nodeData.name])
96105

97106
const handleRefresh = useCallback((e: React.MouseEvent) => {
98107
e.stopPropagation()

0 commit comments

Comments
 (0)