From 5f529aeb40c7f39346054f2027e0e224a3ca14ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A7=E6=AF=85?= Date: Tue, 18 Aug 2020 13:57:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Rax=20=E5=87=BA=E7=A0=81?= =?UTF-8?q?=E9=80=82=E9=85=8D=E6=95=B0=E6=8D=AE=E6=BA=90=E5=BC=95=E6=93=8E?= =?UTF-8?q?=E7=9A=84=E9=BB=98=E8=AE=A4=20requestHandlers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rax/containerInjectDataSourceEngine.ts | 33 ++++++++++++++++--- .../demo-project/src/pages/Home/index.jsx | 8 ++++- 2 files changed, 35 insertions(+), 6 deletions(-) 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();