Skip to content

Commit 09d9669

Browse files
Copilothotlong
andcommitted
Make getObjectSchema required in DataSource interface per new specification
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent ffa394d commit 09d9669

6 files changed

Lines changed: 34 additions & 30 deletions

File tree

packages/plugin-object/src/ObjectForm.tsx

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,8 @@ export const ObjectForm: React.FC<ObjectFormProps> = ({
8181
if (!dataSource) {
8282
throw new Error('DataSource is required when using ObjectQL schema fetching (inline fields not provided)');
8383
}
84-
// Check if the data source supports schema fetching
85-
if (dataSource.getObjectSchema) {
86-
const schemaData = await dataSource.getObjectSchema(schema.objectName);
87-
setObjectSchema(schemaData);
88-
} else {
89-
// If schema fetching is not supported, use a minimal schema
90-
setObjectSchema({
91-
name: schema.objectName,
92-
fields: {} as Record<string, any>,
93-
});
94-
}
84+
const schemaData = await dataSource.getObjectSchema(schema.objectName);
85+
setObjectSchema(schemaData);
9586
} catch (err) {
9687
console.error('Failed to fetch object schema:', err);
9788
setError(err as Error);

packages/plugin-object/src/ObjectTable.tsx

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,17 +108,8 @@ export const ObjectTable: React.FC<ObjectTableProps> = ({
108108
if (!dataSource) {
109109
throw new Error('DataSource is required when using ObjectQL schema fetching (inline data not provided)');
110110
}
111-
// Check if the data source supports schema fetching
112-
if (dataSource.getObjectSchema) {
113-
const schemaData = await dataSource.getObjectSchema(schema.objectName);
114-
setObjectSchema(schemaData);
115-
} else {
116-
// If schema fetching is not supported, use a minimal schema
117-
setObjectSchema({
118-
name: schema.objectName,
119-
fields: {} as Record<string, any>,
120-
});
121-
}
111+
const schemaData = await dataSource.getObjectSchema(schema.objectName);
112+
setObjectSchema(schemaData);
122113
} catch (err) {
123114
console.error('Failed to fetch object schema:', err);
124115
setError(err as Error);

packages/plugin-object/src/ObjectView.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,8 @@ export const ObjectView: React.FC<ObjectViewProps> = ({
8888
useEffect(() => {
8989
const fetchObjectSchema = async () => {
9090
try {
91-
// Check if the data source supports schema fetching
92-
if (dataSource.getObjectSchema) {
93-
const schemaData = await dataSource.getObjectSchema(schema.objectName);
94-
setObjectSchema(schemaData);
95-
}
91+
const schemaData = await dataSource.getObjectSchema(schema.objectName);
92+
setObjectSchema(schemaData);
9693
} catch (err) {
9794
console.error('Failed to fetch object schema:', err);
9895
}

packages/runner/src/lib/mockDataSource.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,14 @@ export class MockDataSource implements DataSource {
3939
async delete(resource: string, id: string): Promise<any> {
4040
return true;
4141
}
42+
43+
async getObjectSchema(objectName: string): Promise<any> {
44+
console.log(`[DataSource] Getting schema for ${objectName}`);
45+
// Return a minimal schema for mock purposes
46+
return {
47+
name: objectName,
48+
label: objectName,
49+
fields: {}
50+
};
51+
}
4252
}

packages/types/examples/rest-data-source.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,21 @@ export class RestDataSource<T = any> implements DataSource<T> {
166166

167167
return true;
168168
}
169+
170+
/**
171+
* Get object schema/metadata
172+
*/
173+
async getObjectSchema(objectName: string): Promise<any> {
174+
const url = `${this.baseUrl}/_schema/${objectName}`;
175+
176+
const response = await fetch(url);
177+
178+
if (!response.ok) {
179+
throw new Error(`HTTP error! status: ${response.status}`);
180+
}
181+
182+
return response.json();
183+
}
169184
}
170185

171186
// Usage example:

packages/types/src/data.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,14 +195,14 @@ export interface DataSource<T = any> {
195195
bulk?(resource: string, operation: 'create' | 'update' | 'delete', data: Partial<T>[]): Promise<T[]>;
196196

197197
/**
198-
* Get object schema/metadata (optional).
198+
* Get object schema/metadata.
199199
* Used by ObjectQL-aware components to auto-generate UI from object metadata.
200-
* Supported by ObjectQL and ObjectStack adapters.
200+
* Required for all DataSource implementations to support schema-aware components.
201201
*
202202
* @param objectName - Object name
203203
* @returns Promise resolving to the object schema
204204
*/
205-
getObjectSchema?(objectName: string): Promise<any>;
205+
getObjectSchema(objectName: string): Promise<any>;
206206
}
207207

208208
/**

0 commit comments

Comments
 (0)