@@ -6,6 +6,14 @@ import { ScrollArea } from '@/components/ui/scroll-area';
66import { SelectedTable , TableInfo } from "@/features/database/types" ;
77import { CreateTableDialog } from '@/features/schema-explorer/components' ;
88import { useTableExplorerPanel } from '../hooks/useTableExplorerPanel' ;
9+ import {
10+ ContextMenu ,
11+ ContextMenuContent ,
12+ ContextMenuItem ,
13+ ContextMenuTrigger ,
14+ } from "@/components/ui/context-menu" ;
15+ import InsertDataDialog from '@/features/database/components/InsertDataDialog' ;
16+ import DropTableDialog from '@/features/schema-explorer/components/DropTableDialog' ;
917
1018
1119interface TablesExplorerPanelProps {
@@ -36,7 +44,11 @@ export default function TablesExplorerPanel({
3644 setFilter,
3745 toggleFavorite,
3846 filteredTables,
39- isSelected
47+ isSelected,
48+ insertTableData,
49+ setInsertTableData,
50+ dropTableData,
51+ setDropTableData
4052 } = useTableExplorerPanel ( {
4153 dbId,
4254 tables,
@@ -108,36 +120,47 @@ export default function TablesExplorerPanel({
108120 </ div >
109121 ) : (
110122 filteredTables . map ( ( table ) => (
111- < button
112- key = { `${ table . schema } .${ table . name } ` }
113- onClick = { ( ) => onSelectTable ( table . name , table . schema ) }
114- className = { `
115- w-full flex items-center justify-between px-3 py-2 rounded-md
116- transition-all duration-150 text-left group border border-transparent
117- ${ isSelected ( table )
118- ? 'bg-primary/10 text-primary border-primary/20 shadow-sm'
119- : 'hover:bg-muted/55 hover:border-border/50 text-foreground'
120- }
121- ` }
122- >
123- < div className = "flex items-center gap-2 flex-1 min-w-0" >
123+ < ContextMenu key = { `${ table . schema } .${ table . name } ` } >
124+ < ContextMenuTrigger asChild >
124125 < button
125- onClick = { ( e ) => {
126- e . stopPropagation ( ) ;
127- toggleFavorite ( table . name ) ;
128- } }
129- className = "shrink-0"
126+ onClick = { ( ) => onSelectTable ( table . name , table . schema ) }
127+ className = { `
128+ w-full flex items-center justify-between px-3 py-2 rounded-md
129+ transition-all duration-150 text-left group border border-transparent
130+ ${ isSelected ( table )
131+ ? 'bg-primary/10 text-primary border-primary/20 shadow-sm'
132+ : 'hover:bg-muted/55 hover:border-border/50 text-foreground'
133+ }
134+ ` }
130135 >
131- < Star
132- className = { `h-3.5 w-3.5 ${ favorites . has ( table . name )
133- ? 'fill-yellow-500 text-yellow-500'
134- : 'text-muted-foreground opacity-0 group-hover:opacity-100'
135- } `}
136- />
136+ < div className = "flex items-center gap-2 flex-1 min-w-0" >
137+ < button
138+ onClick = { ( e ) => {
139+ e . stopPropagation ( ) ;
140+ toggleFavorite ( table . name ) ;
141+ } }
142+ className = "shrink-0"
143+ >
144+ < Star
145+ className = { `h-3.5 w-3.5 ${ favorites . has ( table . name )
146+ ? 'fill-yellow-500 text-yellow-500'
147+ : 'text-muted-foreground opacity-0 group-hover:opacity-100'
148+ } `}
149+ />
150+ </ button >
151+ < span className = "text-sm font-medium truncate font-mono" > { table . name } </ span >
152+ </ div >
137153 </ button >
138- < span className = "text-sm font-medium truncate font-mono" > { table . name } </ span >
139- </ div >
140- </ button >
154+ </ ContextMenuTrigger >
155+ < ContextMenuContent >
156+ < ContextMenuItem onClick = { ( ) => setInsertTableData ( table ) } >
157+ Insert Data
158+ </ ContextMenuItem >
159+ < ContextMenuItem onClick = { ( ) => setDropTableData ( table ) } className = "text-destructive" >
160+ Delete Table
161+ </ ContextMenuItem >
162+ </ ContextMenuContent >
163+ </ ContextMenu >
141164 ) )
142165 ) }
143166 </ div >
@@ -155,6 +178,26 @@ export default function TablesExplorerPanel({
155178 onOpenChange = { setCreateTableOpen }
156179 schemaName = { selectedSchema }
157180 />
181+
182+ { insertTableData && (
183+ < InsertDataDialog
184+ open = { ! ! insertTableData }
185+ onOpenChange = { ( open ) => ! open && setInsertTableData ( null ) }
186+ dbId = { dbId }
187+ schemaName = { insertTableData . schema || "public" }
188+ tableName = { insertTableData . name }
189+ />
190+ ) }
191+
192+ { dropTableData && (
193+ < DropTableDialog
194+ open = { ! ! dropTableData }
195+ onOpenChange = { ( open ) => ! open && setDropTableData ( null ) }
196+ dbId = { dbId }
197+ schemaName = { dropTableData . schema || "public" }
198+ tableName = { dropTableData . name }
199+ />
200+ ) }
158201 </ div >
159202 </ div >
160203 ) ;
0 commit comments