@@ -13,14 +13,12 @@ import { CommandPalette } from './components/CommandPalette';
1313import { ErrorBoundary } from './components/ErrorBoundary' ;
1414import { LoadingScreen } from './components/LoadingScreen' ;
1515import { ObjectView } from './components/ObjectView' ;
16+ import { RecordDetailView } from './components/RecordDetailView' ;
1617import { DashboardView } from './components/DashboardView' ;
1718import { PageView } from './components/PageView' ;
1819import { ReportView } from './components/ReportView' ;
1920import { MetadataToggle , MetadataPanel , useMetadataInspector } from './components/MetadataInspector' ;
20- import { useBranding } from './hooks/useBranding' ;
21-
22- import { DetailView } from '@object-ui/plugin-detail' ;
23- import { useParams } from 'react-router-dom' ;
21+ import { ExpressionProvider } from './context/ExpressionProvider' ;
2422
2523/**
2624 * Patch: MSW discovery response uses 'routes' instead of 'endpoints'.
@@ -38,66 +36,8 @@ function patchDiscoveryEndpoints(adapter: ObjectStackAdapter) {
3836 }
3937}
4038
41- // Detail View Component
42- function RecordDetailView ( { dataSource, objects, onEdit } : any ) {
43- const { objectName, recordId } = useParams ( ) ;
44- const { showDebug, toggleDebug } = useMetadataInspector ( ) ;
45- const objectDef = objects . find ( ( o : any ) => o . name === objectName ) ;
46-
47- if ( ! objectDef ) {
48- return (
49- < div className = "flex h-full items-center justify-center p-4" >
50- < Empty >
51- < EmptyTitle > Object Not Found</ EmptyTitle >
52- < p > Object "{ objectName } " definition missing.</ p >
53- </ Empty >
54- </ div >
55- ) ;
56- }
57-
58- const detailSchema = {
59- type : 'detail-view' ,
60- objectName : objectDef . name ,
61- resourceId : recordId ,
62- showBack : true ,
63- onBack : 'history' ,
64- showEdit : true ,
65- title : objectDef . label ,
66- sections : [
67- {
68- title : 'Details' ,
69- fields : Object . keys ( objectDef . fields || { } ) . map ( key => ( {
70- name : key ,
71- label : objectDef . fields [ key ] . label || key ,
72- type : objectDef . fields [ key ] . type || 'text'
73- } ) ) ,
74- columns : 2
75- }
76- ]
77- } ;
78-
79- return (
80- < div className = "h-full bg-background overflow-hidden flex flex-col relative" >
81- < div className = "absolute top-4 right-4 z-50" >
82- < MetadataToggle open = { showDebug } onToggle = { toggleDebug } />
83- </ div >
84-
85- < div className = "flex-1 overflow-hidden flex flex-row" >
86- < div className = "flex-1 overflow-auto p-4 lg:p-6" >
87- < DetailView
88- schema = { detailSchema }
89- dataSource = { dataSource }
90- onEdit = { ( ) => onEdit ( { _id : recordId , id : recordId } ) }
91- />
92- </ div >
93- < MetadataPanel
94- open = { showDebug }
95- sections = { [ { title : 'View Schema' , data : detailSchema } ] }
96- />
97- </ div >
98- </ div >
99- ) ;
100- }
39+ import { useParams } from 'react-router-dom' ;
40+ import { ThemeProvider } from './components/theme-provider' ;
10141
10242export function AppContent ( ) {
10343 const [ dataSource , setDataSource ] = useState < ObjectStackAdapter | null > ( null ) ;
@@ -118,8 +58,7 @@ export function AppContent() {
11858 const [ editingRecord , setEditingRecord ] = useState < any > ( null ) ;
11959 const [ refreshKey , setRefreshKey ] = useState ( 0 ) ;
12060
121- // Apply app branding (primaryColor, favicon, title)
122- useBranding ( activeApp ) ;
61+ // Branding is now applied by AppShell via ConsoleLayout
12362
12463 useEffect ( ( ) => {
12564 initializeDataSource ( ) ;
@@ -202,7 +141,11 @@ export function AppContent() {
202141 </ div >
203142 ) ;
204143
144+ // Expression context for dynamic visibility/disabled/hidden expressions
145+ const expressionUser = { name : 'John Doe' , email : 'admin@example.com' , role : 'admin' } ;
146+
205147 return (
148+ < ExpressionProvider user = { expressionUser } app = { activeApp } data = { { } } >
206149 < ConsoleLayout
207150 activeAppName = { activeApp . name }
208151 activeApp = { activeApp }
@@ -300,6 +243,7 @@ export function AppContent() {
300243 </ Dialog >
301244 </ SchemaRendererProvider >
302245 </ ConsoleLayout >
246+ </ ExpressionProvider >
303247 ) ;
304248}
305249
@@ -331,8 +275,6 @@ function RootRedirect() {
331275 return < LoadingScreen /> ;
332276}
333277
334- import { ThemeProvider } from './components/theme-provider' ;
335-
336278export function App ( ) {
337279 return (
338280 < ThemeProvider defaultTheme = "system" storageKey = "object-ui-theme" >
0 commit comments