diff --git a/packages/editor/src/AppModel/AppModel.ts b/packages/editor/src/AppModel/AppModel.ts index d7a9c86f..d630edf7 100644 --- a/packages/editor/src/AppModel/AppModel.ts +++ b/packages/editor/src/AppModel/AppModel.ts @@ -6,6 +6,7 @@ import { ComponentType, IAppModel, IComponentModel, + ModuleId, SlotName, } from './IAppModel'; import { genComponent } from './utils'; @@ -36,6 +37,10 @@ export class AppModel implements IAppModel { return Object.values(this.componentMap); } + get moduleIds(): ModuleId[] { + return this.allComponents.filter(c => c.type === 'core/v1/moduleContainer').map(c => c.properties.rawValue.id); + } + toSchema(): ComponentSchema[] { this.schema = this.allComponents.map(c => { return c.toSchema(); diff --git a/packages/editor/src/AppModel/IAppModel.ts b/packages/editor/src/AppModel/IAppModel.ts index 04d43789..b4a83e44 100644 --- a/packages/editor/src/AppModel/IAppModel.ts +++ b/packages/editor/src/AppModel/IAppModel.ts @@ -39,6 +39,7 @@ export type EventName = string & { export interface IAppModel { topComponents: IComponentModel[]; // modules: IModuleModel[]; + moduleIds: ModuleId[]; // generated by traverse the tree. Component will be overwritten if its id is duplicated. allComponents: IComponentModel[]; // all components, including orphan component diff --git a/packages/editor/src/validator/rules/PropertiesRules.ts b/packages/editor/src/validator/rules/PropertiesRules.ts index bc8c7328..3d1e36a8 100644 --- a/packages/editor/src/validator/rules/PropertiesRules.ts +++ b/packages/editor/src/validator/rules/PropertiesRules.ts @@ -1,5 +1,5 @@ import { get, has } from 'lodash-es'; -import { ComponentId } from '../../AppModel/IAppModel'; +import { ComponentId, ModuleId } from '../../AppModel/IAppModel'; import { PropertiesValidatorRule, PropertiesValidateContext, @@ -97,8 +97,11 @@ class ExpressionValidatorRule implements PropertiesValidatorRule { break; } } + } else if (appModel.moduleIds.includes(id as ModuleId)) { + // case 3: id is a module + // TODO: check module stateMap } else { - // case 3: id doesn't exist + // case 4: id doesn't exist results.push({ message: `Cannot find '${id}' in store or window.`, componentId: component.id,