import React, { useState } from 'react' import { Box, Typography, Paper, Grid, List, ListItem, ListItemButton, ListItemIcon, ListItemText, Divider, CircularProgress, Chip, } from '@mui/material' import { TableChart as TableIcon, Storage as SchemaIcon, ChevronRight as ChevronRightIcon, } from '@mui/icons-material' import { DataGrid, GridColDef } from '@mui/x-data-grid' import { useDatabase } from '../hooks/useDatabase' import { DbTable } from '../services/api' export default function Database() { const { tables, isLoadingTables, useTableData } = useDatabase() const [selectedTable, setSelectedTable] = useState(null) const { data: rows, isLoading: isLoadingData } = useTableData( selectedTable?.schema || null, selectedTable?.name || null ) const columns: GridColDef[] = rows && rows.length > 0 ? Object.keys(rows[0]).map(key => ({ field: key, headerName: key.charAt(0).toUpperCase() + key.slice(1).replace(/_/g, ' '), flex: 1, minWidth: 150, })) : [] return ( Database Browser Explore and manage your project's database tables and data {/* Table List */} Tables {isLoadingTables ? ( ) : ( {tables.map((table) => ( setSelectedTable(table)} > ))} )} {/* Data View */} {!selectedTable ? ( Select a table to view data ) : ( {selectedTable.schema}. {selectedTable.name} {isLoadingData ? ( ) : ( row.id || row.uuid || JSON.stringify(row)} pageSizeOptions={[10, 25, 50]} initialState={{ pagination: { paginationModel: { pageSize: 10 }, }, }} disableRowSelectionOnClick /> )} )} ) }