Skip to content

Commit 430780e

Browse files
Copilothotlong
andcommitted
Add design mode toggle to distinguish between runtime and design interfaces
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 36737db commit 430780e

1 file changed

Lines changed: 46 additions & 25 deletions

File tree

apps/console/src/components/ObjectView.tsx

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import { ObjectView as PluginObjectView } from '@object-ui/plugin-view';
1919
import '@object-ui/plugin-grid';
2020
import '@object-ui/plugin-kanban';
2121
import '@object-ui/plugin-calendar';
22-
import { Button, Empty, EmptyTitle, EmptyDescription, Sheet, SheetContent } from '@object-ui/components';
23-
import { Plus, Table as TableIcon, Settings2 } from 'lucide-react';
22+
import { Button, Empty, EmptyTitle, EmptyDescription, Sheet, SheetContent, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuSeparator } from '@object-ui/components';
23+
import { Plus, Table as TableIcon, Settings2, MoreVertical, Wrench } from 'lucide-react';
2424
import type { ListViewSchema } from '@object-ui/types';
2525
import { MetadataToggle, MetadataPanel, useMetadataInspector } from './MetadataInspector';
2626
import { useObjectActions } from '../hooks/useObjectActions';
@@ -31,6 +31,9 @@ export function ObjectView({ dataSource, objects, onEdit, onRowClick }: any) {
3131
const [searchParams, setSearchParams] = useSearchParams();
3232
const { showDebug, toggleDebug } = useMetadataInspector();
3333

34+
// Design mode toggle - default false for end users
35+
const [designMode, setDesignMode] = useState(false);
36+
3437
// Get Object Definition
3538
const objectDef = objects.find((o: any) => o.name === objectName);
3639

@@ -213,7 +216,7 @@ export function ObjectView({ dataSource, objects, onEdit, onRowClick }: any) {
213216

214217
return (
215218
<div className="h-full flex flex-col bg-background">
216-
{/* 1. Main Header */}
219+
{/* 1. Simplified Header */}
217220
<div className="flex justify-between items-center py-2.5 sm:py-3 px-3 sm:px-4 border-b shrink-0 bg-background z-10">
218221
<div className="flex items-center gap-2 sm:gap-3 min-w-0 flex-1">
219222
<div className="bg-primary/10 p-1.5 sm:p-2 rounded-md shrink-0">
@@ -225,31 +228,48 @@ export function ObjectView({ dataSource, objects, onEdit, onRowClick }: any) {
225228
</div>
226229

227230
<div className="flex items-center gap-1.5 sm:gap-2 shrink-0">
228-
<MetadataToggle open={showDebug} onToggle={toggleDebug} className="hidden sm:flex" />
229-
<Button
230-
size="sm"
231-
variant="outline"
232-
onClick={() => navigate(viewId ? `../../views/${viewId}` : `views/${activeViewId}`)}
233-
className="shadow-none gap-1.5 h-8 sm:h-9 hidden sm:flex"
234-
title="Edit current view layout"
235-
>
236-
<Settings2 className="h-4 w-4" />
237-
<span className="hidden lg:inline">Edit View</span>
238-
</Button>
239-
<Button
240-
size="sm"
241-
variant="outline"
242-
onClick={() => navigate(viewId ? '../../views/new' : 'views/new')}
243-
className="shadow-none gap-1.5 h-8 sm:h-9 hidden sm:flex"
244-
title="Add a view"
245-
>
246-
<Plus className="h-4 w-4" />
247-
<span className="hidden lg:inline">Add View</span>
248-
</Button>
231+
{/* Primary action - always visible */}
249232
<Button size="sm" onClick={actions.create} className="shadow-none gap-1.5 sm:gap-2 h-8 sm:h-9">
250233
<Plus className="h-4 w-4" />
251234
<span className="hidden sm:inline">New</span>
252235
</Button>
236+
237+
{/* Design mode tools menu */}
238+
<DropdownMenu>
239+
<DropdownMenuTrigger asChild>
240+
<Button
241+
size="sm"
242+
variant={designMode ? "secondary" : "ghost"}
243+
className="shadow-none h-8 sm:h-9 px-2"
244+
title="Design tools"
245+
>
246+
{designMode ? <Wrench className="h-4 w-4" /> : <MoreVertical className="h-4 w-4" />}
247+
</Button>
248+
</DropdownMenuTrigger>
249+
<DropdownMenuContent align="end" className="w-48">
250+
<DropdownMenuItem onClick={() => setDesignMode(!designMode)}>
251+
<Wrench className="h-4 w-4 mr-2" />
252+
{designMode ? 'Exit Design Mode' : 'Enter Design Mode'}
253+
</DropdownMenuItem>
254+
{designMode && (
255+
<>
256+
<DropdownMenuSeparator />
257+
<DropdownMenuItem onClick={toggleDebug}>
258+
<MetadataToggle open={showDebug} onToggle={toggleDebug} className="hidden" />
259+
Metadata Inspector
260+
</DropdownMenuItem>
261+
<DropdownMenuItem onClick={() => navigate(viewId ? `../../views/${viewId}` : `views/${activeViewId}`)}>
262+
<Settings2 className="h-4 w-4 mr-2" />
263+
Edit View
264+
</DropdownMenuItem>
265+
<DropdownMenuItem onClick={() => navigate(viewId ? '../../views/new' : 'views/new')}>
266+
<Plus className="h-4 w-4 mr-2" />
267+
Add View
268+
</DropdownMenuItem>
269+
</>
270+
)}
271+
</DropdownMenuContent>
272+
</DropdownMenu>
253273
</div>
254274
</div>
255275

@@ -270,8 +290,9 @@ export function ObjectView({ dataSource, objects, onEdit, onRowClick }: any) {
270290
/>
271291
</div>
272292
</div>
293+
{/* Metadata panel only shows in design mode */}
273294
<MetadataPanel
274-
open={showDebug}
295+
open={showDebug && designMode}
275296
sections={[
276297
{ title: 'View Configuration', data: activeView },
277298
{ title: 'Object Definition', data: objectDef },

0 commit comments

Comments
 (0)