@@ -3,6 +3,7 @@ import { Label } from '@/components/ui/label';
33import { Button } from '@/components/ui/button' ;
44import { Spinner } from '@/components/ui/spinner' ;
55import { DataTable , DataTableColumn } from '@/components/ui/data-table' ;
6+ import { Card , CardContent } from '@/components/ui/card' ;
67import { Tooltip , TooltipContent , TooltipProvider , TooltipTrigger } from '@/components/ui/tooltip' ;
78import { QueryHistoryDropdown , QueryHistoryHandle } from './query-history' ;
89
@@ -11,6 +12,7 @@ import { QueryHistoryDropdown, QueryHistoryHandle } from './query-history';
1112// ---------------------------------------------------------------------------
1213
1314const MAX_RESULT_ROWS = 10_000 ;
15+ const MAX_DISCOVERED_VIEWS = 30 ;
1416
1517export interface TemplateQuery {
1618 label : string ;
@@ -139,54 +141,73 @@ export function SQLConsoleCore({ executeQuery, defaultQuery = '', historySource
139141 return (
140142 < div className = "min-w-0 max-w-full p-5" >
141143 { templateQueries && templateQueries . length > 0 && (
142- < div className = "mb-4" >
144+ < div className = "mb-4 space-y-3 " >
143145 < Label className = "mb-1 block" > Quick Queries</ Label >
144- { templateDocsUrl && (
145- < a
146- href = { templateDocsUrl }
147- target = "_blank"
148- rel = "noopener noreferrer"
149- className = "text-xs text-muted-foreground hover:text-foreground underline mb-2 inline-block" >
150- Learn more about client architecture
151- </ a >
146+ < Card >
147+ < CardContent className = "p-3 space-y-2" >
148+ < p className = "text-xs text-muted-foreground" >
149+ PowerSync internal tables.{ ' ' }
150+ { templateDocsUrl && (
151+ < a
152+ href = { templateDocsUrl }
153+ target = "_blank"
154+ rel = "noopener noreferrer"
155+ className = "hover:text-foreground underline" >
156+ Learn more about client architecture
157+ </ a >
158+ ) }
159+ </ p >
160+ < div className = "flex flex-wrap gap-2" >
161+ < TooltipProvider delayDuration = { 200 } >
162+ { templateQueries . map ( ( tq ) => (
163+ < Tooltip key = { tq . label } >
164+ < TooltipTrigger asChild >
165+ < Button
166+ variant = "outline"
167+ size = "sm"
168+ onClick = { ( ) => {
169+ historyHandleRef . current ?. setQuery ( tq . query ) ;
170+ runQuery ( tq . query ) ;
171+ } } >
172+ { tq . label }
173+ </ Button >
174+ </ TooltipTrigger >
175+ < TooltipContent className = "max-w-xs" >
176+ < p > { tq . tooltip } </ p >
177+ </ TooltipContent >
178+ </ Tooltip >
179+ ) ) }
180+ </ TooltipProvider >
181+ </ div >
182+ </ CardContent >
183+ </ Card >
184+ { discoveredTables . length > 0 && (
185+ < Card >
186+ < CardContent className = "p-3 space-y-2" >
187+ < p className = "text-xs text-muted-foreground" >
188+ Views discovered from the database schema.
189+ { discoveredTables . length > MAX_DISCOVERED_VIEWS && ` Showing first ${ MAX_DISCOVERED_VIEWS } of ${ discoveredTables . length } .` }
190+ </ p >
191+ < div className = "flex flex-wrap gap-2" >
192+ { discoveredTables . slice ( 0 , MAX_DISCOVERED_VIEWS ) . map ( ( name ) => {
193+ const query = `SELECT * FROM ${ name } ` ;
194+ return (
195+ < Button
196+ key = { name }
197+ variant = "outline"
198+ size = "sm"
199+ onClick = { ( ) => {
200+ historyHandleRef . current ?. setQuery ( query ) ;
201+ runQuery ( query ) ;
202+ } } >
203+ { name }
204+ </ Button >
205+ ) ;
206+ } ) }
207+ </ div >
208+ </ CardContent >
209+ </ Card >
152210 ) }
153- < div className = "flex flex-wrap gap-2" >
154- < TooltipProvider delayDuration = { 200 } >
155- { templateQueries . map ( ( tq ) => (
156- < Tooltip key = { tq . label } >
157- < TooltipTrigger asChild >
158- < Button
159- variant = "outline"
160- size = "sm"
161- onClick = { ( ) => {
162- historyHandleRef . current ?. setQuery ( tq . query ) ;
163- runQuery ( tq . query ) ;
164- } } >
165- { tq . label }
166- </ Button >
167- </ TooltipTrigger >
168- < TooltipContent className = "max-w-xs" >
169- < p > { tq . tooltip } </ p >
170- </ TooltipContent >
171- </ Tooltip >
172- ) ) }
173- </ TooltipProvider >
174- { discoveredTables . map ( ( name ) => {
175- const query = `SELECT * FROM ${ name } ` ;
176- return (
177- < Button
178- key = { name }
179- variant = "outline"
180- size = "sm"
181- onClick = { ( ) => {
182- historyHandleRef . current ?. setQuery ( query ) ;
183- runQuery ( query ) ;
184- } } >
185- { name }
186- </ Button >
187- ) ;
188- } ) }
189- </ div >
190211 </ div >
191212 ) }
192213 < div className = "flex flex-wrap items-end gap-2.5 mb-4" >
0 commit comments