DataQuery Pro uses React components organized by functionality. UI primitives come from shadcn/ui.
| Category | Location | Purpose |
|---|---|---|
| Pages | app/*.tsx |
Route-level page components |
| Features | components/*.tsx |
Business logic components |
| UI | components/ui/*.tsx |
shadcn/ui primitives (do not edit) |
| Charts | components/charts/*.tsx |
Chart implementations |
layout.tsx
├── ThemeProvider
│ └── AuthProvider (SessionProvider, conditional)
│ └── OpenAIApiProvider (API key context)
│ └── DatabaseConnectionOptions (state context)
│ ├── Navigation (with user menu when auth enabled)
│ │ └── ApiKeyIndicator
│ ├── ErrorBoundary
│ │ └── ContentLoadingGate
│ │ └── [Page Component]
│ │ └── [Feature Components]
│ ├── DataMigrationDialog
│ └── Toaster
File: components/navigation.tsx
Top navigation bar. Reduced to one standalone link plus two grouped dropdowns
(standaloneLinks + navGroups, typed NavGroup, using a Radix DropdownMenu).
// Standalone
- Dashboard (/)
// "Data" dropdown
- Database (/database)
- Schema (/schema)
// "Query" dropdown
- Query (/query)
- History (/history)
- Learning (/learning)
- Reports (/reports)Features:
- Active route highlighting (blue indicator); group trigger highlights when any child route is active
- Theme toggle (dark/light mode)
- API key status indicator (when rate limiting enabled)
- Mobile responsive with collapsible menu (groups rendered as labeled sections)
- Skips rendering on /landing and /auth/login pages
- When auth is enabled and signed in, a profile dropdown (avatar/name/email, Admin badge)
with Profile (
/profile), Admin (/admin, only whenisAdmin), and Sign out. The Admin link lives here — it is no longer a top-level nav item.
File: components/schema-explorer.tsx
Interactive schema browser for viewing and editing database structure.
Features:
- Expandable table list
- Column details with types
- Edit descriptions inline
- Generate AI descriptions
- Hide/show tables and columns
- Bulk operations
Props:
interface SchemaExplorerProps {
schema: Schema;
onSchemaUpdate: (schema: Schema) => void;
readOnly?: boolean;
}File: components/query-results-display.tsx
Displays query results with multiple view modes.
Features:
- Table view with sorting/filtering
- Pagination
- Search across results
- Export to CSV
- Chart visualization mode
- Row count and execution time
- Automatic column type detection (text, number, currency, date, URL)
- Manual column type override via header badge dropdown
Props:
interface QueryResultsProps {
data: {
columns: string[];
rows: DataRows;
rowCount: number;
executionTime: number;
};
initialChartConfig?: ChartConfig; // seed a saved chart (no AI call)
onChartConfigChange?: (config: ChartConfig | null) => void;
onSaveChart?: (config: ChartConfig) => void; // shows "Save chart to report"
}File: components/chart-display.tsx
Renders charts based on configuration.
Features:
- Multiple chart types (bar, line, pie, area, scatter, composed)
- Responsive sizing
- Legend toggle
Props:
interface ChartDisplayProps {
config: ChartConfig; // type: "bar" | "line" | "pie" | "area" | "scatter" | "composed"
columns: string[];
rows: DataRows;
}File: components/saved-reports.tsx
List and management of saved reports.
Features:
- Filter by active connection
- Search reports
- Run reports (with parameter input)
- Edit/delete reports
- Clone reports (same connection)
- Copy reports to another connection (for dev/staging/prod workflows)
- Favorite reports
File: components/save-report-dialog.tsx
Dialog for saving queries as reports.
Features:
- Name and description input
- Parameter configuration
- SQL preview
Detailed documentation: Page Components
| Page | Route | File |
|---|---|---|
| Dashboard | / |
app/page.tsx |
| Database | /database |
app/database/page.tsx |
| Schema | /schema |
app/schema/page.tsx |
| Query | /query |
app/query/page.tsx |
| History | /history |
app/history/page.tsx |
| Learning | /learning |
app/learning/page.tsx |
| Reports | /reports |
app/reports/page.tsx |
| Profile | /profile |
app/profile/page.tsx |
| Admin | /admin |
app/admin/page.tsx |
| Landing | /landing |
app/landing/page.tsx |
| Auth Login | /auth/login |
app/auth/login/page.tsx |
Detailed documentation: Feature Components
saved-reports.tsx- Report listsave-report-dialog.tsx- Save dialogedit-report-dialog.tsx- Edit dialogparameter-config.tsx- Parameter setupparameter-input-dialog.tsx- Parameter inputexport-reports-dialog.tsx- Export reports to JSON / generate server-configreports.jsonimport-reports-dialog.tsx- Import reports from JSON (via contextsaveReport, both storage modes)
chart-display.tsx- Main chart rendererchart-customizer.tsx- Live chart-config editor (type/columns/labels/colors) +reshapeChartConfigcharts/bar-chart.tsx- Bar chartcharts/line-chart.tsx- Line chartcharts/pie-chart.tsx- Pie chartcharts/area-chart.tsx- Area chartcharts/scatter-chart.tsx- Scatter plotcharts/composed-chart.tsx- Mixed bars/lines/areas on shared axes
executive-metrics.tsx- Pinned-report KPI cards (wired to real query results)performance-chart.tsx- Pinned-report trend chart (wired to real query results)quick-actions.tsx- Quick action buttons (New Query, Reports, etc.)recent-reports.tsx- Recent reports displayscheduled-reports.tsx- Demo scheduled-delivery UI (hardcoded data)report-templates.tsx- Demo report template gallery (hardcoded data)
query-tab-content.tsx- Individual query tab with SQL, results, actionsfollowup-dialog.tsx- Follow-up question dialog with row limit selector
Detailed documentation: Infrastructure Components
auth-provider.tsx- Conditional next-auth SessionProvidercontent-loading-gate.tsx- Loading gate until context is initializeddata-migration-dialog.tsx- Import localStorage data on first authenticated loginshare-dialog.tsx- Share connections/reports with other usersconfirmation-modal.tsx- Generic confirm/cancel dialogerror-boundary.tsx- React error boundary with fallback UIopenai-api-provider.tsx- OpenAI API key (BYOK) context providerapi-key-dialog.tsx/api-key-indicator.tsx- BYOK key entry and status indicatornavigation.tsx,theme-provider.tsx,theme-toggle.tsx- Navigation and theming
Location: components/ui/
Important: Do not manually edit these files. Use shadcn CLI to update.
Common components used:
button.tsx- Button variantscard.tsx- Card containerdialog.tsx- Modal dialogsdropdown-menu.tsx- Dropdown menusinput.tsx- Text inputsselect.tsx- Select dropdownstable.tsx- Data tablestabs.tsx- Tab navigationtoast.tsx- Notifications
Adding new shadcn components:
npx shadcn@latest add [component-name]import { useDatabaseOptions } from '@/lib/database-connection-options';
function MyComponent() {
const { currentConnection, currentSchema } = useDatabaseOptions();
if (!currentConnection) {
return <NoConnectionMessage />;
}
return <ComponentContent />;
}// Check for data before rendering
{currentSchema && <SchemaExplorer schema={currentSchema} />}
// Loading state
{isLoading ? <Spinner /> : <Content />}
// Error state
{error && <Alert variant="destructive">{error}</Alert>}import { useToast } from '@/hooks/use-toast';
function MyComponent() {
const { toast } = useToast();
const handleSuccess = () => {
toast({
title: "Success",
description: "Operation completed"
});
};
const handleError = (error: Error) => {
toast({
title: "Error",
description: error.message,
variant: "destructive"
});
};
}- Page Components - App router pages
- Feature Components - Feature implementations
- Infrastructure Components - Providers, navigation, theme, auth, modals
- State Management - Context usage