@@ -16,7 +16,6 @@ import { ObjectDataForm } from './components/ObjectDataForm';
1616import { Badge } from "@/components/ui/badge" ;
1717import { ResizableHandle , ResizablePanel , ResizablePanelGroup } from "@/components/ui/resizable" ;
1818import { ScrollArea } from "@/components/ui/scroll-area" ;
19- import { Separator } from "@/components/ui/separator" ;
2019
2120export function App ( ) {
2221 const [ client , setClient ] = useState < ObjectStackClient | null > ( null ) ;
@@ -52,11 +51,6 @@ export function App() {
5251
5352 // --- Actions ---
5453
55- const handleCreate = ( ) => {
56- setEditingRecord ( null ) ; // New record
57- setView ( 'form' ) ;
58- } ;
59-
6054 const handleEdit = ( record : any ) => {
6155 setEditingRecord ( record ) ;
6256 setView ( 'form' ) ;
@@ -80,7 +74,7 @@ export function App() {
8074 }
8175
8276 return (
83- < div className = "min- h-screen bg-background font-sans flex flex-col text-foreground" >
77+ < div className = "h-screen bg-background font-sans flex flex-col text-foreground overflow-hidden " >
8478 { /* Top Header */ }
8579 < header className = "sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60" >
8680 < div className = "container flex h-14 items-center px-4 md:px-6" >
@@ -103,54 +97,58 @@ export function App() {
10397 </ header >
10498
10599 { /* Main Layout */ }
106- < div className = "flex flex-1 overflow-hidden" >
107- { /* Sidebar */ }
108- < aside className = "hidden w-64 flex-col border-r bg-muted/10 md:flex" >
109- < div className = "p-4 font-medium text-sm text-muted-foreground uppercase tracking-wider" >
110- Explorer
100+ < ResizablePanelGroup orientation = "horizontal" className = "flex-1 w-full border-t" >
101+ < ResizablePanel defaultSize = { 20 } minSize = { 15 } maxSize = { 30 } className = "hidden md:flex flex-col bg-muted/10" >
102+ < div className = "flex h-[52px] items-center px-4 border-b" >
103+ < h2 className = "font-semibold tracking-tight text-sm" > Explorer</ h2 >
111104 </ div >
112- < div className = "flex-1 overflow-hidden px-2 pb-4" >
113- < MetadataExplorer
114- client = { client }
115- selectedObject = { selectedObject }
116- onSelectObject = { ( obj ) => {
117- setSelectedObject ( obj ) ;
118- setView ( 'list' ) ;
119- setEditingRecord ( null ) ;
120- } }
121- />
122- </ div >
123- </ aside >
124-
125- { /* Content Area */ }
126- < main className = "flex-1 overflow-hidden p-4 md:p-6 flex flex-col bg-muted/20 relative" >
127- { selectedObject ? (
128- < >
129- < ObjectDataTable
130- key = { `${ selectedObject } -${ refreshKey } ` }
131- client = { client }
132- objectApiName = { selectedObject }
133- onEdit = { handleEdit }
105+ < ScrollArea className = "flex-1" >
106+ < div className = "p-4" >
107+ < MetadataExplorer
108+ client = { client }
109+ selectedObject = { selectedObject }
110+ onSelectObject = { ( obj ) => {
111+ setSelectedObject ( obj ) ;
112+ setView ( 'list' ) ;
113+ setEditingRecord ( null ) ;
114+ } }
134115 />
135- { view === 'form' && (
136- < ObjectDataForm
116+ </ div >
117+ </ ScrollArea >
118+ </ ResizablePanel >
119+
120+ < ResizableHandle withHandle />
121+
122+ < ResizablePanel defaultSize = { 80 } >
123+ < main className = "h-full overflow-hidden p-4 md:p-6 flex flex-col bg-muted/20 relative" >
124+ { selectedObject ? (
125+ < >
126+ < ObjectDataTable
127+ key = { `${ selectedObject } -${ refreshKey } ` }
137128 client = { client }
138129 objectApiName = { selectedObject }
139- record = { editingRecord }
140- onSuccess = { handleFormSuccess }
141- onCancel = { ( ) => setView ( 'list' ) }
130+ onEdit = { handleEdit }
142131 />
143- ) }
144- </ >
145- ) : (
146- < div className = "flex flex-col items-center justify-center h-full text-muted-foreground" >
147- < Database className = "h-12 w-12 mb-4 opacity-20" />
148- < div className = "text-xl font-medium" > Select an Object</ div >
149- < p className = "opacity-60" > Choose an object from the sidebar to manage data.</ p >
150- </ div >
151- ) }
152- </ main >
153- </ div >
132+ { view === 'form' && (
133+ < ObjectDataForm
134+ client = { client }
135+ objectApiName = { selectedObject }
136+ record = { editingRecord }
137+ onSuccess = { handleFormSuccess }
138+ onCancel = { ( ) => setView ( 'list' ) }
139+ />
140+ ) }
141+ </ >
142+ ) : (
143+ < div className = "flex flex-col items-center justify-center h-full text-muted-foreground" >
144+ < Database className = "h-12 w-12 mb-4 opacity-20" />
145+ < div className = "text-xl font-medium" > Select an Object</ div >
146+ < p className = "opacity-60" > Choose an object from the sidebar to manage data.</ p >
147+ </ div >
148+ ) }
149+ </ main >
150+ </ ResizablePanel >
151+ </ ResizablePanelGroup >
154152 </ div >
155153 ) ;
156154}
0 commit comments