@@ -7,18 +7,20 @@ import { SiteHeader } from "@/components/site-header"
77import { SidebarProvider } from "@/components/ui/sidebar"
88import { DeveloperOverview } from './components/DeveloperOverview' ;
99import { ObjectExplorer } from './components/ObjectExplorer' ;
10+ import { MetadataInspector } from './components/MetadataInspector' ;
1011import { PackageManager } from './components/PackageManager' ;
1112import { Toaster } from "@/components/ui/toaster"
1213import { getApiBaseUrl , config } from './lib/config' ;
1314import type { InstalledPackage } from '@objectstack/spec/kernel' ;
1415
15- type ViewType = 'overview' | 'packages' | 'object' ;
16+ type ViewType = 'overview' | 'packages' | 'object' | 'metadata' ;
1617
1718export default function App ( ) {
1819 const [ client , setClient ] = useState < ObjectStackClient | null > ( null ) ;
1920 const [ packages , setPackages ] = useState < InstalledPackage [ ] > ( [ ] ) ;
2021 const [ selectedPackage , setSelectedPackage ] = useState < InstalledPackage | null > ( null ) ;
2122 const [ selectedObject , setSelectedObject ] = useState < string | null > ( null ) ;
23+ const [ selectedMeta , setSelectedMeta ] = useState < { type : string ; name : string } | null > ( null ) ;
2224 const [ selectedView , setSelectedView ] = useState < ViewType > ( 'overview' ) ;
2325
2426 // 1. Create client once
@@ -70,14 +72,28 @@ export default function App() {
7072 const handleSelectView = useCallback ( ( view : ViewType ) => {
7173 setSelectedView ( view ) ;
7274 setSelectedObject ( null ) ;
75+ setSelectedMeta ( null ) ;
76+ } , [ ] ) ;
77+
78+ const handleSelectMeta = useCallback ( ( type : string , name : string ) => {
79+ setSelectedMeta ( { type, name } ) ;
80+ setSelectedObject ( null ) ;
81+ setSelectedView ( 'metadata' ) ;
7382 } , [ ] ) ;
7483
7584 const handleNavigate = useCallback ( ( view : string , detail ?: string ) => {
7685 if ( view === 'packages' ) handleSelectView ( 'packages' ) ;
7786 else if ( detail ) handleSelectObject ( detail ) ;
7887 } , [ handleSelectView , handleSelectObject ] ) ;
7988
80- if ( ! client ) return null ;
89+ if ( ! client ) return (
90+ < div className = "flex min-h-screen items-center justify-center bg-background" >
91+ < div className = "text-center space-y-2" >
92+ < div className = "h-8 w-8 mx-auto animate-spin rounded-full border-4 border-muted border-t-primary" />
93+ < p className = "text-sm text-muted-foreground" > Connecting to ObjectStack…</ p >
94+ </ div >
95+ </ div >
96+ ) ;
8197
8298 return (
8399 < ObjectStackProvider client = { client } >
@@ -86,6 +102,8 @@ export default function App() {
86102 < AppSidebar
87103 selectedObject = { selectedObject }
88104 onSelectObject = { handleSelectObject }
105+ selectedMeta = { selectedMeta }
106+ onSelectMeta = { handleSelectMeta }
89107 packages = { packages }
90108 selectedPackage = { selectedPackage }
91109 onSelectPackage = { handleSelectPackage }
@@ -95,12 +113,17 @@ export default function App() {
95113 < main className = "flex min-w-0 flex-1 flex-col bg-background" >
96114 < SiteHeader
97115 selectedObject = { selectedObject }
116+ selectedMeta = { selectedMeta }
98117 selectedView = { selectedView }
99118 packageLabel = { selectedPackage ?. manifest ?. name || selectedPackage ?. manifest ?. id }
100119 />
101120 < div className = "flex flex-1 flex-col overflow-hidden" >
102121 { selectedView === 'object' && selectedObject ? (
103122 < ObjectExplorer objectApiName = { selectedObject } />
123+ ) : selectedView === 'metadata' && selectedMeta ? (
124+ < div className = "flex-1 overflow-auto p-4" >
125+ < MetadataInspector metaType = { selectedMeta . type } metaName = { selectedMeta . name } />
126+ </ div >
104127 ) : selectedView === 'packages' ? (
105128 < PackageManager />
106129 ) : (
0 commit comments