diff --git a/packages/code-generator/src/plugins/component/rax/containerInjectDataSourceEngine.ts b/packages/code-generator/src/plugins/component/rax/containerInjectDataSourceEngine.ts index 8c2f074a6..0669a51e4 100644 --- a/packages/code-generator/src/plugins/component/rax/containerInjectDataSourceEngine.ts +++ b/packages/code-generator/src/plugins/component/rax/containerInjectDataSourceEngine.ts @@ -1,3 +1,4 @@ +import changeCase from 'change-case'; import { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME } from '../../../const/generator'; import { @@ -32,6 +33,27 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => ...pre, }; + const dataSourceConfig = isContainerSchema(pre.ir) ? pre.ir.dataSource : null; + const dataSourceItems: DataSourceConfig[] = (dataSourceConfig && dataSourceConfig.list) || []; + const dataSourceEngineOptions = { runtimeConfig: true }; + if (dataSourceItems.length > 0) { + Object.assign(dataSourceEngineOptions, { + requestHandlers: dataSourceItems.reduce( + (handlers, ds) => + ds.type in handlers + ? handlers + : { + ...handlers, + [ds.type]: { + type: 'JSExpression', + value: `require('@ali/lowcode-datasource-engine/handlers/${changeCase.kebabCase(ds.type)}')`, + }, + }, + {} as Record, + ), + }); + } + next.chunks.push({ type: ChunkType.STRING, fileType: FileType.JSX, @@ -47,8 +69,12 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => fileType: cfg.fileType, name: CLASS_DEFINE_CHUNK_NAME.InsVar, content: ` - _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true });`, + _dataSourceConfig = this._defineDataSourceConfig(); + _dataSourceEngine = __$$createDataSourceEngine( + this._dataSourceConfig, + this._context, + ${generateUnknownType(dataSourceEngineOptions)} + );`, linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start], }); @@ -62,9 +88,6 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => linkAfter: [RAX_CHUNK_NAME.ClassDidMountBegin], }); - const dataSourceConfig = isContainerSchema(pre.ir) ? pre.ir.dataSource : null; - const dataSourceItems: DataSourceConfig[] = (dataSourceConfig && dataSourceConfig.list) || []; - next.chunks.push({ type: ChunkType.STRING, fileType: cfg.fileType, diff --git a/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx b/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx index 970e1987d..ae81f5f2a 100644 --- a/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx @@ -39,7 +39,13 @@ class Home$$Page extends Component { _context = this._createContext(); _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true }); + _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { + runtimeConfig: true, + requestHandlers: { + urlParams: require('@ali/lowcode-datasource-engine/handlers/url-params'), + fetch: require('@ali/lowcode-datasource-engine/handlers/fetch'), + }, + }); _utils = this._defineUtils();