diff --git a/packages/datasource-engine/package.json b/packages/datasource-engine/package.json index e93f834ad..e99320f51 100644 --- a/packages/datasource-engine/package.json +++ b/packages/datasource-engine/package.json @@ -17,7 +17,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@ali/lowcode-datasource-types": "^1.0.1", + "@ali/lowcode-datasource-types": "^1.0.19", "@ali/lowcode-types": "^1.0.17", "typescript": "^3.9.7" }, diff --git a/packages/datasource-fetch-handler/package.json b/packages/datasource-fetch-handler/package.json index 873cdfdce..08a0553fa 100644 --- a/packages/datasource-fetch-handler/package.json +++ b/packages/datasource-fetch-handler/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-fetch-handler", - "version": "1.0.8", + "version": "1.0.19", "main": "lib/index.js", "module": "es/index.js", "typings": "es/index.d.ts", diff --git a/packages/datasource-jsonp-handler/package.json b/packages/datasource-jsonp-handler/package.json index 83cf041f0..15057071e 100644 --- a/packages/datasource-jsonp-handler/package.json +++ b/packages/datasource-jsonp-handler/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-jsonp-handler", - "version": "1.0.5", + "version": "1.0.19", "main": "lib/index.js", "module": "es/index.js", "typings": "es/index.d.ts", @@ -16,7 +16,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@ali/lowcode-datasource-types": "^1.0.1", + "@ali/lowcode-datasource-types": "^1.0.19", "jsonp": "^0.2.1", "typescript": "^3.9.7" }, diff --git a/packages/datasource-mopen-handler/package.json b/packages/datasource-mopen-handler/package.json index 950460ced..693c5c1ff 100644 --- a/packages/datasource-mopen-handler/package.json +++ b/packages/datasource-mopen-handler/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-mopen-handler", - "version": "1.0.8", + "version": "1.0.19", "main": "lib/index.js", "module": "es/index.js", "typings": "es/index.d.ts", @@ -16,7 +16,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@ali/lowcode-datasource-types": "^1.0.1", + "@ali/lowcode-datasource-types": "^1.0.19", "@ali/mirror-io-client-mopen": "1.0.0-beta.16", "typescript": "^3.9.7" }, diff --git a/packages/datasource-mtop-handler/package.json b/packages/datasource-mtop-handler/package.json index 0c625636b..94e2697b1 100644 --- a/packages/datasource-mtop-handler/package.json +++ b/packages/datasource-mtop-handler/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-mtop-handler", - "version": "1.0.7", + "version": "1.0.19", "main": "lib/index.js", "module": "es/index.js", "typings": "es/index.d.ts", @@ -16,7 +16,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@ali/lowcode-datasource-types": "^1.0.1", + "@ali/lowcode-datasource-types": "^1.0.19", "@ali/universal-mtop": "^5.1.9", "typescript": "^3.9.7" }, diff --git a/packages/datasource-types/package.json b/packages/datasource-types/package.json index ad478f55d..cdeba8fd2 100644 --- a/packages/datasource-types/package.json +++ b/packages/datasource-types/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-types", - "version": "1.0.1", + "version": "1.0.19", "main": "lib/index.js", "module": "es/index.js", "typings": "es/index.d.ts", diff --git a/packages/datasource-universal-mtop-handler/package.json b/packages/datasource-universal-mtop-handler/package.json index 12cf0a598..412d2a9b5 100644 --- a/packages/datasource-universal-mtop-handler/package.json +++ b/packages/datasource-universal-mtop-handler/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-universal-mtop-handler", - "version": "1.0.7", + "version": "1.0.19", "main": "lib/index.js", "module": "es/index.js", "typings": "es/index.d.ts", @@ -16,7 +16,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@ali/lowcode-datasource-types": "^1.0.1", + "@ali/lowcode-datasource-types": "^1.0.19", "@ali/mirror-io-client-universal-mtop": "1.0.0-beta.16", "typescript": "^3.9.7" }, diff --git a/packages/datasource-url-params-handler/package.json b/packages/datasource-url-params-handler/package.json index bcfacfa9e..c4a04368a 100644 --- a/packages/datasource-url-params-handler/package.json +++ b/packages/datasource-url-params-handler/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-url-params-handler", - "version": "1.0.7", + "version": "1.0.19", "main": "lib/index.js", "module": "es/index.js", "typings": "es/index.d.ts", @@ -16,7 +16,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@ali/lowcode-datasource-types": "^1.0.1", + "@ali/lowcode-datasource-types": "^1.0.19", "query-string": "^6.13.1", "typescript": "^3.9.7" }, diff --git a/packages/demo/public/schema.json b/packages/demo/public/schema.json index ea405f970..4d15c5f83 100644 --- a/packages/demo/public/schema.json +++ b/packages/demo/public/schema.json @@ -11,6 +11,19 @@ "fileName": "test", "dataSource": { "list": [ + { + "type": "fetch", + "id": "请求商家数据,是一个 HTTP 请求,是一个 HTTP 请求,是一个 HTTP 请求", + "isInit": true, + "options": { + "uri": "https://www.taobao.com", + "params": { + "a": 1, + "b": true, + "c": "3" + } + } + } ] }, "state": { diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts index 5d6158198..b6da3333d 100644 --- a/packages/designer/src/builtin-simulator/host.ts +++ b/packages/designer/src/builtin-simulator/host.ts @@ -135,6 +135,12 @@ export class BuiltinSimulatorHost implements ISimulatorHost { @@ -27,6 +29,7 @@ export default class DesignerPlugin extends PureComponent ); diff --git a/packages/rax-provider/src/provider.ts b/packages/rax-provider/src/provider.ts index 7e8cd9ca2..2412fb55d 100644 --- a/packages/rax-provider/src/provider.ts +++ b/packages/rax-provider/src/provider.ts @@ -1,6 +1,7 @@ import { createElement, render } from 'rax'; import UniversalDriver from 'driver-universal'; import { app, Provider } from '@ali/lowcode-runtime'; +import { AppHelper } from '@ali/lowcode-utils'; import LazyComponent from './lazy-component'; import getRouter from './router'; @@ -80,7 +81,12 @@ export default class RaxProvider extends Provider { history: this.getHistory(), routes, }); - const RouterView = (props) => createElement(Router, props); + const appHelper = new AppHelper({}); + appHelper.set('requestHandlersMap', this.getRequestHandlersMap()); + const RouterView = (props) => createElement(Router, { + appHelper, + ...props, + }); return RouterView; } diff --git a/packages/rax-render/src/engine/base.tsx b/packages/rax-render/src/engine/base.tsx index 1e462df2e..9c41d0f82 100644 --- a/packages/rax-render/src/engine/base.tsx +++ b/packages/rax-render/src/engine/base.tsx @@ -3,7 +3,7 @@ import { Component, createElement } from 'rax'; import PropTypes from 'prop-types'; import Debug from 'debug'; import classnames from 'classnames'; -import { createInterpret } from '@ali/lowcode-datasource-engine'; +import { create as createDataSourceEngine } from '@ali/lowcode-datasource-engine/interpret'; import DataHelper from '../utils/dataHelper'; import { forEach, @@ -134,16 +134,16 @@ export default class BaseEngine extends Component { const schema = props.__schema || {}; const dataSource = (schema && schema.dataSource) || {}; // requestHandlersMap 存在才走数据源引擎方案 - if (props.requestHandlersMap) { - const { dataSourceMap, reloadDataSource } = createInterpret(dataSource, this, { - requestHandlersMap: props.requestHandlersMap, + if (props?.__appHelper?.requestHandlersMap) { + const { dataSourceMap, reloadDataSource } = createDataSourceEngine(dataSource, this, { + requestHandlersMap: props.__appHelper.requestHandlersMap, }); this.dataSourceMap = dataSourceMap; this.reloadDataSource = () => new Promise((resolve, reject) => { debug('reload data source'); - this.__showPlaceholder = true; + // this.__showPlaceholder = true; reloadDataSource().then(() => { - this.__showPlaceholder = false; + // this.__showPlaceholder = false; // @TODO 是否需要 forceUpate resolve(); }); @@ -155,13 +155,13 @@ export default class BaseEngine extends Component { this.reloadDataSource = () => new Promise((resolve, reject) => { debug('reload data source'); if (!this.__dataHelper) { - this.__showPlaceholder = false; + // this.__showPlaceholder = false; return resolve(); } this.__dataHelper .getInitData() .then((res) => { - this.__showPlaceholder = false; + // this.__showPlaceholder = false; if (isEmpty(res)) { this.forceUpdate(); return resolve(); @@ -178,9 +178,10 @@ export default class BaseEngine extends Component { }); } // 设置容器组件占位,若设置占位则在初始异步请求完成之前用loading占位且不渲染容器组件内部内容 - if (this.__parseData(schema.props && schema.props.autoLoading)) { + // @TODO __showPlaceholder 的逻辑一旦开启就关不掉,先注释掉了 + /* if (this.__parseData(schema.props && schema.props.autoLoading)) { this.__showPlaceholder = (dataSource.list || []).some((item) => !!this.__parseData(item.isInit)); - } + } */ }; __render = () => { diff --git a/packages/rax-simulator-renderer/src/renderer-view.tsx b/packages/rax-simulator-renderer/src/renderer-view.tsx index 8056a9644..34fd78054 100644 --- a/packages/rax-simulator-renderer/src/renderer-view.tsx +++ b/packages/rax-simulator-renderer/src/renderer-view.tsx @@ -113,7 +113,7 @@ class Renderer extends Component<{ renderer: SimulatorRenderer }> { schema={renderer.schema} components={renderer.components} context={renderer.context} - requestHandlersMap={host.requestHandlersMap} + appHelper={renderer.context} device={device} designMode={renderer.designMode} suspended={renderer.suspended} diff --git a/packages/rax-simulator-renderer/src/renderer.ts b/packages/rax-simulator-renderer/src/renderer.ts index b7f7ef82d..dd50dc918 100644 --- a/packages/rax-simulator-renderer/src/renderer.ts +++ b/packages/rax-simulator-renderer/src/renderer.ts @@ -65,6 +65,12 @@ export class SimulatorRenderer implements BuiltinSimulatorRenderer { return this._designMode; } + @obx.ref private _requestHandlersMap = null; + + @computed get requestHandlersMap(): any { + return this._requestHandlersMap; + } + @obx.ref private _componentsMap = {}; @computed get componentsMap(): any { @@ -120,6 +126,9 @@ export class SimulatorRenderer implements BuiltinSimulatorRenderer { // sync designMode this._designMode = host.designMode; + // sync requestHandlersMap + this._requestHandlersMap = host.requestHandlersMap; + // sync suspended // sync scope @@ -142,6 +151,7 @@ export class SimulatorRenderer implements BuiltinSimulatorRenderer { constants: { name: 'demo', }, + requestHandlersMap: this._requestHandlersMap, }; }); } diff --git a/packages/react-provider/src/provider.tsx b/packages/react-provider/src/provider.tsx index aedc00ee7..377f3359a 100644 --- a/packages/react-provider/src/provider.tsx +++ b/packages/react-provider/src/provider.tsx @@ -87,6 +87,7 @@ export default class ReactProvider extends Provider { const appHelper = new AppHelper({}); appHelper.set('utils', this.getUtils()); appHelper.set('constants', this.getConstants()); + appHelper.set('requestHandlersMap', this.getRequestHandlersMap()); const self = this; const RouterView = (props: any) => { return createElement(Router as any, { diff --git a/packages/react-renderer/package.json b/packages/react-renderer/package.json index 2db726fde..ed426b3ac 100644 --- a/packages/react-renderer/package.json +++ b/packages/react-renderer/package.json @@ -54,5 +54,5 @@ "publishConfig": { "registry": "http://registry.npm.alibaba-inc.com" }, - "homepage": "https://unpkg.alibaba-inc.com/@ali/lowcode-react-renderer@1.0.17/build/index.html" + "homepage": "https://unpkg.alibaba-inc.com/@ali/lowcode-react-renderer@1.0.18/build/index.html" } diff --git a/packages/react-renderer/src/renderer/base.tsx b/packages/react-renderer/src/renderer/base.tsx index d72b6e429..40c823b2b 100644 --- a/packages/react-renderer/src/renderer/base.tsx +++ b/packages/react-renderer/src/renderer/base.tsx @@ -2,7 +2,7 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import Debug from 'debug'; -import { createInterpret } from '@ali/lowcode-datasource-engine'; +import { create as createDataSourceEngine } from '@ali/lowcode-datasource-engine/interpret'; import Div from '../components/Div'; import VisualDom from '../components/VisualDom'; import AppContext from '../context/appContext'; @@ -146,17 +146,18 @@ export default class BaseRender extends PureComponent { const schema = props.__schema || {}; const dataSource = (schema && schema.dataSource) || {}; // requestHandlersMap 存在才走数据源引擎方案 - if (props.requestHandlersMap) { - const { dataSourceMap, reloadDataSource } = createInterpret(dataSource, this, { - requestHandlersMap: props.requestHandlersMap, + if (props?.__appHelper?.requestHandlersMap) { + const { dataSourceMap, reloadDataSource } = createDataSourceEngine(dataSource, this, { + requestHandlersMap: props.__appHelper.requestHandlersMap, }); this.dataSourceMap = dataSourceMap; this.reloadDataSource = () => new Promise((resolve) => { debug('reload data source'); - this.__showPlaceholder = true; + // this.__showPlaceholder = true; reloadDataSource().then(() => { - this.__showPlaceholder = false; + // this.__showPlaceholder = false; // @TODO 是否需要 forceUpate + // this.forceUpdate(); resolve(); }); }); @@ -167,13 +168,13 @@ export default class BaseRender extends PureComponent { this.reloadDataSource = () => new Promise((resolve, reject) => { debug('reload data source'); if (!this.__dataHelper) { - this.__showPlaceholder = false; + // this.__showPlaceholder = false; return resolve(); } this.__dataHelper .getInitData() .then((res) => { - this.__showPlaceholder = false; + // this.__showPlaceholder = false; if (isEmpty(res)) { this.forceUpdate(); return resolve(); @@ -190,9 +191,10 @@ export default class BaseRender extends PureComponent { }); } // 设置容器组件占位,若设置占位则在初始异步请求完成之前用loading占位且不渲染容器组件内部内容 - this.__showPlaceholder = this.__parseData(schema.props && schema.props.autoLoading) && (dataSource.list || []).some( + // @TODO __showPlaceholder 的逻辑一旦开启就关不掉,先注释掉了 + /* this.__showPlaceholder = this.__parseData(schema.props && schema.props.autoLoading) && (dataSource.list || []).some( (item) => !!this.__parseData(item.isInit), - ); + ); */ }; __render = () => { @@ -563,6 +565,10 @@ export default class BaseRender extends PureComponent { return checkProps(props); }; + get requestHandlersMap() { + return this.appHelper && this.appHelper.requestHandlersMap; + } + get utils() { return this.appHelper && this.appHelper.utils; } diff --git a/packages/react-simulator-renderer/src/renderer-view.tsx b/packages/react-simulator-renderer/src/renderer-view.tsx index c635cb64b..8d7599ef7 100644 --- a/packages/react-simulator-renderer/src/renderer-view.tsx +++ b/packages/react-simulator-renderer/src/renderer-view.tsx @@ -105,7 +105,6 @@ class Renderer extends Component<{ renderer: SimulatorRenderer }> { components={renderer.components} appHelper={renderer.context} // context={renderer.context} - requestHandlersMap={host.requestHandlersMap} designMode={designMode} device={device} suspended={renderer.suspended} diff --git a/packages/react-simulator-renderer/src/renderer.ts b/packages/react-simulator-renderer/src/renderer.ts index 35d53b161..d815f6809 100644 --- a/packages/react-simulator-renderer/src/renderer.ts +++ b/packages/react-simulator-renderer/src/renderer.ts @@ -48,6 +48,9 @@ export class SimulatorRenderer implements BuiltinSimulatorRenderer { // sync designMode this._designMode = host.designMode; + // sync requestHandlersMap + this._requestHandlersMap = host.requestHandlersMap; + // sync suspended // sync scope @@ -69,6 +72,7 @@ export class SimulatorRenderer implements BuiltinSimulatorRenderer { constants: { name: 'demo', }, + requestHandlersMap: this._requestHandlersMap, }; }); } @@ -114,6 +118,12 @@ export class SimulatorRenderer implements BuiltinSimulatorRenderer { return this._designMode; } + @obx.ref private _requestHandlersMap = null; + + @computed get requestHandlersMap(): any { + return this._requestHandlersMap; + } + @obx.ref private _device = 'default'; @computed get device() { diff --git a/packages/runtime/src/core/provider.ts b/packages/runtime/src/core/provider.ts index 33b2f4df8..54601af81 100644 --- a/packages/runtime/src/core/provider.ts +++ b/packages/runtime/src/core/provider.ts @@ -35,6 +35,7 @@ export interface IAppData { containerId?: string; components?: IComponents; componentsMap?: IComponentMap[]; + requestHandlersMap?: any; utils?: IUtils; constants?: IConstants; i18n?: I18n; @@ -116,6 +117,9 @@ export default class Provider { componentsMap: IComponentMap[] = []; + // @TODO 类型定义 + requestHandlersMap: any = null; + history: HistoryMode = 'hash'; containerId = ''; @@ -147,6 +151,7 @@ export default class Provider { containerId, components, componentsMap, + requestHandlersMap, utils, constants, i18n, @@ -160,11 +165,13 @@ export default class Provider { this.registerComponentsMap(componentsMap); this.registerUtils(utils); this.registerContants(constants); + this.registerRequestHandlersMap(requestHandlersMap); resolve({ history: this.getHistory(), components: this.getComponents(), utils: this.getUtils(), containerId: this.getContainerId(), + requestHandlersMap: this.getRequestHandlersMap(), }); } catch (err) { reject(err); @@ -288,6 +295,13 @@ export default class Provider { this.constants = constants; } + registerRequestHandlersMap(requestHandlersMap: any) { + if (!requestHandlersMap) { + return; + } + this.requestHandlersMap = requestHandlersMap; + } + setLayoutConfig(config: ILayoutConfig | undefined) { if (!config) { return; @@ -355,6 +369,10 @@ export default class Provider { return this.constants; } + getRequestHandlersMap() { + return this.requestHandlersMap; + } + getComponentsMap() { return this.componentsMap; }