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;
if (collectionField) {
const FieldModels = collectionField.getMatchFieldModelsByBaseClass('EditableFieldModel');
const use = [...FieldModels.keys()].shift() || 'EditableFieldModel';
const FieldModels = collectionField.getSubclassesOf('EditableFieldModel');
const use = FieldModels.keys().next().value || 'EditableFieldModel';
ctx.model.addSubModel('fields', {
use,
stepParams: {

View File

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

View File

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

View File

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