fix: getSubclassesOf

This commit is contained in:
chenos 2025-06-28 17:46:12 +08:00
parent 58b58e302c
commit 75dc5f26ad
4 changed files with 10 additions and 14 deletions

View File

@ -162,8 +162,8 @@ QuickEditForm.registerFlow({
} }
const collectionField = ctx.model.collection.getField(fieldPath) as CollectionField; const collectionField = ctx.model.collection.getField(fieldPath) as CollectionField;
if (collectionField) { if (collectionField) {
const FieldModels = collectionField.getMatchFieldModelsByBaseClass('EditableFieldModel'); const FieldModels = collectionField.getSubclassesOf('EditableFieldModel');
const use = [...FieldModels.keys()].shift() || 'EditableFieldModel'; const use = FieldModels.keys().next().value || 'EditableFieldModel';
ctx.model.addSubModel('fields', { ctx.model.addSubModel('fields', {
use, use,
stepParams: { stepParams: {

View File

@ -35,16 +35,16 @@ describe('FlowEngine', () => {
expect(engine.getModelClass('NotExist')).toBeUndefined(); expect(engine.getModelClass('NotExist')).toBeUndefined();
}); });
it('findModelsByBaseClass should return all subclasses', () => { it('getSubclassesOf should return all subclasses', () => {
const result = engine.findModelsByBaseClass(BaseModel); const result = engine.getSubclassesOf(BaseModel);
expect(result.has('BaseModel')).toBe(false); expect(result.has('BaseModel')).toBe(false);
expect(result.has('SubModelA')).toBe(true); expect(result.has('SubModelA')).toBe(true);
expect(result.has('SubModelB')).toBe(true); expect(result.has('SubModelB')).toBe(true);
expect(result.has('SubModelC')).toBe(true); expect(result.has('SubModelC')).toBe(true);
}); });
it('findModelsByBaseClass should support filter', () => { it('getSubclassesOf should support filter', () => {
const result = engine.findModelsByBaseClass(BaseModel, (ModelClass, name) => name.startsWith('SubModel')); const result = engine.getSubclassesOf(BaseModel, (ModelClass, name) => name.startsWith('SubModel'));
expect(result.has('BaseModel')).toBe(false); expect(result.has('BaseModel')).toBe(false);
expect(result.has('SubModelA')).toBe(true); expect(result.has('SubModelA')).toBe(true);
expect(result.has('SubModelB')).toBe(true); expect(result.has('SubModelB')).toBe(true);

View File

@ -456,13 +456,9 @@ export class CollectionField {
return app.dataSourceManager.collectionFieldInterfaceManager.getFieldInterface(this.interface); return app.dataSourceManager.collectionFieldInterfaceManager.getFieldInterface(this.interface);
} }
getMatchFieldModelsByBaseClass(baseClass: string) { getSubclassesOf(baseClass: string) {
return this.flowEngine.findModelsByBaseClass(baseClass, (M, name) => { return this.flowEngine.getSubclassesOf(baseClass, (M, name) => {
console.log('getMatchFieldModelsByBaseClass', name, M['supportedFieldInterfaces'], this.interface); return isFieldInterfaceMatch(M['supportedFieldInterfaces'], this.interface);
if (isFieldInterfaceMatch(M['supportedFieldInterfaces'], this.interface)) {
return true;
}
return false;
}); });
} }
} }

View File

@ -219,7 +219,7 @@ export class FlowEngine {
* @param {(ModelClass: ModelConstructor, className: string) => boolean} [filter] * @param {(ModelClass: ModelConstructor, className: string) => boolean} [filter]
* @returns {Map<string, ModelConstructor>} * @returns {Map<string, ModelConstructor>}
*/ */
public findModelsByBaseClass( public getSubclassesOf(
baseClass: string | ModelConstructor, baseClass: string | ModelConstructor,
filter?: (ModelClass: ModelConstructor, className: string) => boolean, filter?: (ModelClass: ModelConstructor, className: string) => boolean,
): Map<string, ModelConstructor> { ): Map<string, ModelConstructor> {