fix: 修复数据源的接入问题

This commit is contained in:
muyun.my 2020-11-07 22:01:01 +08:00
parent a8a17492e9
commit 98ae1ed82c
19 changed files with 43 additions and 7 deletions

View File

@ -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": {

View File

@ -135,6 +135,12 @@ export class BuiltinSimulatorHost implements ISimulatorHost<BuiltinSimulatorProp
return this.get('designMode') || 'design';
}
@computed get requestHandlersMap(): any {
// renderer 依赖
// TODO: 需要根据 design mode 不同切换鼠标响应情况
return this.get('requestHandlersMap') || null;
}
@computed get componentsAsset(): Asset | undefined {
return this.get('componentsAsset');
}

View File

@ -15,6 +15,7 @@ interface DesignerPluginState {
renderEnv?: string;
device?: string;
simulatorUrl: Asset | null;
requestHandlersMap: any;
}
export default class DesignerPlugin extends PureComponent<PluginProps, DesignerPluginState> {
@ -27,6 +28,7 @@ export default class DesignerPlugin extends PureComponent<PluginProps, DesignerP
renderEnv: 'default',
device: 'default',
simulatorUrl: null,
requestHandlersMap: null,
};
private _mounted = true;
@ -43,6 +45,8 @@ export default class DesignerPlugin extends PureComponent<PluginProps, DesignerP
const renderEnv = await editor.get('renderEnv');
const device = await editor.get('device');
const simulatorUrl = await editor.get('simulatorUrl');
// @TODO setupAssets 里设置 requestHandlersMap 不太合适
const requestHandlersMap = await editor.get('requestHandlersMap');
if (!this._mounted) {
return;
}
@ -54,6 +58,7 @@ export default class DesignerPlugin extends PureComponent<PluginProps, DesignerP
renderEnv,
device,
simulatorUrl,
requestHandlersMap,
};
this.setState(state);
} catch (e) {
@ -76,7 +81,7 @@ export default class DesignerPlugin extends PureComponent<PluginProps, DesignerP
render(): React.ReactNode {
const { editor } = this.props;
const { componentMetadatas, library, extraEnvironment, renderEnv, device, simulatorUrl } = this.state;
const { componentMetadatas, library, extraEnvironment, renderEnv, device, simulatorUrl, requestHandlersMap } = this.state;
if (!library || !componentMetadatas) {
// TODO: use a Loading
return null;
@ -95,6 +100,7 @@ export default class DesignerPlugin extends PureComponent<PluginProps, DesignerP
renderEnv,
device,
simulatorUrl,
requestHandlersMap,
}}
/>
);

View File

@ -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 = () => {

View File

@ -156,6 +156,7 @@ export default class BaseRender extends PureComponent {
this.__showPlaceholder = true;
reloadDataSource().then(() => {
this.__showPlaceholder = false;
// this.forceUpdate();
// @TODO 是否需要 forceUpate
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 = () => {

View File

@ -98,14 +98,14 @@ class Renderer extends Component<{ renderer: SimulatorRenderer }> {
render() {
const { renderer } = this.props;
const { device, designMode } = renderer;
const { device, designMode, requestHandlersMap } = renderer;
return (
<LowCodeRenderer
schema={renderer.schema}
components={renderer.components}
appHelper={renderer.context}
// context={renderer.context}
requestHandlersMap={host.requestHandlersMap}
requestHandlersMap={requestHandlersMap}
designMode={designMode}
device={device}
suspended={renderer.suspended}

View File

@ -48,6 +48,8 @@ export class SimulatorRenderer implements BuiltinSimulatorRenderer {
// sync designMode
this._designMode = host.designMode;
this._requestHandlersMap = host.requestHandlersMap;
// sync suspended
// sync scope
@ -114,6 +116,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() {