Skip to content

Commit fceb462

Browse files
committed
更新 TaskForm 组件以改进元数据获取逻辑,支持不同 API 版本的模式定义
1 parent 8ebed98 commit fceb462

2 files changed

Lines changed: 20 additions & 8 deletions

File tree

examples/msw-react-crud/src/components/TaskForm.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ export function TaskForm({ client, editingTask, onSuccess, onCancel }: TaskFormP
2828
try {
2929
// 'todo_task' should match the object name in Schema
3030
const res = await client.meta.getObject('todo_task');
31-
// Support both { item: ... } or direct object return depending on API version
32-
setSchema(res.item || res);
31+
32+
// In Protocol v1 (protocol.ts), getMetaItem returns { type: 'object', name: 'todo_task', item: { ...fields... } }
33+
// So we need res.item (the schema definition) or res (if it's direct)
34+
const schemaDef = res.item || res;
35+
36+
setSchema(schemaDef);
3337
} catch (err) {
3438
console.error("Failed to fetch metadata:", err);
3539
setError("Could not load form definition");

packages/objectql/src/engine.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,20 @@ export class ObjectQL implements IDataEngine {
123123

124124
// Register objects
125125
if (manifest.objects) {
126-
this.logger.debug('Registering objects from manifest', { id, objectCount: Object.keys(manifest.objects).length });
127-
for (const [name, objDef] of Object.entries(manifest.objects)) {
128-
// Ensure name in definition matches key
129-
(objDef as any).name = name;
130-
SchemaRegistry.registerObject(objDef as any);
131-
this.logger.debug('Registered Object', { object: name, from: id });
126+
if (Array.isArray(manifest.objects)) {
127+
this.logger.debug('Registering objects from manifest (Array)', { id, objectCount: manifest.objects.length });
128+
for (const objDef of manifest.objects) {
129+
SchemaRegistry.registerObject(objDef);
130+
this.logger.debug('Registered Object', { object: objDef.name, from: id });
131+
}
132+
} else {
133+
this.logger.debug('Registering objects from manifest (Map)', { id, objectCount: Object.keys(manifest.objects).length });
134+
for (const [name, objDef] of Object.entries(manifest.objects)) {
135+
// Ensure name in definition matches key
136+
(objDef as any).name = name;
137+
SchemaRegistry.registerObject(objDef as any);
138+
this.logger.debug('Registered Object', { object: name, from: id });
139+
}
132140
}
133141
}
134142

0 commit comments

Comments
 (0)