From 6825fc9fd98ac1fd1c584dcf6d95b420b423ee0f Mon Sep 17 00:00:00 2001 From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com> Date: Thu, 9 Apr 2026 08:16:21 +0000 Subject: [PATCH 1/4] Add tabbed layout for object detail page Agent-Logs-Url: https://github.com/objectstack-ai/objectui/sessions/32d509ca-9783-48ab-a16a-0182b122bfc7 Co-authored-by: xuyushun441-sys <255036401+xuyushun441-sys@users.noreply.github.com> --- .../schema/ObjectDetailTabsWidget.tsx | 137 ++++++++++++++++++ .../schema/registerObjectDetailWidgets.ts | 8 + .../src/schemas/objectDetailPageSchema.ts | 23 +-- 3 files changed, 157 insertions(+), 11 deletions(-) create mode 100644 apps/console/src/components/schema/ObjectDetailTabsWidget.tsx diff --git a/apps/console/src/components/schema/ObjectDetailTabsWidget.tsx b/apps/console/src/components/schema/ObjectDetailTabsWidget.tsx new file mode 100644 index 00000000..de297c22 --- /dev/null +++ b/apps/console/src/components/schema/ObjectDetailTabsWidget.tsx @@ -0,0 +1,137 @@ +/** + * Object Detail Tabs Widget + * + * Self-contained, schema-driven tabbed widget for the object detail page. + * Organizes object configuration into logical tabs similar to Power Apps: + * - Details: Object properties and basic information + * - Fields: Field designer for managing object fields + * - Relationships: Relationships and unique keys + * - Data: Data preview and experience placeholders + * + * Schema: { type: 'object-detail-tabs', objectName: 'account' } + * + * @module components/schema/ObjectDetailTabsWidget + */ + +import { useState } from 'react'; +import { Tabs, TabsList, TabsTrigger, TabsContent } from '@object-ui/components'; +import { Settings2, Columns, Link2, Table } from 'lucide-react'; +import type { SchemaNode } from '@object-ui/core'; +import { + ObjectPropertiesWidget, + ObjectRelationshipsWidget, + ObjectKeysWidget, + ObjectDataExperienceWidget, + ObjectDataPreviewWidget, +} from './objectDetailWidgets'; +import { ObjectFieldDesignerWidget } from './ObjectFieldDesignerWidget'; + +/** Schema props for object detail tabs widget. */ +interface ObjectDetailTabsSchema extends SchemaNode { + objectName: string; +} + +export function ObjectDetailTabsWidget({ schema }: { schema: ObjectDetailTabsSchema }) { + const objectName = schema.objectName; + const [activeTab, setActiveTab] = useState('details'); + + // Create schema objects for each widget + const detailsSchema: SchemaNode & { objectName: string } = { + type: 'object-properties', + id: `${objectName}-properties`, + objectName, + }; + + const fieldsSchema: SchemaNode & { objectName: string } = { + type: 'object-field-designer', + id: `${objectName}-field-designer`, + objectName, + }; + + const relationshipsSchema: SchemaNode & { objectName: string } = { + type: 'object-relationships', + id: `${objectName}-relationships`, + objectName, + }; + + const keysSchema: SchemaNode & { objectName: string } = { + type: 'object-keys', + id: `${objectName}-keys`, + objectName, + }; + + const dataExperienceSchema: SchemaNode & { objectName: string } = { + type: 'object-data-experience', + id: `${objectName}-data-experience`, + objectName, + }; + + const dataPreviewSchema: SchemaNode & { objectName: string } = { + type: 'object-data-preview', + id: `${objectName}-data-preview`, + objectName, + }; + + return ( +
{object.name}
-{object.label}
-{object.pluralLabel}
+{object.label}
{object.group}
+{object.name}
-
{object.pluralLabel}
+{object.group}
+
-
{object.fieldCount ?? fields.length} fields
+{rel.label || rel.relatedObject}
+ {rel.label && rel.label !== rel.relatedObject && ( ++ Related Object: {rel.relatedObject} +
+ )} + {rel.foreignKey && ( ++ Foreign Key: {rel.foreignKey} +
+ )} +No relationships defined for this object.
- )} + ))} +No relationships defined for this object.
+{kf.label || kf.name}
++ Type: {kf.type} +
+No unique keys or primary keys found.
- )} + ))} +No unique keys or primary keys found.
+Forms
-Design forms for data entry
-Views
-Configure list and detail views
-Dashboards
-Build visual dashboards
++ Configure how users interact with data in this object +
+Forms
+Design forms for data entry
+Views
+Configure list and detail views
+Dashboards
+Build visual dashboards
+Sample Data
-- Live data preview for “{object?.label || objectName}” will be available here +
+ View sample records from this object
+Sample Data
++ Live data preview for “{object?.label || objectName}” will be available here +
+{object.label}
+{object.name}
+{object.pluralLabel}
+{object.group}
+{object.fieldCount ?? fields.length} fields
+Forms
Design forms for data entry
Views
Configure list and detail views
Dashboards
Build visual dashboards